diff --git a/CHANGELOG.md b/CHANGELOG.md index faa5a49a4..d01ea93de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,22 +1,42 @@ +### Breaking Changes: +- Lockscreen: Separate 'Allow RPC While Locked' settings for USB/BLE (#343 by @956MB) + - Both default to OFF like before + - If you had enabled this option before, you will need to re-enable + ### Added: - Apps: - Games: Pinball0 (by @rdefeo) - NFC: Metroflip (by @luu176) +- CLI: Add `clear` and `cls` commands, add `did you mean ...?` command suggestion (#342 by @dexvleads) +- Main Menu: Add coverflow menu style (#314 by @CodyTolene) +- BadKB: Added german Mac keyboard Layout (#325 by @Cloudy261) - UL: Sub-GHz: Jolly Motors support with add manually (by @pkooiman & @xMasterX) +- OFW: Desktop: Add winter animations (by @Astrrra) +- API: + - Added `canvas_draw_icon_animation_ex()` to draw animated icons resized (#314 by @CodyTolene) + - OFW: Added `flipper_format_write_empty_line()` (by @janwiesemann) +- OFW: Furi: Pipe support (by @portasynthinca3) +- OFW: Furi: Thread stdin support (by @portasynthinca3) +- OFW: RPC: Command to send a signal once (by @Astrrra) - OFW: Add VCP break support (by @gsurkov) ### Updated: - Apps: - BT/USB Remote: Add PTT support for Gather (by @SapphicCode) - Chess: Fix illegal move bug (by @956MB) + - Color Guess: Simplify app code (by @leedave) + - Countdown Timer: Default to 60 seconds on open (by @andrejka27) + - Cross Remote: Fix Sub-GHz actions rolling code support, animations for transmit, allow interrupting chain (by @leedave), loop transmit feature (by @miccayo) - ESP Flasher: Add c3 and c6 to s3 option (by @jaylikesbunda), update Marauder bins to 1.1.0 (by @justcallmekoko) - FlipBIP: Refactor to make adding coins easier (by @xtruan) - FlipLibrary: Wikipedia, dog facts, random quotes, weather, asset price, predictions, trivia, advice, uuid and many more, bug fixes (by @jblanked), holidays, improvements to connectivity and progress (by @jamisonderek) - - FlipSocial: Improved authentication, loading screens, memory fixes, bio and friend counts, search contacts (by @jblanked), RPC_KEYBOAARD support (by @jamisonderek) - - FlipStore: Many bugfixes, support ESP32 firmware downloads, allow deleting apps, memory fixes, update Marauder (by @jblanked), more improvements (by @jamisonderek) + - FlipSocial: Improved authentication, loading screens, memory fixes, bio and friend counts, new feed screen with posted time, search users and contacts, home announcements and notifications, private feed option, endless feed (by @jblanked), RPC_KEYBOARD support (by @jamisonderek) + - FlipStore: Many bugfixes, support downloading ESP32 and VGM firmwares and Github repos, allow deleting apps, memory fixes, update Marauder, use Flipper catalog API (by @jblanked), more improvements (by @jamisonderek) - FlipTrader: Improved progress display, added connectivity check on startup (by @jamisonderek) - FlipWeather: Stability improvements (by @jblanked), improved progress display, added connectivity check on startup (by @jamisonderek) - - FlipWiFi: Improve error handling, update scan loading and parsing, fix crash when saving networks manually (by @jblanked), add connectivity check on startup (by @jamisonderek) + - FlipWiFi: Improve error handling, update scan loading and parsing, fix crash when saving networks manually, max 100 network scan, add some fast commands (by @jblanked), add connectivity check on startup (by @jamisonderek) + - Oscilloscope: Add simple spectrum analyser and basic software scaling support (by @anfractuosity) + - Picopass: Handle write key retry when a different card is presented (by @bettse) - Pokemon Trade Tool: Update to gblink v0.63 which includes saving/loading of pin configurations for the EXT link interface (by @kbembedded) - Snake 2.0: Progress saving, endless mode, game timer, fruit positioning bugfixes (by @Willzvul) - uPython: Enabled extra functions for the `random` module (by @ofabel) @@ -25,6 +45,7 @@ - UL: NFC Magic: Added possibility to write 7b MFC to Gen1 tags (by @mishamyte) - UL: Unitemp: Fixed handling of hPa units (by @shininghero) - UL: Fixed apps for firmware USB CDC callback changes (by @xMasterX) +- Infrared: Update universal bluray remote (#348 by @jaylikesbunda) - NFC: - OFW: Replace mf_classic_dict.nfc with Proxmark3 version (by @onovy) - OFW: More station IDs for Clipper plugin (by @ted-logan) @@ -32,10 +53,22 @@ ### Fixed: - Desktop: Fixed Wardriving animation design (by @Davim09) +- Main Menu: Fix MNTM style battery percent off by 1 (#339 by @956MB) +- OFW: Fix lost BadBLE keystrokes (by @Astrrra) - OFW: GPIO: Fix USB UART Bridge Crash by increasing system stack size (by @Astrrra) +- OFW: Loader: Fix BusFault in handling of OOM (by @Willy-JL) - NFC: + - XERO: Fix issue with MFC key recovery state machine performing key reuse early (by @noproto) - OFW: Plantain parser Last payment amount fix (by @mxcdoam) - - OFW: Fix typo for mf_classic_key_cahce_get_next_key() function (by @luu176) + - OFW: Fix skylander ID reading (by @bettse) + - OFW: Fix MIFARE Plus detection (by @GMMan) + - OFW: Fix ISO15693 stuck in wrong mode (by @RebornedBrain) + - OFW: Fix MFUL PWD_AUTH command creation when 0x00 in password (by @GMMan) + - OFW: Fix typo for `mf_classic_key_cahce_get_next_key()` function (by @luu176) +- OFW: U2F: Fix message digest memory leak (by @GMMan) +- OFW: JS: SDK workaround incorrect serial port handling by OS (by @portasynthinca3) +- OFW: FBT: Fix invalid path errors on Windows with UTF8 paths (by @Alex4386) ### Removed: -- Nothing +- NFC: Previous fix for ISO15693 stuck in wrong mode (#225) + - Removes APIs `nfc_iso15693_detect_mode()`, `nfc_iso15693_force_1outof4()`, `nfc_iso15693_force_1outof256()` diff --git a/applications/debug/unit_tests/application.fam b/applications/debug/unit_tests/application.fam index dec3283e4..f92d7e66f 100644 --- a/applications/debug/unit_tests/application.fam +++ b/applications/debug/unit_tests/application.fam @@ -236,3 +236,11 @@ App( entry_point="get_api", requires=["unit_tests"], ) + +App( + appid="test_pipe", + sources=["tests/common/*.c", "tests/pipe/*.c"], + apptype=FlipperAppType.PLUGIN, + entry_point="get_api", + requires=["unit_tests"], +) diff --git a/applications/debug/unit_tests/tests/flipper_format/flipper_format_test.c b/applications/debug/unit_tests/tests/flipper_format/flipper_format_test.c index 888a66444..934634c71 100644 --- a/applications/debug/unit_tests/tests/flipper_format/flipper_format_test.c +++ b/applications/debug/unit_tests/tests/flipper_format/flipper_format_test.c @@ -265,6 +265,7 @@ static bool test_write(const char* file_name) { if(!flipper_format_file_open_always(file, file_name)) break; if(!flipper_format_write_header_cstr(file, test_filetype, test_version)) break; if(!flipper_format_write_comment_cstr(file, "This is comment")) break; + if(!flipper_format_write_empty_line(file)) break; if(!flipper_format_write_string_cstr(file, test_string_key, test_string_data)) break; if(!flipper_format_write_int32(file, test_int_key, test_int_data, COUNT_OF(test_int_data))) break; diff --git a/applications/debug/unit_tests/tests/furi/furi_stdio_test.c b/applications/debug/unit_tests/tests/furi/furi_stdio_test.c new file mode 100644 index 000000000..94e2f613b --- /dev/null +++ b/applications/debug/unit_tests/tests/furi/furi_stdio_test.c @@ -0,0 +1,108 @@ +#include +#include +#include +#include "../test.h" // IWYU pragma: keep + +#define TAG "StdioTest" + +#define CONTEXT_MAGIC ((void*)0xDEADBEEF) + +// stdin + +static char mock_in[256]; +static size_t mock_in_len, mock_in_pos; + +static void set_mock_in(const char* str) { + size_t len = strlen(str); + strcpy(mock_in, str); + mock_in_len = len; + mock_in_pos = 0; +} + +static size_t mock_in_cb(char* buffer, size_t size, FuriWait wait, void* context) { + UNUSED(wait); + furi_check(context == CONTEXT_MAGIC); + size_t remaining = mock_in_len - mock_in_pos; + size = MIN(remaining, size); + memcpy(buffer, mock_in + mock_in_pos, size); + mock_in_pos += size; + return size; +} + +void test_stdin(void) { + FuriThreadStdinReadCallback in_cb = furi_thread_get_stdin_callback(); + furi_thread_set_stdin_callback(mock_in_cb, CONTEXT_MAGIC); + char buf[256]; + + // plain in + set_mock_in("Hello, World!\n"); + fgets(buf, sizeof(buf), stdin); + mu_assert_string_eq("Hello, World!\n", buf); + mu_assert_int_eq(EOF, getchar()); + + // ungetc + ungetc('i', stdin); + ungetc('H', stdin); + fgets(buf, sizeof(buf), stdin); + mu_assert_string_eq("Hi", buf); + mu_assert_int_eq(EOF, getchar()); + + // ungetc + plain in + set_mock_in(" World"); + ungetc('i', stdin); + ungetc('H', stdin); + fgets(buf, sizeof(buf), stdin); + mu_assert_string_eq("Hi World", buf); + mu_assert_int_eq(EOF, getchar()); + + // partial plain in + set_mock_in("Hello, World!\n"); + fgets(buf, strlen("Hello") + 1, stdin); + mu_assert_string_eq("Hello", buf); + mu_assert_int_eq(',', getchar()); + fgets(buf, sizeof(buf), stdin); + mu_assert_string_eq(" World!\n", buf); + + furi_thread_set_stdin_callback(in_cb, CONTEXT_MAGIC); +} + +// stdout + +static FuriString* mock_out; +FuriThreadStdoutWriteCallback original_out_cb; + +static void mock_out_cb(const char* data, size_t size, void* context) { + furi_check(context == CONTEXT_MAGIC); + // there's no furi_string_cat_strn :( + for(size_t i = 0; i < size; i++) { + furi_string_push_back(mock_out, data[i]); + } +} + +static void assert_and_clear_mock_out(const char* expected) { + // return the original stdout callback for the duration of the check + // if the check fails, we don't want the error to end up in our buffer, + // we want to be able to see it! + furi_thread_set_stdout_callback(original_out_cb, CONTEXT_MAGIC); + mu_assert_string_eq(expected, furi_string_get_cstr(mock_out)); + furi_thread_set_stdout_callback(mock_out_cb, CONTEXT_MAGIC); + + furi_string_reset(mock_out); +} + +void test_stdout(void) { + original_out_cb = furi_thread_get_stdout_callback(); + furi_thread_set_stdout_callback(mock_out_cb, CONTEXT_MAGIC); + mock_out = furi_string_alloc(); + + puts("Hello, World!"); + assert_and_clear_mock_out("Hello, World!\n"); + + printf("He"); + printf("llo!"); + fflush(stdout); + assert_and_clear_mock_out("Hello!"); + + furi_string_free(mock_out); + furi_thread_set_stdout_callback(original_out_cb, CONTEXT_MAGIC); +} diff --git a/applications/debug/unit_tests/tests/furi/furi_test.c b/applications/debug/unit_tests/tests/furi/furi_test.c index 193a8124d..f23be37a9 100644 --- a/applications/debug/unit_tests/tests/furi/furi_test.c +++ b/applications/debug/unit_tests/tests/furi/furi_test.c @@ -10,6 +10,8 @@ void test_furi_memmgr(void); void test_furi_event_loop(void); void test_errno_saving(void); void test_furi_primitives(void); +void test_stdin(void); +void test_stdout(void); static int foo = 0; @@ -52,6 +54,11 @@ MU_TEST(mu_test_furi_primitives) { test_furi_primitives(); } +MU_TEST(mu_test_stdio) { + test_stdin(); + test_stdout(); +} + MU_TEST_SUITE(test_suite) { MU_SUITE_CONFIGURE(&test_setup, &test_teardown); MU_RUN_TEST(test_check); @@ -61,6 +68,7 @@ MU_TEST_SUITE(test_suite) { MU_RUN_TEST(mu_test_furi_pubsub); MU_RUN_TEST(mu_test_furi_memmgr); MU_RUN_TEST(mu_test_furi_event_loop); + MU_RUN_TEST(mu_test_stdio); MU_RUN_TEST(mu_test_errno_saving); MU_RUN_TEST(mu_test_furi_primitives); } diff --git a/applications/debug/unit_tests/tests/pipe/pipe_test.c b/applications/debug/unit_tests/tests/pipe/pipe_test.c new file mode 100644 index 000000000..d440a04ee --- /dev/null +++ b/applications/debug/unit_tests/tests/pipe/pipe_test.c @@ -0,0 +1,153 @@ +#include "../test.h" // IWYU pragma: keep + +#include +#include + +#define PIPE_SIZE 128U +#define PIPE_TRG_LEVEL 1U + +MU_TEST(pipe_test_trivial) { + PipeSideBundle bundle = pipe_alloc(PIPE_SIZE, PIPE_TRG_LEVEL); + PipeSide* alice = bundle.alices_side; + PipeSide* bob = bundle.bobs_side; + + mu_assert_int_eq(PipeRoleAlice, pipe_role(alice)); + mu_assert_int_eq(PipeRoleBob, pipe_role(bob)); + mu_assert_int_eq(PipeStateOpen, pipe_state(alice)); + mu_assert_int_eq(PipeStateOpen, pipe_state(bob)); + + mu_assert_int_eq(PIPE_SIZE, pipe_spaces_available(alice)); + mu_assert_int_eq(PIPE_SIZE, pipe_spaces_available(bob)); + mu_assert_int_eq(0, pipe_bytes_available(alice)); + mu_assert_int_eq(0, pipe_bytes_available(bob)); + + for(uint8_t i = 0;; ++i) { + mu_assert_int_eq(PIPE_SIZE - i, pipe_spaces_available(alice)); + mu_assert_int_eq(i, pipe_bytes_available(bob)); + + if(pipe_send(alice, &i, sizeof(uint8_t), 0) != sizeof(uint8_t)) { + break; + } + + mu_assert_int_eq(PIPE_SIZE - i, pipe_spaces_available(bob)); + mu_assert_int_eq(i, pipe_bytes_available(alice)); + + if(pipe_send(bob, &i, sizeof(uint8_t), 0) != sizeof(uint8_t)) { + break; + } + } + + pipe_free(alice); + mu_assert_int_eq(PipeStateBroken, pipe_state(bob)); + + for(uint8_t i = 0;; ++i) { + mu_assert_int_eq(PIPE_SIZE - i, pipe_bytes_available(bob)); + + uint8_t value; + if(pipe_receive(bob, &value, sizeof(uint8_t), 0) != sizeof(uint8_t)) { + break; + } + + mu_assert_int_eq(i, value); + } + + pipe_free(bob); +} + +typedef enum { + TestFlagDataArrived = 1 << 0, + TestFlagSpaceFreed = 1 << 1, + TestFlagBecameBroken = 1 << 2, +} TestFlag; + +typedef struct { + TestFlag flag; + FuriEventLoop* event_loop; +} AncillaryThreadContext; + +static void on_data_arrived(PipeSide* pipe, void* context) { + AncillaryThreadContext* ctx = context; + ctx->flag |= TestFlagDataArrived; + uint8_t buffer[PIPE_SIZE]; + size_t size = pipe_receive(pipe, buffer, sizeof(buffer), 0); + pipe_send(pipe, buffer, size, 0); +} + +static void on_space_freed(PipeSide* pipe, void* context) { + AncillaryThreadContext* ctx = context; + ctx->flag |= TestFlagSpaceFreed; + const char* message = "Hi!"; + pipe_send(pipe, message, strlen(message), 0); +} + +static void on_became_broken(PipeSide* pipe, void* context) { + UNUSED(pipe); + AncillaryThreadContext* ctx = context; + ctx->flag |= TestFlagBecameBroken; + furi_event_loop_stop(ctx->event_loop); +} + +static int32_t ancillary_thread(void* context) { + PipeSide* pipe = context; + AncillaryThreadContext thread_ctx = { + .flag = 0, + .event_loop = furi_event_loop_alloc(), + }; + + pipe_attach_to_event_loop(pipe, thread_ctx.event_loop); + pipe_set_callback_context(pipe, &thread_ctx); + pipe_set_data_arrived_callback(pipe, on_data_arrived, 0); + pipe_set_space_freed_callback(pipe, on_space_freed, FuriEventLoopEventFlagEdge); + pipe_set_broken_callback(pipe, on_became_broken, 0); + + furi_event_loop_run(thread_ctx.event_loop); + + pipe_detach_from_event_loop(pipe); + pipe_free(pipe); + furi_event_loop_free(thread_ctx.event_loop); + return thread_ctx.flag; +} + +MU_TEST(pipe_test_event_loop) { + PipeSideBundle bundle = pipe_alloc(PIPE_SIZE, PIPE_TRG_LEVEL); + PipeSide* alice = bundle.alices_side; + PipeSide* bob = bundle.bobs_side; + + FuriThread* thread = furi_thread_alloc_ex("PipeTestAnc", 2048, ancillary_thread, bob); + furi_thread_start(thread); + + const char* message = "Hello!"; + pipe_send(alice, message, strlen(message), FuriWaitForever); + + char buffer_1[16]; + size_t size = pipe_receive(alice, buffer_1, sizeof(buffer_1), FuriWaitForever); + buffer_1[size] = 0; + + char buffer_2[16]; + const char* expected_reply = "Hi!"; + size = pipe_receive(alice, buffer_2, sizeof(buffer_2), FuriWaitForever); + buffer_2[size] = 0; + + pipe_free(alice); + furi_thread_join(thread); + + mu_assert_string_eq(message, buffer_1); + mu_assert_string_eq(expected_reply, buffer_2); + mu_assert_int_eq( + TestFlagDataArrived | TestFlagSpaceFreed | TestFlagBecameBroken, + furi_thread_get_return_code(thread)); + + furi_thread_free(thread); +} + +MU_TEST_SUITE(test_pipe) { + MU_RUN_TEST(pipe_test_trivial); + MU_RUN_TEST(pipe_test_event_loop); +} + +int run_minunit_test_pipe(void) { + MU_RUN_SUITE(test_pipe); + return MU_EXIT_CODE; +} + +TEST_API_DEFINE(run_minunit_test_pipe) diff --git a/applications/external b/applications/external index 2a7953ffc..15f866270 160000 --- a/applications/external +++ b/applications/external @@ -1 +1 @@ -Subproject commit 2a7953ffcd63e2b8dc4324379f8b0c5ddbbaaff8 +Subproject commit 15f866270c6d57290a67bdd3d59957a117b3c38f diff --git a/applications/main/bad_kb/helpers/ble_hid_svc.c b/applications/main/bad_kb/helpers/ble_hid_svc.c index 2f0910252..024e25a78 100644 --- a/applications/main/bad_kb/helpers/ble_hid_svc.c +++ b/applications/main/bad_kb/helpers/ble_hid_svc.c @@ -157,6 +157,7 @@ static BleEventAckStatus ble_svc_hid_event_handler(void* event, void* context) { hci_event_pckt* event_pckt = (hci_event_pckt*)(((hci_uart_pckt*)event)->data); evt_blecore_aci* blecore_evt = (evt_blecore_aci*)event_pckt->data; // aci_gatt_attribute_modified_event_rp0* attribute_modified; + if(event_pckt->evt == HCI_VENDOR_SPECIFIC_DEBUG_EVT_CODE) { if(blecore_evt->ecode == ACI_GATT_ATTRIBUTE_MODIFIED_VSEVT_CODE) { // Process modification events @@ -274,6 +275,7 @@ bool ble_svc_hid_update_input_report( .data_ptr = data, .data_len = len, }; + return ble_gatt_characteristic_update( hid_svc->svc_handle, &hid_svc->input_report_chars[input_report_num], &report_data); } diff --git a/applications/main/bad_kb/resources/badusb/assets/layouts/de-DE-mac.kl b/applications/main/bad_kb/resources/badusb/assets/layouts/de-DE-mac.kl new file mode 100755 index 000000000..471b7143e Binary files /dev/null and b/applications/main/bad_kb/resources/badusb/assets/layouts/de-DE-mac.kl differ diff --git a/applications/main/infrared/infrared_app.c b/applications/main/infrared/infrared_app.c index e42446a42..4bc4937df 100644 --- a/applications/main/infrared/infrared_app.c +++ b/applications/main/infrared/infrared_app.c @@ -79,6 +79,19 @@ static void infrared_rpc_command_callback(const RpcAppSystemEvent* event, void* view_dispatcher_send_custom_event( infrared->view_dispatcher, InfraredCustomEventTypeRpcButtonPressIndex); } + } else if(event->type == RpcAppEventTypeButtonPressRelease) { + furi_assert( + event->data.type == RpcAppSystemEventDataTypeString || + event->data.type == RpcAppSystemEventDataTypeInt32); + if(event->data.type == RpcAppSystemEventDataTypeString) { + furi_string_set(infrared->button_name, event->data.string); + view_dispatcher_send_custom_event( + infrared->view_dispatcher, InfraredCustomEventTypeRpcButtonPressReleaseName); + } else { + infrared->app_state.current_button_index = event->data.i32; + view_dispatcher_send_custom_event( + infrared->view_dispatcher, InfraredCustomEventTypeRpcButtonPressReleaseIndex); + } } else if(event->type == RpcAppEventTypeButtonRelease) { view_dispatcher_send_custom_event( infrared->view_dispatcher, InfraredCustomEventTypeRpcButtonRelease); @@ -402,6 +415,26 @@ void infrared_tx_stop(InfraredApp* infrared) { infrared->app_state.last_transmit_time = furi_get_tick(); } +void infrared_tx_send_once(InfraredApp* infrared) { + if(infrared->app_state.is_transmitting) { + return; + } + + dolphin_deed(DolphinDeedIrSend); + infrared_signal_transmit(infrared->current_signal); +} + +InfraredErrorCode infrared_tx_send_once_button_index(InfraredApp* infrared, size_t button_index) { + furi_assert(button_index < infrared_remote_get_signal_count(infrared->remote)); + + InfraredErrorCode error = infrared_remote_load_signal( + infrared->remote, infrared->current_signal, infrared->app_state.current_button_index); + if(!INFRARED_ERROR_PRESENT(error)) { + infrared_tx_send_once(infrared); + } + + return error; +} void infrared_blocking_task_start(InfraredApp* infrared, FuriThreadCallback callback) { view_dispatcher_switch_to_view(infrared->view_dispatcher, InfraredViewLoading); furi_thread_set_callback(infrared->task_thread, callback); diff --git a/applications/main/infrared/infrared_app_i.h b/applications/main/infrared/infrared_app_i.h index 692cc9671..75d8502f2 100644 --- a/applications/main/infrared/infrared_app_i.h +++ b/applications/main/infrared/infrared_app_i.h @@ -218,6 +218,20 @@ InfraredErrorCode infrared_tx_start_button_index(InfraredApp* infrared, size_t b */ void infrared_tx_stop(InfraredApp* infrared); +/** + * @brief Transmit the currently loaded signal once. + * + * @param[in,out] infrared pointer to the application instance. + */ +void infrared_tx_send_once(InfraredApp* infrared); + +/** + * @brief Load the signal under the given index and transmit it once. + * + * @param[in,out] infrared pointer to the application instance. + */ +InfraredErrorCode infrared_tx_send_once_button_index(InfraredApp* infrared, size_t button_index); + /** * @brief Start a blocking task in a separate thread. * diff --git a/applications/main/infrared/infrared_custom_event.h b/applications/main/infrared/infrared_custom_event.h index 02d9a276f..2efc99f4b 100644 --- a/applications/main/infrared/infrared_custom_event.h +++ b/applications/main/infrared/infrared_custom_event.h @@ -21,6 +21,8 @@ enum InfraredCustomEventType { InfraredCustomEventTypeRpcButtonPressName, InfraredCustomEventTypeRpcButtonPressIndex, InfraredCustomEventTypeRpcButtonRelease, + InfraredCustomEventTypeRpcButtonPressReleaseName, + InfraredCustomEventTypeRpcButtonPressReleaseIndex, InfraredCustomEventTypeRpcSessionClose, InfraredCustomEventTypeGpioTxPinChanged, diff --git a/applications/main/infrared/resources/infrared/assets/bluray_dvd.ir b/applications/main/infrared/resources/infrared/assets/bluray_dvd.ir index aff93ef1a..e231712bd 100644 --- a/applications/main/infrared/resources/infrared/assets/bluray_dvd.ir +++ b/applications/main/infrared/resources/infrared/assets/bluray_dvd.ir @@ -28,7 +28,6 @@ address: 2D 00 00 00 command: 50 00 00 00 # # Model: LG AKB73775801 -# name: Power type: parsed protocol: Samsung32 @@ -84,7 +83,6 @@ address: 2D 00 00 00 command: 36 00 00 00 # # Model: OPPO BDP103 -# name: Power type: parsed protocol: NEC @@ -134,7 +132,6 @@ address: 49 00 00 00 command: 4B 00 00 00 # # Model: Panasonic DMPBDT167 -# name: Power type: parsed protocol: Kaseikyo @@ -190,7 +187,6 @@ address: B0 02 20 02 command: 30 01 00 00 # # Model: Philips BDP2501/F7 -# name: Power type: parsed protocol: RC6 @@ -234,7 +230,6 @@ address: 46 00 00 00 command: 2C 00 00 00 # # Model: Philips BDP2700 -# name: Power type: parsed protocol: RC6 @@ -266,7 +261,6 @@ address: 46 00 00 00 command: 31 00 00 00 # # Model: Pioneer BDP150 -# name: Power type: parsed protocol: Pioneer @@ -328,7 +322,6 @@ address: AF 00 00 00 command: 39 00 00 00 # # Model: Samsung AK59_00149A -# name: Power type: raw frequency: 38000 @@ -360,7 +353,6 @@ duty_cycle: 0.330000 data: 4539 4519 488 516 489 489 516 515 490 514 491 514 491 1491 520 485 520 511 494 511 484 520 485 520 485 493 512 519 486 518 487 491 514 504 491 4491 516 1492 519 1490 521 1488 513 519 486 518 487 1495 516 1493 518 487 518 513 492 1517 494 484 511 520 485 1498 513 491 514 517 488 1495 516 1493 518 486 519 1491 510 1499 512 57491 4537 4495 512 492 513 519 486 493 512 520 485 521 494 1491 520 486 519 513 492 514 491 515 490 516 489 517 488 517 488 518 487 519 486 506 489 4502 516 1523 488 1498 513 1500 521 511 494 512 493 1519 492 1520 491 515 490 516 489 1522 489 491 514 518 487 1498 513 520 485 521 484 1528 493 1492 519 514 491 1521 490 1523 488 # # Model: Samsung B59-01301A -# name: Power type: parsed protocol: Samsung32 @@ -380,7 +372,6 @@ address: 07 00 00 00 command: 4A 00 00 00 # # Model: Samsung BD-D5300 -# name: Power type: raw frequency: 38000 @@ -412,7 +403,6 @@ duty_cycle: 0.330000 data: 4510 4508 537 470 535 467 538 470 535 468 537 471 534 1475 534 467 538 470 535 467 538 469 536 467 538 470 535 467 538 470 535 468 537 469 536 4472 537 1472 537 1472 537 1472 537 470 535 467 538 470 535 1475 534 1475 534 1474 535 467 538 470 535 468 537 1472 537 1473 536 469 536 468 537 469 536 1474 535 1473 536 1473 536 # # Model: Samsung BDD7500 -# name: Power type: raw frequency: 38000 @@ -462,7 +452,6 @@ duty_cycle: 0.330000 data: 4489 4495 514 428 571 485 514 486 513 486 513 486 513 1482 512 487 512 488 511 486 488 510 489 512 487 511 488 511 488 512 487 506 493 512 487 4507 487 1507 487 1507 487 1508 486 510 489 513 486 1506 488 1507 487 513 486 458 541 1507 487 512 487 512 487 1507 487 512 487 512 487 1507 487 1506 488 512 487 1426 568 1506 488 # # Model: Samsung BDE5300 -# name: Power type: raw frequency: 38000 @@ -512,7 +501,6 @@ duty_cycle: 0.330000 data: 4489 4478 516 481 517 483 515 483 515 482 516 484 514 1456 515 481 517 484 514 482 516 484 514 483 515 483 515 481 517 482 516 367 632 482 516 4451 515 1457 514 1457 514 1455 516 483 515 483 515 1456 515 1412 559 483 515 484 514 1456 515 483 515 486 512 1458 513 483 515 482 516 1456 515 1455 516 484 514 1457 514 1457 514 57918 4486 4476 514 484 514 483 515 484 514 484 514 484 514 1458 513 483 515 483 515 484 514 484 514 483 515 484 514 483 515 483 515 484 514 483 515 4452 514 1457 514 1457 514 1456 515 482 516 484 514 1457 514 1457 514 484 514 486 512 1456 515 483 515 484 514 1456 515 485 513 484 514 1457 514 1457 514 483 515 1457 514 1456 515 # # Model: Sanyo Bluray_NC088 -# name: Power type: parsed protocol: NECext @@ -550,7 +538,6 @@ address: 87 22 00 00 command: 7A 85 00 00 # # Model: Sharp BD-HP20 -# name: Power type: raw frequency: 38000 @@ -600,7 +587,6 @@ duty_cycle: 0.330000 data: 3341 1723 380 454 380 1298 381 454 380 1298 381 454 380 1298 381 455 379 1298 381 454 380 1299 380 453 381 1299 380 1299 380 453 381 1298 381 453 381 1298 381 1299 380 1272 407 1214 465 453 381 452 382 453 381 1299 380 453 381 454 380 453 381 453 381 1298 381 1232 447 453 381 454 380 1298 381 1299 380 453 381 1301 378 1299 380 1299 380 454 380 452 382 1298 381 453 381 453 381 453 381 454 380 1202 477 453 381 453 381 20534 3341 1723 380 453 381 1298 381 453 381 1299 380 453 381 1298 381 453 381 1298 381 453 381 1298 381 453 381 1298 381 1299 380 453 381 1299 380 453 381 1299 405 1274 380 1298 381 1299 380 453 381 454 380 452 382 1298 381 453 381 453 381 454 380 453 381 1298 381 1298 381 453 381 453 381 1298 381 1298 381 453 381 1299 380 1299 380 1299 380 453 381 453 381 1298 381 453 381 453 381 453 381 454 380 1298 381 454 380 453 381 20535 3340 1723 380 454 380 1299 380 454 380 1299 380 454 380 1263 416 454 380 1299 380 454 380 1299 380 454 380 1300 379 1299 380 454 380 1299 380 454 380 1299 380 1299 380 1299 380 1300 379 454 380 455 379 455 379 1300 379 455 379 454 380 455 379 454 380 1299 380 1218 462 454 379 455 379 1300 379 1301 378 455 379 1301 378 1301 378 1300 500 332 381 455 402 1277 402 433 401 432 402 432 402 432 402 1277 402 431 403 431 403 # # Model: RMT VB201U -# name: Power type: parsed protocol: SIRC20 @@ -650,7 +636,6 @@ address: 5A 1C 00 00 command: 1B 00 00 00 # # Model: Toshiba SE-R0398 -# name: Power type: parsed protocol: NECext @@ -682,7 +667,6 @@ address: 45 B5 00 00 command: 28 D7 00 00 # # Model: Vizio VBR220 -# name: Power type: parsed protocol: NEC @@ -738,7 +722,6 @@ address: 00 00 00 00 command: 33 00 00 00 # # Model: Bose 3-2-1_Series_1 -# name: Power type: parsed protocol: NECext @@ -758,7 +741,6 @@ address: BA 4B 00 00 command: 55 AA 00 00 # # Model: Brandt DVDP-7R -# name: Ok type: parsed protocol: NEC @@ -766,7 +748,6 @@ address: 00 00 00 00 command: 07 00 00 00 # # Model: GPX D2816 -# name: Power type: parsed protocol: NEC @@ -798,7 +779,6 @@ address: 00 00 00 00 command: 03 00 00 00 # # Model: LG DKS-6100Q -# name: Power type: parsed protocol: Samsung32 @@ -824,7 +804,6 @@ address: B0 02 20 02 command: 10 01 00 00 # # Model: Philips RC_5610 -# name: Power type: parsed protocol: RC6 @@ -850,7 +829,6 @@ address: 04 00 00 00 command: 4B 00 00 00 # # Model: PIONEER-DVD PLAYER-VXX2702 -# name: Power type: parsed protocol: NEC @@ -870,7 +848,6 @@ address: AF 00 00 00 command: 9E 00 00 00 # # Model: Prinz DVD_Player_T182 -# name: Power type: raw frequency: 38000 @@ -884,7 +861,6 @@ duty_cycle: 0.330000 data: 8362 4520 567 599 540 547 603 564 544 595 544 543 596 544 575 592 547 566 573 1680 568 1685 574 1681 598 1709 550 1704 544 1710 569 1712 546 1708 540 1714 576 1705 543 544 595 1711 547 540 599 541 567 573 566 1687 571 569 570 544 595 1711 547 540 599 1681 567 1686 573 1682 597 570 549 40168 8377 2261 567 # # Model: Sony DVD_RMT-D197A -# name: Power type: parsed protocol: SIRC20 @@ -910,7 +886,6 @@ address: 3A 09 00 00 command: 39 00 00 00 # # Model: Strato DVD507 -# name: Power type: parsed protocol: NEC @@ -924,7 +899,6 @@ address: 00 00 00 00 command: 1E 00 00 00 # # Model: Toshiba SE_R0108 -# name: Power type: parsed protocol: NEC @@ -950,7 +924,6 @@ address: 45 00 00 00 command: 15 00 00 00 # # Model: TOSHIBA SE_R0420 -# name: Power type: raw frequency: 38000 @@ -958,7 +931,6 @@ duty_cycle: 0.330000 data: 9072 4364 664 1566 664 451 663 1567 663 453 661 454 660 478 636 1594 636 479 635 1595 635 480 635 1596 634 481 634 1597 633 1597 634 482 633 1598 632 482 633 482 633 482 633 482 633 482 633 482 633 1597 633 1598 632 1598 632 1598 632 1598 632 1598 632 1598 632 1598 632 482 633 482 633 39968 9043 2203 634 95675 9067 2203 634 95675 9067 2203 634 # # Model: Dvd tv_player -# name: Power type: parsed protocol: NEC @@ -966,7 +938,6 @@ address: 00 00 00 00 command: 03 00 00 00 # # Model: Dvd tv_player_2 -# name: Subtitle type: parsed protocol: NEC @@ -986,7 +957,6 @@ address: 00 00 00 00 command: 53 00 00 00 # # Model: APEX RM_3800 -# name: Power type: parsed protocol: NEC @@ -1000,7 +970,6 @@ address: 01 00 00 00 command: 19 00 00 00 # # Model: RVR-4000 -# name: Power type: parsed protocol: NEC @@ -1020,7 +989,6 @@ address: 35 00 00 00 command: 1B 00 00 00 # # Model: JVC HR-A591U -# name: Power type: raw frequency: 38000 @@ -1040,7 +1008,6 @@ duty_cycle: 0.330000 data: 8414 4228 507 1601 506 1600 507 547 506 548 505 546 507 547 506 1601 506 547 506 547 506 546 507 1600 507 1599 508 547 506 547 506 546 507 546 507 23151 505 1600 507 1601 506 547 506 547 506 547 506 547 506 1600 507 546 507 547 506 547 506 1600 507 1600 507 546 507 548 505 547 506 546 507 23150 506 1600 507 1601 506 545 508 547 506 547 506 545 508 1601 506 548 505 547 506 546 507 1599 508 1600 507 547 506 547 506 546 507 547 506 # # Model: JVC HR-J700E -# name: Power type: raw frequency: 38000 @@ -1066,7 +1033,6 @@ duty_cycle: 0.330000 data: 8422 4235 547 1565 547 1564 548 507 548 507 549 507 549 508 548 1565 547 510 545 507 549 509 547 1563 549 1563 549 1567 545 1564 548 507 549 506 550 20891 546 1566 545 1564 548 508 548 507 548 509 547 506 549 1565 547 509 547 507 548 509 547 1563 549 1562 550 1563 549 1564 548 508 548 508 548 21245 548 1565 547 1565 547 507 549 509 547 509 546 508 548 1566 546 508 548 508 547 507 549 1566 546 1564 548 1564 548 1562 549 508 548 508 548 21246 547 1563 549 1563 549 509 547 509 547 508 547 508 547 1565 547 508 548 507 548 507 549 1564 548 1565 547 1564 548 1565 546 507 549 507 549 21246 547 1564 548 1566 546 506 549 511 545 508 547 508 548 1564 548 508 548 508 548 507 549 1563 549 1564 548 1564 548 1563 548 509 547 508 547 21246 547 1564 548 1564 548 509 547 509 547 508 548 508 548 1564 548 507 549 507 548 508 548 1564 548 1566 546 1564 548 1564 548 508 548 509 547 21245 548 1565 547 1563 549 509 547 508 547 508 548 506 550 1566 546 511 545 507 549 508 547 1565 547 1563 549 1564 548 1566 546 508 548 508 548 # # Model: JVC HR-S2902U -# name: Power type: raw frequency: 38000 @@ -1092,7 +1058,6 @@ duty_cycle: 0.330000 data: 8376 4181 504 1565 505 1592 504 543 505 570 504 570 504 544 504 1592 505 571 503 544 504 570 504 1566 504 1591 505 1591 505 1566 504 570 504 570 504 21772 505 1592 504 1565 505 570 504 569 505 543 505 570 504 1566 504 571 503 569 505 544 504 1592 504 1592 504 1565 505 1591 505 544 504 570 504 21773 504 1591 505 1565 505 570 504 570 504 543 505 569 505 1565 505 572 502 570 504 542 506 1591 505 1591 505 1565 505 1592 504 544 504 568 506 21773 505 1592 504 1567 503 570 504 568 506 543 505 569 505 1566 504 570 504 570 504 543 505 1591 505 1591 505 1565 505 1591 506 543 505 569 505 # # Model: LG GC260W -# name: Power type: parsed protocol: NEC @@ -1112,7 +1077,6 @@ address: 6E 00 00 00 command: 08 00 00 00 # # Model: Magnavox N9377 -# name: Power type: raw frequency: 38000 @@ -1138,7 +1102,6 @@ duty_cycle: 0.330000 data: 3489 3523 881 865 876 886 882 888 880 2607 875 885 883 2628 881 2607 875 2627 882 887 881 2607 875 888 880 886 882 2607 875 2628 881 2627 882 864 877 2627 882 887 881 865 876 886 881 2628 881 867 874 2629 880 2628 881 33917 3494 3502 874 888 880 887 881 865 876 2628 881 888 880 2606 876 2629 880 2629 880 864 876 2629 880 889 879 867 873 2629 880 2629 880 2606 876 888 880 2630 879 865 876 889 879 890 878 2607 875 889 879 2631 878 2608 874 # # Model: Panasonic Light_Tower_LSSQ0342 -# name: Play type: parsed protocol: Kaseikyo @@ -1164,7 +1127,6 @@ address: 90 02 20 00 command: 60 00 00 00 # # Model: Panasonic NV-FJ606 -# name: Power type: raw frequency: 38000 @@ -1172,7 +1134,6 @@ duty_cycle: 0.330000 data: 3538 1702 463 407 461 1273 463 406 462 405 463 405 463 405 463 405 487 382 487 407 460 408 459 410 457 411 457 411 457 1280 457 411 457 411 457 411 457 411 457 411 457 411 457 1280 457 411 457 412 456 1280 457 412 457 412 456 411 457 411 457 412 456 412 456 412 456 412 456 1280 457 412 456 1281 456 1281 456 1281 456 1281 456 412 456 412 456 1281 456 413 455 1281 456 1282 455 413 455 1282 455 413 455 1282 455 74229 3532 1709 457 411 457 1280 457 411 457 412 456 412 456 412 457 411 457 412 456 412 456 412 456 412 456 412 456 412 456 1281 456 412 457 412 456 412 456 412 456 412 456 412 456 1281 456 412 456 412 456 1281 456 413 455 413 455 413 455 413 455 413 455 413 455 413 455 413 455 1282 455 413 455 1282 455 1282 455 1282 455 1282 455 414 454 414 454 1283 454 414 454 1283 454 1283 454 414 454 1283 454 414 454 1283 454 # # Model: Panasonic VCR_PV9662 -# name: Power type: raw frequency: 38000 @@ -1198,7 +1159,6 @@ duty_cycle: 0.330000 data: 3510 1694 450 416 454 1280 450 417 453 414 445 422 448 418 452 415 455 412 447 420 450 416 454 413 446 420 450 417 453 1282 448 419 451 416 454 412 447 420 450 417 453 414 445 1288 452 415 444 422 448 1286 454 413 446 420 450 417 453 414 445 422 448 418 452 415 455 412 447 419 451 1284 446 1288 452 414 445 422 448 419 451 416 454 413 446 420 450 1284 446 1288 452 415 444 1290 450 416 454 413 446 1288 452 74520 3511 1688 446 422 448 1286 454 412 447 420 450 416 454 413 446 421 449 418 452 415 444 422 448 419 451 415 455 412 447 1287 453 414 445 421 449 418 452 415 444 422 448 419 451 1283 447 420 450 417 453 1281 449 418 452 415 444 422 448 419 451 416 454 413 446 420 450 417 453 414 445 1289 451 1283 447 420 450 417 453 414 445 421 449 418 452 415 455 1279 451 1284 446 421 449 1285 445 422 448 419 451 1283 447 # # Model: Philips-RC2K16 -# name: Power type: parsed protocol: RC6 @@ -1212,7 +1172,6 @@ address: 04 00 00 00 command: 2C 00 00 00 # # Model: Sony RM-Y126 -# name: Power type: parsed protocol: SIRC @@ -1238,7 +1197,6 @@ address: 0B 00 00 00 command: 1A 00 00 00 # # Model: Sony SLV-SE610B -# name: Power type: parsed protocol: SIRC @@ -1246,7 +1204,6 @@ address: 0B 00 00 00 command: 15 00 00 00 # # Model: Unknown1 -# name: Power type: parsed protocol: NEC @@ -1308,7 +1265,6 @@ address: BA 4B 00 00 command: E0 1F 00 00 # # Model: Brandt DVDP-7R -# name: Subtitle type: parsed protocol: NEC @@ -1346,7 +1302,6 @@ duty_cycle: 0.330000 data: 3484 3464 907 829 908 830 907 804 906 2596 906 804 933 2569 878 858 879 832 878 2622 880 831 879 858 879 860 877 2596 878 2623 879 2597 877 858 879 2597 877 857 880 2595 879 2594 880 857 880 2595 907 2595 879 2595 880 33544 3485 3437 907 831 906 831 906 830 907 2568 906 830 907 2567 907 831 906 830 907 2567 907 830 907 805 932 802 908 2594 908 2568 907 2567 907 832 905 2568 906 831 906 2568 879 2622 879 831 906 2596 878 2596 879 2596 906 # # Model: Prinz DVD_Player_T182 -# name: Eject type: raw frequency: 38000 @@ -1366,7 +1321,6 @@ duty_cycle: 0.330000 data: 8328 4524 563 592 527 569 550 545 553 596 533 565 554 568 530 595 534 566 553 1683 565 1684 564 1684 647 1624 562 1685 563 1685 646 1625 561 1687 561 598 531 567 552 571 527 1687 592 567 531 596 533 567 552 1687 572 1678 570 1680 589 1685 563 572 557 1681 619 1630 566 1684 595 565 533 40169 8337 2267 572 # # Model: Sony DVD_RMT-D197A -# name: Eject type: parsed protocol: SIRC20 @@ -1554,7 +1508,6 @@ address: 2D 00 00 00 command: 33 00 00 00 # # Model: NAD T557 -# name: Power type: parsed protocol: NECext @@ -1604,7 +1557,6 @@ address: 86 0F 00 00 command: CD 32 00 00 # # Model: Samsung UBDK8500 -# name: Power type: raw frequency: 38000 @@ -1648,7 +1600,6 @@ duty_cycle: 0.330000 data: 4486 4499 483 516 483 515 484 515 484 514 485 515 484 1510 484 514 485 516 483 516 483 515 484 515 484 516 483 516 483 515 484 516 483 516 483 4450 544 1511 461 1533 461 1534 482 516 461 539 460 539 460 1534 460 539 460 1534 460 539 460 538 461 539 460 1533 461 1534 460 538 461 1534 460 538 461 1534 460 1534 460 1533 461 # # Model: Sylvania SDVD1111 -# name: Power type: parsed protocol: NEC @@ -1710,7 +1661,6 @@ address: 07 00 00 00 command: 45 00 00 00 # # Model: Marantz BD8002 -# name: Power type: raw frequency: 38000 @@ -1754,7 +1704,6 @@ duty_cycle: 0.330000 data: 874 930 1764 942 874 931 873 1833 873 931 873 931 873 4448 873 930 1764 1846 1762 1846 1763 943 873 931 873 931 873 931 873 931 873 75040 873 931 1763 944 872 931 873 1833 873 931 873 931 873 4449 872 931 1763 1846 1762 1845 1764 943 873 931 873 931 873 931 873 931 873 75040 873 931 1763 944 872 931 873 1834 872 931 873 931 873 4449 872 931 1763 1846 1763 1846 1763 943 873 931 873 931 873 931 873 931 873 # # Model: Yamaha BDS667 -# name: Power type: parsed protocol: NEC @@ -1791,12 +1740,12 @@ protocol: NEC address: 7C 00 00 00 command: 83 00 00 00 # +# Model: JVC XVBP1 name: Play type: parsed protocol: NEC address: 7C 00 00 00 command: 82 00 00 00 -# Model: JVC XVBP1 # name: Power type: parsed @@ -1847,7 +1796,6 @@ address: 2A 03 01 02 command: E1 01 00 00 # # Model: Soniq B100 -# name: Power type: parsed protocol: NECext @@ -1890,8 +1838,224 @@ protocol: NECext address: 00 DF 00 00 command: 1E E1 00 00 # +# Model: Bose 3-2-1_Series_1 name: Subtitle type: parsed protocol: NECext address: 00 DF 00 00 command: 5A A5 00 00 +# +# Model: Pioneer GGF1381 +name: Fast_fo +type: parsed +protocol: NEC +address: A8 00 00 00 +command: 10 00 00 00 +# +name: Fast_ba +type: parsed +protocol: NEC +address: A8 00 00 00 +command: 11 00 00 00 +# +name: Pause +type: parsed +protocol: NEC +address: A8 00 00 00 +command: 18 00 00 00 +# +name: Play +type: parsed +protocol: NEC +address: A8 00 00 00 +command: 17 00 00 00 +# +# Model: JVC HRS7900U +# +name: Power +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 8382 4224 460 1643 461 1643 461 543 461 541 463 543 461 543 461 1642 462 543 461 1643 461 1643 461 543 461 1643 461 543 461 543 461 470 534 543 485 21919 487 1618 486 1617 487 517 487 517 487 517 487 518 486 1617 487 517 487 1617 487 1617 487 516 488 1617 487 516 488 517 487 517 487 517 487 21917 487 1617 487 1617 488 517 486 517 487 518 486 516 488 1618 486 518 486 1618 486 1618 461 543 485 1619 461 543 461 543 461 543 461 543 461 +# +name: Eject +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 8381 4223 460 1644 460 1645 459 544 460 544 460 544 460 544 460 1644 460 544 460 1644 460 1644 460 1644 460 544 460 544 460 544 460 544 460 1644 460 20846 459 1645 459 1644 460 545 459 544 460 545 459 545 459 1645 459 545 459 1645 459 1645 459 1644 460 545 459 544 460 544 460 545 459 1645 459 20845 460 1645 459 1645 459 544 460 544 460 544 460 544 460 1644 460 544 460 1644 460 1644 460 1644 460 544 460 544 460 544 460 544 460 1587 517 +# +name: Fast_fo +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 8382 4220 511 1592 512 1593 511 493 511 488 516 492 512 492 512 1594 510 492 512 492 512 1592 512 1593 511 493 511 492 512 492 512 493 511 465 538 22994 487 1618 486 1618 486 518 486 517 487 518 486 518 486 1618 486 518 486 517 487 1618 486 1618 486 517 487 518 486 518 486 518 486 518 486 23019 486 1618 486 1618 486 518 486 518 486 518 486 518 486 1618 486 519 485 518 486 1618 486 1617 487 518 486 517 487 518 486 518 486 518 486 +# +name: Fast_ba +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 8383 4223 511 1592 512 1592 512 492 512 493 511 493 511 492 512 1593 511 493 511 1593 487 1619 485 1617 487 518 486 516 488 518 486 517 487 518 486 21918 512 1592 512 1592 512 492 512 493 511 493 511 492 512 1592 512 492 512 1591 513 1592 512 1592 512 493 511 491 564 440 513 492 512 492 564 21870 535 1541 563 1540 564 440 564 439 513 491 513 492 512 1591 513 492 512 1593 511 1592 512 1592 512 492 512 493 511 492 512 490 514 493 511 +# +name: Pause +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 8380 4158 526 1644 460 1645 459 544 460 544 460 544 460 543 461 1645 459 545 459 1599 505 545 459 1645 459 1645 459 545 459 545 459 544 460 545 459 21944 483 1621 483 1621 483 520 484 521 483 520 484 521 483 1620 484 520 484 1619 485 522 482 1619 485 1620 484 519 485 519 485 520 484 519 485 21920 485 1618 486 1618 486 548 456 518 486 519 485 518 486 1618 486 519 485 1619 485 518 486 1618 486 1619 485 518 486 477 527 519 485 519 485 +# +name: Play +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 8380 4223 461 1644 460 1644 460 544 460 544 460 544 460 453 551 1644 460 544 460 544 460 489 515 1644 460 1644 460 545 459 544 460 544 460 544 460 23044 461 1644 460 1644 460 543 486 519 460 544 460 544 460 1644 460 544 460 544 460 544 460 1644 460 1645 459 544 460 544 460 544 460 544 460 23045 460 1645 459 1644 460 544 460 545 459 545 459 544 460 1645 459 544 460 545 459 544 460 1645 459 1645 459 544 460 544 460 493 511 544 460 +# +name: Ok +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 8381 4221 460 1643 461 1643 461 543 461 543 486 518 461 543 461 1643 485 520 460 543 485 519 485 1619 485 1619 485 1597 507 1619 486 518 486 518 486 20819 486 1617 487 1617 487 517 487 517 487 517 487 517 487 1617 487 517 487 517 487 517 487 1617 487 1617 487 1617 487 1617 487 516 488 517 487 20817 488 1617 487 1616 488 516 488 516 488 516 488 516 488 1616 488 517 487 516 488 517 487 1616 488 1617 487 1618 486 1617 487 517 487 516 488 +# +# Model: Memorex MVR4040A +name: Power +type: parsed +protocol: NECext +address: 80 7B 00 00 +command: 13 EC 00 00 +# +name: Eject +type: parsed +protocol: NECext +address: 80 7B 00 00 +command: 4E B1 00 00 +# +name: Ok +type: parsed +protocol: NECext +address: 80 7B 00 00 +command: 45 BA 00 00 +# +name: Fast_fo +type: parsed +protocol: NECext +address: 80 7B 00 00 +command: 18 E7 00 00 +# +name: Fast_ba +type: parsed +protocol: NECext +address: 80 7B 00 00 +command: 19 E6 00 00 +# +name: Pause +type: parsed +protocol: NECext +address: 80 7B 00 00 +command: 1A E5 00 00 +# +name: Play +type: parsed +protocol: NECext +address: 80 7B 00 00 +command: 16 E9 00 00 +# +name: Ok +type: parsed +protocol: SIRC +address: 0B 00 00 00 +command: 51 00 00 00 +# +name: Fast_fo +type: parsed +protocol: SIRC +address: 0B 00 00 00 +command: 1C 00 00 00 +# +name: Ok +type: parsed +protocol: SIRC +address: 0B 00 00 00 +command: 1A 00 00 00 +# +name: Fast_fo +type: parsed +protocol: SIRC15 +address: BA 00 00 00 +command: 11 00 00 00 +# +name: Fast_ba +type: parsed +protocol: SIRC15 +address: BA 00 00 00 +command: 10 00 00 00 +# +name: Pause +type: parsed +protocol: SIRC15 +address: BA 00 00 00 +command: 0E 00 00 00 +# +# Model: Sony SLVD201P +name: Power +type: parsed +protocol: SIRC20 +address: 7A 0A 00 00 +command: 15 00 00 00 +# +name: Eject +type: parsed +protocol: SIRC20 +address: 7A 0A 00 00 +command: 16 00 00 00 +# +name: Ok +type: parsed +protocol: SIRC20 +address: 7A 0A 00 00 +command: 0B 00 00 00 +# +name: Fast_fo +type: parsed +protocol: SIRC20 +address: 7A 0A 00 00 +command: 1C 00 00 00 +# +name: Fast_ba +type: parsed +protocol: SIRC20 +address: 7A 0A 00 00 +command: 1B 00 00 00 +# +name: Pause +type: parsed +protocol: SIRC20 +address: 7A 0A 00 00 +command: 19 00 00 00 +# +name: Play +type: parsed +protocol: SIRC20 +address: 7A 0A 00 00 +command: 1A 00 00 00 +# +name: Subtitle +type: parsed +protocol: SIRC20 +address: 7A 0A 00 00 +command: 60 00 00 00 +# +name: Ok +type: parsed +protocol: SIRC15 +address: BA 00 00 00 +command: 18 00 00 00 +# +name: Pause +type: parsed +protocol: NEC +address: 45 00 00 00 +command: 00 00 00 00 +# +name: Play +type: parsed +protocol: NEC +address: A8 00 00 00 +command: 17 00 00 00 \ No newline at end of file diff --git a/applications/main/infrared/scenes/infrared_scene_rpc.c b/applications/main/infrared/scenes/infrared_scene_rpc.c index 8f9dc4338..35cd971d8 100644 --- a/applications/main/infrared/scenes/infrared_scene_rpc.c +++ b/applications/main/infrared/scenes/infrared_scene_rpc.c @@ -124,6 +124,49 @@ bool infrared_scene_rpc_on_event(void* context, SceneManagerEvent event) { rpc_system_app_confirm(infrared->rpc_ctx, result); + } else if( + event.event == InfraredCustomEventTypeRpcButtonPressReleaseName || + event.event == InfraredCustomEventTypeRpcButtonPressReleaseIndex) { + bool result = false; + + // Send the signal once and stop + if(rpc_state == InfraredRpcStateLoaded) { + if(event.event == InfraredCustomEventTypeRpcButtonPressReleaseName) { + const char* button_name = furi_string_get_cstr(infrared->button_name); + size_t index; + const bool index_found = + infrared_remote_get_signal_index(infrared->remote, button_name, &index); + app_state->current_button_index = index_found ? (signed)index : + InfraredButtonIndexNone; + FURI_LOG_D(TAG, "Sending signal with name \"%s\"", button_name); + } else { + FURI_LOG_D( + TAG, "Sending signal with index \"%ld\"", app_state->current_button_index); + } + if(infrared->app_state.current_button_index != InfraredButtonIndexNone) { + InfraredErrorCode error = infrared_tx_send_once_button_index( + infrared, app_state->current_button_index); + if(!INFRARED_ERROR_PRESENT(error)) { + const char* remote_name = infrared_remote_get_name(infrared->remote); + infrared_text_store_set(infrared, 0, "emulating\n%s", remote_name); + + infrared_scene_rpc_show(infrared); + result = true; + } else { + rpc_system_app_set_error_code( + infrared->rpc_ctx, RpcAppSystemErrorCodeInternalParse); + rpc_system_app_set_error_text( + infrared->rpc_ctx, "Cannot load button data"); + result = false; + } + } + } + + if(result) { + scene_manager_set_scene_state( + infrared->scene_manager, InfraredSceneRpc, InfraredRpcStateLoaded); + } + rpc_system_app_confirm(infrared->rpc_ctx, result); } else if( event.event == InfraredCustomEventTypeRpcExit || event.event == InfraredCustomEventTypeRpcSessionClose || diff --git a/applications/main/momentum_app/scenes/momentum_app_scene_interface_lockscreen.c b/applications/main/momentum_app/scenes/momentum_app_scene_interface_lockscreen.c index ff39fbfe6..f879ddf12 100644 --- a/applications/main/momentum_app/scenes/momentum_app_scene_interface_lockscreen.c +++ b/applications/main/momentum_app/scenes/momentum_app_scene_interface_lockscreen.c @@ -33,11 +33,20 @@ static void momentum_app_scene_interface_lockscreen_bad_pins_format_changed(Vari } static void - momentum_app_scene_interface_lockscreen_allow_locked_rpc_commands_changed(VariableItem* item) { + momentum_app_scene_interface_lockscreen_allow_locked_rpc_usb_changed(VariableItem* item) { MomentumApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - momentum_settings.allow_locked_rpc_commands = value; + momentum_settings.allow_locked_rpc_usb = value; + app->save_settings = true; +} + +static void + momentum_app_scene_interface_lockscreen_allow_locked_rpc_ble_changed(VariableItem* item) { + MomentumApp* app = variable_item_get_context(item); + bool value = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, value ? "ON" : "OFF"); + momentum_settings.allow_locked_rpc_ble = value; app->save_settings = true; } @@ -126,13 +135,23 @@ void momentum_app_scene_interface_lockscreen_on_enter(void* context) { item = variable_item_list_add( var_item_list, - "Allow RPC While Locked", + "Allow USB RPC While Locked", 2, - momentum_app_scene_interface_lockscreen_allow_locked_rpc_commands_changed, + momentum_app_scene_interface_lockscreen_allow_locked_rpc_usb_changed, app); - variable_item_set_current_value_index(item, momentum_settings.allow_locked_rpc_commands); + variable_item_set_current_value_index(item, momentum_settings.allow_locked_rpc_usb); variable_item_set_current_value_text( - item, momentum_settings.allow_locked_rpc_commands ? "ON" : "OFF"); + item, momentum_settings.allow_locked_rpc_usb ? "ON" : "OFF"); + + item = variable_item_list_add( + var_item_list, + "Allow BLE RPC While Locked", + 2, + momentum_app_scene_interface_lockscreen_allow_locked_rpc_ble_changed, + app); + variable_item_set_current_value_index(item, momentum_settings.allow_locked_rpc_ble); + variable_item_set_current_value_text( + item, momentum_settings.allow_locked_rpc_ble ? "ON" : "OFF"); item = variable_item_list_add( var_item_list, diff --git a/applications/main/momentum_app/scenes/momentum_app_scene_interface_mainmenu.c b/applications/main/momentum_app/scenes/momentum_app_scene_interface_mainmenu.c index 17f17f729..afad8f7d2 100644 --- a/applications/main/momentum_app/scenes/momentum_app_scene_interface_mainmenu.c +++ b/applications/main/momentum_app/scenes/momentum_app_scene_interface_mainmenu.c @@ -23,6 +23,7 @@ const char* const menu_style_names[MenuStyleCount] = { "C64", "Compact", "MNTM", + "CoverFlow", }; static void momentum_app_scene_interface_mainmenu_menu_style_changed(VariableItem* item) { MomentumApp* app = variable_item_get_context(item); diff --git a/applications/main/nfc/plugins/supported_cards/skylanders.c b/applications/main/nfc/plugins/supported_cards/skylanders.c index 6c199f114..b5dc0ab86 100644 --- a/applications/main/nfc/plugins/supported_cards/skylanders.c +++ b/applications/main/nfc/plugins/supported_cards/skylanders.c @@ -7,13 +7,36 @@ #include #include -#define TAG "Skylanders" +#define TAG "Skylanders" +#define POLY UINT64_C(0x42f0e1eba9ea3693) +#define TOP UINT64_C(0x800000000000) +#define UID_LEN 4 +#define KEY_MASK 0xFFFFFFFFFFFF static const uint64_t skylanders_key = 0x4b0b20107ccb; static const char* nfc_resources_header = "Flipper NFC resources"; static const uint32_t nfc_resources_file_version = 1; +uint64_t crc64_like(uint64_t result, uint8_t sector) { + result ^= (uint64_t)sector << 40; + for(int i = 0; i < 8; i++) { + result = (result & TOP) ? (result << 1) ^ POLY : result << 1; + } + return result; +} + +uint64_t taghash(uint32_t uid) { + uint64_t result = 0x9AE903260CC4; + uint8_t uidBytes[UID_LEN] = {0}; + memcpy(uidBytes, &uid, UID_LEN); + + for(int i = 0; i < UID_LEN; i++) { + result = crc64_like(result, uidBytes[i]); + } + return result; +} + static bool skylanders_search_data( Storage* storage, const char* file_name, @@ -88,6 +111,12 @@ static bool skylanders_read(Nfc* nfc, NfcDevice* device) { MfClassicData* data = mf_classic_alloc(); nfc_device_copy_data(device, NfcProtocolMfClassic, data); + size_t* uid_len = 0; + const uint8_t* uid_bytes = mf_classic_get_uid(data, uid_len); + uint32_t uid = 0; + memcpy(&uid, uid_bytes, sizeof(uid)); + uint64_t hash = taghash(uid); + do { MfClassicType type = MfClassicType1k; MfClassicError error = mf_classic_poller_sync_detect_type(nfc, &type); @@ -96,10 +125,18 @@ static bool skylanders_read(Nfc* nfc, NfcDevice* device) { data->type = type; MfClassicDeviceKeys keys = {}; for(size_t i = 0; i < mf_classic_get_total_sectors_num(data->type); i++) { - bit_lib_num_to_bytes_be(skylanders_key, sizeof(MfClassicKey), keys.key_a[i].data); - FURI_BIT_SET(keys.key_a_mask, i); - bit_lib_num_to_bytes_be(skylanders_key, sizeof(MfClassicKey), keys.key_b[i].data); - FURI_BIT_SET(keys.key_b_mask, i); + if(i == 0) { + bit_lib_num_to_bytes_be(skylanders_key, sizeof(MfClassicKey), keys.key_a[i].data); + FURI_BIT_SET(keys.key_a_mask, i); + } else { + uint64_t sectorhash = crc64_like(hash, i); + uint64_t key = sectorhash & KEY_MASK; + uint8_t* keyBytes = (uint8_t*)&key; + memcpy(keys.key_a[i].data, keyBytes, sizeof(MfClassicKey)); + FURI_BIT_SET(keys.key_a_mask, i); + memset(keys.key_b[i].data, 0, sizeof(MfClassicKey)); + FURI_BIT_SET(keys.key_b_mask, i); + } } error = mf_classic_poller_sync_read(nfc, &keys, data); @@ -134,7 +171,7 @@ static bool skylanders_parse(const NfcDevice* device, FuriString* parsed_data) { uint64_t key = bit_lib_bytes_to_num_be(sec_tr->key_a.data, 6); if(key != skylanders_key) break; - const uint16_t id = (uint16_t)*data->block[1].data; + const uint16_t id = data->block[1].data[1] << 8 | data->block[1].data[0]; if(id == 0) break; Storage* storage = furi_record_open(RECORD_STORAGE); diff --git a/applications/main/subghz/helpers/subghz_custom_event.h b/applications/main/subghz/helpers/subghz_custom_event.h index 2d2fabd75..2ac74652b 100644 --- a/applications/main/subghz/helpers/subghz_custom_event.h +++ b/applications/main/subghz/helpers/subghz_custom_event.h @@ -35,6 +35,7 @@ typedef enum { SubGhzCustomEventSceneRpcLoad, SubGhzCustomEventSceneRpcButtonPress, SubGhzCustomEventSceneRpcButtonRelease, + SubGhzCustomEventSceneRpcButtonPressRelease, SubGhzCustomEventSceneRpcSessionClose, SubGhzCustomEventViewReceiverOK, diff --git a/applications/main/subghz/scenes/subghz_scene_rpc.c b/applications/main/subghz/scenes/subghz_scene_rpc.c index f058821e0..b262679a4 100644 --- a/applications/main/subghz/scenes/subghz_scene_rpc.c +++ b/applications/main/subghz/scenes/subghz_scene_rpc.c @@ -87,6 +87,43 @@ bool subghz_scene_rpc_on_event(void* context, SceneManagerEvent event) { scene_manager_set_scene_state( subghz->scene_manager, SubGhzSceneRpc, SubGhzRpcStateIdle); rpc_system_app_confirm(subghz->rpc_ctx, result); + } else if(event.event == SubGhzCustomEventSceneRpcButtonPressRelease) { + bool result = false; + if(state == SubGhzRpcStateLoaded) { + switch( + subghz_txrx_tx_start(subghz->txrx, subghz_txrx_get_fff_data(subghz->txrx))) { + case SubGhzTxRxStartTxStateErrorOnlyRx: + rpc_system_app_set_error_code( + subghz->rpc_ctx, RpcAppSystemErrorCodeRegionLock); + rpc_system_app_set_error_text( + subghz->rpc_ctx, + "Transmission on this frequency is restricted in your region"); + break; + case SubGhzTxRxStartTxStateErrorParserOthers: + rpc_system_app_set_error_code( + subghz->rpc_ctx, RpcAppSystemErrorCodeInternalParse); + rpc_system_app_set_error_text( + subghz->rpc_ctx, "Error in protocol parameters description"); + break; + + default: //if(SubGhzTxRxStartTxStateOk) + result = true; + subghz_blink_start(subghz); + scene_manager_set_scene_state( + subghz->scene_manager, SubGhzSceneRpc, SubGhzRpcStateTx); + break; + } + } + + // Stop transmission + if(state == SubGhzRpcStateTx) { + subghz_txrx_stop(subghz->txrx); + subghz_blink_stop(subghz); + result = true; + } + scene_manager_set_scene_state( + subghz->scene_manager, SubGhzSceneRpc, SubGhzRpcStateIdle); + rpc_system_app_confirm(subghz->rpc_ctx, result); } else if(event.event == SubGhzCustomEventSceneRpcLoad) { bool result = false; if(state == SubGhzRpcStateIdle) { diff --git a/applications/main/subghz/subghz.c b/applications/main/subghz/subghz.c index 19ea02a95..456a3ae6e 100644 --- a/applications/main/subghz/subghz.c +++ b/applications/main/subghz/subghz.c @@ -53,6 +53,9 @@ static void subghz_rpc_command_callback(const RpcAppSystemEvent* event, void* co } else if(event->type == RpcAppEventTypeButtonRelease) { view_dispatcher_send_custom_event( subghz->view_dispatcher, SubGhzCustomEventSceneRpcButtonRelease); + } else if(event->type == RpcAppEventTypeButtonPressRelease) { + view_dispatcher_send_custom_event( + subghz->view_dispatcher, SubGhzCustomEventSceneRpcButtonPressRelease); } else { rpc_system_app_confirm(subghz->rpc_ctx, false); } diff --git a/applications/main/u2f/u2f.c b/applications/main/u2f/u2f.c index 0143eb245..132baf4f9 100644 --- a/applications/main/u2f/u2f.c +++ b/applications/main/u2f/u2f.c @@ -280,6 +280,8 @@ static uint16_t u2f_register(U2fData* U2F, uint8_t* buf) { MCHECK(mbedtls_md_hmac_update(&hmac_ctx, private, sizeof(private))); MCHECK(mbedtls_md_hmac_update(&hmac_ctx, req->app_id, sizeof(req->app_id))); MCHECK(mbedtls_md_hmac_finish(&hmac_ctx, handle.hash)); + + mbedtls_md_free(&hmac_ctx); } // Generate public key @@ -387,6 +389,8 @@ static uint16_t u2f_authenticate(U2fData* U2F, uint8_t* buf) { MCHECK(mbedtls_md_hmac_update(&hmac_ctx, priv_key, sizeof(priv_key))); MCHECK(mbedtls_md_hmac_update(&hmac_ctx, req->app_id, sizeof(req->app_id))); MCHECK(mbedtls_md_hmac_finish(&hmac_ctx, mac_control)); + + mbedtls_md_free(&hmac_ctx); } if(memcmp(req->key_handle.hash, mac_control, sizeof(mac_control)) != 0) { diff --git a/applications/services/cli/cli.c b/applications/services/cli/cli.c index 9756d1eef..73e734073 100644 --- a/applications/services/cli/cli.c +++ b/applications/services/cli/cli.c @@ -8,6 +8,7 @@ #include #include #include +#include #define TAG "CliSrv" @@ -208,6 +209,36 @@ static void cli_execute_command(Cli* cli, CliCommand* command, FuriString* args) } } +static size_t cli_string_distance(const char* s1, const char* s2) { + size_t distance = 0; + + while(*s1 && *s2) { + if(*s1++ != *s2++) distance++; + } + while(*s1++) + distance++; + while(*s2++) + distance++; + + return distance; +} + +static void cli_find_similar_command(Cli* cli, const char* input, FuriString* suggestion) { + size_t min_distance = (size_t)-1; + size_t max_allowed = (strlen(input) + 1) / 2; + furi_string_reset(suggestion); + + CliCommandTree_it_t it; + for(CliCommandTree_it(it, cli->commands); !CliCommandTree_end_p(it); CliCommandTree_next(it)) { + const char* cmd_name = furi_string_get_cstr(*CliCommandTree_ref(it)->key_ptr); + size_t distance = cli_string_distance(input, cmd_name); + if(distance < min_distance && distance <= max_allowed) { + min_distance = distance; + furi_string_set(suggestion, cmd_name); + } + } +} + static void cli_handle_enter(Cli* cli) { cli_normalize_line(cli); @@ -245,9 +276,21 @@ static void cli_handle_enter(Cli* cli) { } else { furi_check(furi_mutex_release(cli->mutex) == FuriStatusOk); cli_nl(cli); - printf( - "`%s` command not found, use `help` or `?` to list all available commands", - furi_string_get_cstr(command)); + FuriString* suggestion = furi_string_alloc(); + cli_find_similar_command(cli, furi_string_get_cstr(command), suggestion); + + if(furi_string_empty(suggestion)) { + printf( + "`%s` command not found, use `help` or `?` to list all available commands", + furi_string_get_cstr(command)); + } else { + printf( + "`%s` command not found, did you mean `%s`? Use `help` or `?` to list all available commands", + furi_string_get_cstr(command), + furi_string_get_cstr(suggestion)); + } + + furi_string_free(suggestion); cli_putc(cli, CliKeyBell); } @@ -533,9 +576,9 @@ void cli_session_open(Cli* cli, void* session) { cli->session = session; if(cli->session != NULL) { cli->session->init(); - furi_thread_set_stdout_callback(cli->session->tx_stdout); + furi_thread_set_stdout_callback(cli->session->tx_stdout, NULL); } else { - furi_thread_set_stdout_callback(NULL); + furi_thread_set_stdout_callback(NULL, NULL); } furi_semaphore_release(cli->idle_sem); furi_check(furi_mutex_release(cli->mutex) == FuriStatusOk); @@ -549,7 +592,7 @@ void cli_session_close(Cli* cli) { cli->session->deinit(); } cli->session = NULL; - furi_thread_set_stdout_callback(NULL); + furi_thread_set_stdout_callback(NULL, NULL); furi_check(furi_mutex_release(cli->mutex) == FuriStatusOk); } @@ -563,9 +606,9 @@ int32_t cli_srv(void* p) { furi_record_create(RECORD_CLI, cli); if(cli->session != NULL) { - furi_thread_set_stdout_callback(cli->session->tx_stdout); + furi_thread_set_stdout_callback(cli->session->tx_stdout, NULL); } else { - furi_thread_set_stdout_callback(NULL); + furi_thread_set_stdout_callback(NULL, NULL); } if(furi_hal_is_normal_boot()) { diff --git a/applications/services/cli/cli_commands.c b/applications/services/cli/cli_commands.c index 9dd4e4265..e53744d80 100644 --- a/applications/services/cli/cli_commands.c +++ b/applications/services/cli/cli_commands.c @@ -682,6 +682,13 @@ void cli_command_i2c(Cli* cli, FuriString* args, void* context) { furi_hal_i2c_release(&furi_hal_i2c_handle_external); } +void cli_command_clear(Cli* cli, FuriString* args, void* context) { + UNUSED(cli); + UNUSED(args); + UNUSED(context); + printf("\e[2J\e[H"); +} + CLI_PLUGIN_WRAPPER("info", cli_command_info) CLI_PLUGIN_WRAPPER("src", cli_command_src) CLI_PLUGIN_WRAPPER("neofetch", cli_command_neofetch) @@ -693,6 +700,7 @@ CLI_PLUGIN_WRAPPER("vibro", cli_command_vibro) CLI_PLUGIN_WRAPPER("led", cli_command_led) CLI_PLUGIN_WRAPPER("gpio", cli_command_gpio) CLI_PLUGIN_WRAPPER("i2c", cli_command_i2c) +CLI_PLUGIN_WRAPPER("clear", cli_command_clear) void cli_commands_init(Cli* cli) { cli_add_command(cli, "!", CliCommandFlagParallelSafe, cli_command_info_wrapper, (void*)true); @@ -724,4 +732,7 @@ void cli_commands_init(Cli* cli) { cli_add_command(cli, "led", CliCommandFlagDefault, cli_command_led_wrapper, NULL); cli_add_command(cli, "gpio", CliCommandFlagDefault, cli_command_gpio_wrapper, NULL); cli_add_command(cli, "i2c", CliCommandFlagDefault, cli_command_i2c_wrapper, NULL); + + cli_add_command(cli, "clear", CliCommandFlagParallelSafe, cli_command_clear, NULL); + cli_add_command(cli, "cls", CliCommandFlagParallelSafe, cli_command_clear, NULL); } diff --git a/applications/services/cli/cli_i.h b/applications/services/cli/cli_i.h index f6d2bba7e..7b742a469 100644 --- a/applications/services/cli/cli_i.h +++ b/applications/services/cli/cli_i.h @@ -28,8 +28,9 @@ struct CliSession { void (*init)(void); void (*deinit)(void); size_t (*rx)(uint8_t* buffer, size_t size, uint32_t timeout); + size_t (*rx_stdin)(uint8_t* buffer, size_t size, uint32_t timeout, void* context); void (*tx)(const uint8_t* buffer, size_t size); - void (*tx_stdout)(const char* data, size_t size); + void (*tx_stdout)(const char* data, size_t size, void* context); bool (*is_connected)(void); }; diff --git a/applications/services/cli/cli_vcp.c b/applications/services/cli/cli_vcp.c index 83f4f8214..315baa3a2 100644 --- a/applications/services/cli/cli_vcp.c +++ b/applications/services/cli/cli_vcp.c @@ -243,6 +243,11 @@ static size_t cli_vcp_rx(uint8_t* buffer, size_t size, uint32_t timeout) { return rx_cnt; } +static size_t cli_vcp_rx_stdin(uint8_t* data, size_t size, uint32_t timeout, void* context) { + UNUSED(context); + return cli_vcp_rx(data, size, timeout); +} + static void cli_vcp_tx(const uint8_t* buffer, size_t size) { furi_assert(vcp); furi_assert(buffer); @@ -268,7 +273,8 @@ static void cli_vcp_tx(const uint8_t* buffer, size_t size) { VCP_DEBUG("tx %u end", size); } -static void cli_vcp_tx_stdout(const char* data, size_t size) { +static void cli_vcp_tx_stdout(const char* data, size_t size, void* context) { + UNUSED(context); cli_vcp_tx((const uint8_t*)data, size); } @@ -311,6 +317,7 @@ CliSession cli_vcp = { cli_vcp_init, cli_vcp_deinit, cli_vcp_rx, + cli_vcp_rx_stdin, cli_vcp_tx, cli_vcp_tx_stdout, cli_vcp_is_connected, diff --git a/applications/services/desktop/desktop.c b/applications/services/desktop/desktop.c index d618f14df..bcd10e0d9 100644 --- a/applications/services/desktop/desktop.c +++ b/applications/services/desktop/desktop.c @@ -193,11 +193,11 @@ static void desktop_stop_auto_lock_timer(Desktop* desktop) { static void desktop_auto_lock_arm(Desktop* desktop) { if(desktop->settings.auto_lock_delay_ms) { - if(desktop->input_events_subscription == NULL) { + if(!desktop->input_events_subscription) { desktop->input_events_subscription = furi_pubsub_subscribe( desktop->input_events_pubsub, desktop_auto_lock_callback, desktop); } - if(desktop->ascii_events_subscription == NULL) { + if(!desktop->ascii_events_subscription) { desktop->ascii_events_subscription = furi_pubsub_subscribe( desktop->ascii_events_pubsub, desktop_auto_lock_callback, desktop); } @@ -391,13 +391,17 @@ void desktop_lock(Desktop* desktop, bool with_pin) { furi_hal_rtc_set_pin_fails(0); } - if(with_pin && !momentum_settings.allow_locked_rpc_commands) { - Cli* cli = furi_record_open(RECORD_CLI); - cli_session_close(cli); - furi_record_close(RECORD_CLI); - Bt* bt = furi_record_open(RECORD_BT); - bt_close_rpc_connection(bt); - furi_record_close(RECORD_BT); + if(with_pin) { + if(!momentum_settings.allow_locked_rpc_usb) { + Cli* cli = furi_record_open(RECORD_CLI); + cli_session_close(cli); + furi_record_close(RECORD_CLI); + } + if(!momentum_settings.allow_locked_rpc_ble) { + Bt* bt = furi_record_open(RECORD_BT); + bt_close_rpc_connection(bt); + furi_record_close(RECORD_BT); + } } desktop_auto_lock_inhibit(desktop); @@ -426,12 +430,16 @@ void desktop_unlock(Desktop* desktop) { furi_hal_rtc_set_pin_fails(0); if(with_pin) { - Cli* cli = furi_record_open(RECORD_CLI); - cli_session_open(cli, &cli_vcp); - furi_record_close(RECORD_CLI); - Bt* bt = furi_record_open(RECORD_BT); - bt_open_rpc_connection(bt); - furi_record_close(RECORD_BT); + if(!momentum_settings.allow_locked_rpc_usb) { + Cli* cli = furi_record_open(RECORD_CLI); + cli_session_open(cli, &cli_vcp); + furi_record_close(RECORD_CLI); + } + if(!momentum_settings.allow_locked_rpc_ble) { + Bt* bt = furi_record_open(RECORD_BT); + bt_open_rpc_connection(bt); + furi_record_close(RECORD_BT); + } } DesktopStatus status = {.locked = false}; diff --git a/applications/services/gui/canvas.c b/applications/services/gui/canvas.c index 2aace5ca7..0a9ef6612 100644 --- a/applications/services/gui/canvas.c +++ b/applications/services/gui/canvas.c @@ -294,27 +294,53 @@ void canvas_draw_bitmap( canvas_draw_u8g2_bitmap(&canvas->fb, x, y, width, height, bitmap_data, IconRotation0); } +static void _canvas_draw_icon_animation( + Canvas* canvas, + int32_t x, + int32_t y, + int32_t width_scale, + int32_t height_scale, + IconAnimation* icon_animation) { + furi_check(canvas); + furi_check(icon_animation); + // Ensure scale % is > 0 + furi_assert(width_scale > 0 && height_scale > 0); + // Ensure scale % is <= 100: animated icons > 100% are buggy + // TODO: Future, allow scaling > 100 + furi_assert(width_scale <= 100 && height_scale <= 100); + + x += canvas->offset_x; + y += canvas->offset_y; + + uint8_t* icon_data = NULL; + compress_icon_decode( + canvas->compress_icon, icon_animation_get_data(icon_animation), &icon_data); + + int32_t width = icon_animation_get_width(icon_animation); + int32_t height = icon_animation_get_height(icon_animation); + int32_t width_scaled = (width * width_scale) / 100; + int32_t height_scaled = (height * height_scale) / 100; + + canvas_draw_u8g2_bitmap( + &canvas->fb, x, y, width_scaled, height_scaled, icon_data, IconRotation0); +} + void canvas_draw_icon_animation( Canvas* canvas, int32_t x, int32_t y, IconAnimation* icon_animation) { - furi_check(canvas); - furi_check(icon_animation); + _canvas_draw_icon_animation(canvas, x, y, 100, 100, icon_animation); +} - x += canvas->offset_x; - y += canvas->offset_y; - uint8_t* icon_data = NULL; - compress_icon_decode( - canvas->compress_icon, icon_animation_get_data(icon_animation), &icon_data); - canvas_draw_u8g2_bitmap( - &canvas->fb, - x, - y, - icon_animation_get_width(icon_animation), - icon_animation_get_height(icon_animation), - icon_data, - IconRotation0); +void canvas_draw_icon_animation_ex( + Canvas* canvas, + int32_t x, + int32_t y, + int32_t width_scale, + int32_t height_scale, + IconAnimation* icon_animation) { + _canvas_draw_icon_animation(canvas, x, y, width_scale, height_scale, icon_animation); } static void canvas_draw_u8g2_bitmap_int( diff --git a/applications/services/gui/canvas.h b/applications/services/gui/canvas.h index cd4719b3f..2168a4ea4 100644 --- a/applications/services/gui/canvas.h +++ b/applications/services/gui/canvas.h @@ -258,6 +258,9 @@ void canvas_draw_icon_ex( IconRotation rotation); /** Draw animation at position defined by x,y. + * + * This function is retained for backward compatibility and draws the animation + * at the specified position without scaling. * * @param canvas Canvas instance * @param x x coordinate @@ -270,6 +273,26 @@ void canvas_draw_icon_animation( int32_t y, IconAnimation* icon_animation); +/** Draw animation at position defined by x,y with scaling. + * + * This extended version allows scaling of the animation dimensions by percentage. + * The width and height are scaled independently. + * + * @param canvas Canvas instance + * @param x x coordinate + * @param y y coordinate + * @param width_scale Scaled (%) width of the icon (1–100%) + * @param height_scale Scaled (%) height of the icon (1–100%) + * @param icon_animation IconAnimation instance + */ +void canvas_draw_icon_animation_ex( + Canvas* canvas, + int32_t x, + int32_t y, + int32_t width_scale, + int32_t height_scale, + IconAnimation* icon_animation); + /** Draw icon at position defined by x,y. * * @param canvas Canvas instance diff --git a/applications/services/gui/modules/menu.c b/applications/services/gui/modules/menu.c index c3b7bcd67..1c7770cc5 100644 --- a/applications/services/gui/modules/menu.c +++ b/applications/services/gui/modules/menu.c @@ -81,6 +81,24 @@ static void menu_centered_icon( item->icon); } +static void menu_centered_icon_scaled( + Canvas* canvas, + MenuItem* item, + size_t x, + size_t y, + size_t width, + size_t height, + size_t width_scale, + size_t height_scale) { + canvas_draw_icon_animation_ex( + canvas, + x + (width - item->icon->icon->width) / 2, + y + (height - item->icon->icon->height) / 2, + width_scale, + height_scale, + item->icon); +} + static size_t menu_scroll_counter(MenuModel* model, bool selected) { if(!selected) return 0; size_t scroll_counter = model->scroll_counter; @@ -391,10 +409,8 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { snprintf(clk, sizeof(clk), "%02u:%02u", hour, min); canvas_draw_str(canvas, 5, 34, clk); - uint32_t battery_capacity = furi_hal_power_get_battery_full_capacity(); - uint32_t battery_remaining = furi_hal_power_get_battery_remaining_capacity(); bool ext5v = furi_hal_power_is_otg_enabled(); - uint16_t battery_percent = (battery_remaining * 100) / battery_capacity; + uint8_t battery_percent = furi_hal_power_get_pct(); bool charge_state = false; // Determine charge state @@ -442,6 +458,112 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { } break; } + case MenuStyleCoverFlow: { + canvas_set_font(canvas, FontPrimary); + + // Draw frames + canvas_set_bitmap_mode(canvas, true); + canvas_draw_frame(canvas, 0, 0, 128, 64); + canvas_draw_frame(canvas, 44, 2, 40, 40); + + // Draw left side albums + canvas_draw_line(canvas, 6, 40, 17, 35); + canvas_draw_line(canvas, 19, 40, 30, 35); + canvas_draw_line(canvas, 32, 40, 43, 35); + canvas_draw_line(canvas, 6, 3, 17, 8); + canvas_draw_line(canvas, 19, 3, 30, 8); + canvas_draw_line(canvas, 32, 3, 43, 8); + canvas_draw_line(canvas, 18, 2, 18, 41); + canvas_draw_line(canvas, 31, 2, 31, 41); + canvas_draw_line(canvas, 5, 2, 5, 41); + canvas_draw_line(canvas, 4, 8, 1, 7); + canvas_draw_line(canvas, 5, 35, 1, 36); + + // Draw right side albums + canvas_draw_line(canvas, 95, 40, 84, 35); + canvas_draw_line(canvas, 108, 40, 97, 35); + canvas_draw_line(canvas, 121, 40, 110, 35); + canvas_draw_line(canvas, 84, 8, 95, 3); + canvas_draw_line(canvas, 97, 8, 108, 3); + canvas_draw_line(canvas, 110, 8, 121, 3); + canvas_draw_line(canvas, 96, 2, 96, 41); + canvas_draw_line(canvas, 109, 2, 109, 41); + canvas_draw_line(canvas, 122, 2, 122, 41); + canvas_draw_line(canvas, 123, 8, 126, 7); + canvas_draw_line(canvas, 123, 35, 126, 36); + + const int32_t pos_x_center = 128 / 2; + const int32_t pos_y_center = 64 / 2; + const int32_t pos_y_offset = 10; + const int32_t icon_size = 20; + const int32_t side_icon_width = icon_size / 2; + const int32_t padding_center_icon = 14; + const int32_t spacing_between_icons = 3; + const int32_t scale_base = 100; + + MenuItem* center_item = NULL; + + // Draw 7 icons, where index 0 is the center icon + // [-3, -2, -1, 0, 1, 2, 3] + for(int8_t i = -3; i <= 3; i++) { + shift_position = (position + items_count + i) % items_count; + item = MenuItemArray_get(model->items, shift_position); + + int32_t pos_x = pos_x_center; + int32_t pos_y = pos_y_center; + + int32_t scale_width = scale_base; + int32_t scale_height = scale_base; + + if(i < 0) { + // Left sided icons + pos_x -= padding_center_icon; + pos_x -= ((-i) * (side_icon_width + spacing_between_icons)); + pos_x -= (side_icon_width / 2) / 2; + pos_y = (pos_y_center - icon_size / 2) - pos_y_offset; + scale_width = 50; + } else if(i > 0) { + // Right sided icons + pos_x += padding_center_icon; + pos_x += (i * (side_icon_width + spacing_between_icons)); + pos_x -= side_icon_width; + pos_y = (pos_y_center - icon_size / 2) - pos_y_offset; + scale_width = 50; + } else if(i == 0) { + // Center icon + pos_x -= icon_size / 2; + pos_y = (pos_y_center - (icon_size / 2)) - pos_y_offset; + // Scaling > 100% doesn't look good, keep 100% for now + scale_width = scale_base; // TODO: 200% + scale_height = scale_base; // TODO: 200% + // Save center item pointer for later + center_item = item; + } + + // Draw the icon + menu_centered_icon_scaled( + canvas, item, pos_x, pos_y, icon_size, icon_size, scale_width, scale_height); + } + + // Draw label for center item + if(center_item) { + menu_get_name(center_item, name, false); + elements_scrollable_text_line_centered( + canvas, + pos_x_center, + (pos_y_center + icon_size / 2) + pos_y_offset, + 126, + name, + 0, + false, + true); + } + + // Add scrollbar element + elements_scrollbar_horizontal(canvas, 0, 60, 128, position, items_count); + + break; + } default: break; } @@ -792,6 +914,7 @@ static void menu_process_left(Menu* menu) { case MenuStyleDsi: case MenuStylePs4: case MenuStyleVertical: + case MenuStyleCoverFlow: size_t vertical_offset = model->vertical_offset; if(position > 0) { position--; @@ -856,6 +979,7 @@ static void menu_process_right(Menu* menu) { case MenuStyleDsi: case MenuStylePs4: case MenuStyleVertical: + case MenuStyleCoverFlow: size_t vertical_offset = model->vertical_offset; if(position < count - 1) { position++; diff --git a/applications/services/rpc/rpc.c b/applications/services/rpc/rpc.c index 1cd5caa65..0993a4f6f 100644 --- a/applications/services/rpc/rpc.c +++ b/applications/services/rpc/rpc.c @@ -385,9 +385,10 @@ static void } RpcSession* rpc_session_open(Rpc* rpc, RpcOwner owner) { - if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagLock) && - !momentum_settings.allow_locked_rpc_commands) - return NULL; + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagLock)) { + if(owner == RpcOwnerUsb && !momentum_settings.allow_locked_rpc_usb) return NULL; + if(owner == RpcOwnerBle && !momentum_settings.allow_locked_rpc_ble) return NULL; + } furi_check(rpc); diff --git a/applications/services/rpc/rpc_app.c b/applications/services/rpc/rpc_app.c index aa2a3f64f..2b9a6542d 100644 --- a/applications/services/rpc/rpc_app.c +++ b/applications/services/rpc/rpc_app.c @@ -258,6 +258,41 @@ static void rpc_system_app_button_release(const PB_Main* request, void* context) } } +static void rpc_system_app_button_press_release(const PB_Main* request, void* context) { + furi_assert(request); + furi_assert(request->which_content == PB_Main_app_button_press_release_request_tag); + + RpcAppSystem* rpc_app = context; + furi_assert(rpc_app); + + if(rpc_app->callback) { + FURI_LOG_D(TAG, "ButtonPressRelease"); + + RpcAppSystemEvent event; + event.type = RpcAppEventTypeButtonPressRelease; + + if(strlen(request->content.app_button_press_release_request.args) != 0) { + event.data.type = RpcAppSystemEventDataTypeString; + event.data.string = request->content.app_button_press_release_request.args; + } else { + event.data.type = RpcAppSystemEventDataTypeInt32; + event.data.i32 = request->content.app_button_press_release_request.index; + } + + rpc_system_app_error_reset(rpc_app); + rpc_system_app_set_last_command(rpc_app, request->command_id, &event); + + rpc_app->callback(&event, rpc_app->callback_context); + + } else { + rpc_system_app_send_error_response( + rpc_app, + request->command_id, + PB_CommandStatus_ERROR_APP_NOT_RUNNING, + "ButtonPressRelease"); + } +} + static void rpc_system_app_get_error_process(const PB_Main* request, void* context) { furi_assert(request); furi_assert(request->which_content == PB_Main_app_get_error_request_tag); @@ -332,6 +367,7 @@ void rpc_system_app_confirm(RpcAppSystem* rpc_app, bool result) { rpc_app->last_event_type == RpcAppEventTypeLoadFile || rpc_app->last_event_type == RpcAppEventTypeButtonPress || rpc_app->last_event_type == RpcAppEventTypeButtonRelease || + rpc_app->last_event_type == RpcAppEventTypeButtonPressRelease || rpc_app->last_event_type == RpcAppEventTypeDataExchange); const uint32_t last_command_id = rpc_app->last_command_id; @@ -432,6 +468,9 @@ void* rpc_system_app_alloc(RpcSession* session) { rpc_handler.message_handler = rpc_system_app_button_release; rpc_add_handler(session, PB_Main_app_button_release_request_tag, &rpc_handler); + rpc_handler.message_handler = rpc_system_app_button_press_release; + rpc_add_handler(session, PB_Main_app_button_press_release_request_tag, &rpc_handler); + rpc_handler.message_handler = rpc_system_app_get_error_process; rpc_add_handler(session, PB_Main_app_get_error_request_tag, &rpc_handler); diff --git a/applications/services/rpc/rpc_app.h b/applications/services/rpc/rpc_app.h index aa6fd81cc..377d9ccb3 100644 --- a/applications/services/rpc/rpc_app.h +++ b/applications/services/rpc/rpc_app.h @@ -90,6 +90,13 @@ typedef enum { * all activities to be conducted while a button is being pressed. */ RpcAppEventTypeButtonRelease, + /** + * @brief The client has informed the application that a button has been pressed and released. + * + * This command's meaning is application-specific, e.g. to perform an action + * once without repeating it. + */ + RpcAppEventTypeButtonPressRelease, /** * @brief The client has sent a byte array of arbitrary size. * @@ -162,6 +169,7 @@ void rpc_system_app_send_exited(RpcAppSystem* rpc_app); * - RpcAppEventTypeLoadFile * - RpcAppEventTypeButtonPress * - RpcAppEventTypeButtonRelease + * - RpcAppEventTypeButtonPressRelease * - RpcAppEventTypeDataExchange * * Not confirming these events will result in a client-side timeout. diff --git a/applications/system/js_app/packages/create-fz-app/pnpm-lock.yaml b/applications/system/js_app/packages/create-fz-app/pnpm-lock.yaml index 58f20a385..3f753df15 100644 --- a/applications/system/js_app/packages/create-fz-app/pnpm-lock.yaml +++ b/applications/system/js_app/packages/create-fz-app/pnpm-lock.yaml @@ -62,8 +62,8 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} eastasianwidth@0.2.0: @@ -240,7 +240,7 @@ snapshots: color-name@1.1.4: {} - cross-spawn@7.0.3: + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 @@ -256,7 +256,7 @@ snapshots: foreground-child@3.3.0: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 signal-exit: 4.1.0 get-caller-file@2.0.5: {} diff --git a/applications/system/js_app/packages/fz-sdk/package.json b/applications/system/js_app/packages/fz-sdk/package.json index c39c5b9f8..e0a945346 100644 --- a/applications/system/js_app/packages/fz-sdk/package.json +++ b/applications/system/js_app/packages/fz-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@next-flip/fz-sdk-mntm", - "version": "0.1.3", + "version": "0.1.4", "description": "Type declarations and documentation for native JS modules available on Momentum Custom Firmware for Flipper Zero", "keywords": [ "momentum", diff --git a/applications/system/js_app/packages/fz-sdk/pnpm-lock.yaml b/applications/system/js_app/packages/fz-sdk/pnpm-lock.yaml index 45944a854..67d3bde82 100644 --- a/applications/system/js_app/packages/fz-sdk/pnpm-lock.yaml +++ b/applications/system/js_app/packages/fz-sdk/pnpm-lock.yaml @@ -8,13 +8,6 @@ importers: .: dependencies: - prompts: - specifier: ^2.4.2 - version: 2.4.2 - serialport: - specifier: ^12.0.0 - version: 12.0.0 - devDependencies: esbuild: specifier: ^0.24.0 version: 0.24.0 @@ -24,6 +17,12 @@ importers: json5: specifier: ^2.2.3 version: 2.2.3 + prompts: + specifier: ^2.4.2 + version: 2.4.2 + serialport: + specifier: ^12.0.0 + version: 12.0.0 typedoc: specifier: ^0.26.10 version: 0.26.10(typescript@5.6.3) diff --git a/applications/system/js_app/packages/fz-sdk/sdk.js b/applications/system/js_app/packages/fz-sdk/sdk.js index 55c3c2bb0..34279270b 100644 --- a/applications/system/js_app/packages/fz-sdk/sdk.js +++ b/applications/system/js_app/packages/fz-sdk/sdk.js @@ -91,9 +91,21 @@ async function build(config) { async function upload(config) { const appFile = fs.readFileSync(config.input, "utf8"); - const flippers = (await SerialPort.list()).filter(x => x.serialNumber?.startsWith("flip_")); + const serialPorts = await SerialPort.list(); - if (!flippers) { + let flippers = serialPorts + .filter(x => x.serialNumber?.startsWith("flip_")) + .map(x => ({ path: x.path, name: x.serialNumber.replace("flip_", "") })); + + if (!flippers.length) { + // some Windows installations don't report the serial number correctly; + // filter by STM VCP VID:PID instead + flippers = serialPorts + .filter(x => x?.vendorId === "0483" && x?.productId === "5740") + .map(x => ({ path: x.path, name: x.path })); + } + + if (!flippers.length) { console.error("No Flippers found"); process.exit(1); } diff --git a/assets/dolphin/blocking/L0_NewMail_128x51/frame_1.png b/assets/dolphin/blocking/L0_NewMail_128x51/frame_1.png index 13be20165..5730f1889 100644 Binary files a/assets/dolphin/blocking/L0_NewMail_128x51/frame_1.png and b/assets/dolphin/blocking/L0_NewMail_128x51/frame_1.png differ diff --git a/assets/dolphin/blocking/L0_NewMail_128x51/frame_2.png b/assets/dolphin/blocking/L0_NewMail_128x51/frame_2.png index 432db2ed8..aa1061b94 100644 Binary files a/assets/dolphin/blocking/L0_NewMail_128x51/frame_2.png and b/assets/dolphin/blocking/L0_NewMail_128x51/frame_2.png differ diff --git a/assets/dolphin/blocking/L0_NewMail_128x51/frame_3.png b/assets/dolphin/blocking/L0_NewMail_128x51/frame_3.png index 8a9de358b..cdcdda356 100644 Binary files a/assets/dolphin/blocking/L0_NewMail_128x51/frame_3.png and b/assets/dolphin/blocking/L0_NewMail_128x51/frame_3.png differ diff --git a/assets/dolphin/blocking/L0_NoDb_128x51/frame_0.png b/assets/dolphin/blocking/L0_NoDb_128x51/frame_0.png index acb9a1a35..3af65668b 100644 Binary files a/assets/dolphin/blocking/L0_NoDb_128x51/frame_0.png and b/assets/dolphin/blocking/L0_NoDb_128x51/frame_0.png differ diff --git a/assets/dolphin/blocking/L0_SdBad_128x51/frame_0.png b/assets/dolphin/blocking/L0_SdBad_128x51/frame_0.png index 48f140046..a694506a6 100644 Binary files a/assets/dolphin/blocking/L0_SdBad_128x51/frame_0.png and b/assets/dolphin/blocking/L0_SdBad_128x51/frame_0.png differ diff --git a/assets/dolphin/blocking/L0_SdOk_128x51/frame_0.png b/assets/dolphin/blocking/L0_SdOk_128x51/frame_0.png index ee4ec1ba8..698a4ea1c 100644 Binary files a/assets/dolphin/blocking/L0_SdOk_128x51/frame_0.png and b/assets/dolphin/blocking/L0_SdOk_128x51/frame_0.png differ diff --git a/assets/dolphin/blocking/L0_Url_128x51/frame_0.png b/assets/dolphin/blocking/L0_Url_128x51/frame_0.png index aad40a5ae..d9490aabd 100644 Binary files a/assets/dolphin/blocking/L0_Url_128x51/frame_0.png and b/assets/dolphin/blocking/L0_Url_128x51/frame_0.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_0.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_0.png index 73ed8998c..b96969559 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_0.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_0.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_1.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_1.png index 7955637f6..c5d566e72 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_1.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_1.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_10.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_10.png index d888edd76..71e310df3 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_10.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_10.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_11.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_11.png index e3da336a7..718555194 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_11.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_11.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_12.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_12.png index 78068bfaa..ed6ba6d1c 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_12.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_12.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_13.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_13.png index ad07012e1..ba328786d 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_13.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_13.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_14.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_14.png index a7e51895b..59008f113 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_14.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_14.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_15.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_15.png index f2b8e9bb9..c19bfb3ed 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_15.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_15.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_16.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_16.png index 46c41c92d..b347ad1a8 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_16.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_16.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_17.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_17.png index 569dcb1b8..261aeade7 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_17.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_17.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_2.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_2.png index 20ef24310..5a98f5388 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_2.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_2.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_20.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_20.png index 71dbc84b2..8d430e256 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_20.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_20.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_21.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_21.png index fdd38b5c2..4b70935f6 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_21.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_21.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_22.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_22.png index 2e66dd0fb..807151e33 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_22.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_22.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_24.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_24.png index 1258e162d..0a34ef060 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_24.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_24.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_25.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_25.png index 0e9ffcbb9..051be54d5 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_25.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_25.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_26.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_26.png index 2b89d892b..0cce0d378 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_26.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_26.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_27.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_27.png index f4cbd8bda..e0ce87f59 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_27.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_27.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_29.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_29.png index 25811796a..1337d4fc7 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_29.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_29.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_3.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_3.png index b71bcffb9..b769e8c88 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_3.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_3.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_30.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_30.png index 0f32291ec..153a85aa3 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_30.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_30.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_31.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_31.png index a02d6363b..51d32288a 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_31.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_31.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_32.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_32.png index d3de10b98..926d3127e 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_32.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_32.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_33.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_33.png index 4e77f139b..73002577c 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_33.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_33.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_34.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_34.png index 3d5f14207..a10bc771c 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_34.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_34.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_35.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_35.png index b04190d48..d103f5c4e 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_35.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_35.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_36.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_36.png index f19e1e4fc..573154070 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_36.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_36.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_37.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_37.png index 8380dec91..a94aee353 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_37.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_37.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_39.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_39.png index 27f87e640..b74ed99a7 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_39.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_39.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_4.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_4.png index d2b21d7f0..0bdb208d6 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_4.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_4.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_40.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_40.png index b19ec36eb..e9e4cc47c 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_40.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_40.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_41.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_41.png index 1632162fc..3110d0586 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_41.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_41.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_42.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_42.png index 6bae8af86..4bf675f52 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_42.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_42.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_43.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_43.png index e4dc1625a..0cd2c886f 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_43.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_43.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_44.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_44.png index 5854b6d2f..fe3bdd5e8 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_44.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_44.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_45.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_45.png index 233641453..0c4c52062 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_45.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_45.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_6.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_6.png index 29b6ef25b..e56c45260 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_6.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_6.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_8.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_8.png index 55e3ebcff..1359bb52a 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_8.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_8.png differ diff --git a/assets/dolphin/external/L1_3d_printing_128x64/frame_9.png b/assets/dolphin/external/L1_3d_printing_128x64/frame_9.png index 86c129082..89f105259 100644 Binary files a/assets/dolphin/external/L1_3d_printing_128x64/frame_9.png and b/assets/dolphin/external/L1_3d_printing_128x64/frame_9.png differ diff --git a/assets/dolphin/external/L1_Akira_128x64/frame_12.png b/assets/dolphin/external/L1_Akira_128x64/frame_12.png index 4d800a109..701b70c43 100644 Binary files a/assets/dolphin/external/L1_Akira_128x64/frame_12.png and b/assets/dolphin/external/L1_Akira_128x64/frame_12.png differ diff --git a/assets/dolphin/external/L1_Akira_128x64/frame_16.png b/assets/dolphin/external/L1_Akira_128x64/frame_16.png index 8f66d531c..d7c015212 100644 Binary files a/assets/dolphin/external/L1_Akira_128x64/frame_16.png and b/assets/dolphin/external/L1_Akira_128x64/frame_16.png differ diff --git a/assets/dolphin/external/L1_Akira_128x64/frame_17.png b/assets/dolphin/external/L1_Akira_128x64/frame_17.png index cf37db346..95068c50f 100644 Binary files a/assets/dolphin/external/L1_Akira_128x64/frame_17.png and b/assets/dolphin/external/L1_Akira_128x64/frame_17.png differ diff --git a/assets/dolphin/external/L1_Akira_128x64/frame_20.png b/assets/dolphin/external/L1_Akira_128x64/frame_20.png index 6bcc87a38..4b4c5b14c 100644 Binary files a/assets/dolphin/external/L1_Akira_128x64/frame_20.png and b/assets/dolphin/external/L1_Akira_128x64/frame_20.png differ diff --git a/assets/dolphin/external/L1_Akira_128x64/frame_21.png b/assets/dolphin/external/L1_Akira_128x64/frame_21.png index ca775046a..ec6168e31 100644 Binary files a/assets/dolphin/external/L1_Akira_128x64/frame_21.png and b/assets/dolphin/external/L1_Akira_128x64/frame_21.png differ diff --git a/assets/dolphin/external/L1_Akira_128x64/frame_26.png b/assets/dolphin/external/L1_Akira_128x64/frame_26.png index 1805bdb95..e7838e39f 100644 Binary files a/assets/dolphin/external/L1_Akira_128x64/frame_26.png and b/assets/dolphin/external/L1_Akira_128x64/frame_26.png differ diff --git a/assets/dolphin/external/L1_Akira_128x64/frame_27.png b/assets/dolphin/external/L1_Akira_128x64/frame_27.png index 37a820798..b1ae3ee6c 100644 Binary files a/assets/dolphin/external/L1_Akira_128x64/frame_27.png and b/assets/dolphin/external/L1_Akira_128x64/frame_27.png differ diff --git a/assets/dolphin/external/L1_Akira_128x64/frame_34.png b/assets/dolphin/external/L1_Akira_128x64/frame_34.png index e5a97b138..cd9673d56 100644 Binary files a/assets/dolphin/external/L1_Akira_128x64/frame_34.png and b/assets/dolphin/external/L1_Akira_128x64/frame_34.png differ diff --git a/assets/dolphin/external/L1_Akira_128x64/frame_7.png b/assets/dolphin/external/L1_Akira_128x64/frame_7.png index 51f1f5c40..e28db7832 100644 Binary files a/assets/dolphin/external/L1_Akira_128x64/frame_7.png and b/assets/dolphin/external/L1_Akira_128x64/frame_7.png differ diff --git a/assets/dolphin/external/L1_Boxing_128x64/frame_0.png b/assets/dolphin/external/L1_Boxing_128x64/frame_0.png index 9dcab2323..59d3ef3fa 100644 Binary files a/assets/dolphin/external/L1_Boxing_128x64/frame_0.png and b/assets/dolphin/external/L1_Boxing_128x64/frame_0.png differ diff --git a/assets/dolphin/external/L1_Boxing_128x64/frame_2.png b/assets/dolphin/external/L1_Boxing_128x64/frame_2.png index 1243ee277..7c5f0b6cc 100644 Binary files a/assets/dolphin/external/L1_Boxing_128x64/frame_2.png and b/assets/dolphin/external/L1_Boxing_128x64/frame_2.png differ diff --git a/assets/dolphin/external/L1_Boxing_128x64/frame_3.png b/assets/dolphin/external/L1_Boxing_128x64/frame_3.png index 0972a2817..aee654cc8 100644 Binary files a/assets/dolphin/external/L1_Boxing_128x64/frame_3.png and b/assets/dolphin/external/L1_Boxing_128x64/frame_3.png differ diff --git a/assets/dolphin/external/L1_Cry_128x64/frame_0.png b/assets/dolphin/external/L1_Cry_128x64/frame_0.png index feeb30cb6..58ceddd8f 100644 Binary files a/assets/dolphin/external/L1_Cry_128x64/frame_0.png and b/assets/dolphin/external/L1_Cry_128x64/frame_0.png differ diff --git a/assets/dolphin/external/L1_Cry_128x64/frame_2.png b/assets/dolphin/external/L1_Cry_128x64/frame_2.png index 3f3ef6666..17b991809 100644 Binary files a/assets/dolphin/external/L1_Cry_128x64/frame_2.png and b/assets/dolphin/external/L1_Cry_128x64/frame_2.png differ diff --git a/assets/dolphin/external/L1_Cry_128x64/frame_6.png b/assets/dolphin/external/L1_Cry_128x64/frame_6.png index 635c1771e..4bc351b8d 100644 Binary files a/assets/dolphin/external/L1_Cry_128x64/frame_6.png and b/assets/dolphin/external/L1_Cry_128x64/frame_6.png differ diff --git a/assets/dolphin/external/L1_Furippa1_128x64/frame_0.png b/assets/dolphin/external/L1_Furippa1_128x64/frame_0.png index 8be19d3c8..120855f61 100644 Binary files a/assets/dolphin/external/L1_Furippa1_128x64/frame_0.png and b/assets/dolphin/external/L1_Furippa1_128x64/frame_0.png differ diff --git a/assets/dolphin/external/L1_Furippa1_128x64/frame_1.png b/assets/dolphin/external/L1_Furippa1_128x64/frame_1.png index 86b68b5dc..a9346b8da 100644 Binary files a/assets/dolphin/external/L1_Furippa1_128x64/frame_1.png and b/assets/dolphin/external/L1_Furippa1_128x64/frame_1.png differ diff --git a/assets/dolphin/external/L1_Furippa1_128x64/frame_10.png b/assets/dolphin/external/L1_Furippa1_128x64/frame_10.png index 755fb3e86..d4ab0e356 100644 Binary files a/assets/dolphin/external/L1_Furippa1_128x64/frame_10.png and b/assets/dolphin/external/L1_Furippa1_128x64/frame_10.png differ diff --git a/assets/dolphin/external/L1_Furippa1_128x64/frame_11.png b/assets/dolphin/external/L1_Furippa1_128x64/frame_11.png index e513b85ca..2d98d57ab 100644 Binary files a/assets/dolphin/external/L1_Furippa1_128x64/frame_11.png and b/assets/dolphin/external/L1_Furippa1_128x64/frame_11.png differ diff --git a/assets/dolphin/external/L1_Furippa1_128x64/frame_12.png b/assets/dolphin/external/L1_Furippa1_128x64/frame_12.png index 867f8d09f..95d09d14b 100644 Binary files a/assets/dolphin/external/L1_Furippa1_128x64/frame_12.png and b/assets/dolphin/external/L1_Furippa1_128x64/frame_12.png differ diff --git a/assets/dolphin/external/L1_Furippa1_128x64/frame_13.png b/assets/dolphin/external/L1_Furippa1_128x64/frame_13.png index 45fd1ec4e..c385a5ec4 100644 Binary files a/assets/dolphin/external/L1_Furippa1_128x64/frame_13.png and b/assets/dolphin/external/L1_Furippa1_128x64/frame_13.png differ diff --git a/assets/dolphin/external/L1_Furippa1_128x64/frame_14.png b/assets/dolphin/external/L1_Furippa1_128x64/frame_14.png index 1390e1297..25b4ec565 100644 Binary files a/assets/dolphin/external/L1_Furippa1_128x64/frame_14.png and b/assets/dolphin/external/L1_Furippa1_128x64/frame_14.png differ diff --git a/assets/dolphin/external/L1_Furippa1_128x64/frame_16.png b/assets/dolphin/external/L1_Furippa1_128x64/frame_16.png index 0dec63de6..d68243826 100644 Binary files a/assets/dolphin/external/L1_Furippa1_128x64/frame_16.png and b/assets/dolphin/external/L1_Furippa1_128x64/frame_16.png differ diff --git a/assets/dolphin/external/L1_Furippa1_128x64/frame_17.png b/assets/dolphin/external/L1_Furippa1_128x64/frame_17.png index 4fc9ea1d2..1a94e80b6 100644 Binary files a/assets/dolphin/external/L1_Furippa1_128x64/frame_17.png and b/assets/dolphin/external/L1_Furippa1_128x64/frame_17.png differ diff --git a/assets/dolphin/external/L1_Furippa1_128x64/frame_18.png b/assets/dolphin/external/L1_Furippa1_128x64/frame_18.png index 7ab4cf607..54615c613 100644 Binary files a/assets/dolphin/external/L1_Furippa1_128x64/frame_18.png and b/assets/dolphin/external/L1_Furippa1_128x64/frame_18.png differ diff --git a/assets/dolphin/external/L1_Furippa1_128x64/frame_2.png b/assets/dolphin/external/L1_Furippa1_128x64/frame_2.png index 9fa964345..ca7cb9dbc 100644 Binary files a/assets/dolphin/external/L1_Furippa1_128x64/frame_2.png and b/assets/dolphin/external/L1_Furippa1_128x64/frame_2.png differ diff --git a/assets/dolphin/external/L1_Furippa1_128x64/frame_3.png b/assets/dolphin/external/L1_Furippa1_128x64/frame_3.png index bba35b23b..5a18e3cbe 100644 Binary files a/assets/dolphin/external/L1_Furippa1_128x64/frame_3.png and b/assets/dolphin/external/L1_Furippa1_128x64/frame_3.png differ diff --git a/assets/dolphin/external/L1_Furippa1_128x64/frame_4.png b/assets/dolphin/external/L1_Furippa1_128x64/frame_4.png index aa0c34ec9..909c6106c 100644 Binary files a/assets/dolphin/external/L1_Furippa1_128x64/frame_4.png and b/assets/dolphin/external/L1_Furippa1_128x64/frame_4.png differ diff --git a/assets/dolphin/external/L1_Furippa1_128x64/frame_5.png b/assets/dolphin/external/L1_Furippa1_128x64/frame_5.png index 9a706e61e..582e2b19f 100644 Binary files a/assets/dolphin/external/L1_Furippa1_128x64/frame_5.png and b/assets/dolphin/external/L1_Furippa1_128x64/frame_5.png differ diff --git a/assets/dolphin/external/L1_Furippa1_128x64/frame_6.png b/assets/dolphin/external/L1_Furippa1_128x64/frame_6.png index c1373b058..d1e4f0af4 100644 Binary files a/assets/dolphin/external/L1_Furippa1_128x64/frame_6.png and b/assets/dolphin/external/L1_Furippa1_128x64/frame_6.png differ diff --git a/assets/dolphin/external/L1_Furippa1_128x64/frame_7.png b/assets/dolphin/external/L1_Furippa1_128x64/frame_7.png index 8be19d3c8..120855f61 100644 Binary files a/assets/dolphin/external/L1_Furippa1_128x64/frame_7.png and b/assets/dolphin/external/L1_Furippa1_128x64/frame_7.png differ diff --git a/assets/dolphin/external/L1_Furippa1_128x64/frame_8.png b/assets/dolphin/external/L1_Furippa1_128x64/frame_8.png index 24b61edb6..521a8ec43 100644 Binary files a/assets/dolphin/external/L1_Furippa1_128x64/frame_8.png and b/assets/dolphin/external/L1_Furippa1_128x64/frame_8.png differ diff --git a/assets/dolphin/external/L1_Furippa1_128x64/frame_9.png b/assets/dolphin/external/L1_Furippa1_128x64/frame_9.png index f7976f232..77d0198d0 100644 Binary files a/assets/dolphin/external/L1_Furippa1_128x64/frame_9.png and b/assets/dolphin/external/L1_Furippa1_128x64/frame_9.png differ diff --git a/assets/dolphin/external/L1_Happy_holidays_128x64/frame_0.png b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_0.png new file mode 100755 index 000000000..f1207ed14 Binary files /dev/null and b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_0.png differ diff --git a/assets/dolphin/external/L1_Happy_holidays_128x64/frame_1.png b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_1.png new file mode 100755 index 000000000..9d9012281 Binary files /dev/null and b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_1.png differ diff --git a/assets/dolphin/external/L1_Happy_holidays_128x64/frame_10.png b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_10.png new file mode 100755 index 000000000..cb8f173b0 Binary files /dev/null and b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_10.png differ diff --git a/assets/dolphin/external/L1_Happy_holidays_128x64/frame_11.png b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_11.png new file mode 100755 index 000000000..0b042e3aa Binary files /dev/null and b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_11.png differ diff --git a/assets/dolphin/external/L1_Happy_holidays_128x64/frame_12.png b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_12.png new file mode 100755 index 000000000..5d4c7e7c5 Binary files /dev/null and b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_12.png differ diff --git a/assets/dolphin/external/L1_Happy_holidays_128x64/frame_2.png b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_2.png new file mode 100755 index 000000000..35ee06ee0 Binary files /dev/null and b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_2.png differ diff --git a/assets/dolphin/external/L1_Happy_holidays_128x64/frame_3.png b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_3.png new file mode 100755 index 000000000..3a47dfc17 Binary files /dev/null and b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_3.png differ diff --git a/assets/dolphin/external/L1_Happy_holidays_128x64/frame_4.png b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_4.png new file mode 100755 index 000000000..0b3bb3250 Binary files /dev/null and b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_4.png differ diff --git a/assets/dolphin/external/L1_Happy_holidays_128x64/frame_5.png b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_5.png new file mode 100755 index 000000000..233448547 Binary files /dev/null and b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_5.png differ diff --git a/assets/dolphin/external/L1_Happy_holidays_128x64/frame_6.png b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_6.png new file mode 100755 index 000000000..b7164380d Binary files /dev/null and b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_6.png differ diff --git a/assets/dolphin/external/L1_Happy_holidays_128x64/frame_7.png b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_7.png new file mode 100755 index 000000000..da3a78f4c Binary files /dev/null and b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_7.png differ diff --git a/assets/dolphin/external/L1_Happy_holidays_128x64/frame_8.png b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_8.png new file mode 100755 index 000000000..adbe53159 Binary files /dev/null and b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_8.png differ diff --git a/assets/dolphin/external/L1_Happy_holidays_128x64/frame_9.png b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_9.png new file mode 100755 index 000000000..3d81f935a Binary files /dev/null and b/assets/dolphin/external/L1_Happy_holidays_128x64/frame_9.png differ diff --git a/assets/dolphin/external/L1_Happy_holidays_128x64/meta.txt b/assets/dolphin/external/L1_Happy_holidays_128x64/meta.txt new file mode 100755 index 000000000..a2c733397 --- /dev/null +++ b/assets/dolphin/external/L1_Happy_holidays_128x64/meta.txt @@ -0,0 +1,23 @@ +Filetype: Flipper Animation +Version: 1 + +Width: 128 +Height: 64 +Passive frames: 10 +Active frames: 18 +Frames order: 0 1 2 1 0 1 2 1 0 1 2 3 4 5 6 5 4 7 2 8 9 10 11 10 9 10 11 12 +Active cycles: 1 +Frame rate: 2 +Duration: 3600 +Active cooldown: 7 + +Bubble slots: 1 + +Slot: 0 +X: 11 +Y: 19 +Text: HAPPY\nHOLIDAYS! +AlignH: Right +AlignV: Center +StartFrame: 22 +EndFrame: 27 diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_0.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_0.png index b316a8e32..ed6f4a71f 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_0.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_0.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_1.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_1.png index eb259d993..f2dba5e87 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_1.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_1.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_10.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_10.png index 1339ea3ac..bd6291f99 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_10.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_10.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_11.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_11.png index 4acf44972..e4a6d1639 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_11.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_11.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_12.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_12.png index fb9042e69..fc62957e2 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_12.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_12.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_13.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_13.png index 1ddea3436..ef2875aef 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_13.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_13.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_14.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_14.png index 91b4660e6..e56f7c6c4 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_14.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_14.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_15.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_15.png index 5f1e17f24..1bb46d54a 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_15.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_15.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_16.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_16.png index 15d6f55a7..76ebd1f39 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_16.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_16.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_17.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_17.png index 324e6440c..7a6339638 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_17.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_17.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_18.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_18.png index 4ad5a7f91..172ee4d9c 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_18.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_18.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_19.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_19.png index 372e7f360..afd4c496f 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_19.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_19.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_2.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_2.png index d6b0fb95e..5f3fe2804 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_2.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_2.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_21.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_21.png index cb7b04b84..50ef42181 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_21.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_21.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_3.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_3.png index ddbbeae86..9cac27897 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_3.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_3.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_38.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_38.png index 2e18adf6d..6b46de609 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_38.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_38.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_39.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_39.png index 0e8d76708..a2946bff3 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_39.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_39.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_4.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_4.png index 036698217..314e716ed 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_4.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_4.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_41.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_41.png index b66b054b6..048d4dfeb 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_41.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_41.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_45.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_45.png index a15ddb4b6..232a5c63a 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_45.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_45.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_46.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_46.png index 33602ad41..3d2b6a87b 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_46.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_46.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_47.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_47.png index c5b3d4116..90a5aa5d6 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_47.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_47.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_5.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_5.png index e941f9963..934c098b3 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_5.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_5.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_6.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_6.png index 6ece9c80d..54ad31fb4 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_6.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_6.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_7.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_7.png index 63ccd3159..148851185 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_7.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_7.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_8.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_8.png index e0b14160f..542ff45cb 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_8.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_8.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_9.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_9.png index 2f42f47b9..cf612c74e 100644 Binary files a/assets/dolphin/external/L1_Kaiju_128x64/frame_9.png and b/assets/dolphin/external/L1_Kaiju_128x64/frame_9.png differ diff --git a/assets/dolphin/external/L1_Laptop_128x51/frame_0.png b/assets/dolphin/external/L1_Laptop_128x51/frame_0.png index c17941cc5..cd0f0bfb4 100644 Binary files a/assets/dolphin/external/L1_Laptop_128x51/frame_0.png and b/assets/dolphin/external/L1_Laptop_128x51/frame_0.png differ diff --git a/assets/dolphin/external/L1_Laptop_128x51/frame_1.png b/assets/dolphin/external/L1_Laptop_128x51/frame_1.png index 80be86c65..3b326e584 100644 Binary files a/assets/dolphin/external/L1_Laptop_128x51/frame_1.png and b/assets/dolphin/external/L1_Laptop_128x51/frame_1.png differ diff --git a/assets/dolphin/external/L1_Laptop_128x51/frame_2.png b/assets/dolphin/external/L1_Laptop_128x51/frame_2.png index c1be6d117..d8a2623b4 100644 Binary files a/assets/dolphin/external/L1_Laptop_128x51/frame_2.png and b/assets/dolphin/external/L1_Laptop_128x51/frame_2.png differ diff --git a/assets/dolphin/external/L1_Laptop_128x51/frame_3.png b/assets/dolphin/external/L1_Laptop_128x51/frame_3.png index e35221cc2..d4ab7525c 100644 Binary files a/assets/dolphin/external/L1_Laptop_128x51/frame_3.png and b/assets/dolphin/external/L1_Laptop_128x51/frame_3.png differ diff --git a/assets/dolphin/external/L1_Laptop_128x51/frame_4.png b/assets/dolphin/external/L1_Laptop_128x51/frame_4.png index 85a9921ea..ef5fc0e7f 100644 Binary files a/assets/dolphin/external/L1_Laptop_128x51/frame_4.png and b/assets/dolphin/external/L1_Laptop_128x51/frame_4.png differ diff --git a/assets/dolphin/external/L1_Laptop_128x51/frame_5.png b/assets/dolphin/external/L1_Laptop_128x51/frame_5.png index 7daaffb60..0f0528f50 100644 Binary files a/assets/dolphin/external/L1_Laptop_128x51/frame_5.png and b/assets/dolphin/external/L1_Laptop_128x51/frame_5.png differ diff --git a/assets/dolphin/external/L1_Laptop_128x51/frame_6.png b/assets/dolphin/external/L1_Laptop_128x51/frame_6.png index 72e1e8efa..1c06ae08f 100644 Binary files a/assets/dolphin/external/L1_Laptop_128x51/frame_6.png and b/assets/dolphin/external/L1_Laptop_128x51/frame_6.png differ diff --git a/assets/dolphin/external/L1_Laptop_128x51/frame_7.png b/assets/dolphin/external/L1_Laptop_128x51/frame_7.png index aae904928..24a9b853a 100644 Binary files a/assets/dolphin/external/L1_Laptop_128x51/frame_7.png and b/assets/dolphin/external/L1_Laptop_128x51/frame_7.png differ diff --git a/assets/dolphin/external/L1_Leaving_sad_128x64/frame_10.png b/assets/dolphin/external/L1_Leaving_sad_128x64/frame_10.png index 82a990d5a..c25a72534 100644 Binary files a/assets/dolphin/external/L1_Leaving_sad_128x64/frame_10.png and b/assets/dolphin/external/L1_Leaving_sad_128x64/frame_10.png differ diff --git a/assets/dolphin/external/L1_Leaving_sad_128x64/frame_11.png b/assets/dolphin/external/L1_Leaving_sad_128x64/frame_11.png index 36b6c7de0..420ee0ef5 100644 Binary files a/assets/dolphin/external/L1_Leaving_sad_128x64/frame_11.png and b/assets/dolphin/external/L1_Leaving_sad_128x64/frame_11.png differ diff --git a/assets/dolphin/external/L1_Leaving_sad_128x64/frame_12.png b/assets/dolphin/external/L1_Leaving_sad_128x64/frame_12.png index 65d285161..fef1b5d50 100644 Binary files a/assets/dolphin/external/L1_Leaving_sad_128x64/frame_12.png and b/assets/dolphin/external/L1_Leaving_sad_128x64/frame_12.png differ diff --git a/assets/dolphin/external/L1_Leaving_sad_128x64/frame_2.png b/assets/dolphin/external/L1_Leaving_sad_128x64/frame_2.png index fb44779bc..64103f1db 100644 Binary files a/assets/dolphin/external/L1_Leaving_sad_128x64/frame_2.png and b/assets/dolphin/external/L1_Leaving_sad_128x64/frame_2.png differ diff --git a/assets/dolphin/external/L1_Leaving_sad_128x64/frame_4.png b/assets/dolphin/external/L1_Leaving_sad_128x64/frame_4.png index 8beabc6f5..569fc7779 100644 Binary files a/assets/dolphin/external/L1_Leaving_sad_128x64/frame_4.png and b/assets/dolphin/external/L1_Leaving_sad_128x64/frame_4.png differ diff --git a/assets/dolphin/external/L1_Leaving_sad_128x64/frame_5.png b/assets/dolphin/external/L1_Leaving_sad_128x64/frame_5.png index 2bd6fec48..d8ab4235c 100644 Binary files a/assets/dolphin/external/L1_Leaving_sad_128x64/frame_5.png and b/assets/dolphin/external/L1_Leaving_sad_128x64/frame_5.png differ diff --git a/assets/dolphin/external/L1_Leaving_sad_128x64/frame_6.png b/assets/dolphin/external/L1_Leaving_sad_128x64/frame_6.png index 3e9f13a8a..c927e7928 100644 Binary files a/assets/dolphin/external/L1_Leaving_sad_128x64/frame_6.png and b/assets/dolphin/external/L1_Leaving_sad_128x64/frame_6.png differ diff --git a/assets/dolphin/external/L1_Leaving_sad_128x64/frame_7.png b/assets/dolphin/external/L1_Leaving_sad_128x64/frame_7.png index 474f90ec3..898ecd842 100644 Binary files a/assets/dolphin/external/L1_Leaving_sad_128x64/frame_7.png and b/assets/dolphin/external/L1_Leaving_sad_128x64/frame_7.png differ diff --git a/assets/dolphin/external/L1_Leaving_sad_128x64/frame_8.png b/assets/dolphin/external/L1_Leaving_sad_128x64/frame_8.png index 6e4aea8a6..da93d6f14 100644 Binary files a/assets/dolphin/external/L1_Leaving_sad_128x64/frame_8.png and b/assets/dolphin/external/L1_Leaving_sad_128x64/frame_8.png differ diff --git a/assets/dolphin/external/L1_Leaving_sad_128x64/frame_9.png b/assets/dolphin/external/L1_Leaving_sad_128x64/frame_9.png index b18041927..edf48b0f0 100644 Binary files a/assets/dolphin/external/L1_Leaving_sad_128x64/frame_9.png and b/assets/dolphin/external/L1_Leaving_sad_128x64/frame_9.png differ diff --git a/assets/dolphin/external/L1_Mad_fist_128x64/frame_0.png b/assets/dolphin/external/L1_Mad_fist_128x64/frame_0.png index f41ab5ff4..c1046f9e1 100644 Binary files a/assets/dolphin/external/L1_Mad_fist_128x64/frame_0.png and b/assets/dolphin/external/L1_Mad_fist_128x64/frame_0.png differ diff --git a/assets/dolphin/external/L1_Mad_fist_128x64/frame_1.png b/assets/dolphin/external/L1_Mad_fist_128x64/frame_1.png index 1430a46e1..24c08c043 100644 Binary files a/assets/dolphin/external/L1_Mad_fist_128x64/frame_1.png and b/assets/dolphin/external/L1_Mad_fist_128x64/frame_1.png differ diff --git a/assets/dolphin/external/L1_Mad_fist_128x64/frame_10.png b/assets/dolphin/external/L1_Mad_fist_128x64/frame_10.png index 4f738cda1..324adab8c 100644 Binary files a/assets/dolphin/external/L1_Mad_fist_128x64/frame_10.png and b/assets/dolphin/external/L1_Mad_fist_128x64/frame_10.png differ diff --git a/assets/dolphin/external/L1_Mad_fist_128x64/frame_11.png b/assets/dolphin/external/L1_Mad_fist_128x64/frame_11.png index d8fa43eef..5cbb23ec5 100644 Binary files a/assets/dolphin/external/L1_Mad_fist_128x64/frame_11.png and b/assets/dolphin/external/L1_Mad_fist_128x64/frame_11.png differ diff --git a/assets/dolphin/external/L1_Mad_fist_128x64/frame_12.png b/assets/dolphin/external/L1_Mad_fist_128x64/frame_12.png index 055d8a5e1..e9562ab71 100644 Binary files a/assets/dolphin/external/L1_Mad_fist_128x64/frame_12.png and b/assets/dolphin/external/L1_Mad_fist_128x64/frame_12.png differ diff --git a/assets/dolphin/external/L1_Mad_fist_128x64/frame_2.png b/assets/dolphin/external/L1_Mad_fist_128x64/frame_2.png index efd0ceab2..c94fbaf16 100644 Binary files a/assets/dolphin/external/L1_Mad_fist_128x64/frame_2.png and b/assets/dolphin/external/L1_Mad_fist_128x64/frame_2.png differ diff --git a/assets/dolphin/external/L1_Mad_fist_128x64/frame_3.png b/assets/dolphin/external/L1_Mad_fist_128x64/frame_3.png index bc9310456..eb23cfe0c 100644 Binary files a/assets/dolphin/external/L1_Mad_fist_128x64/frame_3.png and b/assets/dolphin/external/L1_Mad_fist_128x64/frame_3.png differ diff --git a/assets/dolphin/external/L1_Mad_fist_128x64/frame_6.png b/assets/dolphin/external/L1_Mad_fist_128x64/frame_6.png index f79343f14..6c2fa6ecb 100644 Binary files a/assets/dolphin/external/L1_Mad_fist_128x64/frame_6.png and b/assets/dolphin/external/L1_Mad_fist_128x64/frame_6.png differ diff --git a/assets/dolphin/external/L1_Mad_fist_128x64/frame_7.png b/assets/dolphin/external/L1_Mad_fist_128x64/frame_7.png index a8427f1b9..fb13a48b0 100644 Binary files a/assets/dolphin/external/L1_Mad_fist_128x64/frame_7.png and b/assets/dolphin/external/L1_Mad_fist_128x64/frame_7.png differ diff --git a/assets/dolphin/external/L1_Mad_fist_128x64/frame_8.png b/assets/dolphin/external/L1_Mad_fist_128x64/frame_8.png index a276c604e..9cf7366e4 100644 Binary files a/assets/dolphin/external/L1_Mad_fist_128x64/frame_8.png and b/assets/dolphin/external/L1_Mad_fist_128x64/frame_8.png differ diff --git a/assets/dolphin/external/L1_Mad_fist_128x64/frame_9.png b/assets/dolphin/external/L1_Mad_fist_128x64/frame_9.png index 6affd4269..27e3dc369 100644 Binary files a/assets/dolphin/external/L1_Mad_fist_128x64/frame_9.png and b/assets/dolphin/external/L1_Mad_fist_128x64/frame_9.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_0.png b/assets/dolphin/external/L1_Mods_128x64/frame_0.png index dae494166..e185204ee 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_0.png and b/assets/dolphin/external/L1_Mods_128x64/frame_0.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_1.png b/assets/dolphin/external/L1_Mods_128x64/frame_1.png index dee80b476..69bff228b 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_1.png and b/assets/dolphin/external/L1_Mods_128x64/frame_1.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_10.png b/assets/dolphin/external/L1_Mods_128x64/frame_10.png index d8bc4b6a1..d09cc03a0 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_10.png and b/assets/dolphin/external/L1_Mods_128x64/frame_10.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_11.png b/assets/dolphin/external/L1_Mods_128x64/frame_11.png index 27f969831..78ca6798f 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_11.png and b/assets/dolphin/external/L1_Mods_128x64/frame_11.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_12.png b/assets/dolphin/external/L1_Mods_128x64/frame_12.png index f3dcb8b40..bfe678880 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_12.png and b/assets/dolphin/external/L1_Mods_128x64/frame_12.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_13.png b/assets/dolphin/external/L1_Mods_128x64/frame_13.png index 79c049584..ad29e872d 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_13.png and b/assets/dolphin/external/L1_Mods_128x64/frame_13.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_14.png b/assets/dolphin/external/L1_Mods_128x64/frame_14.png index 0db4ceded..94ef0e680 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_14.png and b/assets/dolphin/external/L1_Mods_128x64/frame_14.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_15.png b/assets/dolphin/external/L1_Mods_128x64/frame_15.png index 647afd6a3..5f3e54d95 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_15.png and b/assets/dolphin/external/L1_Mods_128x64/frame_15.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_16.png b/assets/dolphin/external/L1_Mods_128x64/frame_16.png index 978f9716b..7bd404a93 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_16.png and b/assets/dolphin/external/L1_Mods_128x64/frame_16.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_17.png b/assets/dolphin/external/L1_Mods_128x64/frame_17.png index 8f8e0ce52..f10d328f9 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_17.png and b/assets/dolphin/external/L1_Mods_128x64/frame_17.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_18.png b/assets/dolphin/external/L1_Mods_128x64/frame_18.png index bb934d7da..05cdb7be8 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_18.png and b/assets/dolphin/external/L1_Mods_128x64/frame_18.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_19.png b/assets/dolphin/external/L1_Mods_128x64/frame_19.png index ff8a13ae4..c7e290ff9 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_19.png and b/assets/dolphin/external/L1_Mods_128x64/frame_19.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_2.png b/assets/dolphin/external/L1_Mods_128x64/frame_2.png index c0a3ced72..bba9f165e 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_2.png and b/assets/dolphin/external/L1_Mods_128x64/frame_2.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_20.png b/assets/dolphin/external/L1_Mods_128x64/frame_20.png index 2096e47e1..76f900792 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_20.png and b/assets/dolphin/external/L1_Mods_128x64/frame_20.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_21.png b/assets/dolphin/external/L1_Mods_128x64/frame_21.png index a6c655ff4..a0c56bb31 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_21.png and b/assets/dolphin/external/L1_Mods_128x64/frame_21.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_22.png b/assets/dolphin/external/L1_Mods_128x64/frame_22.png index 69995b037..bd8464e4e 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_22.png and b/assets/dolphin/external/L1_Mods_128x64/frame_22.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_23.png b/assets/dolphin/external/L1_Mods_128x64/frame_23.png index 2440f0b98..4074e0983 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_23.png and b/assets/dolphin/external/L1_Mods_128x64/frame_23.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_24.png b/assets/dolphin/external/L1_Mods_128x64/frame_24.png index c0a282460..2aa0c42e0 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_24.png and b/assets/dolphin/external/L1_Mods_128x64/frame_24.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_25.png b/assets/dolphin/external/L1_Mods_128x64/frame_25.png index f15cb8032..776f1a73d 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_25.png and b/assets/dolphin/external/L1_Mods_128x64/frame_25.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_26.png b/assets/dolphin/external/L1_Mods_128x64/frame_26.png index b773ccc9d..4df95f375 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_26.png and b/assets/dolphin/external/L1_Mods_128x64/frame_26.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_27.png b/assets/dolphin/external/L1_Mods_128x64/frame_27.png index 743355326..3ee650af3 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_27.png and b/assets/dolphin/external/L1_Mods_128x64/frame_27.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_28.png b/assets/dolphin/external/L1_Mods_128x64/frame_28.png index 8840bbcea..406d965ea 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_28.png and b/assets/dolphin/external/L1_Mods_128x64/frame_28.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_29.png b/assets/dolphin/external/L1_Mods_128x64/frame_29.png index 762c6e0d4..1a46e8b01 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_29.png and b/assets/dolphin/external/L1_Mods_128x64/frame_29.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_3.png b/assets/dolphin/external/L1_Mods_128x64/frame_3.png index 9bfa51cce..ea3f7c006 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_3.png and b/assets/dolphin/external/L1_Mods_128x64/frame_3.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_30.png b/assets/dolphin/external/L1_Mods_128x64/frame_30.png index 159c29d12..f3ca77191 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_30.png and b/assets/dolphin/external/L1_Mods_128x64/frame_30.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_31.png b/assets/dolphin/external/L1_Mods_128x64/frame_31.png index 2071a71b3..13917efdd 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_31.png and b/assets/dolphin/external/L1_Mods_128x64/frame_31.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_32.png b/assets/dolphin/external/L1_Mods_128x64/frame_32.png index fb4d154a8..f4d0972d8 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_32.png and b/assets/dolphin/external/L1_Mods_128x64/frame_32.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_33.png b/assets/dolphin/external/L1_Mods_128x64/frame_33.png index 6fa9ba366..27e17fba6 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_33.png and b/assets/dolphin/external/L1_Mods_128x64/frame_33.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_34.png b/assets/dolphin/external/L1_Mods_128x64/frame_34.png index 3a1095e67..d8fb6fa4a 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_34.png and b/assets/dolphin/external/L1_Mods_128x64/frame_34.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_35.png b/assets/dolphin/external/L1_Mods_128x64/frame_35.png index 08c620cbe..0ac3ecf94 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_35.png and b/assets/dolphin/external/L1_Mods_128x64/frame_35.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_36.png b/assets/dolphin/external/L1_Mods_128x64/frame_36.png index 526af8e6f..b856989ed 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_36.png and b/assets/dolphin/external/L1_Mods_128x64/frame_36.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_37.png b/assets/dolphin/external/L1_Mods_128x64/frame_37.png index 364a01470..753deefee 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_37.png and b/assets/dolphin/external/L1_Mods_128x64/frame_37.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_38.png b/assets/dolphin/external/L1_Mods_128x64/frame_38.png index d076f9036..61e2dbac5 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_38.png and b/assets/dolphin/external/L1_Mods_128x64/frame_38.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_39.png b/assets/dolphin/external/L1_Mods_128x64/frame_39.png index fb4d513e5..4952ff527 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_39.png and b/assets/dolphin/external/L1_Mods_128x64/frame_39.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_4.png b/assets/dolphin/external/L1_Mods_128x64/frame_4.png index 9f109397b..2260541b4 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_4.png and b/assets/dolphin/external/L1_Mods_128x64/frame_4.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_40.png b/assets/dolphin/external/L1_Mods_128x64/frame_40.png index 9110b8e79..6bce5ee40 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_40.png and b/assets/dolphin/external/L1_Mods_128x64/frame_40.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_41.png b/assets/dolphin/external/L1_Mods_128x64/frame_41.png index 78f18d10d..010ba0efa 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_41.png and b/assets/dolphin/external/L1_Mods_128x64/frame_41.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_42.png b/assets/dolphin/external/L1_Mods_128x64/frame_42.png index 8cf002760..1197601e3 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_42.png and b/assets/dolphin/external/L1_Mods_128x64/frame_42.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_43.png b/assets/dolphin/external/L1_Mods_128x64/frame_43.png index e85358c51..c7ac5c446 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_43.png and b/assets/dolphin/external/L1_Mods_128x64/frame_43.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_44.png b/assets/dolphin/external/L1_Mods_128x64/frame_44.png index 51e4f2c12..a10c37020 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_44.png and b/assets/dolphin/external/L1_Mods_128x64/frame_44.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_45.png b/assets/dolphin/external/L1_Mods_128x64/frame_45.png index 732869454..47cce6619 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_45.png and b/assets/dolphin/external/L1_Mods_128x64/frame_45.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_46.png b/assets/dolphin/external/L1_Mods_128x64/frame_46.png index a4a4953f6..f9e3ec5f4 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_46.png and b/assets/dolphin/external/L1_Mods_128x64/frame_46.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_47.png b/assets/dolphin/external/L1_Mods_128x64/frame_47.png index cb28e28f1..2e87539b4 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_47.png and b/assets/dolphin/external/L1_Mods_128x64/frame_47.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_48.png b/assets/dolphin/external/L1_Mods_128x64/frame_48.png index 900a3d7c5..ad22352cb 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_48.png and b/assets/dolphin/external/L1_Mods_128x64/frame_48.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_5.png b/assets/dolphin/external/L1_Mods_128x64/frame_5.png index 3ac80fca4..0162f0da0 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_5.png and b/assets/dolphin/external/L1_Mods_128x64/frame_5.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_6.png b/assets/dolphin/external/L1_Mods_128x64/frame_6.png index 063a87b2e..5a3b35046 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_6.png and b/assets/dolphin/external/L1_Mods_128x64/frame_6.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_7.png b/assets/dolphin/external/L1_Mods_128x64/frame_7.png index f65df4778..344f02fd1 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_7.png and b/assets/dolphin/external/L1_Mods_128x64/frame_7.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_8.png b/assets/dolphin/external/L1_Mods_128x64/frame_8.png index b6898b1bc..0d029c93e 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_8.png and b/assets/dolphin/external/L1_Mods_128x64/frame_8.png differ diff --git a/assets/dolphin/external/L1_Mods_128x64/frame_9.png b/assets/dolphin/external/L1_Mods_128x64/frame_9.png index 854a2edec..713c4449e 100644 Binary files a/assets/dolphin/external/L1_Mods_128x64/frame_9.png and b/assets/dolphin/external/L1_Mods_128x64/frame_9.png differ diff --git a/assets/dolphin/external/L1_My_dude_128x64/frame_10.png b/assets/dolphin/external/L1_My_dude_128x64/frame_10.png index 7a6f765de..0bc0462a7 100644 Binary files a/assets/dolphin/external/L1_My_dude_128x64/frame_10.png and b/assets/dolphin/external/L1_My_dude_128x64/frame_10.png differ diff --git a/assets/dolphin/external/L1_My_dude_128x64/frame_11.png b/assets/dolphin/external/L1_My_dude_128x64/frame_11.png index 2486f1a8b..0b2a3e97b 100644 Binary files a/assets/dolphin/external/L1_My_dude_128x64/frame_11.png and b/assets/dolphin/external/L1_My_dude_128x64/frame_11.png differ diff --git a/assets/dolphin/external/L1_My_dude_128x64/frame_2.png b/assets/dolphin/external/L1_My_dude_128x64/frame_2.png index 7bee6a8ed..007419dec 100644 Binary files a/assets/dolphin/external/L1_My_dude_128x64/frame_2.png and b/assets/dolphin/external/L1_My_dude_128x64/frame_2.png differ diff --git a/assets/dolphin/external/L1_My_dude_128x64/frame_20.png b/assets/dolphin/external/L1_My_dude_128x64/frame_20.png index e57cd0f98..cd9d06d2c 100644 Binary files a/assets/dolphin/external/L1_My_dude_128x64/frame_20.png and b/assets/dolphin/external/L1_My_dude_128x64/frame_20.png differ diff --git a/assets/dolphin/external/L1_My_dude_128x64/frame_21.png b/assets/dolphin/external/L1_My_dude_128x64/frame_21.png index 36ac0f843..20a22b06e 100644 Binary files a/assets/dolphin/external/L1_My_dude_128x64/frame_21.png and b/assets/dolphin/external/L1_My_dude_128x64/frame_21.png differ diff --git a/assets/dolphin/external/L1_My_dude_128x64/frame_22.png b/assets/dolphin/external/L1_My_dude_128x64/frame_22.png index 007cae6b7..0f3dbd46a 100644 Binary files a/assets/dolphin/external/L1_My_dude_128x64/frame_22.png and b/assets/dolphin/external/L1_My_dude_128x64/frame_22.png differ diff --git a/assets/dolphin/external/L1_My_dude_128x64/frame_23.png b/assets/dolphin/external/L1_My_dude_128x64/frame_23.png index a446291b2..f47a3d597 100644 Binary files a/assets/dolphin/external/L1_My_dude_128x64/frame_23.png and b/assets/dolphin/external/L1_My_dude_128x64/frame_23.png differ diff --git a/assets/dolphin/external/L1_My_dude_128x64/frame_24.png b/assets/dolphin/external/L1_My_dude_128x64/frame_24.png index 2191b5e70..6ca6b4017 100644 Binary files a/assets/dolphin/external/L1_My_dude_128x64/frame_24.png and b/assets/dolphin/external/L1_My_dude_128x64/frame_24.png differ diff --git a/assets/dolphin/external/L1_My_dude_128x64/frame_25.png b/assets/dolphin/external/L1_My_dude_128x64/frame_25.png index e30f6f4d0..1c768c19a 100644 Binary files a/assets/dolphin/external/L1_My_dude_128x64/frame_25.png and b/assets/dolphin/external/L1_My_dude_128x64/frame_25.png differ diff --git a/assets/dolphin/external/L1_My_dude_128x64/frame_27.png b/assets/dolphin/external/L1_My_dude_128x64/frame_27.png index 1abb14dbd..17a20f544 100644 Binary files a/assets/dolphin/external/L1_My_dude_128x64/frame_27.png and b/assets/dolphin/external/L1_My_dude_128x64/frame_27.png differ diff --git a/assets/dolphin/external/L1_My_dude_128x64/frame_35.png b/assets/dolphin/external/L1_My_dude_128x64/frame_35.png index 77085b8a6..e4ce5da4d 100644 Binary files a/assets/dolphin/external/L1_My_dude_128x64/frame_35.png and b/assets/dolphin/external/L1_My_dude_128x64/frame_35.png differ diff --git a/assets/dolphin/external/L1_My_dude_128x64/frame_38.png b/assets/dolphin/external/L1_My_dude_128x64/frame_38.png index 5ccdcce39..b9271ca8d 100644 Binary files a/assets/dolphin/external/L1_My_dude_128x64/frame_38.png and b/assets/dolphin/external/L1_My_dude_128x64/frame_38.png differ diff --git a/assets/dolphin/external/L1_My_dude_128x64/frame_41.png b/assets/dolphin/external/L1_My_dude_128x64/frame_41.png index bb200d9a3..18fa9c0a1 100644 Binary files a/assets/dolphin/external/L1_My_dude_128x64/frame_41.png and b/assets/dolphin/external/L1_My_dude_128x64/frame_41.png differ diff --git a/assets/dolphin/external/L1_My_dude_128x64/frame_42.png b/assets/dolphin/external/L1_My_dude_128x64/frame_42.png index 46f9d7dda..86a79df74 100644 Binary files a/assets/dolphin/external/L1_My_dude_128x64/frame_42.png and b/assets/dolphin/external/L1_My_dude_128x64/frame_42.png differ diff --git a/assets/dolphin/external/L1_My_dude_128x64/frame_43.png b/assets/dolphin/external/L1_My_dude_128x64/frame_43.png index 1dcdd52f4..d71c76f05 100644 Binary files a/assets/dolphin/external/L1_My_dude_128x64/frame_43.png and b/assets/dolphin/external/L1_My_dude_128x64/frame_43.png differ diff --git a/assets/dolphin/external/L1_My_dude_128x64/frame_44.png b/assets/dolphin/external/L1_My_dude_128x64/frame_44.png index 2d3431825..9e9ed92f5 100644 Binary files a/assets/dolphin/external/L1_My_dude_128x64/frame_44.png and b/assets/dolphin/external/L1_My_dude_128x64/frame_44.png differ diff --git a/assets/dolphin/external/L1_My_dude_128x64/frame_45.png b/assets/dolphin/external/L1_My_dude_128x64/frame_45.png index 3c27a8d1f..70da80e9b 100644 Binary files a/assets/dolphin/external/L1_My_dude_128x64/frame_45.png and b/assets/dolphin/external/L1_My_dude_128x64/frame_45.png differ diff --git a/assets/dolphin/external/L1_My_dude_128x64/frame_46.png b/assets/dolphin/external/L1_My_dude_128x64/frame_46.png index 532907537..ef0cd69bd 100644 Binary files a/assets/dolphin/external/L1_My_dude_128x64/frame_46.png and b/assets/dolphin/external/L1_My_dude_128x64/frame_46.png differ diff --git a/assets/dolphin/external/L1_My_dude_128x64/frame_5.png b/assets/dolphin/external/L1_My_dude_128x64/frame_5.png index a27a74b00..94ee5d154 100644 Binary files a/assets/dolphin/external/L1_My_dude_128x64/frame_5.png and b/assets/dolphin/external/L1_My_dude_128x64/frame_5.png differ diff --git a/assets/dolphin/external/L1_Procrastinating_128x64/frame_10.png b/assets/dolphin/external/L1_Procrastinating_128x64/frame_10.png index de3987931..33c4c4214 100755 Binary files a/assets/dolphin/external/L1_Procrastinating_128x64/frame_10.png and b/assets/dolphin/external/L1_Procrastinating_128x64/frame_10.png differ diff --git a/assets/dolphin/external/L1_Procrastinating_128x64/frame_11.png b/assets/dolphin/external/L1_Procrastinating_128x64/frame_11.png index 546f760a0..c1630d2ed 100755 Binary files a/assets/dolphin/external/L1_Procrastinating_128x64/frame_11.png and b/assets/dolphin/external/L1_Procrastinating_128x64/frame_11.png differ diff --git a/assets/dolphin/external/L1_Procrastinating_128x64/frame_13.png b/assets/dolphin/external/L1_Procrastinating_128x64/frame_13.png index 63f4e14f6..cf7ccad03 100755 Binary files a/assets/dolphin/external/L1_Procrastinating_128x64/frame_13.png and b/assets/dolphin/external/L1_Procrastinating_128x64/frame_13.png differ diff --git a/assets/dolphin/external/L1_Procrastinating_128x64/frame_14.png b/assets/dolphin/external/L1_Procrastinating_128x64/frame_14.png index 6d898a3f9..e023c4757 100755 Binary files a/assets/dolphin/external/L1_Procrastinating_128x64/frame_14.png and b/assets/dolphin/external/L1_Procrastinating_128x64/frame_14.png differ diff --git a/assets/dolphin/external/L1_Procrastinating_128x64/frame_15.png b/assets/dolphin/external/L1_Procrastinating_128x64/frame_15.png index 41d4a2d37..6298e3855 100755 Binary files a/assets/dolphin/external/L1_Procrastinating_128x64/frame_15.png and b/assets/dolphin/external/L1_Procrastinating_128x64/frame_15.png differ diff --git a/assets/dolphin/external/L1_Procrastinating_128x64/frame_16.png b/assets/dolphin/external/L1_Procrastinating_128x64/frame_16.png index 5a108301a..9e6b02100 100755 Binary files a/assets/dolphin/external/L1_Procrastinating_128x64/frame_16.png and b/assets/dolphin/external/L1_Procrastinating_128x64/frame_16.png differ diff --git a/assets/dolphin/external/L1_Procrastinating_128x64/frame_22.png b/assets/dolphin/external/L1_Procrastinating_128x64/frame_22.png index 7e8717626..fccf72df6 100755 Binary files a/assets/dolphin/external/L1_Procrastinating_128x64/frame_22.png and b/assets/dolphin/external/L1_Procrastinating_128x64/frame_22.png differ diff --git a/assets/dolphin/external/L1_Procrastinating_128x64/frame_24.png b/assets/dolphin/external/L1_Procrastinating_128x64/frame_24.png index 7a5eac3a9..92586ee2a 100755 Binary files a/assets/dolphin/external/L1_Procrastinating_128x64/frame_24.png and b/assets/dolphin/external/L1_Procrastinating_128x64/frame_24.png differ diff --git a/assets/dolphin/external/L1_Procrastinating_128x64/frame_25.png b/assets/dolphin/external/L1_Procrastinating_128x64/frame_25.png index 662a146e3..6b4898d6e 100755 Binary files a/assets/dolphin/external/L1_Procrastinating_128x64/frame_25.png and b/assets/dolphin/external/L1_Procrastinating_128x64/frame_25.png differ diff --git a/assets/dolphin/external/L1_Procrastinating_128x64/frame_26.png b/assets/dolphin/external/L1_Procrastinating_128x64/frame_26.png index 69e07f2fd..4c5fbaed1 100755 Binary files a/assets/dolphin/external/L1_Procrastinating_128x64/frame_26.png and b/assets/dolphin/external/L1_Procrastinating_128x64/frame_26.png differ diff --git a/assets/dolphin/external/L1_Procrastinating_128x64/frame_27.png b/assets/dolphin/external/L1_Procrastinating_128x64/frame_27.png index c5f12a548..0db3adebf 100755 Binary files a/assets/dolphin/external/L1_Procrastinating_128x64/frame_27.png and b/assets/dolphin/external/L1_Procrastinating_128x64/frame_27.png differ diff --git a/assets/dolphin/external/L1_Procrastinating_128x64/frame_28.png b/assets/dolphin/external/L1_Procrastinating_128x64/frame_28.png index 32b42654d..635f647f4 100755 Binary files a/assets/dolphin/external/L1_Procrastinating_128x64/frame_28.png and b/assets/dolphin/external/L1_Procrastinating_128x64/frame_28.png differ diff --git a/assets/dolphin/external/L1_Procrastinating_128x64/frame_40.png b/assets/dolphin/external/L1_Procrastinating_128x64/frame_40.png index c79b1a0e5..94f7fa87c 100755 Binary files a/assets/dolphin/external/L1_Procrastinating_128x64/frame_40.png and b/assets/dolphin/external/L1_Procrastinating_128x64/frame_40.png differ diff --git a/assets/dolphin/external/L1_Procrastinating_128x64/frame_8.png b/assets/dolphin/external/L1_Procrastinating_128x64/frame_8.png index efac02a68..4af490355 100755 Binary files a/assets/dolphin/external/L1_Procrastinating_128x64/frame_8.png and b/assets/dolphin/external/L1_Procrastinating_128x64/frame_8.png differ diff --git a/assets/dolphin/external/L1_Procrastinating_128x64/frame_9.png b/assets/dolphin/external/L1_Procrastinating_128x64/frame_9.png index 5b9b9a5de..071f7421a 100755 Binary files a/assets/dolphin/external/L1_Procrastinating_128x64/frame_9.png and b/assets/dolphin/external/L1_Procrastinating_128x64/frame_9.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_1.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_1.png index 488fe0b7f..f487ffdb7 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_1.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_1.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_10.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_10.png index 16f533859..15a5d5379 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_10.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_10.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_11.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_11.png index 756edb318..e66b473f7 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_11.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_11.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_12.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_12.png index 0fd1b1923..3f11cc90e 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_12.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_12.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_13.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_13.png index f5c1aafed..41abfcc61 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_13.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_13.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_14.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_14.png index 4604cdd8b..93b0dfd43 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_14.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_14.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_15.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_15.png index 55cc941a4..64780d71b 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_15.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_15.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_16.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_16.png index 98ad085ba..6372d943a 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_16.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_16.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_17.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_17.png index 960144d83..a61ef2ab8 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_17.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_17.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_18.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_18.png index f749b7016..52c250fe5 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_18.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_18.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_20.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_20.png index acc8a1953..4cfcf5282 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_20.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_20.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_21.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_21.png index 1a92c7497..0b04296e3 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_21.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_21.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_22.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_22.png index 0b901927f..5b8635a51 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_22.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_22.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_23.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_23.png index 9d08f7fcc..9d7af682b 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_23.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_23.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_24.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_24.png index fb33a6096..324311a33 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_24.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_24.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_25.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_25.png index c037fa722..eaea2d87e 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_25.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_25.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_26.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_26.png index 2cd08ec11..75eae29c7 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_26.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_26.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_27.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_27.png index 99cff1546..2c0de95be 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_27.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_27.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_28.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_28.png index 21392b7bf..f6a0c6e69 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_28.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_28.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_29.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_29.png index a3f0884d7..de18082e5 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_29.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_29.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_3.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_3.png index 0c6b92d80..05bb61c0b 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_3.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_3.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_30.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_30.png index a713249b5..95def778c 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_30.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_30.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_31.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_31.png index b665a5f73..5c12231bd 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_31.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_31.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_32.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_32.png index b59586e1d..0524f50fa 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_32.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_32.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_33.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_33.png index 49ba8f87c..52af71e8b 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_33.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_33.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_34.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_34.png index 732f631b7..4cebede66 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_34.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_34.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_35.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_35.png index 73fce28e1..8558d74f7 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_35.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_35.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_36.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_36.png index 79012bb33..3f13b3c16 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_36.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_36.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_37.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_37.png index 010a65723..f4fc155be 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_37.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_37.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_39.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_39.png index df3acd8c9..2326527f3 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_39.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_39.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_40.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_40.png index 2d4e76805..a0aca8d5d 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_40.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_40.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_41.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_41.png index 74eb8a616..1d8c4257d 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_41.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_41.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_42.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_42.png index fc7749ba9..42d9a0d02 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_42.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_42.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_43.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_43.png index 28f4f08fa..8d1a63ce4 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_43.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_43.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_44.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_44.png index 2a74b2672..9d5904cfd 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_44.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_44.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_45.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_45.png index aa8fa6d9a..b858fd89a 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_45.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_45.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_46.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_46.png index e2125cace..63af06f99 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_46.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_46.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_47.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_47.png index b8262652e..98f147ce9 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_47.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_47.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_48.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_48.png index 14e24f0ce..0ba0ccf90 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_48.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_48.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_49.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_49.png index 20239a207..3b89c00a5 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_49.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_49.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_50.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_50.png index fc626f579..94d6d3087 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_50.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_50.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_51.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_51.png index cf189de57..626692b0b 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_51.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_51.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_52.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_52.png index e64fded4c..261c424e2 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_52.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_52.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_53.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_53.png index 01475f218..fd893efb9 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_53.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_53.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_54.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_54.png index 07e8a61f0..08f645570 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_54.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_54.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_55.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_55.png index 67ad03e66..8c6d81c0f 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_55.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_55.png differ diff --git a/assets/dolphin/external/L1_Sad_song_128x64/frame_56.png b/assets/dolphin/external/L1_Sad_song_128x64/frame_56.png index ab2ca4b9a..301d61d37 100644 Binary files a/assets/dolphin/external/L1_Sad_song_128x64/frame_56.png and b/assets/dolphin/external/L1_Sad_song_128x64/frame_56.png differ diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_19.png b/assets/dolphin/external/L1_Senpai_128x64/frame_19.png index 4166b75c0..9e084150a 100644 Binary files a/assets/dolphin/external/L1_Senpai_128x64/frame_19.png and b/assets/dolphin/external/L1_Senpai_128x64/frame_19.png differ diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_20.png b/assets/dolphin/external/L1_Senpai_128x64/frame_20.png index 9974b362d..2caed65c6 100644 Binary files a/assets/dolphin/external/L1_Senpai_128x64/frame_20.png and b/assets/dolphin/external/L1_Senpai_128x64/frame_20.png differ diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_21.png b/assets/dolphin/external/L1_Senpai_128x64/frame_21.png index f5d661ea4..4a7cfb5f8 100644 Binary files a/assets/dolphin/external/L1_Senpai_128x64/frame_21.png and b/assets/dolphin/external/L1_Senpai_128x64/frame_21.png differ diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_22.png b/assets/dolphin/external/L1_Senpai_128x64/frame_22.png index 8517b6089..21a721994 100644 Binary files a/assets/dolphin/external/L1_Senpai_128x64/frame_22.png and b/assets/dolphin/external/L1_Senpai_128x64/frame_22.png differ diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_26.png b/assets/dolphin/external/L1_Senpai_128x64/frame_26.png index d916f3f05..e753eadf9 100644 Binary files a/assets/dolphin/external/L1_Senpai_128x64/frame_26.png and b/assets/dolphin/external/L1_Senpai_128x64/frame_26.png differ diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_27.png b/assets/dolphin/external/L1_Senpai_128x64/frame_27.png index 6622bcdeb..e815ead02 100644 Binary files a/assets/dolphin/external/L1_Senpai_128x64/frame_27.png and b/assets/dolphin/external/L1_Senpai_128x64/frame_27.png differ diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_29.png b/assets/dolphin/external/L1_Senpai_128x64/frame_29.png index 641cd9980..8edea2b08 100644 Binary files a/assets/dolphin/external/L1_Senpai_128x64/frame_29.png and b/assets/dolphin/external/L1_Senpai_128x64/frame_29.png differ diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_30.png b/assets/dolphin/external/L1_Senpai_128x64/frame_30.png index b43b475a0..00edcb7f2 100644 Binary files a/assets/dolphin/external/L1_Senpai_128x64/frame_30.png and b/assets/dolphin/external/L1_Senpai_128x64/frame_30.png differ diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_31.png b/assets/dolphin/external/L1_Senpai_128x64/frame_31.png index 28b2f921b..3d2d5d6f7 100644 Binary files a/assets/dolphin/external/L1_Senpai_128x64/frame_31.png and b/assets/dolphin/external/L1_Senpai_128x64/frame_31.png differ diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_35.png b/assets/dolphin/external/L1_Senpai_128x64/frame_35.png index 693896bac..d6b2f16d8 100644 Binary files a/assets/dolphin/external/L1_Senpai_128x64/frame_35.png and b/assets/dolphin/external/L1_Senpai_128x64/frame_35.png differ diff --git a/assets/dolphin/external/L1_Sleep_128x64/frame_3.png b/assets/dolphin/external/L1_Sleep_128x64/frame_3.png index 83792b943..ba0ce672f 100644 Binary files a/assets/dolphin/external/L1_Sleep_128x64/frame_3.png and b/assets/dolphin/external/L1_Sleep_128x64/frame_3.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_0.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_0.png new file mode 100755 index 000000000..0e86e6641 Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_0.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_1.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_1.png new file mode 100755 index 000000000..219407e4b Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_1.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_10.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_10.png new file mode 100755 index 000000000..5459ae27c Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_10.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_11.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_11.png new file mode 100755 index 000000000..9f9d80de6 Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_11.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_12.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_12.png new file mode 100755 index 000000000..7b35e1d3c Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_12.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_13.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_13.png new file mode 100755 index 000000000..9e560baa8 Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_13.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_14.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_14.png new file mode 100755 index 000000000..a5d6c1a7a Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_14.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_15.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_15.png new file mode 100755 index 000000000..57b2c9bbe Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_15.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_16.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_16.png new file mode 100755 index 000000000..4be832c64 Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_16.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_17.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_17.png new file mode 100755 index 000000000..1910cf939 Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_17.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_18.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_18.png new file mode 100755 index 000000000..0236692c6 Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_18.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_19.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_19.png new file mode 100755 index 000000000..7450c87b4 Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_19.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_2.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_2.png new file mode 100755 index 000000000..0355c510c Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_2.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_20.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_20.png new file mode 100755 index 000000000..c371e217f Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_20.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_21.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_21.png new file mode 100755 index 000000000..822d2230e Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_21.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_22.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_22.png new file mode 100755 index 000000000..6d359ef86 Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_22.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_23.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_23.png new file mode 100755 index 000000000..639834612 Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_23.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_24.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_24.png new file mode 100755 index 000000000..fbafab70f Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_24.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_25.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_25.png new file mode 100755 index 000000000..190985282 Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_25.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_26.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_26.png new file mode 100755 index 000000000..894e62d29 Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_26.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_27.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_27.png new file mode 100755 index 000000000..962349bfd Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_27.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_28.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_28.png new file mode 100755 index 000000000..2eb4456cc Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_28.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_29.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_29.png new file mode 100755 index 000000000..ee325d3ee Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_29.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_3.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_3.png new file mode 100755 index 000000000..e5772a672 Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_3.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_30.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_30.png new file mode 100755 index 000000000..11fc5d0b4 Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_30.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_31.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_31.png new file mode 100755 index 000000000..ec47b899c Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_31.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_32.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_32.png new file mode 100755 index 000000000..3f345b563 Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_32.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_33.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_33.png new file mode 100755 index 000000000..c044765eb Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_33.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_34.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_34.png new file mode 100755 index 000000000..44c4d0d49 Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_34.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_35.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_35.png new file mode 100755 index 000000000..f70ecb3ab Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_35.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_36.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_36.png new file mode 100755 index 000000000..9af3a8338 Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_36.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_4.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_4.png new file mode 100755 index 000000000..7d970234f Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_4.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_5.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_5.png new file mode 100755 index 000000000..70eab1f3e Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_5.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_6.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_6.png new file mode 100755 index 000000000..8169e0766 Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_6.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_7.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_7.png new file mode 100755 index 000000000..adee1a63d Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_7.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_8.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_8.png new file mode 100755 index 000000000..db6e667fb Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_8.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_9.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_9.png new file mode 100755 index 000000000..a6a37fe29 Binary files /dev/null and b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_9.png differ diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/meta.txt b/assets/dolphin/external/L1_Sleigh_ride_128x64/meta.txt new file mode 100755 index 000000000..3e31e1d69 --- /dev/null +++ b/assets/dolphin/external/L1_Sleigh_ride_128x64/meta.txt @@ -0,0 +1,23 @@ +Filetype: Flipper Animation +Version: 1 + +Width: 128 +Height: 64 +Passive frames: 18 +Active frames: 19 +Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 +Active cycles: 1 +Frame rate: 2 +Duration: 3600 +Active cooldown: 7 + +Bubble slots: 1 + +Slot: 0 +X: 21 +Y: 25 +Text: AAAAaAAAAHHh!! +AlignH: Right +AlignV: Bottom +StartFrame: 30 +EndFrame: 32 diff --git a/assets/dolphin/external/L1_Tv_128x47/frame_0.png b/assets/dolphin/external/L1_Tv_128x47/frame_0.png index b37bc412b..f225aa993 100644 Binary files a/assets/dolphin/external/L1_Tv_128x47/frame_0.png and b/assets/dolphin/external/L1_Tv_128x47/frame_0.png differ diff --git a/assets/dolphin/external/L1_Tv_128x47/frame_1.png b/assets/dolphin/external/L1_Tv_128x47/frame_1.png index 848700a7a..81f12ca09 100644 Binary files a/assets/dolphin/external/L1_Tv_128x47/frame_1.png and b/assets/dolphin/external/L1_Tv_128x47/frame_1.png differ diff --git a/assets/dolphin/external/L1_Tv_128x47/frame_2.png b/assets/dolphin/external/L1_Tv_128x47/frame_2.png index 5c74653ec..ce0d85411 100644 Binary files a/assets/dolphin/external/L1_Tv_128x47/frame_2.png and b/assets/dolphin/external/L1_Tv_128x47/frame_2.png differ diff --git a/assets/dolphin/external/L1_Tv_128x47/frame_3.png b/assets/dolphin/external/L1_Tv_128x47/frame_3.png index 5f030e4bb..40bf13a4d 100644 Binary files a/assets/dolphin/external/L1_Tv_128x47/frame_3.png and b/assets/dolphin/external/L1_Tv_128x47/frame_3.png differ diff --git a/assets/dolphin/external/L1_Tv_128x47/frame_4.png b/assets/dolphin/external/L1_Tv_128x47/frame_4.png index 0b5457d93..13d3074c9 100644 Binary files a/assets/dolphin/external/L1_Tv_128x47/frame_4.png and b/assets/dolphin/external/L1_Tv_128x47/frame_4.png differ diff --git a/assets/dolphin/external/L1_Tv_128x47/frame_5.png b/assets/dolphin/external/L1_Tv_128x47/frame_5.png index 88c044d34..b11e81b8d 100644 Binary files a/assets/dolphin/external/L1_Tv_128x47/frame_5.png and b/assets/dolphin/external/L1_Tv_128x47/frame_5.png differ diff --git a/assets/dolphin/external/L1_Tv_128x47/frame_6.png b/assets/dolphin/external/L1_Tv_128x47/frame_6.png index ee9c23b39..52fdba463 100644 Binary files a/assets/dolphin/external/L1_Tv_128x47/frame_6.png and b/assets/dolphin/external/L1_Tv_128x47/frame_6.png differ diff --git a/assets/dolphin/external/L1_Tv_128x47/frame_7.png b/assets/dolphin/external/L1_Tv_128x47/frame_7.png index 7074a89f3..d2834c6ed 100644 Binary files a/assets/dolphin/external/L1_Tv_128x47/frame_7.png and b/assets/dolphin/external/L1_Tv_128x47/frame_7.png differ diff --git a/assets/dolphin/external/L1_Wardriving_128x64/frame_0.png b/assets/dolphin/external/L1_Wardriving_128x64/frame_0.png index c06aa2562..2229568be 100644 Binary files a/assets/dolphin/external/L1_Wardriving_128x64/frame_0.png and b/assets/dolphin/external/L1_Wardriving_128x64/frame_0.png differ diff --git a/assets/dolphin/external/L1_Wardriving_128x64/frame_1.png b/assets/dolphin/external/L1_Wardriving_128x64/frame_1.png index 838b68a99..0369eda5a 100644 Binary files a/assets/dolphin/external/L1_Wardriving_128x64/frame_1.png and b/assets/dolphin/external/L1_Wardriving_128x64/frame_1.png differ diff --git a/assets/dolphin/external/L1_Wardriving_128x64/frame_2.png b/assets/dolphin/external/L1_Wardriving_128x64/frame_2.png index a39d6d04a..1d51f82aa 100644 Binary files a/assets/dolphin/external/L1_Wardriving_128x64/frame_2.png and b/assets/dolphin/external/L1_Wardriving_128x64/frame_2.png differ diff --git a/assets/dolphin/external/L1_Wardriving_128x64/frame_3.png b/assets/dolphin/external/L1_Wardriving_128x64/frame_3.png index 28181d5b0..7f6709ec1 100644 Binary files a/assets/dolphin/external/L1_Wardriving_128x64/frame_3.png and b/assets/dolphin/external/L1_Wardriving_128x64/frame_3.png differ diff --git a/assets/dolphin/external/L1_Wardriving_128x64/frame_4.png b/assets/dolphin/external/L1_Wardriving_128x64/frame_4.png index e05debb38..702250b2d 100644 Binary files a/assets/dolphin/external/L1_Wardriving_128x64/frame_4.png and b/assets/dolphin/external/L1_Wardriving_128x64/frame_4.png differ diff --git a/assets/dolphin/external/L1_Wardriving_128x64/frame_6.png b/assets/dolphin/external/L1_Wardriving_128x64/frame_6.png index 4fb2ae191..bb59ba12a 100644 Binary files a/assets/dolphin/external/L1_Wardriving_128x64/frame_6.png and b/assets/dolphin/external/L1_Wardriving_128x64/frame_6.png differ diff --git a/assets/dolphin/external/L1_Wardriving_128x64/meta.txt b/assets/dolphin/external/L1_Wardriving_128x64/meta.txt index 93ab92696..7ad227a1a 100644 --- a/assets/dolphin/external/L1_Wardriving_128x64/meta.txt +++ b/assets/dolphin/external/L1_Wardriving_128x64/meta.txt @@ -8,7 +8,7 @@ Active frames: 0 Frames order: 0 1 2 3 4 5 6 6 Active cycles: 0 Frame rate: 1 -Duration: 3600 +Duration: 360 Active cooldown: 0 Bubble slots: 1 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_0.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_0.png index fc7f15b5e..7f1c84c26 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_0.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_0.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_1.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_1.png index bbcc4806f..4b8a3e252 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_1.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_1.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_10.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_10.png index 14ba7ef90..ee9424ee5 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_10.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_10.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_11.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_11.png index c2ffa804e..7400b90eb 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_11.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_11.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_12.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_12.png index ddb78d48c..c8779d6b4 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_12.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_12.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_13.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_13.png index dbbb55c39..87b19aa30 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_13.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_13.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_14.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_14.png index 6aa324d8b..7209b545f 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_14.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_14.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_15.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_15.png index 10687b835..b7725b350 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_15.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_15.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_16.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_16.png index 862ea4f1e..82b1feae0 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_16.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_16.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_17.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_17.png index bd08e6dc6..b92a8c2d1 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_17.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_17.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_18.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_18.png index 12a96fcf2..3114dc599 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_18.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_18.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_19.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_19.png index f9fd3f943..9c79cd16b 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_19.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_19.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_2.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_2.png index 5f9de6320..df558a704 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_2.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_2.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_21.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_21.png index 894c0119c..e832983f3 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_21.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_21.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_23.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_23.png index 8e8638b82..df827d72a 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_23.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_23.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_24.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_24.png index 712cc055e..688fb69af 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_24.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_24.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_3.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_3.png index d85c1eb34..65b126e6c 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_3.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_3.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_4.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_4.png index 9b2016bba..87b339fcf 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_4.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_4.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_43.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_43.png index c2f6c3fc1..600c1d773 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_43.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_43.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_44.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_44.png index bed1de4d1..248b26b36 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_44.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_44.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_45.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_45.png index 221dc2e2d..e6da05bd1 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_45.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_45.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_46.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_46.png index 2265cd758..d4988a819 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_46.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_46.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_47.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_47.png index 857981445..3d631e3fe 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_47.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_47.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_48.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_48.png index 72f255746..247bf9844 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_48.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_48.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_49.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_49.png index 9a9bb9b45..a8a57bee6 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_49.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_49.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_5.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_5.png index 32aaadfe1..c9aaa31fa 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_5.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_5.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_50.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_50.png index 2b05c3aa8..37cd3d893 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_50.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_50.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_51.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_51.png index 8eb1fb45b..0ece627b4 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_51.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_51.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_52.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_52.png index e9815113f..aa5b3112c 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_52.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_52.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_53.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_53.png index 2b007688f..55574b441 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_53.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_53.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_54.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_54.png index 7d2e70cf1..f909bd9f8 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_54.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_54.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_55.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_55.png index 90ec097fb..8711624f9 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_55.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_55.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_56.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_56.png index 28c9aefda..855375c08 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_56.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_56.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_57.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_57.png index c9af24f46..753aa478e 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_57.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_57.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_58.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_58.png index 974638d26..846266c12 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_58.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_58.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_59.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_59.png index 258051f3c..3d6b98dd2 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_59.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_59.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_6.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_6.png index a552182fb..119d8d346 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_6.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_6.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_60.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_60.png index ea1b5fa6d..89ce15403 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_60.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_60.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_61.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_61.png index 203990411..ed02b62a3 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_61.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_61.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_8.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_8.png index 4ca76f7f9..7935a7755 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_8.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_8.png differ diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_9.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_9.png index e575b6160..99072fae9 100644 Binary files a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_9.png and b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_9.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_0.png b/assets/dolphin/external/L2_Dj_128x64/frame_0.png index 53b81c0b7..18a5e83f6 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_0.png and b/assets/dolphin/external/L2_Dj_128x64/frame_0.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_1.png b/assets/dolphin/external/L2_Dj_128x64/frame_1.png index 16a8cc12e..efd0fcfaf 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_1.png and b/assets/dolphin/external/L2_Dj_128x64/frame_1.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_10.png b/assets/dolphin/external/L2_Dj_128x64/frame_10.png index eddf421d8..1e33265d6 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_10.png and b/assets/dolphin/external/L2_Dj_128x64/frame_10.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_11.png b/assets/dolphin/external/L2_Dj_128x64/frame_11.png index a3249a298..956d31d02 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_11.png and b/assets/dolphin/external/L2_Dj_128x64/frame_11.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_12.png b/assets/dolphin/external/L2_Dj_128x64/frame_12.png index 11019c7e1..a99135d7b 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_12.png and b/assets/dolphin/external/L2_Dj_128x64/frame_12.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_13.png b/assets/dolphin/external/L2_Dj_128x64/frame_13.png index 90c66281e..3c5ff7b33 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_13.png and b/assets/dolphin/external/L2_Dj_128x64/frame_13.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_14.png b/assets/dolphin/external/L2_Dj_128x64/frame_14.png index 4365d99f8..79e28e916 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_14.png and b/assets/dolphin/external/L2_Dj_128x64/frame_14.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_15.png b/assets/dolphin/external/L2_Dj_128x64/frame_15.png index c1f8a5540..69d233ab5 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_15.png and b/assets/dolphin/external/L2_Dj_128x64/frame_15.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_16.png b/assets/dolphin/external/L2_Dj_128x64/frame_16.png index f778164ca..a3766106a 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_16.png and b/assets/dolphin/external/L2_Dj_128x64/frame_16.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_17.png b/assets/dolphin/external/L2_Dj_128x64/frame_17.png index ddecd6278..f606afb4b 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_17.png and b/assets/dolphin/external/L2_Dj_128x64/frame_17.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_18.png b/assets/dolphin/external/L2_Dj_128x64/frame_18.png index 2e777ca2c..392b12e25 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_18.png and b/assets/dolphin/external/L2_Dj_128x64/frame_18.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_19.png b/assets/dolphin/external/L2_Dj_128x64/frame_19.png index 9ed7e2cdd..fba62faae 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_19.png and b/assets/dolphin/external/L2_Dj_128x64/frame_19.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_2.png b/assets/dolphin/external/L2_Dj_128x64/frame_2.png index 896772feb..85c5008be 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_2.png and b/assets/dolphin/external/L2_Dj_128x64/frame_2.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_20.png b/assets/dolphin/external/L2_Dj_128x64/frame_20.png index ca4facfbf..c80e59d07 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_20.png and b/assets/dolphin/external/L2_Dj_128x64/frame_20.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_21.png b/assets/dolphin/external/L2_Dj_128x64/frame_21.png index 71d2c0fb6..c3768e27b 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_21.png and b/assets/dolphin/external/L2_Dj_128x64/frame_21.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_23.png b/assets/dolphin/external/L2_Dj_128x64/frame_23.png index f7d7c9928..f404dafc3 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_23.png and b/assets/dolphin/external/L2_Dj_128x64/frame_23.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_24.png b/assets/dolphin/external/L2_Dj_128x64/frame_24.png index 84d314077..b5c59f09c 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_24.png and b/assets/dolphin/external/L2_Dj_128x64/frame_24.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_25.png b/assets/dolphin/external/L2_Dj_128x64/frame_25.png index 1c03f7239..7495a0169 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_25.png and b/assets/dolphin/external/L2_Dj_128x64/frame_25.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_27.png b/assets/dolphin/external/L2_Dj_128x64/frame_27.png index 24493753c..48e08cf62 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_27.png and b/assets/dolphin/external/L2_Dj_128x64/frame_27.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_28.png b/assets/dolphin/external/L2_Dj_128x64/frame_28.png index 638eb8887..a48aa0927 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_28.png and b/assets/dolphin/external/L2_Dj_128x64/frame_28.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_29.png b/assets/dolphin/external/L2_Dj_128x64/frame_29.png index caf93d855..1eae636a5 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_29.png and b/assets/dolphin/external/L2_Dj_128x64/frame_29.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_3.png b/assets/dolphin/external/L2_Dj_128x64/frame_3.png index 3b99c633a..4772c9217 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_3.png and b/assets/dolphin/external/L2_Dj_128x64/frame_3.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_30.png b/assets/dolphin/external/L2_Dj_128x64/frame_30.png index 593df1780..631240dd0 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_30.png and b/assets/dolphin/external/L2_Dj_128x64/frame_30.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_31.png b/assets/dolphin/external/L2_Dj_128x64/frame_31.png index 1a1439ab4..5dcfb355d 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_31.png and b/assets/dolphin/external/L2_Dj_128x64/frame_31.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_32.png b/assets/dolphin/external/L2_Dj_128x64/frame_32.png index 806f28576..9021fdca1 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_32.png and b/assets/dolphin/external/L2_Dj_128x64/frame_32.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_33.png b/assets/dolphin/external/L2_Dj_128x64/frame_33.png index 637993db5..e5467bcfb 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_33.png and b/assets/dolphin/external/L2_Dj_128x64/frame_33.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_34.png b/assets/dolphin/external/L2_Dj_128x64/frame_34.png index 11788d435..e12c77c8a 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_34.png and b/assets/dolphin/external/L2_Dj_128x64/frame_34.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_35.png b/assets/dolphin/external/L2_Dj_128x64/frame_35.png index 23da46851..335f819d8 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_35.png and b/assets/dolphin/external/L2_Dj_128x64/frame_35.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_4.png b/assets/dolphin/external/L2_Dj_128x64/frame_4.png index 7ee22d3ca..57a9dd944 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_4.png and b/assets/dolphin/external/L2_Dj_128x64/frame_4.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_5.png b/assets/dolphin/external/L2_Dj_128x64/frame_5.png index a14d625d3..c6f556fbf 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_5.png and b/assets/dolphin/external/L2_Dj_128x64/frame_5.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_6.png b/assets/dolphin/external/L2_Dj_128x64/frame_6.png index 2087182d9..4a6f97d20 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_6.png and b/assets/dolphin/external/L2_Dj_128x64/frame_6.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_7.png b/assets/dolphin/external/L2_Dj_128x64/frame_7.png index e9c199f1e..cf626fdae 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_7.png and b/assets/dolphin/external/L2_Dj_128x64/frame_7.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_8.png b/assets/dolphin/external/L2_Dj_128x64/frame_8.png index e0946ff7e..40facba15 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_8.png and b/assets/dolphin/external/L2_Dj_128x64/frame_8.png differ diff --git a/assets/dolphin/external/L2_Dj_128x64/frame_9.png b/assets/dolphin/external/L2_Dj_128x64/frame_9.png index ef7a349c9..12a3e590d 100644 Binary files a/assets/dolphin/external/L2_Dj_128x64/frame_9.png and b/assets/dolphin/external/L2_Dj_128x64/frame_9.png differ diff --git a/assets/dolphin/external/L2_Furippa2_128x64/frame_0.png b/assets/dolphin/external/L2_Furippa2_128x64/frame_0.png index 5fc9ab425..37d3e1ecd 100644 Binary files a/assets/dolphin/external/L2_Furippa2_128x64/frame_0.png and b/assets/dolphin/external/L2_Furippa2_128x64/frame_0.png differ diff --git a/assets/dolphin/external/L2_Furippa2_128x64/frame_1.png b/assets/dolphin/external/L2_Furippa2_128x64/frame_1.png index 91b3df523..93ff00a84 100644 Binary files a/assets/dolphin/external/L2_Furippa2_128x64/frame_1.png and b/assets/dolphin/external/L2_Furippa2_128x64/frame_1.png differ diff --git a/assets/dolphin/external/L2_Furippa2_128x64/frame_10.png b/assets/dolphin/external/L2_Furippa2_128x64/frame_10.png index 755fb3e86..d4ab0e356 100644 Binary files a/assets/dolphin/external/L2_Furippa2_128x64/frame_10.png and b/assets/dolphin/external/L2_Furippa2_128x64/frame_10.png differ diff --git a/assets/dolphin/external/L2_Furippa2_128x64/frame_11.png b/assets/dolphin/external/L2_Furippa2_128x64/frame_11.png index e513b85ca..2d98d57ab 100644 Binary files a/assets/dolphin/external/L2_Furippa2_128x64/frame_11.png and b/assets/dolphin/external/L2_Furippa2_128x64/frame_11.png differ diff --git a/assets/dolphin/external/L2_Furippa2_128x64/frame_12.png b/assets/dolphin/external/L2_Furippa2_128x64/frame_12.png index 867f8d09f..95d09d14b 100644 Binary files a/assets/dolphin/external/L2_Furippa2_128x64/frame_12.png and b/assets/dolphin/external/L2_Furippa2_128x64/frame_12.png differ diff --git a/assets/dolphin/external/L2_Furippa2_128x64/frame_13.png b/assets/dolphin/external/L2_Furippa2_128x64/frame_13.png index 45fd1ec4e..c385a5ec4 100644 Binary files a/assets/dolphin/external/L2_Furippa2_128x64/frame_13.png and b/assets/dolphin/external/L2_Furippa2_128x64/frame_13.png differ diff --git a/assets/dolphin/external/L2_Furippa2_128x64/frame_14.png b/assets/dolphin/external/L2_Furippa2_128x64/frame_14.png index 1390e1297..25b4ec565 100644 Binary files a/assets/dolphin/external/L2_Furippa2_128x64/frame_14.png and b/assets/dolphin/external/L2_Furippa2_128x64/frame_14.png differ diff --git a/assets/dolphin/external/L2_Furippa2_128x64/frame_16.png b/assets/dolphin/external/L2_Furippa2_128x64/frame_16.png index ff101259e..29e39b5c1 100644 Binary files a/assets/dolphin/external/L2_Furippa2_128x64/frame_16.png and b/assets/dolphin/external/L2_Furippa2_128x64/frame_16.png differ diff --git a/assets/dolphin/external/L2_Furippa2_128x64/frame_17.png b/assets/dolphin/external/L2_Furippa2_128x64/frame_17.png index 3c5c37469..74bbee98e 100644 Binary files a/assets/dolphin/external/L2_Furippa2_128x64/frame_17.png and b/assets/dolphin/external/L2_Furippa2_128x64/frame_17.png differ diff --git a/assets/dolphin/external/L2_Furippa2_128x64/frame_18.png b/assets/dolphin/external/L2_Furippa2_128x64/frame_18.png index 5d7672c4e..2a9e4884d 100644 Binary files a/assets/dolphin/external/L2_Furippa2_128x64/frame_18.png and b/assets/dolphin/external/L2_Furippa2_128x64/frame_18.png differ diff --git a/assets/dolphin/external/L2_Furippa2_128x64/frame_2.png b/assets/dolphin/external/L2_Furippa2_128x64/frame_2.png index da28883c8..a24187a1b 100644 Binary files a/assets/dolphin/external/L2_Furippa2_128x64/frame_2.png and b/assets/dolphin/external/L2_Furippa2_128x64/frame_2.png differ diff --git a/assets/dolphin/external/L2_Furippa2_128x64/frame_3.png b/assets/dolphin/external/L2_Furippa2_128x64/frame_3.png index a82e00c0d..16f36b3c4 100644 Binary files a/assets/dolphin/external/L2_Furippa2_128x64/frame_3.png and b/assets/dolphin/external/L2_Furippa2_128x64/frame_3.png differ diff --git a/assets/dolphin/external/L2_Furippa2_128x64/frame_4.png b/assets/dolphin/external/L2_Furippa2_128x64/frame_4.png index e96b830e4..eaa20698e 100644 Binary files a/assets/dolphin/external/L2_Furippa2_128x64/frame_4.png and b/assets/dolphin/external/L2_Furippa2_128x64/frame_4.png differ diff --git a/assets/dolphin/external/L2_Furippa2_128x64/frame_5.png b/assets/dolphin/external/L2_Furippa2_128x64/frame_5.png index dbbffaad0..272d99f74 100644 Binary files a/assets/dolphin/external/L2_Furippa2_128x64/frame_5.png and b/assets/dolphin/external/L2_Furippa2_128x64/frame_5.png differ diff --git a/assets/dolphin/external/L2_Furippa2_128x64/frame_6.png b/assets/dolphin/external/L2_Furippa2_128x64/frame_6.png index 441c88567..705272470 100644 Binary files a/assets/dolphin/external/L2_Furippa2_128x64/frame_6.png and b/assets/dolphin/external/L2_Furippa2_128x64/frame_6.png differ diff --git a/assets/dolphin/external/L2_Furippa2_128x64/frame_7.png b/assets/dolphin/external/L2_Furippa2_128x64/frame_7.png index 5fc9ab425..37d3e1ecd 100644 Binary files a/assets/dolphin/external/L2_Furippa2_128x64/frame_7.png and b/assets/dolphin/external/L2_Furippa2_128x64/frame_7.png differ diff --git a/assets/dolphin/external/L2_Furippa2_128x64/frame_8.png b/assets/dolphin/external/L2_Furippa2_128x64/frame_8.png index 14e0905fb..e2433ea58 100644 Binary files a/assets/dolphin/external/L2_Furippa2_128x64/frame_8.png and b/assets/dolphin/external/L2_Furippa2_128x64/frame_8.png differ diff --git a/assets/dolphin/external/L2_Furippa2_128x64/frame_9.png b/assets/dolphin/external/L2_Furippa2_128x64/frame_9.png index c194bfa4b..be1afd958 100644 Binary files a/assets/dolphin/external/L2_Furippa2_128x64/frame_9.png and b/assets/dolphin/external/L2_Furippa2_128x64/frame_9.png differ diff --git a/assets/dolphin/external/L2_Secret_door_128x64/frame_1.png b/assets/dolphin/external/L2_Secret_door_128x64/frame_1.png index 4716e5b80..c973f205b 100644 Binary files a/assets/dolphin/external/L2_Secret_door_128x64/frame_1.png and b/assets/dolphin/external/L2_Secret_door_128x64/frame_1.png differ diff --git a/assets/dolphin/external/L2_Secret_door_128x64/frame_11.png b/assets/dolphin/external/L2_Secret_door_128x64/frame_11.png index 355502f27..d7c9bce75 100644 Binary files a/assets/dolphin/external/L2_Secret_door_128x64/frame_11.png and b/assets/dolphin/external/L2_Secret_door_128x64/frame_11.png differ diff --git a/assets/dolphin/external/L2_Secret_door_128x64/frame_12.png b/assets/dolphin/external/L2_Secret_door_128x64/frame_12.png index b17aa530f..488958005 100644 Binary files a/assets/dolphin/external/L2_Secret_door_128x64/frame_12.png and b/assets/dolphin/external/L2_Secret_door_128x64/frame_12.png differ diff --git a/assets/dolphin/external/L2_Secret_door_128x64/frame_13.png b/assets/dolphin/external/L2_Secret_door_128x64/frame_13.png index 3614a711a..74c418e36 100644 Binary files a/assets/dolphin/external/L2_Secret_door_128x64/frame_13.png and b/assets/dolphin/external/L2_Secret_door_128x64/frame_13.png differ diff --git a/assets/dolphin/external/L2_Secret_door_128x64/frame_14.png b/assets/dolphin/external/L2_Secret_door_128x64/frame_14.png index 1ebccc2d2..50b8299e2 100644 Binary files a/assets/dolphin/external/L2_Secret_door_128x64/frame_14.png and b/assets/dolphin/external/L2_Secret_door_128x64/frame_14.png differ diff --git a/assets/dolphin/external/L2_Secret_door_128x64/frame_2.png b/assets/dolphin/external/L2_Secret_door_128x64/frame_2.png index 392db9fc6..1ba48033e 100644 Binary files a/assets/dolphin/external/L2_Secret_door_128x64/frame_2.png and b/assets/dolphin/external/L2_Secret_door_128x64/frame_2.png differ diff --git a/assets/dolphin/external/L2_Secret_door_128x64/frame_3.png b/assets/dolphin/external/L2_Secret_door_128x64/frame_3.png index 0c559c37d..2054724f9 100644 Binary files a/assets/dolphin/external/L2_Secret_door_128x64/frame_3.png and b/assets/dolphin/external/L2_Secret_door_128x64/frame_3.png differ diff --git a/assets/dolphin/external/L2_Secret_door_128x64/frame_38.png b/assets/dolphin/external/L2_Secret_door_128x64/frame_38.png index 816227efa..ec5731155 100644 Binary files a/assets/dolphin/external/L2_Secret_door_128x64/frame_38.png and b/assets/dolphin/external/L2_Secret_door_128x64/frame_38.png differ diff --git a/assets/dolphin/external/L2_Secret_door_128x64/frame_42.png b/assets/dolphin/external/L2_Secret_door_128x64/frame_42.png index 97e67dba0..4bd13c36f 100644 Binary files a/assets/dolphin/external/L2_Secret_door_128x64/frame_42.png and b/assets/dolphin/external/L2_Secret_door_128x64/frame_42.png differ diff --git a/assets/dolphin/external/L2_Secret_door_128x64/frame_46.png b/assets/dolphin/external/L2_Secret_door_128x64/frame_46.png index 11f50e232..eac19b8cd 100644 Binary files a/assets/dolphin/external/L2_Secret_door_128x64/frame_46.png and b/assets/dolphin/external/L2_Secret_door_128x64/frame_46.png differ diff --git a/assets/dolphin/external/L2_Secret_door_128x64/frame_6.png b/assets/dolphin/external/L2_Secret_door_128x64/frame_6.png index dea4a6c8f..713e66f22 100644 Binary files a/assets/dolphin/external/L2_Secret_door_128x64/frame_6.png and b/assets/dolphin/external/L2_Secret_door_128x64/frame_6.png differ diff --git a/assets/dolphin/external/L2_Secret_door_128x64/frame_9.png b/assets/dolphin/external/L2_Secret_door_128x64/frame_9.png index cc05c1603..979863437 100644 Binary files a/assets/dolphin/external/L2_Secret_door_128x64/frame_9.png and b/assets/dolphin/external/L2_Secret_door_128x64/frame_9.png differ diff --git a/assets/dolphin/external/L2_Soldering_128x64/frame_10.png b/assets/dolphin/external/L2_Soldering_128x64/frame_10.png index b9c3a2797..a6d4d2f25 100644 Binary files a/assets/dolphin/external/L2_Soldering_128x64/frame_10.png and b/assets/dolphin/external/L2_Soldering_128x64/frame_10.png differ diff --git a/assets/dolphin/external/L2_Wake_up_128x64/frame_13.png b/assets/dolphin/external/L2_Wake_up_128x64/frame_13.png index cadad766a..9ff3e4dde 100644 Binary files a/assets/dolphin/external/L2_Wake_up_128x64/frame_13.png and b/assets/dolphin/external/L2_Wake_up_128x64/frame_13.png differ diff --git a/assets/dolphin/external/L2_Wake_up_128x64/frame_15.png b/assets/dolphin/external/L2_Wake_up_128x64/frame_15.png index 855be515d..c725d6a71 100644 Binary files a/assets/dolphin/external/L2_Wake_up_128x64/frame_15.png and b/assets/dolphin/external/L2_Wake_up_128x64/frame_15.png differ diff --git a/assets/dolphin/external/L2_Wake_up_128x64/frame_16.png b/assets/dolphin/external/L2_Wake_up_128x64/frame_16.png index 580e5ef38..4bc14bdc9 100644 Binary files a/assets/dolphin/external/L2_Wake_up_128x64/frame_16.png and b/assets/dolphin/external/L2_Wake_up_128x64/frame_16.png differ diff --git a/assets/dolphin/external/L2_Wake_up_128x64/frame_17.png b/assets/dolphin/external/L2_Wake_up_128x64/frame_17.png index 59efda005..4e4fa0e52 100644 Binary files a/assets/dolphin/external/L2_Wake_up_128x64/frame_17.png and b/assets/dolphin/external/L2_Wake_up_128x64/frame_17.png differ diff --git a/assets/dolphin/external/L2_Wake_up_128x64/frame_18.png b/assets/dolphin/external/L2_Wake_up_128x64/frame_18.png index 7982ae714..f7302372b 100644 Binary files a/assets/dolphin/external/L2_Wake_up_128x64/frame_18.png and b/assets/dolphin/external/L2_Wake_up_128x64/frame_18.png differ diff --git a/assets/dolphin/external/L2_Wake_up_128x64/frame_19.png b/assets/dolphin/external/L2_Wake_up_128x64/frame_19.png index 4017dc1d5..d1d99f489 100644 Binary files a/assets/dolphin/external/L2_Wake_up_128x64/frame_19.png and b/assets/dolphin/external/L2_Wake_up_128x64/frame_19.png differ diff --git a/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_0.png b/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_0.png index 1c854de70..c727bd3f0 100755 Binary files a/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_0.png and b/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_0.png differ diff --git a/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_10.png b/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_10.png index 4aa332198..81be06a77 100755 Binary files a/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_10.png and b/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_10.png differ diff --git a/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_11.png b/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_11.png index 4145c3efa..808dd08fb 100755 Binary files a/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_11.png and b/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_11.png differ diff --git a/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_18.png b/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_18.png index 3f6ed88b1..233f6aed6 100755 Binary files a/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_18.png and b/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_18.png differ diff --git a/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_44.png b/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_44.png index 74552749e..4dfef4ff6 100755 Binary files a/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_44.png and b/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_44.png differ diff --git a/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_5.png b/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_5.png index 8becdf394..e7de890b4 100755 Binary files a/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_5.png and b/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_5.png differ diff --git a/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_6.png b/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_6.png index bdbff35e6..645953060 100755 Binary files a/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_6.png and b/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_6.png differ diff --git a/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_8.png b/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_8.png index 3cd04384e..8cf252c9f 100755 Binary files a/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_8.png and b/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_8.png differ diff --git a/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_9.png b/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_9.png index a711a3794..9cc334e0a 100755 Binary files a/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_9.png and b/assets/dolphin/external/L3_Freedom_2_dolphins_128x64/frame_9.png differ diff --git a/assets/dolphin/external/L3_Furippa3_128x64/frame_0.png b/assets/dolphin/external/L3_Furippa3_128x64/frame_0.png index 5d61be5a2..87d1fc9d2 100644 Binary files a/assets/dolphin/external/L3_Furippa3_128x64/frame_0.png and b/assets/dolphin/external/L3_Furippa3_128x64/frame_0.png differ diff --git a/assets/dolphin/external/L3_Furippa3_128x64/frame_1.png b/assets/dolphin/external/L3_Furippa3_128x64/frame_1.png index e649beb88..67d77257f 100644 Binary files a/assets/dolphin/external/L3_Furippa3_128x64/frame_1.png and b/assets/dolphin/external/L3_Furippa3_128x64/frame_1.png differ diff --git a/assets/dolphin/external/L3_Furippa3_128x64/frame_10.png b/assets/dolphin/external/L3_Furippa3_128x64/frame_10.png index ce8a2e0ea..7bca8d134 100644 Binary files a/assets/dolphin/external/L3_Furippa3_128x64/frame_10.png and b/assets/dolphin/external/L3_Furippa3_128x64/frame_10.png differ diff --git a/assets/dolphin/external/L3_Furippa3_128x64/frame_11.png b/assets/dolphin/external/L3_Furippa3_128x64/frame_11.png index c49d6463d..be63ef5c4 100644 Binary files a/assets/dolphin/external/L3_Furippa3_128x64/frame_11.png and b/assets/dolphin/external/L3_Furippa3_128x64/frame_11.png differ diff --git a/assets/dolphin/external/L3_Furippa3_128x64/frame_12.png b/assets/dolphin/external/L3_Furippa3_128x64/frame_12.png index 867f8d09f..95d09d14b 100644 Binary files a/assets/dolphin/external/L3_Furippa3_128x64/frame_12.png and b/assets/dolphin/external/L3_Furippa3_128x64/frame_12.png differ diff --git a/assets/dolphin/external/L3_Furippa3_128x64/frame_13.png b/assets/dolphin/external/L3_Furippa3_128x64/frame_13.png index 45fd1ec4e..c385a5ec4 100644 Binary files a/assets/dolphin/external/L3_Furippa3_128x64/frame_13.png and b/assets/dolphin/external/L3_Furippa3_128x64/frame_13.png differ diff --git a/assets/dolphin/external/L3_Furippa3_128x64/frame_14.png b/assets/dolphin/external/L3_Furippa3_128x64/frame_14.png index 1390e1297..25b4ec565 100644 Binary files a/assets/dolphin/external/L3_Furippa3_128x64/frame_14.png and b/assets/dolphin/external/L3_Furippa3_128x64/frame_14.png differ diff --git a/assets/dolphin/external/L3_Furippa3_128x64/frame_16.png b/assets/dolphin/external/L3_Furippa3_128x64/frame_16.png index 85bd8bbd9..49e01f317 100644 Binary files a/assets/dolphin/external/L3_Furippa3_128x64/frame_16.png and b/assets/dolphin/external/L3_Furippa3_128x64/frame_16.png differ diff --git a/assets/dolphin/external/L3_Furippa3_128x64/frame_17.png b/assets/dolphin/external/L3_Furippa3_128x64/frame_17.png index 69e9260df..f5871e49c 100644 Binary files a/assets/dolphin/external/L3_Furippa3_128x64/frame_17.png and b/assets/dolphin/external/L3_Furippa3_128x64/frame_17.png differ diff --git a/assets/dolphin/external/L3_Furippa3_128x64/frame_18.png b/assets/dolphin/external/L3_Furippa3_128x64/frame_18.png index 21d2a4c2c..d2a276eea 100644 Binary files a/assets/dolphin/external/L3_Furippa3_128x64/frame_18.png and b/assets/dolphin/external/L3_Furippa3_128x64/frame_18.png differ diff --git a/assets/dolphin/external/L3_Furippa3_128x64/frame_2.png b/assets/dolphin/external/L3_Furippa3_128x64/frame_2.png index bfc521d16..c5e8a2a5b 100644 Binary files a/assets/dolphin/external/L3_Furippa3_128x64/frame_2.png and b/assets/dolphin/external/L3_Furippa3_128x64/frame_2.png differ diff --git a/assets/dolphin/external/L3_Furippa3_128x64/frame_3.png b/assets/dolphin/external/L3_Furippa3_128x64/frame_3.png index a67a1a2fe..6849b5011 100644 Binary files a/assets/dolphin/external/L3_Furippa3_128x64/frame_3.png and b/assets/dolphin/external/L3_Furippa3_128x64/frame_3.png differ diff --git a/assets/dolphin/external/L3_Furippa3_128x64/frame_4.png b/assets/dolphin/external/L3_Furippa3_128x64/frame_4.png index f4e9cf284..41575e79f 100644 Binary files a/assets/dolphin/external/L3_Furippa3_128x64/frame_4.png and b/assets/dolphin/external/L3_Furippa3_128x64/frame_4.png differ diff --git a/assets/dolphin/external/L3_Furippa3_128x64/frame_7.png b/assets/dolphin/external/L3_Furippa3_128x64/frame_7.png index 5d61be5a2..87d1fc9d2 100644 Binary files a/assets/dolphin/external/L3_Furippa3_128x64/frame_7.png and b/assets/dolphin/external/L3_Furippa3_128x64/frame_7.png differ diff --git a/assets/dolphin/external/L3_Furippa3_128x64/frame_8.png b/assets/dolphin/external/L3_Furippa3_128x64/frame_8.png index a3484079c..2cd571dff 100644 Binary files a/assets/dolphin/external/L3_Furippa3_128x64/frame_8.png and b/assets/dolphin/external/L3_Furippa3_128x64/frame_8.png differ diff --git a/assets/dolphin/external/L3_Furippa3_128x64/frame_9.png b/assets/dolphin/external/L3_Furippa3_128x64/frame_9.png index 08b590cfa..e2f84bac5 100644 Binary files a/assets/dolphin/external/L3_Furippa3_128x64/frame_9.png and b/assets/dolphin/external/L3_Furippa3_128x64/frame_9.png differ diff --git a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_0.png b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_0.png index e27622b52..0c47516c2 100644 Binary files a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_0.png and b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_0.png differ diff --git a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_1.png b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_1.png index ccff2357c..dd02ff2e9 100644 Binary files a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_1.png and b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_1.png differ diff --git a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_10.png b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_10.png index b3c3c9d2d..60556a9dd 100644 Binary files a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_10.png and b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_10.png differ diff --git a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_11.png b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_11.png index c190e3f26..a0b7ea6c8 100644 Binary files a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_11.png and b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_11.png differ diff --git a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_12.png b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_12.png index 23616dd11..6faa6fd5b 100644 Binary files a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_12.png and b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_12.png differ diff --git a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_13.png b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_13.png index 6c721fb56..d92aeb984 100644 Binary files a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_13.png and b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_13.png differ diff --git a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_2.png b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_2.png index a5b657e10..a4da82eab 100644 Binary files a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_2.png and b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_2.png differ diff --git a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_3.png b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_3.png index 525fb1a50..c5ba8af0e 100644 Binary files a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_3.png and b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_3.png differ diff --git a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_4.png b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_4.png index 5708bef7d..23166c1a6 100644 Binary files a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_4.png and b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_4.png differ diff --git a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_5.png b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_5.png index 7df699013..7cd73e35b 100644 Binary files a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_5.png and b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_5.png differ diff --git a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_6.png b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_6.png index 7b138689c..fe9a996a1 100644 Binary files a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_6.png and b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_6.png differ diff --git a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_7.png b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_7.png index 4049043fa..06e38fddc 100644 Binary files a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_7.png and b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_7.png differ diff --git a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_8.png b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_8.png index 8b8cf564f..7240e048b 100644 Binary files a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_8.png and b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_8.png differ diff --git a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_9.png b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_9.png index 5824e3144..c074f6881 100644 Binary files a/assets/dolphin/external/L3_Hijack_radio_128x64/frame_9.png and b/assets/dolphin/external/L3_Hijack_radio_128x64/frame_9.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_14.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_14.png index cfdaf02e8..4d27df289 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_14.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_14.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_15.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_15.png index e046d9415..e6be08847 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_15.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_15.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_16.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_16.png index 812de0b35..779de319e 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_16.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_16.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_17.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_17.png index cfd6410d6..b9e89ebd0 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_17.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_17.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_19.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_19.png index 38588da72..23e10f553 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_19.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_19.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_20.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_20.png index 38083a472..e80dee320 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_20.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_20.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_21.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_21.png index 051b0d867..64b38cbff 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_21.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_21.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_22.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_22.png index af08ce0f6..52793ffae 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_22.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_22.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_23.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_23.png index 1ef1f5746..fefe0d834 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_23.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_23.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_24.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_24.png index b18f8ea68..0e46efde1 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_24.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_24.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_25.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_25.png index 13657d515..69b8e9d5a 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_25.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_25.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_33.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_33.png index f47fa0a14..6548ece20 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_33.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_33.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_34.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_34.png index 723a18bee..266021370 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_34.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_34.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_35.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_35.png index d65d6354b..c44b65adc 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_35.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_35.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_36.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_36.png index 880b9df52..28aa1539c 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_36.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_36.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_37.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_37.png index 5c890d433..95ac16500 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_37.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_37.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_38.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_38.png index 6767d5b91..796df31f4 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_38.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_38.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_39.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_39.png index 2e2a98e5c..320de262d 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_39.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_39.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_40.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_40.png index 4b13e0a0b..4af4b80a6 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_40.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_40.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_41.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_41.png index ce0952aaf..707dc05bb 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_41.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_41.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_44.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_44.png index f9085a27d..376b23ee9 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_44.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_44.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_45.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_45.png index aa319ee4e..5e2b91f0b 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_45.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_45.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_46.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_46.png index 2c9fddb14..b19f70c54 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_46.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_46.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_47.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_47.png index 26f023fdc..1d6afe6ff 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_47.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_47.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_48.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_48.png index 7c5bb3ecd..38e8bc329 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_48.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_48.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_49.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_49.png index 4e40165cd..f22a84b66 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_49.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_49.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_50.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_50.png index 0fc0f27b6..a08a141db 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_50.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_50.png differ diff --git a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_51.png b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_51.png index c8f1b6c45..3f631fe4e 100755 Binary files a/assets/dolphin/external/L3_Intruder_alert_128x64/frame_51.png and b/assets/dolphin/external/L3_Intruder_alert_128x64/frame_51.png differ diff --git a/assets/dolphin/external/L3_Lab_research_128x54/frame_10.png b/assets/dolphin/external/L3_Lab_research_128x54/frame_10.png index 1fed4fbe9..02a91f9ba 100644 Binary files a/assets/dolphin/external/L3_Lab_research_128x54/frame_10.png and b/assets/dolphin/external/L3_Lab_research_128x54/frame_10.png differ diff --git a/assets/dolphin/external/L3_Lab_research_128x54/frame_11.png b/assets/dolphin/external/L3_Lab_research_128x54/frame_11.png index 749ea4966..12e545419 100644 Binary files a/assets/dolphin/external/L3_Lab_research_128x54/frame_11.png and b/assets/dolphin/external/L3_Lab_research_128x54/frame_11.png differ diff --git a/assets/dolphin/external/L3_Lab_research_128x54/frame_4.png b/assets/dolphin/external/L3_Lab_research_128x54/frame_4.png index e9de77eea..9a5d688cf 100644 Binary files a/assets/dolphin/external/L3_Lab_research_128x54/frame_4.png and b/assets/dolphin/external/L3_Lab_research_128x54/frame_4.png differ diff --git a/assets/dolphin/external/L3_Lab_research_128x54/frame_7.png b/assets/dolphin/external/L3_Lab_research_128x54/frame_7.png index 03a672f63..91fd1cbaf 100644 Binary files a/assets/dolphin/external/L3_Lab_research_128x54/frame_7.png and b/assets/dolphin/external/L3_Lab_research_128x54/frame_7.png differ diff --git a/assets/dolphin/external/L3_Lab_research_128x54/frame_8.png b/assets/dolphin/external/L3_Lab_research_128x54/frame_8.png index 6ed2507da..7fc99ca89 100644 Binary files a/assets/dolphin/external/L3_Lab_research_128x54/frame_8.png and b/assets/dolphin/external/L3_Lab_research_128x54/frame_8.png differ diff --git a/assets/dolphin/external/manifest.txt b/assets/dolphin/external/manifest.txt index 9f3b93448..2b15e7a4e 100644 --- a/assets/dolphin/external/manifest.txt +++ b/assets/dolphin/external/manifest.txt @@ -231,3 +231,17 @@ Max butthurt: 7 Min level: 11 Max level: 30 Weight: 4 + +Name: L1_Happy_holidays_128x64 +Min butthurt: 0 +Max butthurt: 14 +Min level: 16 +Max level: 30 +Weight: 4 + +Name: L1_Sleigh_ride_128x64 +Min butthurt: 0 +Max butthurt: 14 +Min level: 9 +Max level: 30 +Weight: 4 diff --git a/assets/dolphin/internal/L1_AnimationError_128x64/frame_0.png b/assets/dolphin/internal/L1_AnimationError_128x64/frame_0.png index 2da87f907..aad9bb179 100644 Binary files a/assets/dolphin/internal/L1_AnimationError_128x64/frame_0.png and b/assets/dolphin/internal/L1_AnimationError_128x64/frame_0.png differ diff --git a/assets/dolphin/internal/L1_BadBattery_128x47/frame_0.png b/assets/dolphin/internal/L1_BadBattery_128x47/frame_0.png index d9c26f229..ef1f17fcc 100644 Binary files a/assets/dolphin/internal/L1_BadBattery_128x47/frame_0.png and b/assets/dolphin/internal/L1_BadBattery_128x47/frame_0.png differ diff --git a/assets/dolphin/internal/L1_NoSd_128x49/frame_0.png b/assets/dolphin/internal/L1_NoSd_128x49/frame_0.png index 5e1b8c01a..69e2320ec 100644 Binary files a/assets/dolphin/internal/L1_NoSd_128x49/frame_0.png and b/assets/dolphin/internal/L1_NoSd_128x49/frame_0.png differ diff --git a/assets/icons/About/CertificationMexico_98x41.png b/assets/icons/About/CertificationMexico_98x41.png index f4552d225..a49433d7b 100644 Binary files a/assets/icons/About/CertificationMexico_98x41.png and b/assets/icons/About/CertificationMexico_98x41.png differ diff --git a/assets/icons/Animations/Levelup_128x64/frame_00.png b/assets/icons/Animations/Levelup_128x64/frame_00.png index bcf751e74..0bf23b5c5 100644 Binary files a/assets/icons/Animations/Levelup_128x64/frame_00.png and b/assets/icons/Animations/Levelup_128x64/frame_00.png differ diff --git a/assets/icons/Animations/Levelup_128x64/frame_01.png b/assets/icons/Animations/Levelup_128x64/frame_01.png index 8278a98f2..b9990b406 100644 Binary files a/assets/icons/Animations/Levelup_128x64/frame_01.png and b/assets/icons/Animations/Levelup_128x64/frame_01.png differ diff --git a/assets/icons/Animations/Levelup_128x64/frame_02.png b/assets/icons/Animations/Levelup_128x64/frame_02.png index 2c8875ad1..a57641e44 100644 Binary files a/assets/icons/Animations/Levelup_128x64/frame_02.png and b/assets/icons/Animations/Levelup_128x64/frame_02.png differ diff --git a/assets/icons/Animations/Levelup_128x64/frame_04.png b/assets/icons/Animations/Levelup_128x64/frame_04.png index 366b8555c..4b7367a37 100644 Binary files a/assets/icons/Animations/Levelup_128x64/frame_04.png and b/assets/icons/Animations/Levelup_128x64/frame_04.png differ diff --git a/assets/icons/Animations/Levelup_128x64/frame_06.png b/assets/icons/Animations/Levelup_128x64/frame_06.png index 4e77c6a2b..5389124dc 100644 Binary files a/assets/icons/Animations/Levelup_128x64/frame_06.png and b/assets/icons/Animations/Levelup_128x64/frame_06.png differ diff --git a/assets/icons/Animations/Levelup_128x64/frame_07.png b/assets/icons/Animations/Levelup_128x64/frame_07.png index 52fd56d31..cd4324f0d 100644 Binary files a/assets/icons/Animations/Levelup_128x64/frame_07.png and b/assets/icons/Animations/Levelup_128x64/frame_07.png differ diff --git a/assets/icons/Animations/Levelup_128x64/frame_08.png b/assets/icons/Animations/Levelup_128x64/frame_08.png index 2c3aae26b..fea362808 100644 Binary files a/assets/icons/Animations/Levelup_128x64/frame_08.png and b/assets/icons/Animations/Levelup_128x64/frame_08.png differ diff --git a/assets/icons/Animations/Levelup_128x64/frame_09.png b/assets/icons/Animations/Levelup_128x64/frame_09.png index 27babdfec..fd4a3de1d 100644 Binary files a/assets/icons/Animations/Levelup_128x64/frame_09.png and b/assets/icons/Animations/Levelup_128x64/frame_09.png differ diff --git a/assets/icons/Animations/Levelup_128x64/frame_10.png b/assets/icons/Animations/Levelup_128x64/frame_10.png index 0d2ae19ae..fae535997 100644 Binary files a/assets/icons/Animations/Levelup_128x64/frame_10.png and b/assets/icons/Animations/Levelup_128x64/frame_10.png differ diff --git a/assets/icons/Dolphin/DolphinSaved_92x58.png b/assets/icons/Dolphin/DolphinSaved_92x58.png index 45da01480..4d8195b80 100644 Binary files a/assets/icons/Dolphin/DolphinSaved_92x58.png and b/assets/icons/Dolphin/DolphinSaved_92x58.png differ diff --git a/assets/icons/ErasePin/Erase_pin_128x64.png b/assets/icons/ErasePin/Erase_pin_128x64.png index 4e2a9ddc8..5ffa49b78 100644 Binary files a/assets/icons/ErasePin/Erase_pin_128x64.png and b/assets/icons/ErasePin/Erase_pin_128x64.png differ diff --git a/assets/icons/Infrared/InfraredLearnShort_128x31.png b/assets/icons/Infrared/InfraredLearnShort_128x31.png index 41d9cdfc7..cd71a69db 100644 Binary files a/assets/icons/Infrared/InfraredLearnShort_128x31.png and b/assets/icons/Infrared/InfraredLearnShort_128x31.png differ diff --git a/assets/icons/Interface/Lockscreen.png b/assets/icons/Interface/Lockscreen.png index 518fef1e2..41a9d2ae4 100644 Binary files a/assets/icons/Interface/Lockscreen.png and b/assets/icons/Interface/Lockscreen.png differ diff --git a/assets/icons/Passport/passport_128x64.png b/assets/icons/Passport/passport_128x64.png index 0c5d14daf..564547f16 100644 Binary files a/assets/icons/Passport/passport_128x64.png and b/assets/icons/Passport/passport_128x64.png differ diff --git a/assets/icons/RFID/RFIDDolphinReceive_97x61.png b/assets/icons/RFID/RFIDDolphinReceive_97x61.png index 2b7abb85d..06deb0a27 100644 Binary files a/assets/icons/RFID/RFIDDolphinReceive_97x61.png and b/assets/icons/RFID/RFIDDolphinReceive_97x61.png differ diff --git a/assets/icons/RFID/RFIDDolphinSend_97x61.png b/assets/icons/RFID/RFIDDolphinSend_97x61.png index 59b1dff88..65dff8241 100644 Binary files a/assets/icons/RFID/RFIDDolphinSend_97x61.png and b/assets/icons/RFID/RFIDDolphinSend_97x61.png differ diff --git a/assets/icons/SubGhz/Fishing_123x52.png b/assets/icons/SubGhz/Fishing_123x52.png index abb06645b..6b3f39310 100644 Binary files a/assets/icons/SubGhz/Fishing_123x52.png and b/assets/icons/SubGhz/Fishing_123x52.png differ diff --git a/assets/icons/SubGhz/Scanning_123x52.png b/assets/icons/SubGhz/Scanning_123x52.png index 148d9aba8..16c177527 100644 Binary files a/assets/icons/SubGhz/Scanning_123x52.png and b/assets/icons/SubGhz/Scanning_123x52.png differ diff --git a/assets/icons/U2F/Drive_112x35.png b/assets/icons/U2F/Drive_112x35.png index f2347925c..b910c7920 100644 Binary files a/assets/icons/U2F/Drive_112x35.png and b/assets/icons/U2F/Drive_112x35.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_0.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_0.png index 6e2986481..61f3f3ee3 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_0.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_0.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_1.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_1.png index 485254ee1..fbeffe542 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_1.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_1.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_10.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_10.png index 3ad5c1d0a..b2e366d8e 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_10.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_10.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_11.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_11.png index 882020550..7c3748a78 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_11.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_11.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_12.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_12.png index a595af018..07989e7d2 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_12.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_12.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_13.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_13.png index 994e6b57f..943439d60 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_13.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_13.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_14.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_14.png index 6f5b5054a..311b4f781 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_14.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_14.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_15.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_15.png index 872ba414b..0551162db 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_15.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_15.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_16.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_16.png index 5bf2b837e..de62b5153 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_16.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_16.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_17.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_17.png index c9aa508fd..64d3f7de3 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_17.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_17.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_18.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_18.png index 144394bcb..b9857616d 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_18.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_18.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_19.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_19.png index ec8db460a..589d6b8ec 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_19.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_19.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_2.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_2.png index 864ff765a..497d6175b 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_2.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_2.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_20.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_20.png index af83806bf..5d7e8039b 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_20.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_20.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_21.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_21.png index 1f141ca29..5e48d2018 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_21.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_21.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_22.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_22.png index fef49d42a..282a3e54e 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_22.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_22.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_23.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_23.png index 6b0ecc423..ecfb7d97e 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_23.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_23.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_24.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_24.png index a44575ed2..b12c2b50d 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_24.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_24.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_25.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_25.png index d9241638f..3b24ce072 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_25.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_25.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_26.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_26.png index f730e9921..adc8a0d91 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_26.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_26.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_28.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_28.png index dfa6f9f14..8c75dc849 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_28.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_28.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_29.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_29.png index 8bb99f461..5df703723 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_29.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_29.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_3.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_3.png index 0f8947ae8..6fdf1e1e6 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_3.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_3.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_30.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_30.png index a8daada7f..6a78a9fd7 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_30.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_30.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_31.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_31.png index 662b90783..7758e3603 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_31.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_31.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_32.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_32.png index c74c79485..441a640e6 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_32.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_32.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_33.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_33.png index 6493630ff..17d69f0c0 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_33.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_33.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_34.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_34.png index bab2fa428..93b3755e8 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_34.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_34.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_35.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_35.png index 8e3ffb27f..1d913068b 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_35.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_35.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_36.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_36.png index 64e41db05..8efe74260 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_36.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_36.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_37.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_37.png index b18541b92..c451b9127 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_37.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_37.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_38.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_38.png index c022d0bd5..63b015e9c 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_38.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_38.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_39.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_39.png index c01db4a8b..22d25a88e 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_39.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_39.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_4.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_4.png index 50538cf7e..52d16cc85 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_4.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_4.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_41.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_41.png index 694782d88..4c926965e 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_41.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_41.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_42.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_42.png index 28d1b8640..0243fafc3 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_42.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_42.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_5.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_5.png index 5b56fd02a..24fd500a6 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_5.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_5.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_6.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_6.png index d8c212aa4..71eceed71 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_6.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_6.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_7.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_7.png index 796bfeefe..7d9b28b3d 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_7.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_7.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_8.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_8.png index a2d36fc74..4b5e08081 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_8.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_8.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_9.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_9.png index 224c19485..f64f730fb 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_9.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum1_128x64/frame_9.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_0.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_0.png index 6e2986481..61f3f3ee3 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_0.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_0.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_1.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_1.png index 485254ee1..fbeffe542 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_1.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_1.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_10.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_10.png index 3ad5c1d0a..b2e366d8e 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_10.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_10.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_11.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_11.png index 882020550..7c3748a78 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_11.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_11.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_12.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_12.png index a595af018..07989e7d2 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_12.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_12.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_13.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_13.png index 994e6b57f..943439d60 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_13.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_13.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_14.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_14.png index 6f5b5054a..311b4f781 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_14.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_14.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_15.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_15.png index 872ba414b..0551162db 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_15.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_15.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_16.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_16.png index 8ba94f397..73d25733f 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_16.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_16.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_17.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_17.png index 63eac27ad..437ab5192 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_17.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_17.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_18.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_18.png index 402aa112c..e35d03814 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_18.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_18.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_19.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_19.png index b1a492c97..a97b88c31 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_19.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_19.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_2.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_2.png index 864ff765a..497d6175b 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_2.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_2.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_20.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_20.png index 2aa6b53bc..dad32c94d 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_20.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_20.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_21.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_21.png index fc2abdbc6..d3e656283 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_21.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_21.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_22.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_22.png index 99b0d8c63..434e15a9d 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_22.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_22.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_23.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_23.png index d99b2cc63..f8659b006 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_23.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_23.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_24.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_24.png index 0c45f6065..95eed82f8 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_24.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_24.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_25.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_25.png index bd40a24a4..c44023b7d 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_25.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_25.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_26.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_26.png index ca74018f6..a033bab9e 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_26.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_26.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_27.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_27.png index a9aac8f27..f50d45eec 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_27.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_27.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_28.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_28.png index 83b4a97d8..76469a7bb 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_28.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_28.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_29.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_29.png index c712defa3..bcd76ec3b 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_29.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_29.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_3.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_3.png index 0f8947ae8..6fdf1e1e6 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_3.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_3.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_30.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_30.png index 5a38870d2..bc677d815 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_30.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_30.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_32.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_32.png index dd4a2ddf4..6cd0c8923 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_32.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_32.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_33.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_33.png index d33737184..0f5f9c3b3 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_33.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_33.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_34.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_34.png index f0b43a99f..2d5ff1dd3 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_34.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_34.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_4.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_4.png index 50538cf7e..52d16cc85 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_4.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_4.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_5.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_5.png index 5b56fd02a..24fd500a6 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_5.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_5.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_6.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_6.png index d8c212aa4..71eceed71 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_6.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_6.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_7.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_7.png index 796bfeefe..7d9b28b3d 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_7.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_7.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_8.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_8.png index a2d36fc74..4b5e08081 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_8.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_8.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_9.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_9.png index 224c19485..f64f730fb 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_9.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum2_128x64/frame_9.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_0.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_0.png index 6e2986481..61f3f3ee3 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_0.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_0.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_1.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_1.png index 485254ee1..fbeffe542 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_1.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_1.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_10.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_10.png index 3ad5c1d0a..b2e366d8e 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_10.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_10.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_11.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_11.png index 882020550..7c3748a78 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_11.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_11.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_12.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_12.png index a595af018..07989e7d2 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_12.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_12.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_13.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_13.png index 994e6b57f..943439d60 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_13.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_13.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_14.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_14.png index 6f5b5054a..311b4f781 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_14.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_14.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_15.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_15.png index 872ba414b..0551162db 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_15.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_15.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_16.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_16.png index c1b9db4f7..354d1dbbc 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_16.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_16.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_17.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_17.png index 1ba8ef2b6..3c2628236 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_17.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_17.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_18.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_18.png index 91c649834..09842061a 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_18.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_18.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_19.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_19.png index 11650dd5e..51ba70b05 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_19.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_19.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_2.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_2.png index 864ff765a..497d6175b 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_2.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_2.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_20.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_20.png index 0c3d6f79d..ba27d9cce 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_20.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_20.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_21.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_21.png index b3ba2976c..f13556a0f 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_21.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_21.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_22.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_22.png index e75565d92..4f6e1f946 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_22.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_22.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_23.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_23.png index eb26fc14b..7ebec35fc 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_23.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_23.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_24.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_24.png index 563d74e17..aa8d2ea5f 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_24.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_24.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_25.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_25.png index 35c09dc74..ecb16ccf4 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_25.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_25.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_26.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_26.png index ec46b19b1..9af11f833 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_26.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_26.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_27.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_27.png index b8ad8d0be..03b597662 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_27.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_27.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_28.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_28.png index 190a4b447..c42fee47e 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_28.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_28.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_29.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_29.png index f68332ea6..8c13f46e9 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_29.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_29.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_3.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_3.png index 0f8947ae8..6fdf1e1e6 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_3.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_3.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_30.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_30.png index 85a9e5ed0..a6c083e0e 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_30.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_30.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_31.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_31.png index b447ac4d5..7fe46bbd8 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_31.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_31.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_32.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_32.png index 2bb90398c..2ab84589d 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_32.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_32.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_36.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_36.png index 1a59ba26a..f155df9d9 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_36.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_36.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_37.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_37.png index da0b7c4de..ecec10b77 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_37.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_37.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_38.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_38.png index 0621c7d80..eaf9db48f 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_38.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_38.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_39.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_39.png index 92d8bf7e3..b2fc6dd28 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_39.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_39.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_4.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_4.png index 50538cf7e..52d16cc85 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_4.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_4.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_5.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_5.png index 5b56fd02a..24fd500a6 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_5.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_5.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_6.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_6.png index d8c212aa4..71eceed71 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_6.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_6.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_7.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_7.png index 796bfeefe..7d9b28b3d 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_7.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_7.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_8.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_8.png index a2d36fc74..4b5e08081 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_8.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_8.png differ diff --git a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_9.png b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_9.png index 224c19485..f64f730fb 100644 Binary files a/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_9.png and b/assets/packs/Momentum/Anims/Kuronons_CFW_Momentum3_128x64/frame_9.png differ diff --git a/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_00.png b/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_00.png index a2f6fe0a6..44027650d 100644 Binary files a/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_00.png and b/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_00.png differ diff --git a/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_01.png b/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_01.png index fb9a8bdb0..b267163b2 100644 Binary files a/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_01.png and b/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_01.png differ diff --git a/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_02.png b/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_02.png index 45fc26155..259097723 100644 Binary files a/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_02.png and b/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_02.png differ diff --git a/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_03.png b/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_03.png index 9bd6b7f80..594863dc0 100644 Binary files a/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_03.png and b/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_03.png differ diff --git a/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_04.png b/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_04.png index fb79bd003..6e84ba180 100644 Binary files a/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_04.png and b/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_04.png differ diff --git a/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_05.png b/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_05.png index ac8eb01bd..340eb1a9e 100644 Binary files a/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_05.png and b/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_05.png differ diff --git a/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_06.png b/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_06.png index aedd9b972..f753c08f3 100644 Binary files a/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_06.png and b/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_06.png differ diff --git a/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_07.png b/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_07.png index e12d26f2b..222d75de2 100644 Binary files a/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_07.png and b/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_07.png differ diff --git a/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_08.png b/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_08.png index 1c0c4442e..eee6a461d 100644 Binary files a/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_08.png and b/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_08.png differ diff --git a/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_09.png b/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_09.png index 15e0d30a2..1711bb4a8 100644 Binary files a/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_09.png and b/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_09.png differ diff --git a/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_10.png b/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_10.png index 6d57843cf..a19d08702 100644 Binary files a/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_10.png and b/assets/packs/Momentum/Icons/Animations/Levelup_128x64/frame_10.png differ diff --git a/assets/packs/Momentum/Icons/Dolphin/DolphinMafia_119x62.png b/assets/packs/Momentum/Icons/Dolphin/DolphinMafia_119x62.png index 1348a697b..dcdaea2ac 100644 Binary files a/assets/packs/Momentum/Icons/Dolphin/DolphinMafia_119x62.png and b/assets/packs/Momentum/Icons/Dolphin/DolphinMafia_119x62.png differ diff --git a/assets/packs/Momentum/Icons/Dolphin/DolphinSaved_92x58.png b/assets/packs/Momentum/Icons/Dolphin/DolphinSaved_92x58.png index 96458f488..01ad5512c 100644 Binary files a/assets/packs/Momentum/Icons/Dolphin/DolphinSaved_92x58.png and b/assets/packs/Momentum/Icons/Dolphin/DolphinSaved_92x58.png differ diff --git a/assets/packs/Momentum/Icons/Infrared/InfraredLearnShort_128x31.png b/assets/packs/Momentum/Icons/Infrared/InfraredLearnShort_128x31.png index 980602a66..fe90ebb0d 100644 Binary files a/assets/packs/Momentum/Icons/Infrared/InfraredLearnShort_128x31.png and b/assets/packs/Momentum/Icons/Infrared/InfraredLearnShort_128x31.png differ diff --git a/assets/packs/Momentum/Icons/SubGhz/Fishing_123x52.png b/assets/packs/Momentum/Icons/SubGhz/Fishing_123x52.png index 550061245..619c96b14 100644 Binary files a/assets/packs/Momentum/Icons/SubGhz/Fishing_123x52.png and b/assets/packs/Momentum/Icons/SubGhz/Fishing_123x52.png differ diff --git a/assets/packs/Momentum/Icons/SubGhz/Scanning_123x52.png b/assets/packs/Momentum/Icons/SubGhz/Scanning_123x52.png index 6a2ca693d..5a7132062 100644 Binary files a/assets/packs/Momentum/Icons/SubGhz/Scanning_123x52.png and b/assets/packs/Momentum/Icons/SubGhz/Scanning_123x52.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_AD/frame_0.png b/assets/packs/WatchDogs/Anims/DEDSEC_AD/frame_0.png index 79b9180d5..8eaa329de 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_AD/frame_0.png and b/assets/packs/WatchDogs/Anims/DEDSEC_AD/frame_0.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_AD/frame_10.png b/assets/packs/WatchDogs/Anims/DEDSEC_AD/frame_10.png index 48d9a34e3..f982877e3 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_AD/frame_10.png and b/assets/packs/WatchDogs/Anims/DEDSEC_AD/frame_10.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_AD/frame_5.png b/assets/packs/WatchDogs/Anims/DEDSEC_AD/frame_5.png index 176ffde5c..1633b580b 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_AD/frame_5.png and b/assets/packs/WatchDogs/Anims/DEDSEC_AD/frame_5.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_AD/frame_7.png b/assets/packs/WatchDogs/Anims/DEDSEC_AD/frame_7.png index 62f83bdc3..58f876124 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_AD/frame_7.png and b/assets/packs/WatchDogs/Anims/DEDSEC_AD/frame_7.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_AD/frame_8.png b/assets/packs/WatchDogs/Anims/DEDSEC_AD/frame_8.png index 176ffde5c..1633b580b 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_AD/frame_8.png and b/assets/packs/WatchDogs/Anims/DEDSEC_AD/frame_8.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_0.png b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_0.png index 32b180df3..d9e4b42f3 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_0.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_0.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_1.png b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_1.png index a72ce9e56..410323052 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_1.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_1.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_2.png b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_2.png index a9a110d65..a001adc1c 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_2.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_2.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_22.png b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_22.png index 605609ece..f34a960db 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_22.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_22.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_23.png b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_23.png index 96e59e515..677beccd9 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_23.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_23.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_24.png b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_24.png index 4b09b28e1..e34d0a22c 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_24.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_24.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_25.png b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_25.png index 56250c001..127d695d7 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_25.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_25.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_26.png b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_26.png index 0d614132f..ccc5163fb 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_26.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_26.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_27.png b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_27.png index 19de08d59..f2b51aea3 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_27.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_27.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_28.png b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_28.png index 3401ae8de..70a02485b 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_28.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_28.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_29.png b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_29.png index 4655efbcd..8cebbc736 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_29.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_29.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_3.png b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_3.png index 833f34cb8..7877314ca 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_3.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_3.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_30.png b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_30.png index f41dfd455..d86c24da0 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_30.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_30.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_31.png b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_31.png index 1e1bb2dbb..24591c1e9 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_31.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_31.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_32.png b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_32.png index 210e2f7ff..166892f6d 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_32.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_32.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_33.png b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_33.png index e2854e7a7..4f8e12bf5 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_33.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_33.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_34.png b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_34.png index 33468e1d9..3326eefbc 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_34.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_34.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_35.png b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_35.png index 756629d0b..fb25909db 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_35.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_35.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_36.png b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_36.png index d8577daf8..67621e00b 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_36.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_36.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_37.png b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_37.png index 174fbc40a..d4c0c7a91 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_37.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_37.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_38.png b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_38.png index 2d6466093..bfd2d04ea 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_38.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_38.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_39.png b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_39.png index 79d85a4f7..87def026d 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_39.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_39.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_5.png b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_5.png index 700e35b29..3067396da 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_5.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ANIM/frame_5.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_1.png b/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_1.png index f233dca85..d8fb30bde 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_1.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_1.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_2.png b/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_2.png index b78ef36cd..d890e7e61 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_2.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_2.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_3.png b/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_3.png index e158609fb..ffe56228c 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_3.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_3.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_4.png b/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_4.png index 710617784..4bbe2bf31 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_4.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_4.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_5.png b/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_5.png index d4d26a380..5a7ccc10e 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_5.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_5.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_6.png b/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_6.png index 9b65896c6..9c5606388 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_6.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_6.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_8.png b/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_8.png index c642c5b43..f7749d3de 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_8.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_8.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_9.png b/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_9.png index 3d7ee92aa..5d50ed22b 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_9.png and b/assets/packs/WatchDogs/Anims/DEDSEC_ASCII/frame_9.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_0.png b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_0.png index e653675cb..04019088d 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_0.png and b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_0.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_1.png b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_1.png index ef16a3ac1..7580e0672 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_1.png and b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_1.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_10.png b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_10.png index 764ed9196..085b614de 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_10.png and b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_10.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_11.png b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_11.png index 6696d74f0..25e28b1c8 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_11.png and b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_11.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_12.png b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_12.png index e717fc6a0..3800f631c 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_12.png and b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_12.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_15.png b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_15.png index a1a3c8ef2..7ab129f48 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_15.png and b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_15.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_18.png b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_18.png index 2e9bc1467..4b4d7e882 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_18.png and b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_18.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_2.png b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_2.png index e7e8b480f..aca25d620 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_2.png and b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_2.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_20.png b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_20.png index 8fe9a1dcb..8568b409c 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_20.png and b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_20.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_28.png b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_28.png index fba1043e6..99190bee3 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_28.png and b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_28.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_29.png b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_29.png index 124a11814..01c220f61 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_29.png and b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_29.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_3.png b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_3.png index d58d72645..fccbc38fc 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_3.png and b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_3.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_30.png b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_30.png index b99d6eae1..453c0193a 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_30.png and b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_30.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_31.png b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_31.png index 647915154..c0a1aa73d 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_31.png and b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_31.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_4.png b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_4.png index 63b0e2bc4..0f82c0a3a 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_4.png and b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_4.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_5.png b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_5.png index f6ff270f0..bfdba6da0 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_5.png and b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_5.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_6.png b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_6.png index 0ead83ce6..83fd72311 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_6.png and b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_6.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_7.png b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_7.png index e502c78c9..e59fb833a 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_7.png and b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_7.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_8.png b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_8.png index 77e2db417..1445a89c2 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_8.png and b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_8.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_9.png b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_9.png index 8bb16b121..6e7d7e443 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_9.png and b/assets/packs/WatchDogs/Anims/DEDSEC_LOGO/frame_9.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_0.png b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_0.png index 9d27b4c2f..1ea0cbb87 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_0.png and b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_0.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_1.png b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_1.png index e48f71ab3..8aeb577e0 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_1.png and b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_1.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_10.png b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_10.png index 029fed479..c26261ca8 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_10.png and b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_10.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_15.png b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_15.png index a30fa48a5..512f2efa7 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_15.png and b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_15.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_16.png b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_16.png index 549069adb..18decdfa0 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_16.png and b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_16.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_18.png b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_18.png index a30fa48a5..512f2efa7 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_18.png and b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_18.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_2.png b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_2.png index b552f4b56..9e151f3cd 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_2.png and b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_2.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_20.png b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_20.png index a30fa48a5..512f2efa7 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_20.png and b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_20.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_3.png b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_3.png index 7497c1cda..198f46118 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_3.png and b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_3.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_4.png b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_4.png index 7497c1cda..198f46118 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_4.png and b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_4.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_5.png b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_5.png index ae3e9af96..e9797edd5 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_5.png and b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_5.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_6.png b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_6.png index b0042e5ed..ac2d4908e 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_6.png and b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_6.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_7.png b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_7.png index dc07e5dca..a6f134cd0 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_7.png and b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_7.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_8.png b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_8.png index 3bbee9dde..915ab7c0a 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_8.png and b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_8.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_9.png b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_9.png index aa63ade9d..afabea70d 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_9.png and b/assets/packs/WatchDogs/Anims/DEDSEC_OLD/frame_9.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_0.png b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_0.png index 657d9db32..34d427c49 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_0.png and b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_0.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_10.png b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_10.png index 16cac3eb9..cd53c75d7 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_10.png and b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_10.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_11.png b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_11.png index fc49219fa..ab97e4157 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_11.png and b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_11.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_12.png b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_12.png index e0362e17f..bfcfc02f6 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_12.png and b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_12.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_13.png b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_13.png index 8c14d93ff..f65c79cca 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_13.png and b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_13.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_14.png b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_14.png index caf42900e..104bf39f9 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_14.png and b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_14.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_15.png b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_15.png index 12434487b..ab55682b3 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_15.png and b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_15.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_16.png b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_16.png index eaf70610c..f116cb2ea 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_16.png and b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_16.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_17.png b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_17.png index 6e5b1d804..a93a85432 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_17.png and b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_17.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_2.png b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_2.png index 6e1983e3c..c44726cfb 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_2.png and b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_2.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_3.png b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_3.png index 21478ab8f..e04b5c992 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_3.png and b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_3.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_4.png b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_4.png index 65bbdbbf8..c11d3a71a 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_4.png and b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_4.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_5.png b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_5.png index 2f539ae22..8e97f2b99 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_5.png and b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_5.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_6.png b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_6.png index 692410193..b8619ca13 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_6.png and b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_6.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_7.png b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_7.png index 1c8076949..bd18cfc0e 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_7.png and b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_7.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_8.png b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_8.png index ca04ff07c..5836b2c9b 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_8.png and b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_8.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_9.png b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_9.png index c911225c9..4acc9bf73 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_9.png and b/assets/packs/WatchDogs/Anims/DEDSEC_TALK/frame_9.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_0.png b/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_0.png index c06196679..533905fb4 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_0.png and b/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_0.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_1.png b/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_1.png index f91dd303a..ad6e9cde9 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_1.png and b/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_1.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_10.png b/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_10.png index 49f758f31..0c1ceeb08 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_10.png and b/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_10.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_13.png b/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_13.png index bd79c102b..e11866aec 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_13.png and b/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_13.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_14.png b/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_14.png index 7464c0bf9..a31a0ff97 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_14.png and b/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_14.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_15.png b/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_15.png index da0b0bef2..dae54e114 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_15.png and b/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_15.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_2.png b/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_2.png index 5cb228106..6e8dbc605 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_2.png and b/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_2.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_5.png b/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_5.png index 9c2f3c5dc..31fd86e2c 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_5.png and b/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_5.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_6.png b/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_6.png index 4189a5897..d9b65e133 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_6.png and b/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_6.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_7.png b/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_7.png index 056960b5f..f44df8d23 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_7.png and b/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_7.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_8.png b/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_8.png index d121eb0d5..f3bab36c0 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_8.png and b/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_8.png differ diff --git a/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_9.png b/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_9.png index 317c4fbfe..7fbc1eb57 100644 Binary files a/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_9.png and b/assets/packs/WatchDogs/Anims/DEDSEC_WAVE/frame_9.png differ diff --git a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_0.png b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_0.png index 87aa0b884..515890bdd 100644 Binary files a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_0.png and b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_0.png differ diff --git a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_1.png b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_1.png index f609e86d0..b929a2623 100644 Binary files a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_1.png and b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_1.png differ diff --git a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_10.png b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_10.png index 6b96d6ebf..35588378e 100644 Binary files a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_10.png and b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_10.png differ diff --git a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_11.png b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_11.png index ea4607af4..fb6392201 100644 Binary files a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_11.png and b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_11.png differ diff --git a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_12.png b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_12.png index 69f0c5bb3..f71e32cd3 100644 Binary files a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_12.png and b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_12.png differ diff --git a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_13.png b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_13.png index bab966f1c..0e8e06bb4 100644 Binary files a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_13.png and b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_13.png differ diff --git a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_14.png b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_14.png index ca2662951..cf5223c9e 100644 Binary files a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_14.png and b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_14.png differ diff --git a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_19.png b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_19.png index adc282832..01708c970 100644 Binary files a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_19.png and b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_19.png differ diff --git a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_2.png b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_2.png index f5730c7ff..73d6521cb 100644 Binary files a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_2.png and b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_2.png differ diff --git a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_20.png b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_20.png index ccfbdb3be..4e11f6247 100644 Binary files a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_20.png and b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_20.png differ diff --git a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_21.png b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_21.png index 2f123e8a5..1b5fb69dd 100644 Binary files a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_21.png and b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_21.png differ diff --git a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_6.png b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_6.png index d9102ce23..6f08a8783 100644 Binary files a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_6.png and b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_6.png differ diff --git a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_7.png b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_7.png index 959f2117e..eade268ef 100644 Binary files a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_7.png and b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_7.png differ diff --git a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_8.png b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_8.png index 305ec2b07..a02d18051 100644 Binary files a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_8.png and b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_8.png differ diff --git a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_9.png b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_9.png index 33293b0eb..0b07b81b3 100644 Binary files a/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_9.png and b/assets/packs/WatchDogs/Anims/GUNS_CAR/frame_9.png differ diff --git a/assets/packs/WatchDogs/Anims/JOIN_US/frame_0.png b/assets/packs/WatchDogs/Anims/JOIN_US/frame_0.png index 45819196d..2c787ca1a 100644 Binary files a/assets/packs/WatchDogs/Anims/JOIN_US/frame_0.png and b/assets/packs/WatchDogs/Anims/JOIN_US/frame_0.png differ diff --git a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_10.png b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_10.png index beddd3d59..633529d41 100644 Binary files a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_10.png and b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_10.png differ diff --git a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_11.png b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_11.png index 3338ebbcd..33fad6ad2 100644 Binary files a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_11.png and b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_11.png differ diff --git a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_12.png b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_12.png index 34a1f8f5b..496622ac5 100644 Binary files a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_12.png and b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_12.png differ diff --git a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_13.png b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_13.png index c0827fd9c..86bca43a3 100644 Binary files a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_13.png and b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_13.png differ diff --git a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_14.png b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_14.png index 8974954f5..bd756692c 100644 Binary files a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_14.png and b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_14.png differ diff --git a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_15.png b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_15.png index 4f697db23..9bf8a030d 100644 Binary files a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_15.png and b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_15.png differ diff --git a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_16.png b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_16.png index ba7992344..66e19caf1 100644 Binary files a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_16.png and b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_16.png differ diff --git a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_17.png b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_17.png index 301578c09..ffb945bb0 100644 Binary files a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_17.png and b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_17.png differ diff --git a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_18.png b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_18.png index 499518d65..5603d7a56 100644 Binary files a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_18.png and b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_18.png differ diff --git a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_19.png b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_19.png index af24aff8c..53295eb0d 100644 Binary files a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_19.png and b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_19.png differ diff --git a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_2.png b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_2.png index 28f0b5e57..99b858d47 100644 Binary files a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_2.png and b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_2.png differ diff --git a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_20.png b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_20.png index 93ac4c9f8..c56fa4ae2 100644 Binary files a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_20.png and b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_20.png differ diff --git a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_21.png b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_21.png index 533c5eea1..0600a223e 100644 Binary files a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_21.png and b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_21.png differ diff --git a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_22.png b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_22.png index 9b760a372..bc5eb1f4a 100644 Binary files a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_22.png and b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_22.png differ diff --git a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_23.png b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_23.png index 7973278b2..774536c02 100644 Binary files a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_23.png and b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_23.png differ diff --git a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_25.png b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_25.png index 902503dd4..d347ade36 100644 Binary files a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_25.png and b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_25.png differ diff --git a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_28.png b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_28.png index 3564761c1..b5761d3fc 100644 Binary files a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_28.png and b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_28.png differ diff --git a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_3.png b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_3.png index c62e618fe..1bc595471 100644 Binary files a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_3.png and b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_3.png differ diff --git a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_6.png b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_6.png index 6c5c39e69..0dc08f028 100644 Binary files a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_6.png and b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_6.png differ diff --git a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_7.png b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_7.png index 33bd7448f..6d5842b60 100644 Binary files a/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_7.png and b/assets/packs/WatchDogs/Anims/LOGO_WD2/frame_7.png differ diff --git a/assets/packs/WatchDogs/Anims/REAPER_ALT/frame_0.png b/assets/packs/WatchDogs/Anims/REAPER_ALT/frame_0.png index 863c6e859..3419b56af 100644 Binary files a/assets/packs/WatchDogs/Anims/REAPER_ALT/frame_0.png and b/assets/packs/WatchDogs/Anims/REAPER_ALT/frame_0.png differ diff --git a/assets/packs/WatchDogs/Anims/REAPER_ALT/frame_1.png b/assets/packs/WatchDogs/Anims/REAPER_ALT/frame_1.png index abec6281b..e4183159b 100644 Binary files a/assets/packs/WatchDogs/Anims/REAPER_ALT/frame_1.png and b/assets/packs/WatchDogs/Anims/REAPER_ALT/frame_1.png differ diff --git a/assets/packs/WatchDogs/Anims/REAPER_ALT/frame_29.png b/assets/packs/WatchDogs/Anims/REAPER_ALT/frame_29.png index f488ab565..c85158c94 100644 Binary files a/assets/packs/WatchDogs/Anims/REAPER_ALT/frame_29.png and b/assets/packs/WatchDogs/Anims/REAPER_ALT/frame_29.png differ diff --git a/assets/packs/WatchDogs/Anims/REAPER_ALT/frame_3.png b/assets/packs/WatchDogs/Anims/REAPER_ALT/frame_3.png index e5e248f0f..4744daab4 100644 Binary files a/assets/packs/WatchDogs/Anims/REAPER_ALT/frame_3.png and b/assets/packs/WatchDogs/Anims/REAPER_ALT/frame_3.png differ diff --git a/assets/packs/WatchDogs/Anims/REAPER_ALT/frame_30.png b/assets/packs/WatchDogs/Anims/REAPER_ALT/frame_30.png index 29eb3b927..5d7114510 100644 Binary files a/assets/packs/WatchDogs/Anims/REAPER_ALT/frame_30.png and b/assets/packs/WatchDogs/Anims/REAPER_ALT/frame_30.png differ diff --git a/assets/packs/WatchDogs/Anims/REAPER_ALT/frame_31.png b/assets/packs/WatchDogs/Anims/REAPER_ALT/frame_31.png index 21092d2bc..ca7d02d6b 100644 Binary files a/assets/packs/WatchDogs/Anims/REAPER_ALT/frame_31.png and b/assets/packs/WatchDogs/Anims/REAPER_ALT/frame_31.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL/frame_0.png b/assets/packs/WatchDogs/Anims/SKULL/frame_0.png index c31c64683..e47b35527 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL/frame_0.png and b/assets/packs/WatchDogs/Anims/SKULL/frame_0.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL/frame_1.png b/assets/packs/WatchDogs/Anims/SKULL/frame_1.png index 159107d56..87ba73393 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL/frame_1.png and b/assets/packs/WatchDogs/Anims/SKULL/frame_1.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL/frame_17.png b/assets/packs/WatchDogs/Anims/SKULL/frame_17.png index 224515d97..6dc34d0c7 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL/frame_17.png and b/assets/packs/WatchDogs/Anims/SKULL/frame_17.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL/frame_18.png b/assets/packs/WatchDogs/Anims/SKULL/frame_18.png index 59fc1c106..b33fd9253 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL/frame_18.png and b/assets/packs/WatchDogs/Anims/SKULL/frame_18.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL/frame_19.png b/assets/packs/WatchDogs/Anims/SKULL/frame_19.png index aa35b84f5..472512fde 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL/frame_19.png and b/assets/packs/WatchDogs/Anims/SKULL/frame_19.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL/frame_20.png b/assets/packs/WatchDogs/Anims/SKULL/frame_20.png index 158bb2045..80fa70c59 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL/frame_20.png and b/assets/packs/WatchDogs/Anims/SKULL/frame_20.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL/frame_21.png b/assets/packs/WatchDogs/Anims/SKULL/frame_21.png index 4ffe27fa8..7a9d0f0b2 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL/frame_21.png and b/assets/packs/WatchDogs/Anims/SKULL/frame_21.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL/frame_22.png b/assets/packs/WatchDogs/Anims/SKULL/frame_22.png index 35e63c1a3..3eb24552d 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL/frame_22.png and b/assets/packs/WatchDogs/Anims/SKULL/frame_22.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL/frame_23.png b/assets/packs/WatchDogs/Anims/SKULL/frame_23.png index dbba6a7ee..1e02cc2ad 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL/frame_23.png and b/assets/packs/WatchDogs/Anims/SKULL/frame_23.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL/frame_24.png b/assets/packs/WatchDogs/Anims/SKULL/frame_24.png index e265e9c98..1820fe77b 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL/frame_24.png and b/assets/packs/WatchDogs/Anims/SKULL/frame_24.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL/frame_25.png b/assets/packs/WatchDogs/Anims/SKULL/frame_25.png index 8fdd941a4..310137876 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL/frame_25.png and b/assets/packs/WatchDogs/Anims/SKULL/frame_25.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL/frame_3.png b/assets/packs/WatchDogs/Anims/SKULL/frame_3.png index f33bdac1e..ef0735bd3 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL/frame_3.png and b/assets/packs/WatchDogs/Anims/SKULL/frame_3.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL/frame_4.png b/assets/packs/WatchDogs/Anims/SKULL/frame_4.png index 7f7abd446..d5ae15650 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL/frame_4.png and b/assets/packs/WatchDogs/Anims/SKULL/frame_4.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL/frame_5.png b/assets/packs/WatchDogs/Anims/SKULL/frame_5.png index 6620fe99f..10fe07400 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL/frame_5.png and b/assets/packs/WatchDogs/Anims/SKULL/frame_5.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL/frame_6.png b/assets/packs/WatchDogs/Anims/SKULL/frame_6.png index a7438e44e..163fa1f7f 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL/frame_6.png and b/assets/packs/WatchDogs/Anims/SKULL/frame_6.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL/frame_7.png b/assets/packs/WatchDogs/Anims/SKULL/frame_7.png index 0ab216113..09112a436 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL/frame_7.png and b/assets/packs/WatchDogs/Anims/SKULL/frame_7.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL/frame_8.png b/assets/packs/WatchDogs/Anims/SKULL/frame_8.png index 57aa15f97..2d7307944 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL/frame_8.png and b/assets/packs/WatchDogs/Anims/SKULL/frame_8.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_0.png b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_0.png index 1055d1b43..3a11ef1ee 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_0.png and b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_0.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_1.png b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_1.png index 32fdab109..31b3aa09a 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_1.png and b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_1.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_10.png b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_10.png index 6b63aeea5..05a9d2015 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_10.png and b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_10.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_11.png b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_11.png index f82c98bfd..490235f49 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_11.png and b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_11.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_12.png b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_12.png index 2b21eec71..5731add6d 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_12.png and b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_12.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_13.png b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_13.png index da3380079..27c0aeb85 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_13.png and b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_13.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_14.png b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_14.png index ec9984556..9fc033fd8 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_14.png and b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_14.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_15.png b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_15.png index e539b44fc..3af96a655 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_15.png and b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_15.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_16.png b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_16.png index b81641cc7..7c5a52ccb 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_16.png and b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_16.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_17.png b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_17.png index 1c3ed930a..ed16a52c0 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_17.png and b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_17.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_18.png b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_18.png index 92b494041..ae1c9adbe 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_18.png and b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_18.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_2.png b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_2.png index 0ff490abe..f8ae6d66c 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_2.png and b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_2.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_3.png b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_3.png index 68b339f82..24aef2783 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_3.png and b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_3.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_4.png b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_4.png index 4fa52fafc..f9ce6ca0f 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_4.png and b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_4.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_5.png b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_5.png index 943fbf1cd..445d81f16 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_5.png and b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_5.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_6.png b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_6.png index 062068c64..09072c1df 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_6.png and b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_6.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_7.png b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_7.png index 866ae0bb9..a8c8f9336 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_7.png and b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_7.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_8.png b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_8.png index ae78f135a..1cb79b10b 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_8.png and b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_8.png differ diff --git a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_9.png b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_9.png index 7aef57db1..99235afb9 100644 Binary files a/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_9.png and b/assets/packs/WatchDogs/Anims/SKULL_SPIN/frame_9.png differ diff --git a/assets/packs/WatchDogs/Anims/SPIRAL/frame_0.png b/assets/packs/WatchDogs/Anims/SPIRAL/frame_0.png index 32be6dd89..779cbe637 100644 Binary files a/assets/packs/WatchDogs/Anims/SPIRAL/frame_0.png and b/assets/packs/WatchDogs/Anims/SPIRAL/frame_0.png differ diff --git a/assets/packs/WatchDogs/Anims/SPIRAL/frame_11.png b/assets/packs/WatchDogs/Anims/SPIRAL/frame_11.png index c4463e062..726a97d48 100644 Binary files a/assets/packs/WatchDogs/Anims/SPIRAL/frame_11.png and b/assets/packs/WatchDogs/Anims/SPIRAL/frame_11.png differ diff --git a/assets/packs/WatchDogs/Anims/SPIRAL/frame_12.png b/assets/packs/WatchDogs/Anims/SPIRAL/frame_12.png index aff220aee..f213df585 100644 Binary files a/assets/packs/WatchDogs/Anims/SPIRAL/frame_12.png and b/assets/packs/WatchDogs/Anims/SPIRAL/frame_12.png differ diff --git a/assets/packs/WatchDogs/Anims/SPIRAL/frame_13.png b/assets/packs/WatchDogs/Anims/SPIRAL/frame_13.png index 5129fd169..f861d4e77 100644 Binary files a/assets/packs/WatchDogs/Anims/SPIRAL/frame_13.png and b/assets/packs/WatchDogs/Anims/SPIRAL/frame_13.png differ diff --git a/assets/packs/WatchDogs/Anims/SPIRAL/frame_14.png b/assets/packs/WatchDogs/Anims/SPIRAL/frame_14.png index b7cac981a..8316770e1 100644 Binary files a/assets/packs/WatchDogs/Anims/SPIRAL/frame_14.png and b/assets/packs/WatchDogs/Anims/SPIRAL/frame_14.png differ diff --git a/assets/packs/WatchDogs/Anims/SPIRAL/frame_15.png b/assets/packs/WatchDogs/Anims/SPIRAL/frame_15.png index 89d6e1c78..357055d7f 100644 Binary files a/assets/packs/WatchDogs/Anims/SPIRAL/frame_15.png and b/assets/packs/WatchDogs/Anims/SPIRAL/frame_15.png differ diff --git a/assets/packs/WatchDogs/Anims/SPIRAL/frame_17.png b/assets/packs/WatchDogs/Anims/SPIRAL/frame_17.png index 231205846..064a457b7 100644 Binary files a/assets/packs/WatchDogs/Anims/SPIRAL/frame_17.png and b/assets/packs/WatchDogs/Anims/SPIRAL/frame_17.png differ diff --git a/assets/packs/WatchDogs/Anims/SPIRAL/frame_18.png b/assets/packs/WatchDogs/Anims/SPIRAL/frame_18.png index 776e28d02..9273e7726 100644 Binary files a/assets/packs/WatchDogs/Anims/SPIRAL/frame_18.png and b/assets/packs/WatchDogs/Anims/SPIRAL/frame_18.png differ diff --git a/assets/packs/WatchDogs/Anims/SPIRAL/frame_19.png b/assets/packs/WatchDogs/Anims/SPIRAL/frame_19.png index a2bb03dce..30df04bf8 100644 Binary files a/assets/packs/WatchDogs/Anims/SPIRAL/frame_19.png and b/assets/packs/WatchDogs/Anims/SPIRAL/frame_19.png differ diff --git a/assets/packs/WatchDogs/Anims/SPIRAL/frame_2.png b/assets/packs/WatchDogs/Anims/SPIRAL/frame_2.png index 034ac2634..ce7d5669d 100644 Binary files a/assets/packs/WatchDogs/Anims/SPIRAL/frame_2.png and b/assets/packs/WatchDogs/Anims/SPIRAL/frame_2.png differ diff --git a/assets/packs/WatchDogs/Anims/SPIRAL/frame_20.png b/assets/packs/WatchDogs/Anims/SPIRAL/frame_20.png index 38a42f563..bd1a5bfe0 100644 Binary files a/assets/packs/WatchDogs/Anims/SPIRAL/frame_20.png and b/assets/packs/WatchDogs/Anims/SPIRAL/frame_20.png differ diff --git a/assets/packs/WatchDogs/Anims/SPIRAL/frame_21.png b/assets/packs/WatchDogs/Anims/SPIRAL/frame_21.png index cb2da59f0..47fd8624f 100644 Binary files a/assets/packs/WatchDogs/Anims/SPIRAL/frame_21.png and b/assets/packs/WatchDogs/Anims/SPIRAL/frame_21.png differ diff --git a/assets/packs/WatchDogs/Anims/SPIRAL/frame_22.png b/assets/packs/WatchDogs/Anims/SPIRAL/frame_22.png index 51b6f776a..020eeacfc 100644 Binary files a/assets/packs/WatchDogs/Anims/SPIRAL/frame_22.png and b/assets/packs/WatchDogs/Anims/SPIRAL/frame_22.png differ diff --git a/assets/packs/WatchDogs/Anims/SPIRAL/frame_3.png b/assets/packs/WatchDogs/Anims/SPIRAL/frame_3.png index 16f7748d7..8bcfd31d7 100644 Binary files a/assets/packs/WatchDogs/Anims/SPIRAL/frame_3.png and b/assets/packs/WatchDogs/Anims/SPIRAL/frame_3.png differ diff --git a/assets/packs/WatchDogs/Anims/SPIRAL/frame_4.png b/assets/packs/WatchDogs/Anims/SPIRAL/frame_4.png index 638029b00..33aa3b4f4 100644 Binary files a/assets/packs/WatchDogs/Anims/SPIRAL/frame_4.png and b/assets/packs/WatchDogs/Anims/SPIRAL/frame_4.png differ diff --git a/assets/packs/WatchDogs/Anims/SPIRAL/frame_5.png b/assets/packs/WatchDogs/Anims/SPIRAL/frame_5.png index be8499688..5693c9846 100644 Binary files a/assets/packs/WatchDogs/Anims/SPIRAL/frame_5.png and b/assets/packs/WatchDogs/Anims/SPIRAL/frame_5.png differ diff --git a/assets/packs/WatchDogs/Anims/SPIRAL/frame_6.png b/assets/packs/WatchDogs/Anims/SPIRAL/frame_6.png index d8c4b5019..fac36c739 100644 Binary files a/assets/packs/WatchDogs/Anims/SPIRAL/frame_6.png and b/assets/packs/WatchDogs/Anims/SPIRAL/frame_6.png differ diff --git a/assets/packs/WatchDogs/Anims/SPIRAL/frame_7.png b/assets/packs/WatchDogs/Anims/SPIRAL/frame_7.png index 6fc824dc2..4e78743cd 100644 Binary files a/assets/packs/WatchDogs/Anims/SPIRAL/frame_7.png and b/assets/packs/WatchDogs/Anims/SPIRAL/frame_7.png differ diff --git a/assets/packs/WatchDogs/Icons/Passport/passport_128x64.png b/assets/packs/WatchDogs/Icons/Passport/passport_128x64.png index 8694398c4..9a16a7500 100644 Binary files a/assets/packs/WatchDogs/Icons/Passport/passport_128x64.png and b/assets/packs/WatchDogs/Icons/Passport/passport_128x64.png differ diff --git a/assets/packs/WatchDogs/Icons/RFID/RFIDDolphinReceive_97x61.png b/assets/packs/WatchDogs/Icons/RFID/RFIDDolphinReceive_97x61.png index 54c6c3ba7..2c1c41bdd 100644 Binary files a/assets/packs/WatchDogs/Icons/RFID/RFIDDolphinReceive_97x61.png and b/assets/packs/WatchDogs/Icons/RFID/RFIDDolphinReceive_97x61.png differ diff --git a/assets/packs/WatchDogs/Icons/RFID/RFIDDolphinSend_97x61.png b/assets/packs/WatchDogs/Icons/RFID/RFIDDolphinSend_97x61.png index 54c6c3ba7..2c1c41bdd 100644 Binary files a/assets/packs/WatchDogs/Icons/RFID/RFIDDolphinSend_97x61.png and b/assets/packs/WatchDogs/Icons/RFID/RFIDDolphinSend_97x61.png differ diff --git a/assets/packs/WatchDogs/Icons/SubGhz/Fishing_123x52.png b/assets/packs/WatchDogs/Icons/SubGhz/Fishing_123x52.png index e6aca21ad..f601054ec 100644 Binary files a/assets/packs/WatchDogs/Icons/SubGhz/Fishing_123x52.png and b/assets/packs/WatchDogs/Icons/SubGhz/Fishing_123x52.png differ diff --git a/assets/packs/WatchDogs/Icons/SubGhz/Scanning_123x52.png b/assets/packs/WatchDogs/Icons/SubGhz/Scanning_123x52.png index e6aca21ad..f601054ec 100644 Binary files a/assets/packs/WatchDogs/Icons/SubGhz/Scanning_123x52.png and b/assets/packs/WatchDogs/Icons/SubGhz/Scanning_123x52.png differ diff --git a/assets/protobuf b/assets/protobuf index c255d71a9..ea4f185f5 160000 --- a/assets/protobuf +++ b/assets/protobuf @@ -1 +1 @@ -Subproject commit c255d71a90af202515deb7aaa51685d45a196152 +Subproject commit ea4f185f5eaa265955c520eae2832887ee6aa5e4 diff --git a/assets/slideshow/first_start/frame_00.png b/assets/slideshow/first_start/frame_00.png index 51e8f3bbf..b464e0c55 100644 Binary files a/assets/slideshow/first_start/frame_00.png and b/assets/slideshow/first_start/frame_00.png differ diff --git a/assets/slideshow/first_start/frame_01.png b/assets/slideshow/first_start/frame_01.png index 21c8bb319..5687e44df 100644 Binary files a/assets/slideshow/first_start/frame_01.png and b/assets/slideshow/first_start/frame_01.png differ diff --git a/assets/slideshow/first_start/frame_02.png b/assets/slideshow/first_start/frame_02.png index 01f58736e..f9d1fafb7 100644 Binary files a/assets/slideshow/first_start/frame_02.png and b/assets/slideshow/first_start/frame_02.png differ diff --git a/assets/slideshow/first_start/frame_03.png b/assets/slideshow/first_start/frame_03.png index 898d59f95..c8fc8e1b0 100644 Binary files a/assets/slideshow/first_start/frame_03.png and b/assets/slideshow/first_start/frame_03.png differ diff --git a/assets/slideshow/first_start/frame_04.png b/assets/slideshow/first_start/frame_04.png index 1d187554a..942eded49 100644 Binary files a/assets/slideshow/first_start/frame_04.png and b/assets/slideshow/first_start/frame_04.png differ diff --git a/assets/slideshow/first_start/frame_05.png b/assets/slideshow/first_start/frame_05.png index 64b34b05b..2df80976a 100644 Binary files a/assets/slideshow/first_start/frame_05.png and b/assets/slideshow/first_start/frame_05.png differ diff --git a/assets/slideshow/firstboot/frame_00.png b/assets/slideshow/firstboot/frame_00.png index 1c4aff150..7df82f8c6 100644 Binary files a/assets/slideshow/firstboot/frame_00.png and b/assets/slideshow/firstboot/frame_00.png differ diff --git a/assets/slideshow/firstboot/frame_01.png b/assets/slideshow/firstboot/frame_01.png index f667a0d72..003546231 100644 Binary files a/assets/slideshow/firstboot/frame_01.png and b/assets/slideshow/firstboot/frame_01.png differ diff --git a/assets/slideshow/firstboot/frame_02.png b/assets/slideshow/firstboot/frame_02.png index 3363df414..d02b36dca 100644 Binary files a/assets/slideshow/firstboot/frame_02.png and b/assets/slideshow/firstboot/frame_02.png differ diff --git a/assets/slideshow/firstboot/frame_03.png b/assets/slideshow/firstboot/frame_03.png index 835730863..babea6ee1 100644 Binary files a/assets/slideshow/firstboot/frame_03.png and b/assets/slideshow/firstboot/frame_03.png differ diff --git a/assets/slideshow/firstboot/frame_04.png b/assets/slideshow/firstboot/frame_04.png index 6f33a02ad..6bb25d39e 100644 Binary files a/assets/slideshow/firstboot/frame_04.png and b/assets/slideshow/firstboot/frame_04.png differ diff --git a/assets/slideshow/firstboot/frame_06.png b/assets/slideshow/firstboot/frame_06.png index 36131a255..c66ae078e 100644 Binary files a/assets/slideshow/firstboot/frame_06.png and b/assets/slideshow/firstboot/frame_06.png differ diff --git a/assets/slideshow/update_default/frame_00.png b/assets/slideshow/update_default/frame_00.png index 32a22f84b..790085e87 100644 Binary files a/assets/slideshow/update_default/frame_00.png and b/assets/slideshow/update_default/frame_00.png differ diff --git a/documentation/FuriHalDebuging.md b/documentation/FuriHalDebugging.md similarity index 100% rename from documentation/FuriHalDebuging.md rename to documentation/FuriHalDebugging.md diff --git a/documentation/UnitTests.md b/documentation/UnitTests.md index 9711c6ae1..5d04c8f67 100644 --- a/documentation/UnitTests.md +++ b/documentation/UnitTests.md @@ -43,7 +43,7 @@ To add unit tests for your protocol, follow these steps: 1. Create a file named `test_.irtest` in the [assets](https://github.com/flipperdevices/flipperzero-firmware/tree/dev/applications/debug/unit_tests/resources/unit_tests/infrared) directory. 2. Fill it with the test data (more on it below). -3. Add the test code to [infrared_test.c](https://github.com/flipperdevices/flipperzero-firmware/blob/dev/applications/debug/unit_tests/infrared/infrared_test.c). +3. Add the test code to [infrared_test.c](https://github.com/flipperdevices/flipperzero-firmware/blob/dev/applications/debug/unit_tests/tests/infrared/infrared_test.c). 4. Build and install firmware with resources, install it on your Flipper and run the tests to see if they pass. ##### Test data format diff --git a/furi/core/memmgr.c b/furi/core/memmgr.c index d3ff873ae..8ee0d1723 100644 --- a/furi/core/memmgr.c +++ b/furi/core/memmgr.c @@ -106,5 +106,7 @@ void* aligned_malloc(size_t size, size_t alignment) { } void aligned_free(void* p) { - free(((void**)p)[-1]); + if(p) { + free(((void**)p)[-1]); + } } diff --git a/furi/core/stream_buffer.c b/furi/core/stream_buffer.c index 783b2d741..902ec931c 100644 --- a/furi/core/stream_buffer.c +++ b/furi/core/stream_buffer.c @@ -54,6 +54,11 @@ bool furi_stream_set_trigger_level(FuriStreamBuffer* stream_buffer, size_t trigg pdTRUE; } +size_t furi_stream_get_trigger_level(FuriStreamBuffer* stream_buffer) { + furi_check(stream_buffer); + return ((StaticStreamBuffer_t*)stream_buffer)->xTriggerLevelBytes; +} + size_t furi_stream_buffer_send( FuriStreamBuffer* stream_buffer, const void* data, diff --git a/furi/core/stream_buffer.h b/furi/core/stream_buffer.h index eef8ee510..deca813c7 100644 --- a/furi/core/stream_buffer.h +++ b/furi/core/stream_buffer.h @@ -54,6 +54,17 @@ void furi_stream_buffer_free(FuriStreamBuffer* stream_buffer); */ bool furi_stream_set_trigger_level(FuriStreamBuffer* stream_buffer, size_t trigger_level); +/** + * @brief Get trigger level for stream buffer. + * A stream buffer's trigger level is the number of bytes that must be in the + * stream buffer before a task that is blocked on the stream buffer to + * wait for data is moved out of the blocked state. + * + * @param stream_buffer The stream buffer instance + * @return The trigger level for the stream buffer + */ +size_t furi_stream_get_trigger_level(FuriStreamBuffer* stream_buffer); + /** * @brief Sends bytes to a stream buffer. The bytes are copied into the stream buffer. * Wakes up task waiting for data to become available if called from ISR. diff --git a/furi/core/string.h b/furi/core/string.h index 84b8c6a24..0d407356b 100644 --- a/furi/core/string.h +++ b/furi/core/string.h @@ -129,12 +129,12 @@ void furi_string_swap(FuriString* string_1, FuriString* string_2); /** Move string_2 content to string_1. * - * Set the string to the other one, and destroy the other one. + * Copy data from one string to another and destroy the source. * - * @param string_1 The FuriString instance 1 - * @param string_2 The FuriString instance 2 + * @param destination The destination FuriString + * @param source The source FuriString */ -void furi_string_move(FuriString* string_1, FuriString* string_2); +void furi_string_move(FuriString* destination, FuriString* source); /** Compute a hash for the string. * diff --git a/furi/core/thread.c b/furi/core/thread.c index 73e42b4c0..5b8b59f12 100644 --- a/furi/core/thread.c +++ b/furi/core/thread.c @@ -25,12 +25,17 @@ #define THREAD_MAX_STACK_SIZE (UINT16_MAX * sizeof(StackType_t)) -typedef struct FuriThreadStdout FuriThreadStdout; - -struct FuriThreadStdout { +typedef struct { FuriThreadStdoutWriteCallback write_callback; FuriString* buffer; -}; + void* context; +} FuriThreadStdout; + +typedef struct { + FuriThreadStdinReadCallback read_callback; + FuriString* unread_buffer; // output.buffer = furi_string_alloc(); + thread->input.unread_buffer = furi_string_alloc(); FuriThread* parent = NULL; if(xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) { @@ -247,6 +254,7 @@ void furi_thread_free(FuriThread* thread) { } furi_string_free(thread->output.buffer); + furi_string_free(thread->input.unread_buffer); free(thread); } @@ -717,13 +725,22 @@ uint32_t furi_thread_get_stack_space(FuriThreadId thread_id) { static size_t __furi_thread_stdout_write(FuriThread* thread, const char* data, size_t size) { if(thread->output.write_callback != NULL) { - thread->output.write_callback(data, size); + thread->output.write_callback(data, size, thread->output.context); } else { furi_log_tx((const uint8_t*)data, size); } return size; } +static size_t + __furi_thread_stdin_read(FuriThread* thread, char* data, size_t size, FuriWait timeout) { + if(thread->input.read_callback != NULL) { + return thread->input.read_callback(data, size, timeout, thread->input.context); + } else { + return 0; + } +} + static int32_t __furi_thread_stdout_flush(FuriThread* thread) { FuriString* buffer = thread->output.buffer; size_t size = furi_string_size(buffer); @@ -734,19 +751,33 @@ static int32_t __furi_thread_stdout_flush(FuriThread* thread) { return 0; } -void furi_thread_set_stdout_callback(FuriThreadStdoutWriteCallback callback) { - FuriThread* thread = furi_thread_get_current(); - furi_check(thread); - __furi_thread_stdout_flush(thread); - thread->output.write_callback = callback; -} - FuriThreadStdoutWriteCallback furi_thread_get_stdout_callback(void) { FuriThread* thread = furi_thread_get_current(); furi_check(thread); return thread->output.write_callback; } +FuriThreadStdinReadCallback furi_thread_get_stdin_callback(void) { + FuriThread* thread = furi_thread_get_current(); + furi_check(thread); + return thread->input.read_callback; +} + +void furi_thread_set_stdout_callback(FuriThreadStdoutWriteCallback callback, void* context) { + FuriThread* thread = furi_thread_get_current(); + furi_check(thread); + __furi_thread_stdout_flush(thread); + thread->output.write_callback = callback; + thread->output.context = context; +} + +void furi_thread_set_stdin_callback(FuriThreadStdinReadCallback callback, void* context) { + FuriThread* thread = furi_thread_get_current(); + furi_check(thread); + thread->input.read_callback = callback; + thread->input.context = context; +} + size_t furi_thread_stdout_write(const char* data, size_t size) { FuriThread* thread = furi_thread_get_current(); furi_check(thread); @@ -779,6 +810,31 @@ int32_t furi_thread_stdout_flush(void) { return __furi_thread_stdout_flush(thread); } +size_t furi_thread_stdin_read(char* buffer, size_t size, FuriWait timeout) { + FuriThread* thread = furi_thread_get_current(); + furi_check(thread); + + size_t from_buffer = MIN(furi_string_size(thread->input.unread_buffer), size); + size_t from_input = size - from_buffer; + size_t from_input_actual = + __furi_thread_stdin_read(thread, buffer + from_buffer, from_input, timeout); + memcpy(buffer, furi_string_get_cstr(thread->input.unread_buffer), from_buffer); + furi_string_right(thread->input.unread_buffer, from_buffer); + + return from_buffer + from_input_actual; +} + +void furi_thread_stdin_unread(char* buffer, size_t size) { + FuriThread* thread = furi_thread_get_current(); + furi_check(thread); + + FuriString* new_buf = furi_string_alloc(); // there's no furi_string_alloc_set_strn :( + furi_string_set_strn(new_buf, buffer, size); + furi_string_cat(new_buf, thread->input.unread_buffer); + furi_string_free(thread->input.unread_buffer); + thread->input.unread_buffer = new_buf; +} + void furi_thread_suspend(FuriThreadId thread_id) { furi_check(thread_id); diff --git a/furi/core/thread.h b/furi/core/thread.h index ed7aa4553..9abfde5cd 100644 --- a/furi/core/thread.h +++ b/furi/core/thread.h @@ -74,8 +74,23 @@ typedef int32_t (*FuriThreadCallback)(void* context); * * @param[in] data pointer to the data to be written to the standard out * @param[in] size size of the data in bytes + * @param[in] context optional context */ -typedef void (*FuriThreadStdoutWriteCallback)(const char* data, size_t size); +typedef void (*FuriThreadStdoutWriteCallback)(const char* data, size_t size, void* context); + +/** + * @brief Standard input callback function pointer type + * + * The function to be used as a standard input callback MUST follow this signature. + * + * @param[out] buffer buffer to read data into + * @param[in] size maximum number of bytes to read into the buffer + * @param[in] timeout how long to wait for (in ticks) before giving up + * @param[in] context optional context + * @returns number of bytes that was actually read into the buffer + */ +typedef size_t ( + *FuriThreadStdinReadCallback)(char* buffer, size_t size, FuriWait timeout, void* context); /** * @brief State change callback function pointer type. @@ -468,13 +483,30 @@ uint32_t furi_thread_get_stack_space(FuriThreadId thread_id); */ FuriThreadStdoutWriteCallback furi_thread_get_stdout_callback(void); +/** + * @brief Get the standard input callback for the current thead. + * + * @return pointer to the standard in callback function + */ +FuriThreadStdinReadCallback furi_thread_get_stdin_callback(void); + /** Set standard output callback for the current thread. * * @param[in] callback pointer to the callback function or NULL to clear + * @param[in] context context to be passed to the callback */ -void furi_thread_set_stdout_callback(FuriThreadStdoutWriteCallback callback); +void furi_thread_set_stdout_callback(FuriThreadStdoutWriteCallback callback, void* context); + +/** Set standard input callback for the current thread. + * + * @param[in] callback pointer to the callback function or NULL to clear + * @param[in] context context to be passed to the callback + */ +void furi_thread_set_stdin_callback(FuriThreadStdinReadCallback callback, void* context); /** Write data to buffered standard output. + * + * @note You can also use the standard C `putc`, `puts`, `printf` and friends. * * @param[in] data pointer to the data to be written * @param[in] size data size in bytes @@ -489,6 +521,29 @@ size_t furi_thread_stdout_write(const char* data, size_t size); */ int32_t furi_thread_stdout_flush(void); +/** Read data from the standard input + * + * @note You can also use the standard C `getc`, `gets` and friends. + * + * @param[in] buffer pointer to the buffer to read data into + * @param[in] size how many bytes to read into the buffer + * @param[in] timeout how long to wait for (in ticks) before giving up + * @return number of bytes that was actually read + */ +size_t furi_thread_stdin_read(char* buffer, size_t size, FuriWait timeout); + +/** Puts data back into the standard input buffer + * + * `furi_thread_stdin_read` will return the bytes in the same order that they + * were supplied to this function. + * + * @note You can also use the standard C `ungetc`. + * + * @param[in] buffer pointer to the buffer to get data from + * @param[in] size how many bytes to read from the buffer + */ +void furi_thread_stdin_unread(char* buffer, size_t size); + /** * @brief Suspend a thread. * diff --git a/lib/ble_profile/extra_services/hid_service.c b/lib/ble_profile/extra_services/hid_service.c index e46d2010c..9f9a0f752 100644 --- a/lib/ble_profile/extra_services/hid_service.c +++ b/lib/ble_profile/extra_services/hid_service.c @@ -10,13 +10,13 @@ #define TAG "BleHid" #define BLE_SVC_HID_REPORT_MAP_MAX_LEN (255) -#define BLE_SVC_HID_REPORT_MAX_LEN (255) -#define BLE_SVC_HID_REPORT_REF_LEN (2) -#define BLE_SVC_HID_INFO_LEN (4) -#define BLE_SVC_HID_CONTROL_POINT_LEN (1) +#define BLE_SVC_HID_REPORT_MAX_LEN (255) +#define BLE_SVC_HID_REPORT_REF_LEN (2) +#define BLE_SVC_HID_INFO_LEN (4) +#define BLE_SVC_HID_CONTROL_POINT_LEN (1) -#define BLE_SVC_HID_INPUT_REPORT_COUNT (3) -#define BLE_SVC_HID_OUTPUT_REPORT_COUNT (0) +#define BLE_SVC_HID_INPUT_REPORT_COUNT (3) +#define BLE_SVC_HID_OUTPUT_REPORT_COUNT (0) #define BLE_SVC_HID_FEATURE_REPORT_COUNT (0) #define BLE_SVC_HID_REPORT_COUNT \ (BLE_SVC_HID_INPUT_REPORT_COUNT + BLE_SVC_HID_OUTPUT_REPORT_COUNT + \ @@ -157,6 +157,7 @@ static BleEventAckStatus ble_svc_hid_event_handler(void* event, void* context) { hci_event_pckt* event_pckt = (hci_event_pckt*)(((hci_uart_pckt*)event)->data); evt_blecore_aci* blecore_evt = (evt_blecore_aci*)event_pckt->data; // aci_gatt_attribute_modified_event_rp0* attribute_modified; + if(event_pckt->evt == HCI_VENDOR_SPECIFIC_DEBUG_EVT_CODE) { if(blecore_evt->ecode == ACI_GATT_ATTRIBUTE_MODIFIED_VSEVT_CODE) { // Process modification events @@ -274,6 +275,7 @@ bool ble_svc_hid_update_input_report( .data_ptr = data, .data_len = len, }; + return ble_gatt_characteristic_update( hid_svc->svc_handle, &hid_svc->input_report_chars[input_report_num], &report_data); } diff --git a/lib/flipper_application/elf/elf_file.c b/lib/flipper_application/elf/elf_file.c index 2a9307cac..5eab0efdd 100644 --- a/lib/flipper_application/elf/elf_file.c +++ b/lib/flipper_application/elf/elf_file.c @@ -830,9 +830,7 @@ void elf_file_free(ELFFile* elf) { for(ELFSectionDict_it(it, elf->sections); !ELFSectionDict_end_p(it); ELFSectionDict_next(it)) { const ELFSectionDict_itref_t* itref = ELFSectionDict_cref(it); - if(itref->value.data) { - aligned_free(itref->value.data); - } + aligned_free(itref->value.data); if(itref->value.fast_rel) { if(itref->value.fast_rel->data) { aligned_free(itref->value.fast_rel->data); diff --git a/lib/flipper_format/flipper_format.c b/lib/flipper_format/flipper_format.c index 8992247d1..d07022e12 100644 --- a/lib/flipper_format/flipper_format.c +++ b/lib/flipper_format/flipper_format.c @@ -403,6 +403,11 @@ bool flipper_format_write_comment_cstr(FlipperFormat* flipper_format, const char return flipper_format_stream_write_comment_cstr(flipper_format->stream, data); } +bool flipper_format_write_empty_line(FlipperFormat* flipper_format) { + furi_check(flipper_format); + return flipper_format_stream_write_eol(flipper_format->stream); +} + bool flipper_format_delete_key(FlipperFormat* flipper_format, const char* key) { furi_check(flipper_format); FlipperStreamWriteData write_data = { diff --git a/lib/flipper_format/flipper_format.h b/lib/flipper_format/flipper_format.h index 46f78e255..4a1bb767b 100644 --- a/lib/flipper_format/flipper_format.h +++ b/lib/flipper_format/flipper_format.h @@ -518,6 +518,14 @@ bool flipper_format_write_comment(FlipperFormat* flipper_format, FuriString* dat */ bool flipper_format_write_comment_cstr(FlipperFormat* flipper_format, const char* data); +/** Write empty line (Improves readability for human based parsing) + * + * @param flipper_format Pointer to a FlipperFormat instance + * + * @return True on success + */ +bool flipper_format_write_empty_line(FlipperFormat* flipper_format); + /** Removes the first matching key and its value. Sets the RW pointer to a * position of deleted data. * diff --git a/lib/momentum/settings.c b/lib/momentum/settings.c index b24596e44..a42e8bd65 100644 --- a/lib/momentum/settings.c +++ b/lib/momentum/settings.c @@ -14,7 +14,8 @@ MomentumSettings momentum_settings = { .menu_style = MenuStyleDsi, // DSi .lock_on_boot = false, // OFF .bad_pins_format = false, // OFF - .allow_locked_rpc_commands = false, // OFF + .allow_locked_rpc_usb = false, // OFF + .allow_locked_rpc_ble = false, // OFF .lockscreen_poweroff = true, // ON .lockscreen_time = true, // ON .lockscreen_seconds = false, // OFF @@ -83,7 +84,8 @@ static const struct { {setting_bool(unlock_anims)}, {setting_enum(menu_style, MenuStyleCount)}, {setting_bool(bad_pins_format)}, - {setting_bool(allow_locked_rpc_commands)}, + {setting_bool(allow_locked_rpc_usb)}, + {setting_bool(allow_locked_rpc_ble)}, {setting_bool(lock_on_boot)}, {setting_bool(lockscreen_poweroff)}, {setting_bool(lockscreen_time)}, diff --git a/lib/momentum/settings.h b/lib/momentum/settings.h index f55034271..c59306f63 100644 --- a/lib/momentum/settings.h +++ b/lib/momentum/settings.h @@ -29,6 +29,7 @@ typedef enum { MenuStyleC64, MenuStyleCompact, MenuStyleMNTM, + MenuStyleCoverFlow, MenuStyleCount, } MenuStyle; @@ -70,7 +71,8 @@ typedef struct { MenuStyle menu_style; bool lock_on_boot; bool bad_pins_format; - bool allow_locked_rpc_commands; + bool allow_locked_rpc_usb; + bool allow_locked_rpc_ble; bool lockscreen_poweroff; bool lockscreen_time; bool lockscreen_seconds; diff --git a/lib/nfc/nfc.c b/lib/nfc/nfc.c index 4f4358711..90e65b282 100644 --- a/lib/nfc/nfc.c +++ b/lib/nfc/nfc.c @@ -646,33 +646,6 @@ NfcError nfc_iso15693_listener_tx_sof(Nfc* instance) { return ret; } -NfcError nfc_iso15693_detect_mode(Nfc* instance) { - furi_check(instance); - - FuriHalNfcError error = furi_hal_nfc_iso15693_detect_mode(); - NfcError ret = nfc_process_hal_error(error); - - return ret; -} - -NfcError nfc_iso15693_force_1outof4(Nfc* instance) { - furi_check(instance); - - FuriHalNfcError error = furi_hal_nfc_iso15693_force_1outof4(); - NfcError ret = nfc_process_hal_error(error); - - return ret; -} - -NfcError nfc_iso15693_force_1outof256(Nfc* instance) { - furi_check(instance); - - FuriHalNfcError error = furi_hal_nfc_iso15693_force_1outof256(); - NfcError ret = nfc_process_hal_error(error); - - return ret; -} - NfcError nfc_felica_listener_set_sensf_res_data( Nfc* instance, const uint8_t* idm, diff --git a/lib/nfc/nfc.h b/lib/nfc/nfc.h index ebd29dc4b..8fbf90d1f 100644 --- a/lib/nfc/nfc.h +++ b/lib/nfc/nfc.h @@ -380,30 +380,6 @@ NfcError nfc_felica_listener_set_sensf_res_data( */ NfcError nfc_iso15693_listener_tx_sof(Nfc* instance); -/** - * @brief Set ISO15693 parser mode to autodetect - * -* @param[in,out] instance pointer to the instance to be configured. - * @returns NfcErrorNone on success, any other error code on failure. -*/ -NfcError nfc_iso15693_detect_mode(Nfc* instance); - -/** - * @brief Set ISO15693 parser mode to 1OutOf4, disables autodetection - * - * @param[in,out] instance pointer to the instance to be configured. - * @return NfcErrorNone on success, any other error code on failure. -*/ -NfcError nfc_iso15693_force_1outof4(Nfc* instance); - -/** - * @brief Set ISO15693 parser mode to 1OutOf256, disables autodetection - * - * @param[in,out] instance pointer to the instance to be configured. - * @return NfcErrorNone on success, any other error code on failure. -*/ -NfcError nfc_iso15693_force_1outof256(Nfc* instance); - #ifdef __cplusplus } #endif diff --git a/lib/nfc/nfc_mock.c b/lib/nfc/nfc_mock.c index 9826ea36f..ee4bb09cc 100644 --- a/lib/nfc/nfc_mock.c +++ b/lib/nfc/nfc_mock.c @@ -497,24 +497,6 @@ NfcError nfc_iso15693_listener_tx_sof(Nfc* instance) { return NfcErrorNone; } -NfcError nfc_iso15693_detect_mode(Nfc* instance) { - UNUSED(instance); - - return NfcErrorNone; -} - -NfcError nfc_iso15693_force_1outof4(Nfc* instance) { - UNUSED(instance); - - return NfcErrorNone; -} - -NfcError nfc_iso15693_force_1outof256(Nfc* instance) { - UNUSED(instance); - - return NfcErrorNone; -} - NfcError nfc_felica_listener_set_sensf_res_data( Nfc* instance, const uint8_t* idm, diff --git a/lib/nfc/protocols/mf_classic/mf_classic_poller.c b/lib/nfc/protocols/mf_classic/mf_classic_poller.c index ec37c8015..b2d9b114a 100644 --- a/lib/nfc/protocols/mf_classic/mf_classic_poller.c +++ b/lib/nfc/protocols/mf_classic/mf_classic_poller.c @@ -1921,7 +1921,8 @@ NfcCommand mf_classic_poller_handler_nested_controller(MfClassicPoller* instance sizeof(MfClassicKey)) : NULL; } - if((is_weak || is_last_iter_for_hard_key) && dict_attack_ctx->nested_nonce.count > 0) { + if((is_weak && (dict_attack_ctx->nested_nonce.count == 1)) || + (is_last_iter_for_hard_key && (dict_attack_ctx->nested_nonce.count == 8))) { // Key verify and reuse dict_attack_ctx->nested_phase = MfClassicNestedPhaseDictAttackVerify; dict_attack_ctx->auth_passed = false; diff --git a/lib/nfc/protocols/mf_plus/mf_plus_i.c b/lib/nfc/protocols/mf_plus/mf_plus_i.c index 4ad2ff878..bd32956d6 100644 --- a/lib/nfc/protocols/mf_plus/mf_plus_i.c +++ b/lib/nfc/protocols/mf_plus/mf_plus_i.c @@ -27,65 +27,51 @@ MfPlusError mf_plus_get_type_from_version( MfPlusError error = MfPlusErrorProtocol; - if(mf_plus_data->version.hw_major == 0x02 || mf_plus_data->version.hw_major == 0x82) { + if(mf_plus_data->version.hw_type == 0x02 || mf_plus_data->version.hw_type == 0x82) { error = MfPlusErrorNone; - if(iso14443_4a_data->iso14443_3a_data->sak == 0x10) { - // Mifare Plus 2K SL2 - mf_plus_data->type = MfPlusTypePlus; + // Mifare Plus EV1/EV2 + + // Revision + switch(mf_plus_data->version.hw_major) { + case 0x11: + mf_plus_data->type = MfPlusTypeEV1; + FURI_LOG_D(TAG, "Mifare Plus EV1"); + break; + case 0x22: + mf_plus_data->type = MfPlusTypeEV2; + FURI_LOG_D(TAG, "Mifare Plus EV2"); + break; + default: + mf_plus_data->type = MfPlusTypeUnknown; + FURI_LOG_D(TAG, "Unknown Mifare Plus EV type"); + break; + } + + // Storage size + switch(mf_plus_data->version.hw_storage) { + case 0x16: mf_plus_data->size = MfPlusSize2K; - mf_plus_data->security_level = MfPlusSecurityLevel2; - FURI_LOG_D(TAG, "Mifare Plus 2K SL2"); - } else if(iso14443_4a_data->iso14443_3a_data->sak == 0x11) { - // Mifare Plus 4K SL3 - mf_plus_data->type = MfPlusTypePlus; + FURI_LOG_D(TAG, "2K"); + break; + case 0x18: mf_plus_data->size = MfPlusSize4K; + FURI_LOG_D(TAG, "4K"); + break; + default: + mf_plus_data->size = MfPlusSizeUnknown; + FURI_LOG_D(TAG, "Unknown storage size"); + break; + } + + // Security level + if(iso14443_4a_data->iso14443_3a_data->sak == 0x20) { + // Mifare Plus EV1/2 SL3 mf_plus_data->security_level = MfPlusSecurityLevel3; - FURI_LOG_D(TAG, "Mifare Plus 4K SL3"); + FURI_LOG_D(TAG, "Mifare Plus EV1/2 SL3"); } else { - // Mifare Plus EV1/EV2 - - // Revision - switch(mf_plus_data->version.hw_major) { - case 0x11: - mf_plus_data->type = MfPlusTypeEV1; - FURI_LOG_D(TAG, "Mifare Plus EV1"); - break; - case 0x22: - mf_plus_data->type = MfPlusTypeEV2; - FURI_LOG_D(TAG, "Mifare Plus EV2"); - break; - default: - mf_plus_data->type = MfPlusTypeUnknown; - FURI_LOG_D(TAG, "Unknown Mifare Plus EV type"); - break; - } - - // Storage size - switch(mf_plus_data->version.hw_storage) { - case 0x16: - mf_plus_data->size = MfPlusSize2K; - FURI_LOG_D(TAG, "2K"); - break; - case 0x18: - mf_plus_data->size = MfPlusSize4K; - FURI_LOG_D(TAG, "4K"); - break; - default: - mf_plus_data->size = MfPlusSizeUnknown; - FURI_LOG_D(TAG, "Unknown storage size"); - break; - } - - // Security level - if(iso14443_4a_data->iso14443_3a_data->sak == 0x20) { - // Mifare Plus EV1/2 SL3 - mf_plus_data->security_level = MfPlusSecurityLevel3; - FURI_LOG_D(TAG, "Miare Plus EV1/2 SL3"); - } else { - // Mifare Plus EV1/2 SL1 - mf_plus_data->security_level = MfPlusSecurityLevel1; - FURI_LOG_D(TAG, "Miare Plus EV1/2 SL1"); - } + // Mifare Plus EV1/2 SL1 + mf_plus_data->security_level = MfPlusSecurityLevel1; + FURI_LOG_D(TAG, "Mifare Plus EV1/2 SL1"); } } @@ -148,6 +134,24 @@ MfPlusError FURI_LOG_D(TAG, "Sak 08 but no known Mifare Plus type"); } + break; + case 0x10: + // Mifare Plus X 2K SL2 + mf_plus_data->type = MfPlusTypeX; + mf_plus_data->size = MfPlusSize2K; + mf_plus_data->security_level = MfPlusSecurityLevel2; + FURI_LOG_D(TAG, "Mifare Plus X 2K SL2"); + error = MfPlusErrorNone; + + break; + case 0x11: + // Mifare Plus X 4K SL2 + mf_plus_data->type = MfPlusTypeX; + mf_plus_data->size = MfPlusSize4K; + mf_plus_data->security_level = MfPlusSecurityLevel2; + FURI_LOG_D(TAG, "Mifare Plus X 4K SL2"); + error = MfPlusErrorNone; + break; case 0x18: if(memcmp( @@ -234,10 +238,22 @@ MfPlusError } MfPlusError mf_plus_version_parse(MfPlusVersion* data, const BitBuffer* buf) { - const bool can_parse = bit_buffer_get_size_bytes(buf) == sizeof(MfPlusVersion); + bool can_parse = bit_buffer_get_size_bytes(buf) == sizeof(MfPlusVersion); if(can_parse) { bit_buffer_write_bytes(buf, data, sizeof(MfPlusVersion)); + } else if( + bit_buffer_get_size_bytes(buf) == 8 && + bit_buffer_get_byte(buf, 0) == MF_PLUS_STATUS_ADDITIONAL_FRAME) { + // HACK(-nofl): There are supposed to be three parts to the GetVersion command, + // with the second and third parts fetched by sending the AdditionalFrame + // command. I don't know whether the entire MIFARE Plus line uses status as + // the first byte, so let's just assume we only have the first part of + // the response if it's size 8 and starts with the AF status. The second + // part of the response is the same size and status byte, but so far + // we're only reading one response. + can_parse = true; + bit_buffer_write_bytes_mid(buf, data, 1, bit_buffer_get_size_bytes(buf) - 1); } return can_parse ? MfPlusErrorNone : MfPlusErrorProtocol; diff --git a/lib/nfc/protocols/mf_plus/mf_plus_i.h b/lib/nfc/protocols/mf_plus/mf_plus_i.h index 1b80030f9..302f5a178 100644 --- a/lib/nfc/protocols/mf_plus/mf_plus_i.h +++ b/lib/nfc/protocols/mf_plus/mf_plus_i.h @@ -4,6 +4,9 @@ #define MF_PLUS_FFF_PICC_PREFIX "PICC" +#define MF_PLUS_STATUS_OPERATION_OK (0x90) +#define MF_PLUS_STATUS_ADDITIONAL_FRAME (0xAF) + MfPlusError mf_plus_get_type_from_version( const Iso14443_4aData* iso14443_4a_data, MfPlusData* mf_plus_data); diff --git a/lib/nfc/protocols/mf_plus/mf_plus_poller.c b/lib/nfc/protocols/mf_plus/mf_plus_poller.c index 8d1cc1c99..57a26a9cf 100644 --- a/lib/nfc/protocols/mf_plus/mf_plus_poller.c +++ b/lib/nfc/protocols/mf_plus/mf_plus_poller.c @@ -146,7 +146,7 @@ static void mf_plus_poller_set_callback( static NfcCommand mf_plus_poller_run(NfcGenericEvent event, void* context) { furi_assert(context); - furi_assert(event.protocol = NfcProtocolIso14443_4a); + furi_assert(event.protocol == NfcProtocolIso14443_4a); furi_assert(event.event_data); MfPlusPoller* instance = context; @@ -178,7 +178,7 @@ void mf_plus_poller_free(MfPlusPoller* instance) { static bool mf_plus_poller_detect(NfcGenericEvent event, void* context) { furi_assert(context); - furi_assert(event.protocol = NfcProtocolIso14443_4a); + furi_assert(event.protocol == NfcProtocolIso14443_4a); furi_assert(event.event_data); MfPlusPoller* instance = context; diff --git a/lib/nfc/protocols/mf_ultralight/mf_ultralight_poller_i.c b/lib/nfc/protocols/mf_ultralight/mf_ultralight_poller_i.c index 141ab6c46..d84377612 100644 --- a/lib/nfc/protocols/mf_ultralight/mf_ultralight_poller_i.c +++ b/lib/nfc/protocols/mf_ultralight/mf_ultralight_poller_i.c @@ -37,7 +37,7 @@ MfUltralightError mf_ultralight_poller_auth_pwd( furi_check(data); uint8_t auth_cmd[5] = {MF_ULTRALIGHT_CMD_PWD_AUTH}; //-V1009 - memccpy(&auth_cmd[1], data->password.data, 0, MF_ULTRALIGHT_AUTH_PASSWORD_SIZE); + memcpy(&auth_cmd[1], data->password.data, MF_ULTRALIGHT_AUTH_PASSWORD_SIZE); bit_buffer_copy_bytes(instance->tx_buffer, auth_cmd, sizeof(auth_cmd)); MfUltralightError ret = MfUltralightErrorNone; diff --git a/lib/print/SConscript b/lib/print/SConscript index 07be8d890..90028cf06 100644 --- a/lib/print/SConscript +++ b/lib/print/SConscript @@ -44,18 +44,24 @@ wrapped_fn_list = [ "vsiprintf", "vsniprintf", # - # Scanf is not implemented 4 now + # standard input + # + "fgetc", + "getc", + "getchar", + "fgets", + "ungetc", + # + # standard input, but unimplemented + # + "gets", + # + # scanf, not implemented for now # # "fscanf", # "scanf", # "sscanf", # "vsprintf", - # "fgetc", - # "fgets", - # "getc", - # "getchar", - # "gets", - # "ungetc", # "vfscanf", # "vscanf", # "vsscanf", diff --git a/lib/print/wrappers.c b/lib/print/wrappers.c index c8d72d192..18df92def 100644 --- a/lib/print/wrappers.c +++ b/lib/print/wrappers.c @@ -51,11 +51,54 @@ int __wrap_snprintf(char* str, size_t size, const char* format, ...) { } int __wrap_fflush(FILE* stream) { - UNUSED(stream); - furi_thread_stdout_flush(); + if(stream == stdout) furi_thread_stdout_flush(); return 0; } +int __wrap_fgetc(FILE* stream) { + if(stream != stdin) return EOF; + char c; + if(furi_thread_stdin_read(&c, 1, FuriWaitForever) == 0) return EOF; + return c; +} + +int __wrap_getc(FILE* stream) { + return __wrap_fgetc(stream); +} + +int __wrap_getchar(void) { + return __wrap_fgetc(stdin); +} + +char* __wrap_fgets(char* str, size_t n, FILE* stream) { + // leave space for the zero terminator + furi_check(n >= 1); + n--; + + if(stream != stdin) { + *str = '\0'; + return str; + } + + // read characters + int c; + do { + c = __wrap_fgetc(stdin); + if(c > 0) *(str++) = c; + } while(c != EOF && c != '\n' && --n); + + // place zero terminator + *str = '\0'; + return str; +} + +int __wrap_ungetc(int ch, FILE* stream) { + char c = ch; + if(stream != stdin) return EOF; + furi_thread_stdin_unread(&c, 1); + return ch; +} + __attribute__((__noreturn__)) void __wrap___assert(const char* file, int line, const char* e) { UNUSED(file); UNUSED(line); diff --git a/lib/print/wrappers.h b/lib/print/wrappers.h index 3cec88249..8a4599b41 100644 --- a/lib/print/wrappers.h +++ b/lib/print/wrappers.h @@ -16,6 +16,12 @@ int __wrap_putc(int ch, FILE* stream); int __wrap_snprintf(char* str, size_t size, const char* format, ...); int __wrap_fflush(FILE* stream); +int __wrap_fgetc(FILE* stream); +int __wrap_getc(FILE* stream); +int __wrap_getchar(void); +char* __wrap_fgets(char* str, size_t n, FILE* stream); +int __wrap_ungetc(int ch, FILE* stream); + __attribute__((__noreturn__)) void __wrap___assert(const char* file, int line, const char* e); __attribute__((__noreturn__)) void diff --git a/lib/signal_reader/parsers/iso15693/iso15693_parser.c b/lib/signal_reader/parsers/iso15693/iso15693_parser.c index f4065e497..e47c734a2 100644 --- a/lib/signal_reader/parsers/iso15693/iso15693_parser.c +++ b/lib/signal_reader/parsers/iso15693/iso15693_parser.c @@ -26,7 +26,6 @@ typedef enum { struct Iso15693Parser { Iso15693ParserState state; Iso15693ParserMode mode; - bool detect_mode; SignalReader* signal_reader; @@ -63,7 +62,6 @@ typedef Iso15693ParserCommand (*Iso15693ParserStateHandler)(Iso15693Parser* inst Iso15693Parser* iso15693_parser_alloc(const GpioPin* pin, size_t max_frame_size) { Iso15693Parser* instance = malloc(sizeof(Iso15693Parser)); - instance->detect_mode = true; instance->parsed_frame = bit_buffer_alloc(max_frame_size); instance->signal_reader = signal_reader_alloc(pin, ISO15693_PARSER_SIGNAL_READER_BUFF_SIZE); @@ -88,7 +86,7 @@ void iso15693_parser_reset(Iso15693Parser* instance) { furi_assert(instance); instance->state = Iso15693ParserStateParseSoF; - if(instance->detect_mode) instance->mode = Iso15693ParserMode1OutOf4; + instance->mode = Iso15693ParserMode1OutOf4; memset(instance->bitstream_buff, 0x00, sizeof(instance->bitstream_buff)); instance->bitstream_idx = 0; @@ -124,10 +122,10 @@ static void signal_reader_callback(SignalReaderEvent event, void* context) { if(instance->state == Iso15693ParserStateParseSoF) { if(event.data->data[0] == sof_1_out_of_4) { - if(instance->detect_mode) instance->mode = Iso15693ParserMode1OutOf4; + instance->mode = Iso15693ParserMode1OutOf4; instance->state = Iso15693ParserStateParseFrame; } else if(event.data->data[0] == sof_1_out_of_256) { - if(instance->detect_mode) instance->mode = Iso15693ParserMode1OutOf256; + instance->mode = Iso15693ParserMode1OutOf256; instance->state = Iso15693ParserStateParseFrame; } else if(event.data->data[0] == eof_single) { instance->eof_received = true; @@ -245,6 +243,8 @@ static Iso15693ParserCommand iso15693_parser_parse_1_out_of_256(Iso15693Parser* instance->parsed_frame, instance->next_byte_part * 4 + j / 2); } } + } else { + instance->zero_found = true; } } instance->next_byte_part = (instance->next_byte_part + 1) % 64; @@ -300,23 +300,3 @@ void iso15693_parser_get_data( bit_buffer_write_bytes(instance->parsed_frame, buff, buff_size); *data_bits = bit_buffer_get_size(instance->parsed_frame); } - -void iso15693_parser_detect_mode(Iso15693Parser* instance) { - furi_assert(instance); - - instance->detect_mode = true; -} - -void iso15693_parser_force_1outof4(Iso15693Parser* instance) { - furi_assert(instance); - - instance->detect_mode = false; - instance->mode = Iso15693ParserMode1OutOf4; -} - -void iso15693_parser_force_1outof256(Iso15693Parser* instance) { - furi_assert(instance); - - instance->detect_mode = false; - instance->mode = Iso15693ParserMode1OutOf256; -} diff --git a/lib/signal_reader/parsers/iso15693/iso15693_parser.h b/lib/signal_reader/parsers/iso15693/iso15693_parser.h index 66486e0e7..3017a96d7 100644 --- a/lib/signal_reader/parsers/iso15693/iso15693_parser.h +++ b/lib/signal_reader/parsers/iso15693/iso15693_parser.h @@ -37,10 +37,6 @@ void iso15693_parser_get_data( size_t buff_size, size_t* data_bits); -void iso15693_parser_detect_mode(Iso15693Parser* instance); -void iso15693_parser_force_1outof4(Iso15693Parser* instance); -void iso15693_parser_force_1outof256(Iso15693Parser* instance); - #ifdef __cplusplus } #endif diff --git a/lib/subghz/protocols/bin_raw.c b/lib/subghz/protocols/bin_raw.c index 92326ed45..2b2a57b16 100644 --- a/lib/subghz/protocols/bin_raw.c +++ b/lib/subghz/protocols/bin_raw.c @@ -316,8 +316,8 @@ SubGhzProtocolStatus flipper_format, "Repeat", (uint32_t*)&instance->encoder.repeat, 1); if(!subghz_protocol_encoder_bin_raw_get_upload(instance)) { - break; res = SubGhzProtocolStatusErrorEncoderGetUpload; + break; } instance->encoder.is_running = true; diff --git a/lib/toolbox/SConscript b/lib/toolbox/SConscript index 03b8999c4..8a1c4a8c5 100644 --- a/lib/toolbox/SConscript +++ b/lib/toolbox/SConscript @@ -30,6 +30,7 @@ env.Append( File("stream/string_stream.h"), File("stream/buffered_file_stream.h"), File("strint.h"), + File("pipe.h"), File("protocols/protocol_dict.h"), File("pretty_format.h"), File("hex.h"), diff --git a/lib/toolbox/pipe.c b/lib/toolbox/pipe.c new file mode 100644 index 000000000..9dc1d368e --- /dev/null +++ b/lib/toolbox/pipe.c @@ -0,0 +1,241 @@ +#include "pipe.h" +#include + +/** + * Data shared between both sides. + */ +typedef struct { + FuriSemaphore* instance_count; // role; +} + +PipeState pipe_state(PipeSide* pipe) { + furi_check(pipe); + uint32_t count = furi_semaphore_get_count(pipe->shared->instance_count); + return (count == 1) ? PipeStateOpen : PipeStateBroken; +} + +void pipe_free(PipeSide* pipe) { + furi_check(pipe); + furi_check(!pipe->event_loop); + + furi_mutex_acquire(pipe->shared->state_transition, FuriWaitForever); + FuriStatus status = furi_semaphore_acquire(pipe->shared->instance_count, 0); + + if(status == FuriStatusOk) { + // the other side is still intact + furi_mutex_release(pipe->shared->state_transition); + free(pipe); + } else { + // the other side is gone too + furi_stream_buffer_free(pipe->sending); + furi_stream_buffer_free(pipe->receiving); + furi_semaphore_free(pipe->shared->instance_count); + furi_mutex_free(pipe->shared->state_transition); + free(pipe->shared); + free(pipe); + } +} + +static void _pipe_stdout_cb(const char* data, size_t size, void* context) { + furi_assert(context); + PipeSide* pipe = context; + while(size) { + size_t sent = pipe_send(pipe, data, size, FuriWaitForever); + data += sent; + size -= sent; + } +} + +static size_t _pipe_stdin_cb(char* data, size_t size, FuriWait timeout, void* context) { + furi_assert(context); + PipeSide* pipe = context; + return pipe_receive(pipe, data, size, timeout); +} + +void pipe_install_as_stdio(PipeSide* pipe) { + furi_check(pipe); + furi_thread_set_stdout_callback(_pipe_stdout_cb, pipe); + furi_thread_set_stdin_callback(_pipe_stdin_cb, pipe); +} + +size_t pipe_receive(PipeSide* pipe, void* data, size_t length, FuriWait timeout) { + furi_check(pipe); + return furi_stream_buffer_receive(pipe->receiving, data, length, timeout); +} + +size_t pipe_send(PipeSide* pipe, const void* data, size_t length, FuriWait timeout) { + furi_check(pipe); + return furi_stream_buffer_send(pipe->sending, data, length, timeout); +} + +size_t pipe_bytes_available(PipeSide* pipe) { + furi_check(pipe); + return furi_stream_buffer_bytes_available(pipe->receiving); +} + +size_t pipe_spaces_available(PipeSide* pipe) { + furi_check(pipe); + return furi_stream_buffer_spaces_available(pipe->sending); +} + +static void pipe_receiving_buffer_callback(FuriEventLoopObject* buffer, void* context) { + UNUSED(buffer); + PipeSide* pipe = context; + furi_assert(pipe); + if(pipe->on_space_freed) pipe->on_data_arrived(pipe, pipe->callback_context); +} + +static void pipe_sending_buffer_callback(FuriEventLoopObject* buffer, void* context) { + UNUSED(buffer); + PipeSide* pipe = context; + furi_assert(pipe); + if(pipe->on_data_arrived) pipe->on_space_freed(pipe, pipe->callback_context); +} + +static void pipe_semaphore_callback(FuriEventLoopObject* semaphore, void* context) { + UNUSED(semaphore); + PipeSide* pipe = context; + furi_assert(pipe); + if(pipe->on_pipe_broken) pipe->on_pipe_broken(pipe, pipe->callback_context); +} + +void pipe_attach_to_event_loop(PipeSide* pipe, FuriEventLoop* event_loop) { + furi_check(pipe); + furi_check(event_loop); + furi_check(!pipe->event_loop); + + pipe->event_loop = event_loop; +} + +void pipe_detach_from_event_loop(PipeSide* pipe) { + furi_check(pipe); + furi_check(pipe->event_loop); + + furi_event_loop_maybe_unsubscribe(pipe->event_loop, pipe->receiving); + furi_event_loop_maybe_unsubscribe(pipe->event_loop, pipe->sending); + furi_event_loop_maybe_unsubscribe(pipe->event_loop, pipe->shared->instance_count); + + pipe->event_loop = NULL; +} + +void pipe_set_callback_context(PipeSide* pipe, void* context) { + furi_check(pipe); + pipe->callback_context = context; +} + +void pipe_set_data_arrived_callback( + PipeSide* pipe, + PipeSideDataArrivedCallback callback, + FuriEventLoopEvent event) { + furi_check(pipe); + furi_check(pipe->event_loop); + furi_check((event & FuriEventLoopEventMask) == 0); + + furi_event_loop_maybe_unsubscribe(pipe->event_loop, pipe->receiving); + pipe->on_data_arrived = callback; + if(callback) + furi_event_loop_subscribe_stream_buffer( + pipe->event_loop, + pipe->receiving, + FuriEventLoopEventIn | event, + pipe_receiving_buffer_callback, + pipe); +} + +void pipe_set_space_freed_callback( + PipeSide* pipe, + PipeSideSpaceFreedCallback callback, + FuriEventLoopEvent event) { + furi_check(pipe); + furi_check(pipe->event_loop); + furi_check((event & FuriEventLoopEventMask) == 0); + + furi_event_loop_maybe_unsubscribe(pipe->event_loop, pipe->sending); + pipe->on_space_freed = callback; + if(callback) + furi_event_loop_subscribe_stream_buffer( + pipe->event_loop, + pipe->sending, + FuriEventLoopEventOut | event, + pipe_sending_buffer_callback, + pipe); +} + +void pipe_set_broken_callback( + PipeSide* pipe, + PipeSideBrokenCallback callback, + FuriEventLoopEvent event) { + furi_check(pipe); + furi_check(pipe->event_loop); + furi_check((event & FuriEventLoopEventMask) == 0); + + furi_event_loop_maybe_unsubscribe(pipe->event_loop, pipe->shared->instance_count); + pipe->on_pipe_broken = callback; + if(callback) + furi_event_loop_subscribe_semaphore( + pipe->event_loop, + pipe->shared->instance_count, + FuriEventLoopEventOut | event, + pipe_semaphore_callback, + pipe); +} diff --git a/lib/toolbox/pipe.h b/lib/toolbox/pipe.h new file mode 100644 index 000000000..df75f4c48 --- /dev/null +++ b/lib/toolbox/pipe.h @@ -0,0 +1,295 @@ +/** + * @file pipe.h + * Pipe convenience module + * + * Pipes are used to send bytes between two threads in both directions. The two + * threads are referred to as Alice and Bob and their abilities regarding what + * they can do with the pipe are equal. + * + * It is also possible to use both sides of the pipe within one thread. + */ +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +/** + * @brief The role of a pipe side + * + * Both roles are equal, as they can both read and write the data. This status + * might be helpful in determining the role of a thread w.r.t. another thread in + * an application that builds on the pipe. + */ +typedef enum { + PipeRoleAlice, + PipeRoleBob, +} PipeRole; + +/** + * @brief The state of a pipe + * + * - `PipeStateOpen`: Both pipe sides are in place, meaning data that is sent + * down the pipe _might_ be read by the peer, and new data sent by the peer + * _might_ arrive. + * - `PipeStateBroken`: The other side of the pipe has been freed, meaning + * data that is written will never reach its destination, and no new data + * will appear in the buffer. + * + * A broken pipe can never become open again, because there's no way to connect + * a side of a pipe to another side of a pipe. + */ +typedef enum { + PipeStateOpen, + PipeStateBroken, +} PipeState; + +typedef struct PipeSide PipeSide; + +typedef struct { + PipeSide* alices_side; + PipeSide* bobs_side; +} PipeSideBundle; + +typedef struct { + size_t capacity; + size_t trigger_level; +} PipeSideReceiveSettings; + +/** + * @brief Allocates two connected sides of one pipe. + * + * Creating a pair of sides using this function is the only way to connect two + * pipe sides together. Two unrelated orphaned sides may never be connected back + * together. + * + * The capacity and trigger level for both directions are the same when the pipe + * is created using this function. Use `pipe_alloc_ex` if you want more + * control. + * + * @param capacity Maximum number of bytes buffered in one direction + * @param trigger_level Number of bytes that need to be available in the buffer + * in order for a blocked thread to unblock + * @returns Bundle with both sides of the pipe + */ +PipeSideBundle pipe_alloc(size_t capacity, size_t trigger_level); + +/** + * @brief Allocates two connected sides of one pipe. + * + * Creating a pair of sides using this function is the only way to connect two + * pipe sides together. Two unrelated orphaned sides may never be connected back + * together. + * + * The capacity and trigger level may be different for the two directions when + * the pipe is created using this function. Use `pipe_alloc` if you don't + * need control this fine. + * + * @param alice `capacity` and `trigger_level` settings for Alice's receiving + * buffer + * @param bob `capacity` and `trigger_level` settings for Bob's receiving buffer + * @returns Bundle with both sides of the pipe + */ +PipeSideBundle pipe_alloc_ex(PipeSideReceiveSettings alice, PipeSideReceiveSettings bob); + +/** + * @brief Gets the role of a pipe side. + * + * The roles (Alice and Bob) are equal, as both can send and receive data. This + * status might be helpful in determining the role of a thread w.r.t. another + * thread. + * + * @param [in] pipe Pipe side to query + * @returns Role of provided pipe side + */ +PipeRole pipe_role(PipeSide* pipe); + +/** + * @brief Gets the state of a pipe. + * + * When the state is `PipeStateOpen`, both sides are active and may send or + * receive data. When the state is `PipeStateBroken`, only one side is active + * (the one that this method has been called on). If you find yourself in that + * state, the data that you send will never be heard by anyone, and the data you + * receive are leftovers in the buffer. + * + * @param [in] pipe Pipe side to query + * @returns State of the pipe + */ +PipeState pipe_state(PipeSide* pipe); + +/** + * @brief Frees a side of a pipe. + * + * When only one of the sides is freed, the pipe is transitioned from the "Open" + * state into the "Broken" state. When both sides are freed, the underlying data + * structures are freed too. + * + * @param [in] pipe Pipe side to free + */ +void pipe_free(PipeSide* pipe); + +/** + * @brief Connects the pipe to the `stdin` and `stdout` of the current thread. + * + * After performing this operation, you can use `getc`, `puts`, etc. to send and + * receive data to and from the pipe. If the pipe becomes broken, C stdlib calls + * will return `EOF` wherever possible. + * + * You can disconnect the pipe by manually calling + * `furi_thread_set_stdout_callback` and `furi_thread_set_stdin_callback` with + * `NULL`. + * + * @param [in] pipe Pipe side to connect to the stdio + */ +void pipe_install_as_stdio(PipeSide* pipe); + +/** + * @brief Receives data from the pipe. + * + * @param [in] pipe The pipe side to read data out of + * @param [out] data The buffer to fill with data + * @param length Maximum length of data to read + * @param timeout The timeout (in ticks) after which the read operation is + * interrupted + * @returns The number of bytes actually written into the provided buffer + */ +size_t pipe_receive(PipeSide* pipe, void* data, size_t length, FuriWait timeout); + +/** + * @brief Sends data into the pipe. + * + * @param [in] pipe The pipe side to send data into + * @param [out] data The buffer to get data from + * @param length Maximum length of data to send + * @param timeout The timeout (in ticks) after which the write operation is + * interrupted + * @returns The number of bytes actually read from the provided buffer + */ +size_t pipe_send(PipeSide* pipe, const void* data, size_t length, FuriWait timeout); + +/** + * @brief Determines how many bytes there are in the pipe available to be read. + * + * @param [in] pipe Pipe side to query + * @returns Number of bytes available to be read out from that side of the pipe + */ +size_t pipe_bytes_available(PipeSide* pipe); + +/** + * @brief Determines how many space there is in the pipe for data to be written + * into. + * + * @param [in] pipe Pipe side to query + * @returns Number of bytes available to be written into that side of the pipe + */ +size_t pipe_spaces_available(PipeSide* pipe); + +/** + * @brief Attaches a `PipeSide` to a `FuriEventLoop`, allowing to attach + * callbacks to the PipeSide. + * + * @param [in] pipe Pipe side to attach to the event loop + * @param [in] event_loop Event loop to attach the pipe side to + */ +void pipe_attach_to_event_loop(PipeSide* pipe, FuriEventLoop* event_loop); + +/** + * @brief Detaches a `PipeSide` from the `FuriEventLoop` that it was previously + * attached to. + * + * @param [in] pipe Pipe side to detach to the event loop + */ +void pipe_detach_from_event_loop(PipeSide* pipe); + +/** + * @brief Callback for when data arrives to a `PipeSide`. + * + * @param [in] pipe Pipe side that called the callback + * @param [inout] context Custom context + */ +typedef void (*PipeSideDataArrivedCallback)(PipeSide* pipe, void* context); + +/** + * @brief Callback for when data is read out of the opposite `PipeSide`. + * + * @param [in] pipe Pipe side that called the callback + * @param [inout] context Custom context + */ +typedef void (*PipeSideSpaceFreedCallback)(PipeSide* pipe, void* context); + +/** + * @brief Callback for when the opposite `PipeSide` is freed, making the pipe + * broken. + * + * @param [in] pipe Pipe side that called the callback + * @param [inout] context Custom context + */ +typedef void (*PipeSideBrokenCallback)(PipeSide* pipe, void* context); + +/** + * @brief Sets the custom context for all callbacks. + * + * @param [in] pipe Pipe side to set the context of + * @param [inout] context Custom context that will be passed to callbacks + */ +void pipe_set_callback_context(PipeSide* pipe, void* context); + +/** + * @brief Sets the callback for when data arrives. + * + * @param [in] pipe Pipe side to assign the callback to + * @param [in] callback Callback to assign to the pipe side. Set to NULL to + * unsubscribe. + * @param [in] event Additional event loop flags (e.g. `Edge`, `Once`, etc.). + * Non-flag values of the enum are not allowed. + * + * @warning Attach the pipe side to an event loop first using + * `pipe_attach_to_event_loop`. + */ +void pipe_set_data_arrived_callback( + PipeSide* pipe, + PipeSideDataArrivedCallback callback, + FuriEventLoopEvent event); + +/** + * @brief Sets the callback for when data is read out of the opposite `PipeSide`. + * + * @param [in] pipe Pipe side to assign the callback to + * @param [in] callback Callback to assign to the pipe side. Set to NULL to + * unsubscribe. + * @param [in] event Additional event loop flags (e.g. `Edge`, `Once`, etc.). + * Non-flag values of the enum are not allowed. + * + * @warning Attach the pipe side to an event loop first using + * `pipe_attach_to_event_loop`. + */ +void pipe_set_space_freed_callback( + PipeSide* pipe, + PipeSideSpaceFreedCallback callback, + FuriEventLoopEvent event); + +/** + * @brief Sets the callback for when the opposite `PipeSide` is freed, making + * the pipe broken. + * + * @param [in] pipe Pipe side to assign the callback to + * @param [in] callback Callback to assign to the pipe side. Set to NULL to + * unsubscribe. + * @param [in] event Additional event loop flags (e.g. `Edge`, `Once`, etc.). + * Non-flag values of the enum are not allowed. + * + * @warning Attach the pipe side to an event loop first using + * `pipe_attach_to_event_loop`. + */ +void pipe_set_broken_callback( + PipeSide* pipe, + PipeSideBrokenCallback callback, + FuriEventLoopEvent event); + +#ifdef __cplusplus +} +#endif diff --git a/scripts/get_env.py b/scripts/get_env.py index 8d76e97fa..643418c4b 100755 --- a/scripts/get_env.py +++ b/scripts/get_env.py @@ -34,7 +34,11 @@ def get_commit_json(event): commit_url = event["pull_request"]["base"]["repo"]["commits_url"].replace( "{/sha}", f"/{event['pull_request']['head']['sha']}" ) - with urllib.request.urlopen(commit_url, context=context) as commit_file: + request = urllib.request.Request(commit_url) + if "GH_TOKEN" in os.environ: + request.add_header("Authorization", "Bearer %s" % (os.environ["GH_TOKEN"])) + + with urllib.request.urlopen(request, context=context) as commit_file: commit_json = json.loads(commit_file.read().decode("utf-8")) return commit_json diff --git a/scripts/testops.py b/scripts/testops.py index 4ae10c7f4..3100a9b7f 100644 --- a/scripts/testops.py +++ b/scripts/testops.py @@ -1,8 +1,7 @@ #!/usr/bin/env python3 - import re -import sys import time +from datetime import datetime from typing import Optional from flipper.app import App @@ -11,7 +10,10 @@ from flipper.utils.cdc import resolve_port class Main(App): - # this is basic use without sub-commands, simply to reboot flipper / power it off, not meant as a full CLI wrapper + def __init__(self, no_exit=False): + super().__init__(no_exit) + self.test_results = None + def init(self): self.parser.add_argument("-p", "--port", help="CDC Port", default="auto") self.parser.add_argument( @@ -67,64 +69,108 @@ class Main(App): self.logger.info("Running unit tests") flipper.send("unit_tests" + "\r") self.logger.info("Waiting for unit tests to complete") - data = flipper.read.until(">: ") - self.logger.info("Parsing result") - - lines = data.decode().split("\r\n") - - tests_re = r"Failed tests: \d{0,}" - time_re = r"Consumed: \d{0,}" - leak_re = r"Leaked: \d{0,}" - status_re = r"Status: \w{3,}" - - tests_pattern = re.compile(tests_re) - time_pattern = re.compile(time_re) - leak_pattern = re.compile(leak_re) - status_pattern = re.compile(status_re) tests, elapsed_time, leak, status = None, None, None, None total = 0 + all_required_found = False - for line in lines: - self.logger.info(line) - if "()" in line: - total += 1 + full_output = [] - if not tests: - tests = re.match(tests_pattern, line) - if not elapsed_time: - elapsed_time = re.match(time_pattern, line) - if not leak: - leak = re.match(leak_pattern, line) - if not status: - status = re.match(status_pattern, line) + tests_pattern = re.compile(r"Failed tests: \d{0,}") + time_pattern = re.compile(r"Consumed: \d{0,}") + leak_pattern = re.compile(r"Leaked: \d{0,}") + status_pattern = re.compile(r"Status: \w{3,}") - if None in (tests, elapsed_time, leak, status): - self.logger.error( - f"Failed to parse output: {tests} {elapsed_time} {leak} {status}" + try: + while not all_required_found: + try: + line = flipper.read.until("\r\n", cut_eol=True).decode() + self.logger.info(line) + if "command not found," in line: + self.logger.error(f"Command not found: {line}") + return 1 + + if "()" in line: + total += 1 + self.logger.debug(f"Test completed: {line}") + + if not tests: + tests = tests_pattern.match(line) + if not elapsed_time: + elapsed_time = time_pattern.match(line) + if not leak: + leak = leak_pattern.match(line) + if not status: + status = status_pattern.match(line) + + pattern = re.compile( + r"(\[-]|\[\\]|\[\|]|\[/-]|\[[^\]]*\]|\x1b\[\d+D)" + ) + line_to_append = pattern.sub("", line) + pattern = re.compile(r"\[3D[^\]]*") + line_to_append = pattern.sub("", line_to_append) + line_to_append = f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S,%f')} {line_to_append}" + + full_output.append(line_to_append) + + if tests and elapsed_time and leak and status: + all_required_found = True + try: + remaining = flipper.read.until(">: ", cut_eol=True).decode() + if remaining.strip(): + full_output.append(remaining) + except: + pass + break + + except Exception as e: + self.logger.error(f"Error reading output: {e}") + raise + + if None in (tests, elapsed_time, leak, status): + raise RuntimeError( + f"Failed to parse output: {tests} {elapsed_time} {leak} {status}" + ) + + leak = int(re.findall(r"[- ]\d+", leak.group(0))[0]) + status = re.findall(r"\w+", status.group(0))[1] + tests = int(re.findall(r"\d+", tests.group(0))[0]) + elapsed_time = int(re.findall(r"\d+", elapsed_time.group(0))[0]) + + test_results = { + "full_output": "\n".join(full_output), + "total_tests": total, + "failed_tests": tests, + "elapsed_time_ms": elapsed_time, + "memory_leak_bytes": leak, + "status": status, + } + + self.test_results = test_results + + output_file = "unit_tests_output.txt" + with open(output_file, "w") as f: + f.write(test_results["full_output"]) + + print( + f"::notice:: Total tests: {total} Failed tests: {tests} Status: {status} Elapsed time: {elapsed_time / 1000} s Memory leak: {leak} bytes" ) - sys.exit(1) - leak = int(re.findall(r"[- ]\d+", leak.group(0))[0]) - status = re.findall(r"\w+", status.group(0))[1] - tests = int(re.findall(r"\d+", tests.group(0))[0]) - elapsed_time = int(re.findall(r"\d+", elapsed_time.group(0))[0]) + if tests > 0 or status != "PASSED": + self.logger.error(f"Got {tests} failed tests.") + self.logger.error(f"Leaked (not failing on this stat): {leak}") + self.logger.error(f"Status: {status}") + self.logger.error(f"Time: {elapsed_time / 1000} seconds") + return 1 - if tests > 0 or status != "PASSED": - self.logger.error(f"Got {tests} failed tests.") - self.logger.error(f"Leaked (not failing on this stat): {leak}") - self.logger.error(f"Status: {status}") - self.logger.error(f"Time: {elapsed_time/1000} seconds") + self.logger.info(f"Leaked (not failing on this stat): {leak}") + self.logger.info( + f"Tests ran successfully! Time elapsed {elapsed_time / 1000} seconds. Passed {total} tests." + ) + return 0 + + finally: flipper.stop() - return 1 - - self.logger.info(f"Leaked (not failing on this stat): {leak}") - self.logger.info( - f"Tests ran successfully! Time elapsed {elapsed_time/1000} seconds. Passed {total} tests." - ) - - flipper.stop() - return 0 if __name__ == "__main__": diff --git a/scripts/toolchain/windows-toolchain-download.ps1 b/scripts/toolchain/windows-toolchain-download.ps1 index 025f8341f..85a5ab724 100644 --- a/scripts/toolchain/windows-toolchain-download.ps1 +++ b/scripts/toolchain/windows-toolchain-download.ps1 @@ -16,15 +16,15 @@ $toolchain_dist_temp_path = "$download_dir\$toolchain_dist_folder" try { if (Test-Path -LiteralPath "$toolchain_target_path") { - Write-Host -NoNewline "Removing old Windows toolchain.." - Remove-Item -LiteralPath "$toolchain_target_path" -Force -Recurse - Write-Host "done!" + Write-Host -NoNewline "Removing old Windows toolchain.." + Remove-Item -LiteralPath "$toolchain_target_path" -Force -Recurse + Write-Host "done!" } if (Test-path -LiteralPath "$toolchain_target_path\..\current") { - Write-Host -NoNewline "Unlinking 'current'.." + Write-Host -NoNewline "Unlinking 'current'.." Remove-Item -LiteralPath "$toolchain_target_path\..\current" -Force - Write-Host "done!" + Write-Host "done!" } if (!(Test-Path -LiteralPath "$toolchain_zip_temp_path" -PathType Leaf)) { @@ -46,7 +46,8 @@ if (Test-Path -LiteralPath "$toolchain_dist_temp_path") { Write-Host -NoNewline "Extracting Windows toolchain.." # This is faster than Expand-Archive Add-Type -Assembly "System.IO.Compression.Filesystem" -[System.IO.Compression.ZipFile]::ExtractToDirectory("$toolchain_zip_temp_path", "$download_dir") +Add-Type -Assembly "System.Text.Encoding" +[System.IO.Compression.ZipFile]::ExtractToDirectory("$toolchain_zip_temp_path", "$download_dir", [System.Text.Encoding]::UTF8) # Expand-Archive -LiteralPath "$toolchain_zip_temp_path" -DestinationPath "$download_dir" Write-Host -NoNewline "moving.." diff --git a/targets/f18/api_symbols.csv b/targets/f18/api_symbols.csv index c72569c64..8d03e0e46 100644 --- a/targets/f18/api_symbols.csv +++ b/targets/f18/api_symbols.csv @@ -161,6 +161,7 @@ Header,+,lib/toolbox/manchester_encoder.h,, Header,+,lib/toolbox/md5_calc.h,, Header,+,lib/toolbox/name_generator.h,, Header,+,lib/toolbox/path.h,, +Header,+,lib/toolbox/pipe.h,, Header,+,lib/toolbox/pretty_format.h,, Header,+,lib/toolbox/protocols/protocol_dict.h,, Header,+,lib/toolbox/pulse_protocols/pulse_glue.h,, @@ -371,11 +372,16 @@ Function,-,__utoa,char*,"unsigned, char*, int" Function,+,__wrap___assert,void,"const char*, int, const char*" Function,+,__wrap___assert_func,void,"const char*, int, const char*, const char*" Function,+,__wrap_fflush,int,FILE* +Function,+,__wrap_fgetc,int,FILE* +Function,+,__wrap_fgets,char*,"char*, size_t, FILE*" +Function,+,__wrap_getc,int,FILE* +Function,+,__wrap_getchar,int, Function,+,__wrap_printf,int,"const char*, ..." Function,+,__wrap_putc,int,"int, FILE*" Function,+,__wrap_putchar,int,int Function,+,__wrap_puts,int,const char* Function,+,__wrap_snprintf,int,"char*, size_t, const char*, ..." +Function,+,__wrap_ungetc,int,"int, FILE*" Function,+,__wrap_vsnprintf,int,"char*, size_t, const char*, va_list" Function,-,_asiprintf_r,int,"_reent*, char**, const char*, ..." Function,-,_asniprintf_r,char*,"_reent*, char*, size_t*, const char*, ..." @@ -1049,6 +1055,7 @@ Function,+,flipper_format_update_uint32,_Bool,"FlipperFormat*, const char*, cons Function,+,flipper_format_write_bool,_Bool,"FlipperFormat*, const char*, const _Bool*, const uint16_t" Function,+,flipper_format_write_comment,_Bool,"FlipperFormat*, FuriString*" Function,+,flipper_format_write_comment_cstr,_Bool,"FlipperFormat*, const char*" +Function,+,flipper_format_write_empty_line,_Bool,FlipperFormat* Function,+,flipper_format_write_float,_Bool,"FlipperFormat*, const char*, const float*, const uint16_t" Function,+,flipper_format_write_header,_Bool,"FlipperFormat*, FuriString*, const uint32_t" Function,+,flipper_format_write_header_cstr,_Bool,"FlipperFormat*, const char*, const uint32_t" @@ -1575,6 +1582,7 @@ Function,+,furi_stream_buffer_receive,size_t,"FuriStreamBuffer*, void*, size_t, Function,+,furi_stream_buffer_reset,FuriStatus,FuriStreamBuffer* Function,+,furi_stream_buffer_send,size_t,"FuriStreamBuffer*, const void*, size_t, uint32_t" Function,+,furi_stream_buffer_spaces_available,size_t,FuriStreamBuffer* +Function,+,furi_stream_get_trigger_level,size_t,FuriStreamBuffer* Function,+,furi_stream_set_trigger_level,_Bool,"FuriStreamBuffer*, size_t" Function,+,furi_string_alloc,FuriString*, Function,+,furi_string_alloc_move,FuriString*,FuriString* @@ -1655,6 +1663,7 @@ Function,+,furi_thread_get_return_code,int32_t,FuriThread* Function,+,furi_thread_get_signal_callback,FuriThreadSignalCallback,const FuriThread* Function,+,furi_thread_get_stack_space,uint32_t,FuriThreadId Function,+,furi_thread_get_state,FuriThreadState,FuriThread* +Function,+,furi_thread_get_stdin_callback,FuriThreadStdinReadCallback, Function,+,furi_thread_get_stdout_callback,FuriThreadStdoutWriteCallback, Function,+,furi_thread_is_suspended,_Bool,FuriThreadId Function,+,furi_thread_join,_Bool,FuriThread* @@ -1675,9 +1684,12 @@ Function,+,furi_thread_set_signal_callback,void,"FuriThread*, FuriThreadSignalCa Function,+,furi_thread_set_stack_size,void,"FuriThread*, size_t" Function,+,furi_thread_set_state_callback,void,"FuriThread*, FuriThreadStateCallback" Function,+,furi_thread_set_state_context,void,"FuriThread*, void*" -Function,+,furi_thread_set_stdout_callback,void,FuriThreadStdoutWriteCallback +Function,+,furi_thread_set_stdin_callback,void,"FuriThreadStdinReadCallback, void*" +Function,+,furi_thread_set_stdout_callback,void,"FuriThreadStdoutWriteCallback, void*" Function,+,furi_thread_signal,_Bool,"const FuriThread*, uint32_t, void*" Function,+,furi_thread_start,void,FuriThread* +Function,+,furi_thread_stdin_read,size_t,"char*, size_t, FuriWait" +Function,+,furi_thread_stdin_unread,void,"char*, size_t" Function,+,furi_thread_stdout_flush,int32_t, Function,+,furi_thread_stdout_write,size_t,"const char*, size_t" Function,+,furi_thread_suspend,void,FuriThreadId @@ -2281,6 +2293,22 @@ Function,+,pb_skip_field,_Bool,"pb_istream_t*, pb_wire_type_t" Function,+,pb_write,_Bool,"pb_ostream_t*, const pb_byte_t*, size_t" Function,-,pclose,int,FILE* Function,-,perror,void,const char* +Function,+,pipe_alloc,PipeSideBundle,"size_t, size_t" +Function,+,pipe_alloc_ex,PipeSideBundle,"PipeSideReceiveSettings, PipeSideReceiveSettings" +Function,+,pipe_attach_to_event_loop,void,"PipeSide*, FuriEventLoop*" +Function,+,pipe_bytes_available,size_t,PipeSide* +Function,+,pipe_detach_from_event_loop,void,PipeSide* +Function,+,pipe_free,void,PipeSide* +Function,+,pipe_install_as_stdio,void,PipeSide* +Function,+,pipe_receive,size_t,"PipeSide*, void*, size_t, FuriWait" +Function,+,pipe_role,PipeRole,PipeSide* +Function,+,pipe_send,size_t,"PipeSide*, const void*, size_t, FuriWait" +Function,+,pipe_set_callback_context,void,"PipeSide*, void*" +Function,+,pipe_set_data_arrived_callback,void,"PipeSide*, PipeSideDataArrivedCallback, FuriEventLoopEvent" +Function,+,pipe_set_broken_callback,void,"PipeSide*, PipeSideBrokenCallback, FuriEventLoopEvent" +Function,+,pipe_set_space_freed_callback,void,"PipeSide*, PipeSideSpaceFreedCallback, FuriEventLoopEvent" +Function,+,pipe_spaces_available,size_t,PipeSide* +Function,+,pipe_state,PipeState,PipeSide* Function,+,plugin_manager_alloc,PluginManager*,"const char*, uint32_t, const ElfApiInterface*" Function,+,plugin_manager_free,void,PluginManager* Function,+,plugin_manager_get,const FlipperAppPluginDescriptor*,"PluginManager*, uint32_t" diff --git a/targets/f7/api_symbols.csv b/targets/f7/api_symbols.csv index f5e79d7ee..b80f329f6 100644 --- a/targets/f7/api_symbols.csv +++ b/targets/f7/api_symbols.csv @@ -242,6 +242,7 @@ Header,+,lib/toolbox/manchester_encoder.h,, Header,+,lib/toolbox/md5_calc.h,, Header,+,lib/toolbox/name_generator.h,, Header,+,lib/toolbox/path.h,, +Header,+,lib/toolbox/pipe.h,, Header,+,lib/toolbox/pretty_format.h,, Header,+,lib/toolbox/protocols/protocol_dict.h,, Header,+,lib/toolbox/pulse_protocols/pulse_glue.h,, @@ -461,11 +462,16 @@ Function,-,__utoa,char*,"unsigned, char*, int" Function,+,__wrap___assert,void,"const char*, int, const char*" Function,+,__wrap___assert_func,void,"const char*, int, const char*, const char*" Function,+,__wrap_fflush,int,FILE* +Function,+,__wrap_fgetc,int,FILE* +Function,+,__wrap_fgets,char*,"char*, size_t, FILE*" +Function,+,__wrap_getc,int,FILE* +Function,+,__wrap_getchar,int, Function,+,__wrap_printf,int,"const char*, ..." Function,+,__wrap_putc,int,"int, FILE*" Function,+,__wrap_putchar,int,int Function,+,__wrap_puts,int,const char* Function,+,__wrap_snprintf,int,"char*, size_t, const char*, ..." +Function,+,__wrap_ungetc,int,"int, FILE*" Function,+,__wrap_vsnprintf,int,"char*, size_t, const char*, va_list" Function,-,_asiprintf_r,int,"_reent*, char**, const char*, ..." Function,-,_asniprintf_r,char*,"_reent*, char*, size_t*, const char*, ..." @@ -834,6 +840,7 @@ Function,+,canvas_draw_frame,void,"Canvas*, int32_t, int32_t, size_t, size_t" Function,+,canvas_draw_glyph,void,"Canvas*, int32_t, int32_t, uint16_t" Function,+,canvas_draw_icon,void,"Canvas*, int32_t, int32_t, const Icon*" Function,+,canvas_draw_icon_animation,void,"Canvas*, int32_t, int32_t, IconAnimation*" +Function,+,canvas_draw_icon_animation_ex,void,"Canvas*, int32_t, int32_t, int32_t, int32_t, IconAnimation*" Function,+,canvas_draw_icon_ex,void,"Canvas*, int32_t, int32_t, const Icon*, IconRotation" Function,+,canvas_draw_line,void,"Canvas*, int32_t, int32_t, int32_t, int32_t" Function,+,canvas_draw_rbox,void,"Canvas*, int32_t, int32_t, size_t, size_t, size_t" @@ -983,8 +990,8 @@ Function,+,dolphin_deed_get_weight,uint8_t,DolphinDeed Function,+,dolphin_flush,void,Dolphin* Function,+,dolphin_get_pubsub,FuriPubSub*,Dolphin* Function,+,dolphin_get_settings,void,"Dolphin*, DolphinSettings*" -Function,+,dolphin_reload_state,void,Dolphin* Function,+,dolphin_set_settings,void,"Dolphin*, DolphinSettings*" +Function,+,dolphin_reload_state,void,Dolphin* Function,+,dolphin_stats,DolphinStats,Dolphin* Function,+,dolphin_upgrade_level,void,Dolphin* Function,-,dprintf,int,"int, const char*, ..." @@ -1209,6 +1216,7 @@ Function,+,flipper_format_update_uint32,_Bool,"FlipperFormat*, const char*, cons Function,+,flipper_format_write_bool,_Bool,"FlipperFormat*, const char*, const _Bool*, const uint16_t" Function,+,flipper_format_write_comment,_Bool,"FlipperFormat*, FuriString*" Function,+,flipper_format_write_comment_cstr,_Bool,"FlipperFormat*, const char*" +Function,+,flipper_format_write_empty_line,_Bool,FlipperFormat* Function,+,flipper_format_write_float,_Bool,"FlipperFormat*, const char*, const float*, const uint16_t" Function,+,flipper_format_write_header,_Bool,"FlipperFormat*, FuriString*, const uint32_t" Function,+,flipper_format_write_header_cstr,_Bool,"FlipperFormat*, const char*, const uint32_t" @@ -1518,9 +1526,6 @@ Function,+,furi_hal_nfc_iso14443a_poller_trx_short_frame,FuriHalNfcError,FuriHal Function,+,furi_hal_nfc_iso14443a_poller_tx_custom_parity,FuriHalNfcError,"const uint8_t*, size_t" Function,+,furi_hal_nfc_iso14443a_rx_sdd_frame,FuriHalNfcError,"uint8_t*, size_t, size_t*" Function,+,furi_hal_nfc_iso14443a_tx_sdd_frame,FuriHalNfcError,"const uint8_t*, size_t" -Function,+,furi_hal_nfc_iso15693_detect_mode,FuriHalNfcError, -Function,+,furi_hal_nfc_iso15693_force_1outof256,FuriHalNfcError, -Function,+,furi_hal_nfc_iso15693_force_1outof4,FuriHalNfcError, Function,+,furi_hal_nfc_iso15693_listener_tx_sof,FuriHalNfcError, Function,+,furi_hal_nfc_listener_enable_rx,FuriHalNfcError, Function,+,furi_hal_nfc_listener_idle,FuriHalNfcError, @@ -1859,6 +1864,7 @@ Function,+,furi_stream_buffer_receive,size_t,"FuriStreamBuffer*, void*, size_t, Function,+,furi_stream_buffer_reset,FuriStatus,FuriStreamBuffer* Function,+,furi_stream_buffer_send,size_t,"FuriStreamBuffer*, const void*, size_t, uint32_t" Function,+,furi_stream_buffer_spaces_available,size_t,FuriStreamBuffer* +Function,+,furi_stream_get_trigger_level,size_t,FuriStreamBuffer* Function,+,furi_stream_set_trigger_level,_Bool,"FuriStreamBuffer*, size_t" Function,+,furi_string_alloc,FuriString*, Function,+,furi_string_alloc_move,FuriString*,FuriString* @@ -1939,6 +1945,7 @@ Function,+,furi_thread_get_return_code,int32_t,FuriThread* Function,+,furi_thread_get_signal_callback,FuriThreadSignalCallback,const FuriThread* Function,+,furi_thread_get_stack_space,uint32_t,FuriThreadId Function,+,furi_thread_get_state,FuriThreadState,FuriThread* +Function,+,furi_thread_get_stdin_callback,FuriThreadStdinReadCallback, Function,+,furi_thread_get_stdout_callback,FuriThreadStdoutWriteCallback, Function,+,furi_thread_is_suspended,_Bool,FuriThreadId Function,+,furi_thread_join,_Bool,FuriThread* @@ -1959,9 +1966,12 @@ Function,+,furi_thread_set_signal_callback,void,"FuriThread*, FuriThreadSignalCa Function,+,furi_thread_set_stack_size,void,"FuriThread*, size_t" Function,+,furi_thread_set_state_callback,void,"FuriThread*, FuriThreadStateCallback" Function,+,furi_thread_set_state_context,void,"FuriThread*, void*" -Function,+,furi_thread_set_stdout_callback,void,FuriThreadStdoutWriteCallback +Function,+,furi_thread_set_stdin_callback,void,"FuriThreadStdinReadCallback, void*" +Function,+,furi_thread_set_stdout_callback,void,"FuriThreadStdoutWriteCallback, void*" Function,+,furi_thread_signal,_Bool,"const FuriThread*, uint32_t, void*" Function,+,furi_thread_start,void,FuriThread* +Function,+,furi_thread_stdin_read,size_t,"char*, size_t, FuriWait" +Function,+,furi_thread_stdin_unread,void,"char*, size_t" Function,+,furi_thread_stdout_flush,int32_t, Function,+,furi_thread_stdout_write,size_t,"const char*, size_t" Function,+,furi_thread_suspend,void,FuriThreadId @@ -2884,9 +2894,6 @@ Function,+,nfc_iso14443a_listener_tx_custom_parity,NfcError,"Nfc*, const BitBuff Function,+,nfc_iso14443a_poller_trx_custom_parity,NfcError,"Nfc*, const BitBuffer*, BitBuffer*, uint32_t" Function,+,nfc_iso14443a_poller_trx_sdd_frame,NfcError,"Nfc*, const BitBuffer*, BitBuffer*, uint32_t" Function,+,nfc_iso14443a_poller_trx_short_frame,NfcError,"Nfc*, NfcIso14443aShortFrame, BitBuffer*, uint32_t" -Function,+,nfc_iso15693_detect_mode,NfcError,Nfc* -Function,+,nfc_iso15693_force_1outof256,NfcError,Nfc* -Function,+,nfc_iso15693_force_1outof4,NfcError,Nfc* Function,+,nfc_iso15693_listener_tx_sof,NfcError,Nfc* Function,+,nfc_listener_alloc,NfcListener*,"Nfc*, NfcProtocol, const NfcDeviceData*" Function,+,nfc_listener_free,void,NfcListener* @@ -3000,6 +3007,22 @@ Function,+,pb_skip_field,_Bool,"pb_istream_t*, pb_wire_type_t" Function,+,pb_write,_Bool,"pb_ostream_t*, const pb_byte_t*, size_t" Function,-,pclose,int,FILE* Function,-,perror,void,const char* +Function,+,pipe_alloc,PipeSideBundle,"size_t, size_t" +Function,+,pipe_alloc_ex,PipeSideBundle,"PipeSideReceiveSettings, PipeSideReceiveSettings" +Function,+,pipe_attach_to_event_loop,void,"PipeSide*, FuriEventLoop*" +Function,+,pipe_bytes_available,size_t,PipeSide* +Function,+,pipe_detach_from_event_loop,void,PipeSide* +Function,+,pipe_free,void,PipeSide* +Function,+,pipe_install_as_stdio,void,PipeSide* +Function,+,pipe_receive,size_t,"PipeSide*, void*, size_t, FuriWait" +Function,+,pipe_role,PipeRole,PipeSide* +Function,+,pipe_send,size_t,"PipeSide*, const void*, size_t, FuriWait" +Function,+,pipe_set_callback_context,void,"PipeSide*, void*" +Function,+,pipe_set_data_arrived_callback,void,"PipeSide*, PipeSideDataArrivedCallback, FuriEventLoopEvent" +Function,+,pipe_set_broken_callback,void,"PipeSide*, PipeSideBrokenCallback, FuriEventLoopEvent" +Function,+,pipe_set_space_freed_callback,void,"PipeSide*, PipeSideSpaceFreedCallback, FuriEventLoopEvent" +Function,+,pipe_spaces_available,size_t,PipeSide* +Function,+,pipe_state,PipeState,PipeSide* Function,+,plugin_manager_alloc,PluginManager*,"const char*, uint32_t, const ElfApiInterface*" Function,+,plugin_manager_free,void,PluginManager* Function,+,plugin_manager_get,const FlipperAppPluginDescriptor*,"PluginManager*, uint32_t" diff --git a/targets/f7/ble_glue/furi_ble/gatt.c b/targets/f7/ble_glue/furi_ble/gatt.c index e40786583..b8ab094f9 100644 --- a/targets/f7/ble_glue/furi_ble/gatt.c +++ b/targets/f7/ble_glue/furi_ble/gatt.c @@ -7,6 +7,12 @@ #define GATT_MIN_READ_KEY_SIZE (10) +#ifdef BLE_GATT_STRICT +#define ble_gatt_strict_crash(message) furi_crash(message) +#else +#define ble_gatt_strict_crash(message) +#endif + void ble_gatt_characteristic_init( uint16_t svc_handle, const BleGattCharacteristicParams* char_descriptor, @@ -42,6 +48,7 @@ void ble_gatt_characteristic_init( &char_instance->handle); if(status) { FURI_LOG_E(TAG, "Failed to add %s char: %d", char_descriptor->name, status); + ble_gatt_strict_crash("Failed to add characteristic"); } char_instance->descriptor_handle = 0; @@ -68,6 +75,7 @@ void ble_gatt_characteristic_init( &char_instance->descriptor_handle); if(status) { FURI_LOG_E(TAG, "Failed to add %s char descriptor: %d", char_descriptor->name, status); + ble_gatt_strict_crash("Failed to add characteristic descriptor"); } if(release_data) { free((void*)char_data); @@ -82,6 +90,7 @@ void ble_gatt_characteristic_delete( if(status) { FURI_LOG_E( TAG, "Failed to delete %s char: %d", char_instance->characteristic->name, status); + ble_gatt_strict_crash("Failed to delete characteristic"); } free((void*)char_instance->characteristic); } @@ -111,14 +120,27 @@ bool ble_gatt_characteristic_update( release_data = char_descriptor->data.callback.fn(context, &char_data, &char_data_size); } - tBleStatus result = aci_gatt_update_char_value( - svc_handle, char_instance->handle, 0, char_data_size, char_data); - if(result) { - FURI_LOG_E(TAG, "Failed updating %s characteristic: %d", char_descriptor->name, result); - } + tBleStatus result; + size_t retries_left = 1000; + do { + retries_left--; + result = aci_gatt_update_char_value( + svc_handle, char_instance->handle, 0, char_data_size, char_data); + if(result == BLE_STATUS_INSUFFICIENT_RESOURCES) { + FURI_LOG_W(TAG, "Insufficient resources for %s characteristic", char_descriptor->name); + furi_delay_ms(1); + } + } while(result == BLE_STATUS_INSUFFICIENT_RESOURCES && retries_left); + if(release_data) { free((void*)char_data); } + + if(result != BLE_STATUS_SUCCESS) { + FURI_LOG_E(TAG, "Failed updating %s characteristic: %d", char_descriptor->name, result); + ble_gatt_strict_crash("Failed to update characteristic"); + } + return result != BLE_STATUS_SUCCESS; } @@ -132,6 +154,7 @@ bool ble_gatt_service_add( Service_UUID_Type, Service_UUID, Service_Type, Max_Attribute_Records, Service_Handle); if(result) { FURI_LOG_E(TAG, "Failed to add service: %x", result); + ble_gatt_strict_crash("Failed to add service"); } return result == BLE_STATUS_SUCCESS; @@ -141,6 +164,7 @@ bool ble_gatt_service_delete(uint16_t svc_handle) { tBleStatus result = aci_gatt_del_service(svc_handle); if(result) { FURI_LOG_E(TAG, "Failed to delete service: %x", result); + ble_gatt_strict_crash("Failed to delete service"); } return result == BLE_STATUS_SUCCESS; diff --git a/targets/f7/furi_hal/furi_hal_nfc_iso15693.c b/targets/f7/furi_hal/furi_hal_nfc_iso15693.c index 0fd5dbca5..3245b67cc 100644 --- a/targets/f7/furi_hal/furi_hal_nfc_iso15693.c +++ b/targets/f7/furi_hal/furi_hal_nfc_iso15693.c @@ -406,24 +406,6 @@ FuriHalNfcError furi_hal_nfc_iso15693_listener_tx_sof(void) { return FuriHalNfcErrorNone; } -FuriHalNfcError furi_hal_nfc_iso15693_detect_mode(void) { - iso15693_parser_detect_mode(furi_hal_nfc_iso15693_listener->parser); - - return FuriHalNfcErrorNone; -} - -FuriHalNfcError furi_hal_nfc_iso15693_force_1outof4(void) { - iso15693_parser_force_1outof4(furi_hal_nfc_iso15693_listener->parser); - - return FuriHalNfcErrorNone; -} - -FuriHalNfcError furi_hal_nfc_iso15693_force_1outof256(void) { - iso15693_parser_force_1outof256(furi_hal_nfc_iso15693_listener->parser); - - return FuriHalNfcErrorNone; -} - static FuriHalNfcError furi_hal_nfc_iso15693_listener_rx( FuriHalSpiBusHandle* handle, uint8_t* rx_data, diff --git a/targets/furi_hal_include/furi_hal_nfc.h b/targets/furi_hal_include/furi_hal_nfc.h index a651c9777..3a81de6f5 100644 --- a/targets/furi_hal_include/furi_hal_nfc.h +++ b/targets/furi_hal_include/furi_hal_nfc.h @@ -452,24 +452,6 @@ FuriHalNfcError furi_hal_nfc_iso14443a_listener_tx_custom_parity( */ FuriHalNfcError furi_hal_nfc_iso15693_listener_tx_sof(void); -/** Set ISO15693 parser mode to autodetect - * - * @return FuriHalNfcError -*/ -FuriHalNfcError furi_hal_nfc_iso15693_detect_mode(void); - -/** Set ISO15693 parser mode to 1OutOf4, disables autodetection - * - * @return FuriHalNfcError -*/ -FuriHalNfcError furi_hal_nfc_iso15693_force_1outof4(void); - -/** Set ISO15693 parser mode to 1OutOf256, disables autodetection - * - * @return FuriHalNfcError -*/ -FuriHalNfcError furi_hal_nfc_iso15693_force_1outof256(void); - /** * @brief Set FeliCa collision resolution parameters in listener mode. *