Merge remote-tracking branch 'upstream/dev' into dev

This commit is contained in:
r3df0xx
2022-04-14 21:39:15 +03:00
174 changed files with 527 additions and 76 deletions
+11 -8
View File
@@ -102,14 +102,17 @@ jobs:
- name: 'Bundle self-update package'
if: ${{ !github.event.pull_request.head.repo.fork }}
run: |
set -e
for UPDATEBUNDLE in artifacts/*/
do
BUNDLE_NAME=`echo $UPDATEBUNDLE | cut -d'/' -f2`
echo Packaging ${BUNDLE_NAME}
tar czpf artifacts/flipper-z-${BUNDLE_NAME}.tgz -C artifacts ${BUNDLE_NAME}
done
uses: ./.github/actions/docker
with:
run: |
set -e
for UPDATEBUNDLE in artifacts/*/
do
BUNDLE_NAME=`echo $UPDATEBUNDLE | cut -d'/' -f2`
echo Packaging ${BUNDLE_NAME}
tar czpf artifacts/flipper-z-${BUNDLE_NAME}.tgz -C artifacts ${BUNDLE_NAME}
rm -rf artifacts/${BUNDLE_NAME}
done
- name: 'Bundle resources'
if: ${{ !github.event.pull_request.head.repo.fork }}
@@ -120,13 +120,12 @@ void archive_file_array_swap(ArchiveBrowserView* browser, int8_t dir) {
ArchiveFile_t_clear(&temp);
} else if(model->item_idx == array_size && dir > 0) {
ArchiveFile_t_init(&temp);
files_array_pop_at(&temp, model->files, model->item_idx);
files_array_pop_at(&temp, model->files, 0);
files_array_push_at(model->files, array_size, temp);
ArchiveFile_t_clear(&temp);
} else {
files_array_swap_at(model->files, model->item_idx, swap_idx);
}
return false;
});
}
@@ -106,6 +106,8 @@ static bool archive_favourites_rescan() {
if(file_exists) {
storage_file_close(fav_item_file);
archive_file_append(ARCHIVE_FAV_TEMP_PATH, "%s\n", string_get_cstr(buffer));
} else {
storage_file_close(fav_item_file);
}
}
}
@@ -116,6 +118,7 @@ static bool archive_favourites_rescan() {
storage_file_close(file);
storage_common_remove(fs_api, ARCHIVE_FAV_PATH);
storage_common_rename(fs_api, ARCHIVE_FAV_TEMP_PATH, ARCHIVE_FAV_PATH);
storage_common_remove(fs_api, ARCHIVE_FAV_TEMP_PATH);
storage_file_free(file);
storage_file_free(fav_item_file);
@@ -163,10 +166,12 @@ bool archive_favorites_read(void* context) {
bool file_exists = storage_file_open(
fav_item_file, string_get_cstr(buffer), FSAM_READ, FSOM_OPEN_EXISTING);
if(file_exists) {
storage_common_stat(fs_api, string_get_cstr(buffer), &file_info);
storage_file_close(fav_item_file);
archive_add_file_item(browser, &file_info, string_get_cstr(buffer));
file_count++;
} else {
storage_file_close(fav_item_file);
need_refresh = true;
}
}
@@ -224,6 +229,7 @@ bool archive_favorites_delete(const char* format, ...) {
storage_file_close(file);
storage_common_remove(fs_api, ARCHIVE_FAV_PATH);
storage_common_rename(fs_api, ARCHIVE_FAV_TEMP_PATH, ARCHIVE_FAV_PATH);
storage_common_remove(fs_api, ARCHIVE_FAV_TEMP_PATH);
storage_file_free(file);
furi_record_close("storage");
@@ -308,6 +314,7 @@ bool archive_favorites_rename(const char* src, const char* dst) {
storage_file_close(file);
storage_common_remove(fs_api, ARCHIVE_FAV_PATH);
storage_common_rename(fs_api, ARCHIVE_FAV_TEMP_PATH, ARCHIVE_FAV_PATH);
storage_common_remove(fs_api, ARCHIVE_FAV_TEMP_PATH);
storage_file_free(file);
furi_record_close("storage");
@@ -335,6 +342,7 @@ void archive_favorites_save(void* context) {
storage_common_remove(fs_api, ARCHIVE_FAV_PATH);
storage_common_rename(fs_api, ARCHIVE_FAV_TEMP_PATH, ARCHIVE_FAV_PATH);
storage_common_remove(fs_api, ARCHIVE_FAV_TEMP_PATH);
storage_file_free(file);
furi_record_close("storage");
+22 -6
View File
@@ -6,6 +6,7 @@
#include <time.h>
#include <notification/notification_messages.h>
#include <loader/loader.h>
#include <stream_buffer.h>
// Close to ISO, `date +'%Y-%m-%d %H:%M:%S %u'`
#define CLI_DATE_FORMAT "%.4d-%.2d-%.2d %.2d:%.2d:%.2d %d"
@@ -126,13 +127,28 @@ void cli_command_date(Cli* cli, string_t args, void* context) {
}
}
#define CLI_COMMAND_LOG_RING_SIZE 2048
#define CLI_COMMAND_LOG_BUFFER_SIZE 64
void cli_command_log_tx_callback(const uint8_t* buffer, size_t size, void* context) {
xStreamBufferSend(context, buffer, size, 0);
}
void cli_command_log(Cli* cli, string_t args, void* context) {
furi_stdglue_set_global_stdout_callback(cli_stdout_callback);
furi_log_set_puts((FuriLogPuts)printf);
printf("Press any key to stop...\r\n");
cli_getc(cli);
furi_stdglue_set_global_stdout_callback(NULL);
furi_log_set_puts(furi_hal_console_puts);
StreamBufferHandle_t ring = xStreamBufferCreate(CLI_COMMAND_LOG_RING_SIZE, 1);
uint8_t buffer[CLI_COMMAND_LOG_BUFFER_SIZE];
furi_hal_console_set_tx_callback(cli_command_log_tx_callback, ring);
printf("Press CTRL+C to stop...\r\n");
while(!cli_cmd_interrupt_received(cli)) {
size_t ret = xStreamBufferReceive(ring, buffer, CLI_COMMAND_LOG_BUFFER_SIZE, 50);
cli_write(cli, buffer, ret);
}
furi_hal_console_set_tx_callback(NULL, NULL);
vStreamBufferDelete(ring);
}
void cli_command_vibro(Cli* cli, string_t args, void* context) {
@@ -44,7 +44,7 @@ void iButtonSceneReadSuccess::on_enter(iButtonApp* app) {
dialog_ex_set_text(dialog_ex, app->get_text_store(), 95, 30, AlignCenter, AlignCenter);
dialog_ex_set_left_button_text(dialog_ex, "Retry");
dialog_ex_set_right_button_text(dialog_ex, "More");
dialog_ex_set_icon(dialog_ex, 0, 1, &I_DolphinExcited_64x63);
dialog_ex_set_icon(dialog_ex, 0, 1, &I_DolphinReadingSuccess_59x63);
dialog_ex_set_result_callback(dialog_ex, dialog_ex_callback);
dialog_ex_set_context(dialog_ex, app);
+6
View File
@@ -4,12 +4,16 @@
#include <furi.h>
#include <loader/loader.h>
#define TAG "RpcSystemApp"
static void rpc_system_app_start_process(const PB_Main* request, void* context) {
furi_assert(request);
furi_assert(request->which_content == PB_Main_app_start_request_tag);
RpcSession* session = (RpcSession*)context;
furi_assert(session);
FURI_LOG_D(TAG, "Start");
PB_CommandStatus result = PB_CommandStatus_ERROR_APP_CANT_START;
Loader* loader = furi_record_open("loader");
@@ -43,6 +47,8 @@ static void rpc_system_app_lock_status_process(const PB_Main* request, void* con
RpcSession* session = (RpcSession*)context;
furi_assert(session);
FURI_LOG_D(TAG, "LockStatus");
Loader* loader = furi_record_open("loader");
PB_Main response = {
+13 -1
View File
@@ -65,8 +65,10 @@ static int32_t rpc_system_gui_screen_stream_frame_transmit_thread(void* context)
static void rpc_system_gui_start_screen_stream_process(const PB_Main* request, void* context) {
furi_assert(request);
furi_assert(context);
RpcGuiSystem* rpc_gui = context;
FURI_LOG_D(TAG, "StartScreenStream");
RpcGuiSystem* rpc_gui = context;
RpcSession* session = rpc_gui->session;
furi_assert(session);
@@ -103,6 +105,8 @@ static void rpc_system_gui_stop_screen_stream_process(const PB_Main* request, vo
furi_assert(request);
furi_assert(context);
FURI_LOG_D(TAG, "StopScreenStream");
RpcGuiSystem* rpc_gui = context;
RpcSession* session = rpc_gui->session;
furi_assert(session);
@@ -132,6 +136,8 @@ static void
furi_assert(request->which_content == PB_Main_gui_send_input_event_request_tag);
furi_assert(context);
FURI_LOG_D(TAG, "SendInputEvent");
RpcGuiSystem* rpc_gui = context;
RpcSession* session = rpc_gui->session;
furi_assert(session);
@@ -220,6 +226,8 @@ static void rpc_system_gui_start_virtual_display_process(const PB_Main* request,
furi_assert(request);
furi_assert(context);
FURI_LOG_D(TAG, "StartVirtualDisplay");
RpcGuiSystem* rpc_gui = context;
RpcSession* session = rpc_gui->session;
furi_assert(session);
@@ -259,6 +267,8 @@ static void rpc_system_gui_stop_virtual_display_process(const PB_Main* request,
furi_assert(request);
furi_assert(context);
FURI_LOG_D(TAG, "StopVirtualDisplay");
RpcGuiSystem* rpc_gui = context;
RpcSession* session = rpc_gui->session;
furi_assert(session);
@@ -282,6 +292,8 @@ static void rpc_system_gui_virtual_display_frame_process(const PB_Main* request,
furi_assert(request);
furi_assert(context);
FURI_LOG_D(TAG, "VirtualDisplayFrame");
RpcGuiSystem* rpc_gui = context;
RpcSession* session = rpc_gui->session;
furi_assert(session);
+28 -1
View File
@@ -12,7 +12,8 @@
#include <lib/toolbox/md5.h>
#include <update_util/lfs_backup.h>
#define RPC_TAG "RPC_STORAGE"
#define TAG "RpcStorage"
#define MAX_NAME_LENGTH 255
static const size_t MAX_DATA_SIZE = 512;
@@ -106,6 +107,8 @@ static void rpc_system_storage_info_process(const PB_Main* request, void* contex
furi_assert(context);
furi_assert(request->which_content == PB_Main_storage_info_request_tag);
FURI_LOG_D(TAG, "Info");
RpcStorageSystem* rpc_storage = context;
RpcSession* session = rpc_storage->session;
furi_assert(session);
@@ -140,6 +143,8 @@ static void rpc_system_storage_stat_process(const PB_Main* request, void* contex
furi_assert(context);
furi_assert(request->which_content == PB_Main_storage_stat_request_tag);
FURI_LOG_D(TAG, "Stat");
RpcStorageSystem* rpc_storage = context;
RpcSession* session = rpc_storage->session;
furi_assert(session);
@@ -205,6 +210,8 @@ static void rpc_system_storage_list_process(const PB_Main* request, void* contex
furi_assert(context);
furi_assert(request->which_content == PB_Main_storage_list_request_tag);
FURI_LOG_D(TAG, "List");
RpcStorageSystem* rpc_storage = context;
RpcSession* session = rpc_storage->session;
furi_assert(session);
@@ -273,6 +280,8 @@ static void rpc_system_storage_read_process(const PB_Main* request, void* contex
furi_assert(context);
furi_assert(request->which_content == PB_Main_storage_read_request_tag);
FURI_LOG_D(TAG, "Read");
RpcStorageSystem* rpc_storage = context;
RpcSession* session = rpc_storage->session;
furi_assert(session);
@@ -330,6 +339,8 @@ static void rpc_system_storage_write_process(const PB_Main* request, void* conte
furi_assert(context);
furi_assert(request->which_content == PB_Main_storage_write_request_tag);
FURI_LOG_D(TAG, "Write");
RpcStorageSystem* rpc_storage = context;
RpcSession* session = rpc_storage->session;
furi_assert(session);
@@ -395,6 +406,9 @@ static void rpc_system_storage_delete_process(const PB_Main* request, void* cont
furi_assert(request);
furi_assert(request->which_content == PB_Main_storage_delete_request_tag);
furi_assert(context);
FURI_LOG_D(TAG, "Delete");
RpcStorageSystem* rpc_storage = context;
RpcSession* session = rpc_storage->session;
furi_assert(session);
@@ -433,6 +447,9 @@ static void rpc_system_storage_mkdir_process(const PB_Main* request, void* conte
furi_assert(request);
furi_assert(request->which_content == PB_Main_storage_mkdir_request_tag);
furi_assert(context);
FURI_LOG_D(TAG, "Mkdir");
RpcStorageSystem* rpc_storage = context;
RpcSession* session = rpc_storage->session;
furi_assert(session);
@@ -456,6 +473,9 @@ static void rpc_system_storage_md5sum_process(const PB_Main* request, void* cont
furi_assert(request);
furi_assert(request->which_content == PB_Main_storage_md5sum_request_tag);
furi_assert(context);
FURI_LOG_D(TAG, "Md5sum");
RpcStorageSystem* rpc_storage = context;
RpcSession* session = rpc_storage->session;
furi_assert(session);
@@ -521,6 +541,9 @@ static void rpc_system_storage_rename_process(const PB_Main* request, void* cont
furi_assert(request);
furi_assert(request->which_content == PB_Main_storage_rename_request_tag);
furi_assert(context);
FURI_LOG_D(TAG, "Rename");
RpcStorageSystem* rpc_storage = context;
RpcSession* session = rpc_storage->session;
furi_assert(session);
@@ -544,6 +567,8 @@ static void rpc_system_storage_backup_create_process(const PB_Main* request, voi
furi_assert(request);
furi_assert(request->which_content == PB_Main_storage_backup_create_request_tag);
FURI_LOG_D(TAG, "BackupCreate");
RpcSession* session = (RpcSession*)context;
furi_assert(session);
@@ -567,6 +592,8 @@ static void rpc_system_storage_backup_restore_process(const PB_Main* request, vo
furi_assert(request);
furi_assert(request->which_content == PB_Main_storage_backup_restore_request_tag);
FURI_LOG_D(TAG, "BackupRestore");
RpcSession* session = (RpcSession*)context;
furi_assert(session);
+23 -1
View File
@@ -7,6 +7,8 @@
#include "rpc_i.h"
#define TAG "RpcSystem"
typedef struct {
RpcSession* session;
PB_Main* response;
@@ -16,6 +18,8 @@ static void rpc_system_system_ping_process(const PB_Main* request, void* context
furi_assert(request);
furi_assert(request->which_content == PB_Main_system_ping_request_tag);
FURI_LOG_D(TAG, "Ping");
RpcSession* session = (RpcSession*)context;
furi_assert(session);
@@ -46,6 +50,8 @@ static void rpc_system_system_reboot_process(const PB_Main* request, void* conte
furi_assert(request);
furi_assert(request->which_content == PB_Main_system_reboot_request_tag);
FURI_LOG_D(TAG, "Reboot");
RpcSession* session = (RpcSession*)context;
furi_assert(session);
@@ -84,6 +90,8 @@ static void rpc_system_system_device_info_process(const PB_Main* request, void*
furi_assert(request);
furi_assert(request->which_content == PB_Main_system_device_info_request_tag);
FURI_LOG_D(TAG, "DeviceInfo");
RpcSession* session = (RpcSession*)context;
furi_assert(session);
@@ -105,6 +113,8 @@ static void rpc_system_system_get_datetime_process(const PB_Main* request, void*
furi_assert(request);
furi_assert(request->which_content == PB_Main_system_get_datetime_request_tag);
FURI_LOG_D(TAG, "GetDatetime");
RpcSession* session = (RpcSession*)context;
furi_assert(session);
@@ -132,6 +142,8 @@ static void rpc_system_system_set_datetime_process(const PB_Main* request, void*
furi_assert(request);
furi_assert(request->which_content == PB_Main_system_set_datetime_request_tag);
FURI_LOG_D(TAG, "SetDatetime");
RpcSession* session = (RpcSession*)context;
furi_assert(session);
@@ -158,6 +170,8 @@ static void rpc_system_system_factory_reset_process(const PB_Main* request, void
furi_assert(request);
furi_assert(request->which_content == PB_Main_system_factory_reset_request_tag);
FURI_LOG_D(TAG, "Reset");
RpcSession* session = (RpcSession*)context;
furi_assert(session);
@@ -172,6 +186,8 @@ static void
furi_assert(request);
furi_assert(request->which_content == PB_Main_system_play_audiovisual_alert_request_tag);
FURI_LOG_D(TAG, "Alert");
RpcSession* session = (RpcSession*)context;
furi_assert(session);
@@ -186,6 +202,8 @@ static void rpc_system_system_protobuf_version_process(const PB_Main* request, v
furi_assert(request);
furi_assert(request->which_content == PB_Main_system_protobuf_version_request_tag);
FURI_LOG_D(TAG, "ProtobufVersion");
RpcSession* session = (RpcSession*)context;
furi_assert(session);
@@ -226,6 +244,8 @@ static void rpc_system_system_get_power_info_process(const PB_Main* request, voi
furi_assert(request);
furi_assert(request->which_content == PB_Main_system_power_info_request_tag);
FURI_LOG_D(TAG, "GetPowerInfo");
RpcSession* session = (RpcSession*)context;
furi_assert(session);
@@ -248,6 +268,8 @@ static void rpc_system_system_update_request_process(const PB_Main* request, voi
furi_assert(request);
furi_assert(request->which_content == PB_Main_system_update_request_tag);
FURI_LOG_D(TAG, "SystemUpdate");
RpcSession* session = (RpcSession*)context;
furi_assert(session);
@@ -305,4 +327,4 @@ void* rpc_system_system_alloc(RpcSession* session) {
#endif
return NULL;
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

+32
View File
@@ -0,0 +1,32 @@
Filetype: Flipper Animation
Version: 1
Width: 128
Height: 64
Passive frames: 4
Active frames: 42
Frames order: 0 1 2 1 3 4 5 6 7 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 11 12 4 3
Active cycles: 1
Frame rate: 2
Duration: 3600
Active cooldown: 7
Bubble slots: 1
Slot: 0
X: 51
Y: 49
Text: Adios.
AlignH: Center
AlignV: Top
StartFrame: 6
EndFrame: 9
Slot: 0
X: 1
Y: 49
Text: Forgot something...
AlignH: Center
AlignV: Top
StartFrame: 42
EndFrame: 45
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

+23
View File
@@ -0,0 +1,23 @@
Filetype: Flipper Animation
Version: 1
Width: 128
Height: 64
Passive frames: 7
Active frames: 13
Frames order: 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 12 13 12 13
Active cycles: 1
Frame rate: 2
Duration: 3600
Active cooldown: 7
Bubble slots: 1
Slot: 0
X: 67
Y: 24
Text: Am I a joke\nto you?!?!
AlignH: Left
AlignV: Center
StartFrame: 15
EndFrame: 19
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

+23
View File
@@ -0,0 +1,23 @@
Filetype: Flipper Animation
Version: 1
Width: 128
Height: 64
Passive frames: 9
Active frames: 5
Frames order: 0 1 2 3 4 5 6 7 8 9 10 9 10 9
Active cycles: 1
Frame rate: 2
Duration: 3600
Active cooldown: 7
Bubble slots: 1
Slot: 0
X: 71
Y: 28
Text: I am busy rn
AlignH: Left
AlignV: Center
StartFrame: 10
EndFrame: 13
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

+14
View File
@@ -0,0 +1,14 @@
Filetype: Flipper Animation
Version: 1
Width: 128
Height: 64
Passive frames: 8
Active frames: 8
Frames order: 0 1 2 3 4 5 4 6 7 8 9 10 11 12 11 13
Active cycles: 1
Frame rate: 2
Duration: 3600
Active cooldown: 7
Bubble slots: 0
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

+59
View File
@@ -0,0 +1,59 @@
Filetype: Flipper Animation
Version: 1
Width: 128
Height: 54
Passive frames: 6
Active frames: 8
Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
Active cycles: 1
Frame rate: 2
Duration: 3600
Active cooldown: 7
Bubble slots: 1
Slot: 0
X: 71
Y: 23
Text: 7em!g!7j!\nVyP5?T-
AlignH: Left
AlignV: Center
StartFrame: 8
EndFrame: 8
Slot: 0
X: 71
Y: 23
Text: aUqF7sz!\n%9.mP5H
AlignH: Left
AlignV: Center
StartFrame: 9
EndFrame: 9
Slot: 0
X: 71
Y: 23
Text: 2%Kx2mV\nL8EyA84
AlignH: Left
AlignV: Center
StartFrame: 10
EndFrame: 10
Slot: 0
X: 71
Y: 23
Text: U7%cRXr\nvbBa!_W1
AlignH: Left
AlignV: Center
StartFrame: 11
EndFrame: 11
Slot: 0
X: 71
Y: 23
Text: 5rm_[K%\n!!(U9d$tE
AlignH: Left
AlignV: Center
StartFrame: 12
EndFrame: 12
+37 -2
View File
@@ -10,9 +10,9 @@ Weight: 3
Name: L1_Laptop_128x51
Min butthurt: 0
Max butthurt: 9
Max butthurt: 7
Min level: 1
Max level: 3
Max level: 1
Weight: 3
Name: L1_Sleep_128x64
@@ -77,3 +77,38 @@ Max butthurt: 13
Min level: 1
Max level: 3
Weight: 3
Name: L1_Mad_fist_128x64
Min butthurt: 9
Max butthurt: 13
Min level: 1
Max level: 3
Weight: 3
Name: L3_Hijack_radio_128x64
Min butthurt: 0
Max butthurt: 8
Min level: 3
Max level: 3
Weight: 3
Name: L3_Lab_research_128x54
Min butthurt: 0
Max butthurt: 10
Min level: 3
Max level: 3
Weight: 3
Name: L2_Soldering_128x64
Min butthurt: 0
Max butthurt: 10
Min level: 2
Max level: 2
Weight: 3
Name: L1_Leaving_sad_128x64
Min butthurt: 14
Max butthurt: 14
Min level: 1
Max level: 3
Weight: 3
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More