From fc776446de9fdd553b221c02668b925b689378d8 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Tue, 18 Oct 2022 04:20:37 +0300 Subject: [PATCH] heap defence, aka stack attack, ported to latest fw --- .../plugins/heap_defence_game/application.fam | 11 + .../assets_images/Background_128x64.png | Bin 0 -> 872 bytes .../assets_images/Box1_10x10.png | Bin 0 -> 489 bytes .../assets_images/Box2_10x10.png | Bin 0 -> 448 bytes .../assets_images/Box3_10x10.png | Bin 0 -> 459 bytes .../assets_images/Box4_10x10.png | Bin 0 -> 463 bytes .../assets_images/Box5_10x10.png | Bin 0 -> 475 bytes .../assets_images/Box6p_10x10.png | Bin 0 -> 471 bytes .../assets_images/Box7p_10x10.png | Bin 0 -> 470 bytes .../assets_images/Box8p_10x10.png | Bin 0 -> 465 bytes .../assets_images/Game_over_128x64.png | Bin 0 -> 683 bytes .../HD_game_over_128x64/frame_01.png | Bin 0 -> 683 bytes .../HD_game_over_128x64/frame_02.png | Bin 0 -> 680 bytes .../HD_game_over_128x64/frame_03.png | Bin 0 -> 671 bytes .../HD_game_over_128x64/frame_04.png | Bin 0 -> 667 bytes .../HD_game_over_128x64/frame_05.png | Bin 0 -> 670 bytes .../HD_game_over_128x64/frame_06.png | Bin 0 -> 669 bytes .../HD_game_over_128x64/frame_07.png | Bin 0 -> 677 bytes .../HD_game_over_128x64/frame_rate | 1 + .../HD_person_block_left_10x20/frame_01.png | Bin 0 -> 8918 bytes .../HD_person_block_left_10x20/frame_02.png | Bin 0 -> 9144 bytes .../HD_person_block_left_10x20/frame_rate | 1 + .../HD_person_block_right_10x20/frame_01.png | Bin 0 -> 475 bytes .../HD_person_block_right_10x20/frame_02.png | Bin 0 -> 503 bytes .../HD_person_block_right_10x20/frame_rate | 1 + .../HD_person_left_10x20/frame_01.png | Bin 0 -> 214 bytes .../HD_person_left_10x20/frame_02.png | Bin 0 -> 216 bytes .../HD_person_left_10x20/frame_03.png | Bin 0 -> 221 bytes .../HD_person_left_10x20/frame_04.png | Bin 0 -> 216 bytes .../HD_person_left_10x20/frame_rate | 1 + .../HD_person_right_10x20/frame_01.png | Bin 0 -> 217 bytes .../HD_person_right_10x20/frame_02.png | Bin 0 -> 218 bytes .../HD_person_right_10x20/frame_03.png | Bin 0 -> 216 bytes .../HD_person_right_10x20/frame_04.png | Bin 0 -> 218 bytes .../HD_person_right_10x20/frame_rate | 1 + .../HD_start_128x64/frame_01.png | Bin 0 -> 3820 bytes .../HD_start_128x64/frame_02.png | Bin 0 -> 3881 bytes .../HD_start_128x64/frame_03.png | Bin 0 -> 3810 bytes .../HD_start_128x64/frame_04.png | Bin 0 -> 3881 bytes .../assets_images/HD_start_128x64/frame_rate | 1 + .../assets_images/Person4_1_10x20.png | Bin 0 -> 8918 bytes .../assets_images/Person4_2_10x20.png | Bin 0 -> 9144 bytes .../assets_images/Person5_1_10x20.png | Bin 0 -> 475 bytes .../assets_images/Person5_2_10x20.png | Bin 0 -> 503 bytes .../assets_images/Start_128x64.png | Bin 0 -> 3881 bytes .../plugins/heap_defence_game/box.png | Bin 0 -> 131 bytes .../plugins/heap_defence_game/heap_defence.c | 593 ++++++++++++++++++ .../plugins/heap_defence_game/hede_assets.c | 11 + .../plugins/heap_defence_game/hede_assets.h | 11 + 49 files changed, 632 insertions(+) create mode 100644 applications/plugins/heap_defence_game/application.fam create mode 100644 applications/plugins/heap_defence_game/assets_images/Background_128x64.png create mode 100644 applications/plugins/heap_defence_game/assets_images/Box1_10x10.png create mode 100644 applications/plugins/heap_defence_game/assets_images/Box2_10x10.png create mode 100644 applications/plugins/heap_defence_game/assets_images/Box3_10x10.png create mode 100644 applications/plugins/heap_defence_game/assets_images/Box4_10x10.png create mode 100644 applications/plugins/heap_defence_game/assets_images/Box5_10x10.png create mode 100644 applications/plugins/heap_defence_game/assets_images/Box6p_10x10.png create mode 100644 applications/plugins/heap_defence_game/assets_images/Box7p_10x10.png create mode 100644 applications/plugins/heap_defence_game/assets_images/Box8p_10x10.png create mode 100644 applications/plugins/heap_defence_game/assets_images/Game_over_128x64.png create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_01.png create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_02.png create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_03.png create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_04.png create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_05.png create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_06.png create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_07.png create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_rate create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_01.png create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_02.png create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_rate create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_01.png create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_02.png create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_rate create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_01.png create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_02.png create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_03.png create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_04.png create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_rate create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_01.png create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_02.png create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_03.png create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_04.png create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_rate create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_01.png create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_02.png create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_03.png create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_04.png create mode 100644 applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_rate create mode 100644 applications/plugins/heap_defence_game/assets_images/Person4_1_10x20.png create mode 100644 applications/plugins/heap_defence_game/assets_images/Person4_2_10x20.png create mode 100644 applications/plugins/heap_defence_game/assets_images/Person5_1_10x20.png create mode 100644 applications/plugins/heap_defence_game/assets_images/Person5_2_10x20.png create mode 100644 applications/plugins/heap_defence_game/assets_images/Start_128x64.png create mode 100644 applications/plugins/heap_defence_game/box.png create mode 100644 applications/plugins/heap_defence_game/heap_defence.c create mode 100644 applications/plugins/heap_defence_game/hede_assets.c create mode 100644 applications/plugins/heap_defence_game/hede_assets.h diff --git a/applications/plugins/heap_defence_game/application.fam b/applications/plugins/heap_defence_game/application.fam new file mode 100644 index 00000000000..b132531d1db --- /dev/null +++ b/applications/plugins/heap_defence_game/application.fam @@ -0,0 +1,11 @@ +App( + appid="heap_defence", + name="Heap Defence", + apptype=FlipperAppType.EXTERNAL, + entry_point="heap_defence_app", + requires=["gui"], + stack_size=1 * 1024, + fap_category="Games", + fap_icon="box.png", + fap_icon_assets="assets_images", +) diff --git a/applications/plugins/heap_defence_game/assets_images/Background_128x64.png b/applications/plugins/heap_defence_game/assets_images/Background_128x64.png new file mode 100644 index 0000000000000000000000000000000000000000..a7eb1326f588aa9a14a0a60df174def162787c23 GIT binary patch literal 872 zcmV-u1DE`XP)EX>4Tx02q~xP_aq_K@fclNlbA?3b7E86c!c+Y)l^v972RkR7kAc>|PPPJ&(H! z#y`l%r?)K_9$QM&|OTIS)XHyKYJ+XtTrP)7r& zXlhery(k*M8$TaVg6|#i^6U0S!^VXnu9;6J%S%9Akau6pOt>XKe7+xDlP}0y)}`#J zCHa|kR``m%?~=Ls^OS9ZIDNR2KJx@2Zg7hTZA>x83<*kfh$%aLba6!-RCNrEoK?tI z;|&E2F+uF{Kd$^Ex=yK@Q7w)yaGVl9$UQe>-@|HB9j!B+>+J>D^LRIRclT({E6qRu z@C%j_NRp7vwoCv3010qNS#tmYE+YT{E+YYWr9XB6000McNlirueSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00GEJL_t(|+U=XaN&`U< zhrd~_FcPa23PuZSAHetU8GIlg!N*BqWg&tf7=j{p#so1q7Q1J1`KMPpGaHsmE@^(d zzxgt=!-=Y(_??1!mY=8VQ90Ki4shat&HG$g5txT={nqdTXb~z)cYYtqlF_s12X4w@ z)URzW5LL_3E-QC*>34}0^Vsr)a=Rpa?g>G%11x1k>vTwi33FfyO7fQqXqh=YlE+L) zfi8-oH3X%_AIEY)~qXUf90Hno0if@L0iz-x?zv;kAkG6ko}(6szCiQ^;yfT25DW+g1OtKr!GK^uFd!HZ3KmjC&8CE z|26Jai1__XNzqkIW=3s(n|c3D#w+1TF@d{TVxpcsTwyNhFL#@LK1YB%^YV0^eXAlw5}~Fbd?Dy<>{RhdLsNW zFDs9s;5S3@>@A8P`6LNV2+Ue30w2z`-iiFWY-$cef^g8#^(z2^78K)=d{n- z|Np=}O~_-?gtOaxfC0pmwc6x=<11Hv2m#DR*eJzX3_ zIIidRIr1?ma2&Qe^nZU3yGg^YKmjC&8CE z|26Jai1__XNzqkIW=3s(n|c3D#w+1TF@d{TVxpcsTwyNhFL#@LK1YB%^YV0^eXAlw5}~Fbd?Dy<>{RhdLsNW zFDs9s;5S3@>@A8P`6LNV2+Ue30w2z`-iiFWY-$cef^g8#^(z2^78K)=d{n- z|Np=}O~_-?gtOaxfC0o=;1OBOz@VoL!i*J5?aP3I>?NMQuIx{FSUHS^3O7|G0fi(> zTq8=H^K)}k^GX<;i&7IyQd1PlGfOfQ+&z5*!W;R-fr=D7T^vI=t|zDbIN!h+Az|Pm oDJjtzcJfFAtAPFqkC~Gh98B4TIWJ#q1*&E6boFyt=akR{00)etUjP6A literal 0 HcmV?d00001 diff --git a/applications/plugins/heap_defence_game/assets_images/Box3_10x10.png b/applications/plugins/heap_defence_game/assets_images/Box3_10x10.png new file mode 100644 index 0000000000000000000000000000000000000000..e20e75b005587aacd3c7bd58f760c00f6842e37b GIT binary patch literal 459 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V3y@T|W;bJCVC2hmb`J1#c2+1T%1_J8No8P= znA#h#(TmwppqAUyr_hyaqrgNFF)_9rA9)@brxx!Jk2QDR#0l=P?cdFP%>KmjC&8CE z|26Jai1__XNzqkIW=3s(n|c3D#w+1TF@d{TVxpcsTwyNhFL#@LK1YB%^YV0^eXAlw5}~Fbd?Dy<>{RhdLsNW zFDs9s;5S3@>@A8P`6LNV2+Ue30w2z`-iiFWY-$cef^g8#^(z2^78K)=d{n- z|Np=}O~_-?gtOaxfC0o=;1OBOz@VoL!i*J5?aP3I>?NMQuIx{FSUFV0S)w_rfkKic zt`Q~9`MJ5Nc_j?aMX8A;sVNHOnI#zt?w-B@;f;LaKtbp~6v&WwK!K2m47XAJdGIiftH{rm;!{G1LSDwJ~_Q`njxgN@xNAz<;Hu literal 0 HcmV?d00001 diff --git a/applications/plugins/heap_defence_game/assets_images/Box4_10x10.png b/applications/plugins/heap_defence_game/assets_images/Box4_10x10.png new file mode 100644 index 0000000000000000000000000000000000000000..98d1341043e6e81dc9883715af6252e9df253526 GIT binary patch literal 463 zcmV;=0WkiFP)EX>4Tx02q~xP_aq_K@fclNlbA?3b7E86c!c+Y)l^v972RkR7kAc>|PPPJ&(H! z#y`l%r?)K_9$QM&|OTIS)XHyKYJ+XtTrP)7r& zXlhery(k*M8$TaVg6|#i^6U0S!^VXnu9;6J%S%9Akau6pOt>XKe7+xDlP}0y)}`#J zCHa|kR``m%?~=Ls^OS9ZIDNR2KJx@2Zg7hTZA>x83<*kfh$%aLba6!-RCNrEoK?tI z;|&E2F+uF{Kd$^Ex=yK@Q7w)yaGVl9$UQe>-@|HB9j!B+>+J>D^LRIRclT({E6qRu z@C%j_NRp7vwoCv3010qNS#tmYE+YT{E+YYWr9XB6000McNlirueSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{001vZL_t&t*JEV(&wv3~ z7%)T`8CVcZ6qPXWA1=+rz<||EOaoZZHRIHdRge*z;{kqg1s&yuOw|AY002ovPDHLk FV1loBtrY+O literal 0 HcmV?d00001 diff --git a/applications/plugins/heap_defence_game/assets_images/Box5_10x10.png b/applications/plugins/heap_defence_game/assets_images/Box5_10x10.png new file mode 100644 index 0000000000000000000000000000000000000000..f8dbf339f8de7adb3e855f456f5fe89049ebd2bc GIT binary patch literal 475 zcmV<10VMv3P)EX>4Tx02q~xP_aq_K@fclNlbA?3b7E86c!c+Y)l^v972RkR7kAc>|PPPJ&(H! z#y`l%r?)K_9$QM&|OTIS)XHyKYJ+XtTrP)7r& zXlhery(k*M8$TaVg6|#i^6U0S!^VXnu9;6J%S%9Akau6pOt>XKe7+xDlP}0y)}`#J zCHa|kR``m%?~=Ls^OS9ZIDNR2KJx@2Zg7hTZA>x83<*kfh$%aLba6!-RCNrEoK?tI z;|&E2F+uF{Kd$^Ex=yK@Q7w)yaGVl9$UQe>-@|HB9j!B+>+J>D^LRIRclT({E6qRu z@C%j_NRp7vwoCv3010qNS#tmYE+YT{E+YYWr9XB6000McNlirueSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{0028lL_t&t*KLkL4geqs z!#czNzl?`zB;Zca!7`By1&zwkgOwyQ^lCeSb&*QMdY788;+W4TxtG$f{058B4HkzG RlO6y7002ovPDHLkV1mZYv&#Sg literal 0 HcmV?d00001 diff --git a/applications/plugins/heap_defence_game/assets_images/Box6p_10x10.png b/applications/plugins/heap_defence_game/assets_images/Box6p_10x10.png new file mode 100644 index 0000000000000000000000000000000000000000..da50f8c860d1541f433f7532e8e968fd72b865ae GIT binary patch literal 471 zcmV;|0Vw{7P)EX>4Tx02q~xP_aq_K@fclNlbA?3b7E86c!c+Y)l^v972RkR7kAc>|PPPJ&(H! z#y`l%r?)K_9$QM&|OTIS)XHyKYJ+XtTrP)7r& zXlhery(k*M8$TaVg6|#i^6U0S!^VXnu9;6J%S%9Akau6pOt>XKe7+xDlP}0y)}`#J zCHa|kR``m%?~=Ls^OS9ZIDNR2KJx@2Zg7hTZA>x83<*kfh$%aLba6!-RCNrEoK?tI z;|&E2F+uF{Kd$^Ex=yK@Q7w)yaGVl9$UQe>-@|HB9j!B+>+J>D^LRIRclT({E6qRu z@C%j_NRp7vwoCv3010qNS#tmYE+YT{E+YYWr9XB6000McNlirueSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{001{hL_t&t*LBW84geqs z1Hmov|6i^LF-k;^6Iu}FnE@0R5MXqX7amq-0zRF4*A?rrHr}GT=O_G$3Kbhd0cijL N002ovPDHLkV1i_9ti1pL literal 0 HcmV?d00001 diff --git a/applications/plugins/heap_defence_game/assets_images/Box7p_10x10.png b/applications/plugins/heap_defence_game/assets_images/Box7p_10x10.png new file mode 100644 index 0000000000000000000000000000000000000000..efcd2ac0cf54c748487e5b9b1da5b9dc2a381140 GIT binary patch literal 470 zcmV;{0V)28P)EX>4Tx02q~xP_aq_K@fclNlbA?3b7E86c!c+Y)l^v972RkR7kAc>|PPPJ&(H! z#y`l%r?)K_9$QM&|OTIS)XHyKYJ+XtTrP)7r& zXlhery(k*M8$TaVg6|#i^6U0S!^VXnu9;6J%S%9Akau6pOt>XKe7+xDlP}0y)}`#J zCHa|kR``m%?~=Ls^OS9ZIDNR2KJx@2Zg7hTZA>x83<*kfh$%aLba6!-RCNrEoK?tI z;|&E2F+uF{Kd$^Ex=yK@Q7w)yaGVl9$UQe>-@|HB9j!B+>+J>D^LRIRclT({E6qRu z@C%j_NRp7vwoCv3010qNS#tmYE+YT{E+YYWr9XB6000McNlirueSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{001^gL_t&t*Nu)r3IHGs z!&2G*zg!Pfa1Oy-27!hN(+Hq=0RxN<<&>Sb+ySln|2*KmjC&8CE z|26Jai1__XNzqkIW=3s(n|c3D#w+1TF@d{TVxpcsTwyNhFL#@LK1YB%^YV0^eXAlw5}~Fbd?Dy<>{RhdLsNW zFDs9s;5S3@>@A8P`6LNV2+Ue30w2z`-iiFWY-$cef^g8#^(z2^78K)=d{n- z|Np=}O~_-?gtOaxfC0o=;1OBOz@VoL!i*J5?aP3I>?NMQuIx{FSa}tN_ zTq8=H^K)}k^GX<;i&7IyQd1PlGfOfQ+&z5*!W;R-fr<=0T^vI=t|zDbIN!h+Az|Pm zDH)+4!t|$oMT?=}B_AH1h_f!{49?cfd2b_FB{y2iF-Warlh)Y%uO6tG!PC{xWt~$( F69C=dr`Z4i literal 0 HcmV?d00001 diff --git a/applications/plugins/heap_defence_game/assets_images/Game_over_128x64.png b/applications/plugins/heap_defence_game/assets_images/Game_over_128x64.png new file mode 100644 index 0000000000000000000000000000000000000000..d4837e635037355a8a9aa7f42d46d83aa22c2bd9 GIT binary patch literal 683 zcmV;c0#yBpP)Px#22e~?MF0Q*|NsA`*`M7200KivL_t(I%Z1d>Ytv91 z0Pt_}y0$`1BNkRLTYHdQ4HG1Xbjh}Z7ykfHBJAiTG8q;6BO^?2_FveaFg#VL@a^J7 z*gSZy8r@YSbz|)zYy7^~Mw>G5L4JLB@0;(-`@R7Dzh(a2%Hmw0qdJAVGf-6yQW+Wo zEF`cA#!~F&>3W8mq3@0fSS;(*!^g_l*$qMZ$-c613SDO>0QQCribDZ+y3Vr@n8F6N zbAmqHH|vi9ic73(niRAT>*kmsx5SPN4hXs#)d8~L9T^$`Ll&BmK_GjFMnOQZ61|{_ zFt2Jv3~FBWHcuDjI}X;OQqdAC1APVSQ~Iq+H0pH z`arn|tq(lYn?JG#mo)v{d$e!{`yAL5BrHyW%>b@}AS(&@f{M*yC4oLFPgC#_R|RYY zIRV}~e8N|~A0_b8f2;G?4h0~4?ZjD~Cw3;lC72Xc4n7CwvW_#+$}}YKgJtRR0c?kQ ztWm+hcMh*C+zzS}jaT5%50|A*?D|+e5fGzOl8P~S9C*>SQ7-{o2NwYa>>!jtc7Yba z6=2)bs>KA7W-r!!3K;&a_Zc_~0FMCl`RDvG9VytaKzSZ+?VqDM54XXNQZZ?7HQaeH zGtf-+P%{fXZXh&mOr;9Vhllgeu@`lMRFu6|VQqesgSG*CiytJf%h&xI{s20@?;I7O R2;Tqz002ovPDHLkV1kAlDAWJ| literal 0 HcmV?d00001 diff --git a/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_01.png b/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_01.png new file mode 100644 index 0000000000000000000000000000000000000000..d4837e635037355a8a9aa7f42d46d83aa22c2bd9 GIT binary patch literal 683 zcmV;c0#yBpP)Px#22e~?MF0Q*|NsA`*`M7200KivL_t(I%Z1d>Ytv91 z0Pt_}y0$`1BNkRLTYHdQ4HG1Xbjh}Z7ykfHBJAiTG8q;6BO^?2_FveaFg#VL@a^J7 z*gSZy8r@YSbz|)zYy7^~Mw>G5L4JLB@0;(-`@R7Dzh(a2%Hmw0qdJAVGf-6yQW+Wo zEF`cA#!~F&>3W8mq3@0fSS;(*!^g_l*$qMZ$-c613SDO>0QQCribDZ+y3Vr@n8F6N zbAmqHH|vi9ic73(niRAT>*kmsx5SPN4hXs#)d8~L9T^$`Ll&BmK_GjFMnOQZ61|{_ zFt2Jv3~FBWHcuDjI}X;OQqdAC1APVSQ~Iq+H0pH z`arn|tq(lYn?JG#mo)v{d$e!{`yAL5BrHyW%>b@}AS(&@f{M*yC4oLFPgC#_R|RYY zIRV}~e8N|~A0_b8f2;G?4h0~4?ZjD~Cw3;lC72Xc4n7CwvW_#+$}}YKgJtRR0c?kQ ztWm+hcMh*C+zzS}jaT5%50|A*?D|+e5fGzOl8P~S9C*>SQ7-{o2NwYa>>!jtc7Yba z6=2)bs>KA7W-r!!3K;&a_Zc_~0FMCl`RDvG9VytaKzSZ+?VqDM54XXNQZZ?7HQaeH zGtf-+P%{fXZXh&mOr;9Vhllgeu@`lMRFu6|VQqesgSG*CiytJf%h&xI{s20@?;I7O R2;Tqz002ovPDHLkV1kAlDAWJ| literal 0 HcmV?d00001 diff --git a/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_02.png b/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_02.png new file mode 100644 index 0000000000000000000000000000000000000000..a88122d905478d73b7471fbe634a56541ae69be6 GIT binary patch literal 680 zcmV;Z0$2TsP)Px#22e~?MF0Q*|NsA`*`M7200KZsL_t(I%Z1d>Ytv91 z0Pt_}y0$`1D;72|TYHdQ4HG1XWX-mN7ykfHGT6~eWHKuBM@E?5?7y%-VR))g;oHTF zuzB!YHM*-v>&BWx*7$ud?QFup2l??neBZCU?+d{HOXlCJEbaxmsxjQ3LaD?-T7rgv z8WLCpffPA;dY+-GYr6pfi)4)=Jgfxv?hvG3>>C@#(6x7bU~k!=I1+HLYd;?XQ`o>f zC+NdNqy7}2xWKxGL7nzt%?Jo`3+zbefS?&+9Uu$tk*)$TWJ4p=31s(BF9`6L!ANs8cmF#$w6Tot;P(#UzDiH zM!Q#YW>6(y4V9(|_~Li-^B6(S9iz#YkM##vC*y$N3z`8RrPA)560qDKGzT1%_Uh@F zK2R>i+DAUq+ds1hm$dxc2dv=~_BpT^BrL|jrT{m9pOplBMaAN<9D~dHsB90l4+Xj(~=@iJJJHzbIWk z0(YoIDkTj3;PASJu3w#~JOfAGa8c?+j*Hb30TJ3|sThF(o^);0%D~pZK|ldJ2xX8R zpbc;YSXP|1*Dx!X&iU>63d8GspMsr^f0C-_kJGSUNy44|^W>;^!3q;VXRG1NgOPz| zBBGQ@MchJYT8VBMG#?+%*CRLV_=#TjT7}j5Lk{XX?4=i&*W{c24SxZEpz=K2Yw2D9 O0000Px#22e~?MF0Q*|NsA`*`M7200K8jL_t(I%Z<~|Ytv91 z0Pt_}x~4)+D;72|TYHdQ4HG1XWXaZp7ykfHBJAiTG8q;6BcrG{`!DQI7@jIr_;&Fk zY#uyUjqWPay0PYvHGbb~t4$c_gZ%pNecycF%Qpc39+|(lvN-4Is7&GZ42ne#(hAfC z*ht_Igi`F~=z5Bpq3?zSES7bO@Ua}ayF-wEurF*lg|5330DH{_g^_?;UH8cln92s$ z89^WJnze@jg(cQCO-kB_4KpNAme`@e0YNvT8bB7>hlU2gkPXeqAduS!MqWU$8a<#>@dEhl1Fi|! z3=|I4_FH_!zj{BK!*l^G$rtZW$EG` zREK)3QNzGD4lix229=4%J8I0=7XF0t(ncD1q$p zTTg)F{ORN={NG@h1~(n@AoZL(O2d9R2{-o7l4);(6D5HDt-7}eW(FFGh+-xcaSfs2 zB+@cy+&@@+j@wZuNMzY-=GPa0a?mzmFTKE=E?>1ZzX3B-?)=JaWGVmv002ovPDHLk FV1j-lGLQfO literal 0 HcmV?d00001 diff --git a/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_04.png b/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_04.png new file mode 100644 index 0000000000000000000000000000000000000000..d0c63d48427b1c296024d1f25cdc974f0254d124 GIT binary patch literal 667 zcmV;M0%ZM(P)Px#22e~?MF0Q*|NsA`*`M7200J{fL_t(I%Z<}dYZFlr z0PxwJG>H(Ch=CT|HaSSIE)`@CyUn&9y!Zh;iO{2$l}d?_KN}Y9&3uJ^gyJbegh}H? zXgzq2y4tHqVoQ_5HtW2XM6*jlAMC#$^JeGmn+5pyNc_E3u;4GjPZ2WDU}sNR8*k>IZe&v_x} zm5ib*faai^Ss6iAaL!XuZJVk{s*rUlVY`!=L&&g(+jXI=v=)=x%0 zLqO&CqSEW%lP@m-_EYbuOfzT-z$qw{n}Rn3xB~p7BH=S-Z2_xu=u-Ac1U}H3giSvs z!Fx-O#jbaQDWLbF_eK}59ZDeFcfzDD3OkkHGE6dg0X+feV#}FmD?G*T`OC`1J-~q; zYTPjJO~9)%?^kJ}i4Gk02Fpq-bdgHO5<+qcN-hKmqUjo>7XUZ7LLdn{1O-rCaqCL3 z?LVD7h5s8!ad6@x4`a{iqc}8+QMl1Oi>AE^b`Synx2oga?mzmFTTLEu3q(Negi)u?)-boG&BGJ002ovPDHLkV1gE} B9=-qo literal 0 HcmV?d00001 diff --git a/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_05.png b/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_05.png new file mode 100644 index 0000000000000000000000000000000000000000..1c2756fdb0c5f423c3fd316d23d99987ae97adc3 GIT binary patch literal 670 zcmV;P0%84$P)Px#22e~?MF0Q*|NsA`*`M7200K5iL_t(I%Z<}dYZE~f z0Pwf_(rkp7L=3dxw#h+yb*UhG*lo7Gc<}>x5}`*gE0q!T0hdi7ibI+pKRUSxrJg2X=Sn$IP2IJ2L?PE{VTYRld{w6en=L#ti-UGx!x}MYOV~685Exci21tV6G<5(Z>|3G9p!$bqT0*cIKI4U; zUo;Dz0E)q|GO`ER;W-aMwPmRys6zIogza`ZhKOMew`*336Jw|f$lzA362sT?91q#5 zw@Y3OMFyrIpVf~;0#!RATP&Z-cP@{IBY2^GB6}oeDb(9148Hb@?4E#3ef?w@ zFoaZkFEYLUJ^Ati;6QsvC7Qy%0GxnA*$MblfGZ$KDh!C9DdPxOjiE!C$8+$3)+B5O zngstXJrcX#31fKPePf7e2NDPm+$d>?#7-r64C8c8Kvw{I*l@@C3J(do!Lo9353p}U zIv*JLCg4?x_p3P8#R(jA`^!or@{o$h5+ZW*N;U!s;?UK}$OCS0hCmW_2=btMqUuR- zoIfXd0{>T#7QtQY@?fEzI$DJN!aUsAKbsGG6P$1k_-<92vtT8lYRp0|0Tpi+t`St7 zxv&V;`-ijb$PXLA+&p`=^!n^22YnOv78jT@)T@5YZ`~B`TvLP+-2eap07*qoM6N<$ Eg1ZkP=>Px# literal 0 HcmV?d00001 diff --git a/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_06.png b/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_06.png new file mode 100644 index 0000000000000000000000000000000000000000..313fd69617999bd8b1f4f5d03495456e279836a8 GIT binary patch literal 669 zcmV;O0%HA%P)Px#22e~?MF0Q*|NsA`*`M7200K2hL_t(I%Z<~|YtwKP z0PvT*uB}kpiiHi#)*NJ4!vyIeU9(-h_y>3rVMi~K$*9mDsbzYz|HA%+;i*D}*VT)# zdGK5{x~oX)#+pOc_`csZ+LVC?l6>>w`{TWQ-xuKDSK@C|mCp>{`V?-@AfFeYtUygd zg%~UbUkRNwzfVak8M{6MhN{6m22}LzT@REW_yxTwbnP7%@HGx|BMG;<_7e{Kkj0ATzc*cof zTQ3zI0Th8@W@Qg52j@Hl)vl?ENfjzzO4#mYA_y7QaJykvI538~fGln`Y7u-r&-0M2 zX0PHzpfg}i<1m4q{;Yo-6TCBSAd&TBz&faqL1fYW*d!nuI5O?4%D;M_wJtNe( zVBnj8mlfVGeWHm991Xl>r4u?x`muzN?1GXDL4qi{CK(054UP~%j`AINr2OT#S>s}+XK7YtT+l0Nv1k;9k)vx&tmzV7P_D00000NkvXXu0mjf DP@5g1 literal 0 HcmV?d00001 diff --git a/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_07.png b/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_07.png new file mode 100644 index 0000000000000000000000000000000000000000..cf854656c803ff05907e7e45a48903e6c76b7728 GIT binary patch literal 677 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 Lfku_u)sX)I(Bd4y literal 0 HcmV?d00001 diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_02.png b/applications/plugins/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_02.png new file mode 100644 index 0000000000000000000000000000000000000000..afc4a932f119db0aaa914af16f1677053693e95c GIT binary patch literal 9144 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 R&h!8P002ovPDHLkV1kVh$LIh6 literal 0 HcmV?d00001 diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_02.png b/applications/plugins/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_02.png new file mode 100644 index 0000000000000000000000000000000000000000..afee3ec83688184aeffefb7a154218a787aaa1fe GIT binary patch literal 503 zcmVEX>4Tx04R~2kg-a`P!xv0v|2^#q&SF32G@d%nOv$u5ENppV0B896pKj=NlNhz zd=q_`4uaqt_yP*f{x>=}n8gc+|Ko7Z|KEF|WhY@;F6=^@RfX&KhnK@Ed+CiXi*(qg z9fW1x_q-Dt&*v+a(U+d_YM%S^bfUNnrE^sl=0ye8zSx;nxnULSw*&uB{2;cYG>gPf z;+-gs44Yj)O{U?Gr@2ix&MwYPU$uqHF{gOgjF>VZp`s_v)H%XoPwG+-a8F4nO^DT- zX{O>vRLaTaKr|5PHVt{3b)Kh`kvt~yG6{F2@-%sv|NUP3IIB0Ujd>mvLEUPrTH`Ui zKf>w|)}CSIx*==%_uCp~oO003u6L_t&-({+$h4!|G?LthE^zjF5>D$dPBFs3cE zvbj#c&!^C;013jJHK2>SYpU+3$s&zj^r;3ebnF3o@98E1;<6<2#0*xd?KxlJt+VXL t-g4WBFS_h|Q1mcd=;ZL?ndccEzyp5ICNHzsM{ocD002ovPDHLkV1hw}-bMfb literal 0 HcmV?d00001 diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_rate b/applications/plugins/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_rate new file mode 100644 index 00000000000..0cfbf08886f --- /dev/null +++ b/applications/plugins/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_rate @@ -0,0 +1 @@ +2 diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_01.png b/applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_01.png new file mode 100644 index 0000000000000000000000000000000000000000..e8bb70be6a7bcf06c7330a06f4e9421c94ee2fae GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^Ahw7A6Ohc7dF}+HSkfJR9T^xl_H+M9WCij$3p^r= z85p>QL70(Y)*K0-V1=iPV~EA+rIQW$4j6DSXKVlezsY(Fv*4ko7Qq4@btcbA^A<-~ zvNAZF31QPdU6eg_xxV{z8^OO}ksCT|Z$3_0zH(M;p}f88z5k~wOEbbnDvnhyt}R>g zra`is{rS!ID?;wuZT`&fT(5QHfz9#*`?P9Tm+S4XW537EUa^9=QhbU9&QL70(Y)*K0-V3ntfV~EA+r6G<&2OL!W$T}E4Xu4N3T13zww zzxQo*l<>r9TlOw}AC~*|V~JPBw?y0L(^bl=|MAYLDg7nQL70(Y)*K0-V7;e{V~EA+r6G=d4F)_?z5o9k$=zXej*5J8Lv*1wpNgj*BLhR! z$9e42FYh{Ex%XLeXqo#~H;ad^^ZKpz^`Gus`8mky{F_71|1Xt!8_antxRZ%BYX2@- zwM=KD&+do(G6gH$RA<@!T(?4X@73mtXZ1m|-~N%j@%Nw;UHx3vIVCg!0KpPa!2kdN literal 0 HcmV?d00001 diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_04.png b/applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_04.png new file mode 100644 index 0000000000000000000000000000000000000000..d7dd740f79e26f37fad93ea1ad618a21de16aa1a GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^Ahw7A6Ohc7dF}+HSkfJR9T^xl_H+M9WCij$3p^r= z85p>QL70(Y)*K0-V3ntfV~EA+r6G<&2OL!W$T}E4Xu4N3T13zww zzxQo*l<>r9TlOw}AC~*|V~JPBw?y0L(^bl=|MAYLDg7nQL70(Y)*K0-V6~@;C(nYL!x$>bNk~yNSO~!PxloFOfi7 z28IRZdcvY-g8$AFo}sl``CM-Gln47Jw$Cb-Rd2l>oVn`2$)8KlOqp@O?e08_M`fy^ z|5MM^TE1BwrGN6z{EMYm3f?PiD-O&0_Ipc4MEuUnw)|@=m+xkLsk}%krhAer&>0M# Lu6{1-oD!M<QL70(Y)*K0-V2!7XV~EA+rNN#;2NXDrdH(-5vc19V=XKzopr04K0Zga7~l literal 0 HcmV?d00001 diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_03.png b/applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_03.png new file mode 100644 index 0000000000000000000000000000000000000000..5c2911fbc919ca04b96d43ddd37582e05e06b6c3 GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^Ahw7A6Ohc7dF}+HSkfJR9T^xl_H+M9WCij$3p^r= z85p>QL70(Y)*K0-V3ntfV~EA+rNNGT2NZZF9s6HDQ?~5op%)QPmMv_^W%Zoo&A{NW zKk!*us@K)uUZ-{y`-hx%NY>8T`1$>%slQife6jWXpMP%V=f?`SHrKzLFlSEEZb`L= zi+z7dT;1cjf4Yj}O6PuAQ=RFZijlF!Q*Omp5Rq+e9LK~miR&K7Z@2U9A6u3+$V L^>bP0l+XkKIO$KF literal 0 HcmV?d00001 diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_04.png b/applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_04.png new file mode 100644 index 0000000000000000000000000000000000000000..9a03083a02a30bcc903b743025177c2d0f2f2c1e GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^Ahw7A6Ohc7dF}+HSkfJR9T^xl_H+M9WCij$3p^r= z85p>QL70(Y)*K0-V2!7XV~EA+rNN#;2NXDrdH(-5vc19V=XKzopr04K0Zga7~l literal 0 HcmV?d00001 diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_rate b/applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_rate new file mode 100644 index 00000000000..0cfbf08886f --- /dev/null +++ b/applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_rate @@ -0,0 +1 @@ +2 diff --git a/applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_01.png b/applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_01.png new file mode 100644 index 0000000000000000000000000000000000000000..7fd2f86273c53e71f9467ae7afa11dee8220cb42 GIT binary patch literal 3820 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 Y0dK(J#mu?FfdBvi07*qoM6N<$f}FN}wEzGB literal 0 HcmV?d00001 diff --git a/applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_04.png b/applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_04.png new file mode 100644 index 0000000000000000000000000000000000000000..32fc98b74154a3485d6f5f011c3b532450b70945 GIT binary patch literal 3881 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 Lfku_u)sX)I(Bd4y literal 0 HcmV?d00001 diff --git a/applications/plugins/heap_defence_game/assets_images/Person4_2_10x20.png b/applications/plugins/heap_defence_game/assets_images/Person4_2_10x20.png new file mode 100644 index 0000000000000000000000000000000000000000..afc4a932f119db0aaa914af16f1677053693e95c GIT binary patch literal 9144 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 R&h!8P002ovPDHLkV1kVh$LIh6 literal 0 HcmV?d00001 diff --git a/applications/plugins/heap_defence_game/assets_images/Person5_2_10x20.png b/applications/plugins/heap_defence_game/assets_images/Person5_2_10x20.png new file mode 100644 index 0000000000000000000000000000000000000000..afee3ec83688184aeffefb7a154218a787aaa1fe GIT binary patch literal 503 zcmVEX>4Tx04R~2kg-a`P!xv0v|2^#q&SF32G@d%nOv$u5ENppV0B896pKj=NlNhz zd=q_`4uaqt_yP*f{x>=}n8gc+|Ko7Z|KEF|WhY@;F6=^@RfX&KhnK@Ed+CiXi*(qg z9fW1x_q-Dt&*v+a(U+d_YM%S^bfUNnrE^sl=0ye8zSx;nxnULSw*&uB{2;cYG>gPf z;+-gs44Yj)O{U?Gr@2ix&MwYPU$uqHF{gOgjF>VZp`s_v)H%XoPwG+-a8F4nO^DT- zX{O>vRLaTaKr|5PHVt{3b)Kh`kvt~yG6{F2@-%sv|NUP3IIB0Ujd>mvLEUPrTH`Ui zKf>w|)}CSIx*==%_uCp~oO003u6L_t&-({+$h4!|G?LthE^zjF5>D$dPBFs3cE zvbj#c&!^C;013jJHK2>SYpU+3$s&zj^r;3ebnF3o@98E1;<6<2#0*xd?KxlJt+VXL t-g4WBFS_h|Q1mcd=;ZL?ndccEzyp5ICNHzsM{ocD002ovPDHLkV1hw}-bMfb literal 0 HcmV?d00001 diff --git a/applications/plugins/heap_defence_game/assets_images/Start_128x64.png b/applications/plugins/heap_defence_game/assets_images/Start_128x64.png new file mode 100644 index 0000000000000000000000000000000000000000..32fc98b74154a3485d6f5f011c3b532450b70945 GIT binary patch literal 3881 zcmV+^57zLBP)Px%_fSk!MgRZ*nVFf~+}!{F|K#N4iHV6*Q&SNU5mHi8 z$H&M2|Nl--PWAQm%F4>m&(C*vcR)Zu#l^*wlasc#woy@0MMXuDl9Jik*-ot>Td z`1m6uBUe{f6B84)wYC5M|L^bbetv#zY;4rj)Q^vk(9qDpz`&cEo8jT%!NI|&r>C5p zoaN=^wzjrwYirop*siXw*4EZ&XlRX%jsO4u0002i*4C}9t@QNtM@L5!6BB4?Xt}w$ z0s;bje0(Y@Dh37y0|NtaaBvwJ8H|jK7#JA+{r&9h>?9;4@bK{7-rhk$K?({A)YR0K zm6fNbry(IBFE1|+4h~;mUn?ssY;0`0y1K^3##mTb+uPgn^71t`H4qRGH#awcfPlBR zw?#!o2nYz-+1X7^O>uE?L_|dT`ugSNOVw6wIny}eRWQj(IAzrVkShlk_iFMd>;^LT?n9k15iHV8K%*@l%)1aWB?d|Pya&p|<+_12)g@uJEC@7PY zlg-V|-{0RoJw1($jhdR8OG`@|8yk<0k4Z^M0RaIqF)_Bbw!y){c6N5}@9(j(v1eyz z;o;$qj*jl`?!?5zU|?XMpPzbqdQ($Vf`Wo~cXznBxa#WaX=!Qp_V(-R>$0-4$;rv} z_4WS#{z5`Rz`(#_Vq$@TfxNuDqoboUGc)=5`NPA*%F4?7`}@+;(&pyotgNhqgM)~O zi2VHg3H*Fx0000qbW%=J@%Z!O^ZEP!`}O$z^7Qoj{PpTXDT1hU#Danpr3)&GKT)J;P@@tHHq>B=#u~e^rJ44}-h1E7 zz%YfuH93FGyYJrj?)~Q8bG}m^?-`y=`PH+}{yHG-TU37h(szHtd(!d@?**_ay+UCW zq63u*m;D-e(((e2XJgboIT@+cvb$R@*9a2TlLf%D0bpCoW<d}w>NO-H0^r#!5HtcTUds9(791CR699H#gP~bYPT?(p)Ed&RUI7q+&0jx&2z)nK z#v}-834rMUrK6<39g03y(R4eBKls#F*RcU?Erkw}czKu2`@V=VSrtla=Q zw2hkM1^}498%7dfHlhzhAa@;x`yTeJ__4r5TSUj~1mHFo-FM5;WhcF99o}g&lU)U?DekX2Avo+jZ{KapuEfIzy%tqC^}?&3ZBbRnZMiGbaG>*1#@u z3GrkE$wv%+=Y)NH^kE>l5jJrSaMIF=B!t*BlK?37-;HMC18c&`#gRVHNE(~s!?xH3 z;N!K1)@8(OKQ`HFn*iD?hg{475OuB~mpYlO24-}V(}2@`iS__+bTG7H5tm#QGUsL! zz}`|oivX&USj!n;w>L`L+|~t84M1mpB_r2R!H`V=gH7AKEdqc5);i+}ZmSV}8_$eP z3BclB<$yg_FlW`SMV5B}x;fQU1Dqz8FME$p2|$KJmXnLmMDIEcSATNk50BDDgwGR^0 z^>=NaB2g!(<3gtdz{%4NC69K@m&yFms?3>h4q!$O7dsIE67DIwu)Rd| zmhUJy1KDS~)uL{(*wwfgb)^Q`na1(;Itxb-ni_az+%X9R@r;Tc)9edKF6t8VS>vPa z9ulJ-5HSfRL~SkHScUnd4^r10jkll=Tl4J#P<>5tnOthv8IRKgQ+YRH9;Q2l#GwV3 z7|;e~rEcc^_E`ZqVm*o9xTLUd-g+xOmjXC?FQ(Vm+k7nLI&9avKQ4fw4^_~tX98_p zv8NUDTAHuhj{zHWpKUf9+V4wpxV4(c1@KM@gvhz|55k=`Tw?{nmH}9>e~S!a&6F^K z^0Q{G`73^Q@xc3QVKcXW0jz%nt@+kc_af&5pDvgOcPE6ysUG={*WPhS z-e%HYL;qFNN=%*93}&1c`9id;=Ee6)`hSZy#pKsyb5~D-yY1V)GyxBb3Eij(HNzRUgQ~q4sWeQQa-cXyNEdXtyBq}>2UY5}-)$t6rw0zm|Z^)Hbq6y%OCm1>PnO(n_a@y%WA)m3`Ge+a|f zEt^0PeIR)77FRbICp76ufbE({t>c#8B; z9aaFy>;b@^2w}N?A=d|{Z9F|0m!pjJkXy$bY=tjIll={ z-p-^67$J-*FJ|wSWjJRh?02E9Fh)#zN8>>Ejw72a+C=}5Y;Rjih!`HAzd1dRQ{=<+ zw}i~VN@eMhV6B!3OIYbz;6Y4HAA^;WH?p|=Uq$HRgmS`q1y~egyi+Jp!TaynXe~3p z3#azcOE~dc!^^m|$PFyjC6mb!aCz7DF=pu_&u8c(GnAUHu8`u!K8%wYx)r({2WADE zj5RTTf2=+wrW;30PzZ2~>jo$!p5MX_MB*W#DYs{nIPM15jKMP|>(fd1#$Xw=vj0Vk z4JEUGP64cQC+%z(20+D_?E?;utd28HlG}J=(8OAj-w3=-haFnS5mcq&>jDsGR*b0f zFgx~jM_2_Uik{ZSU+@T!XsSj0Y}y+Q@c|Z8r5mpDG4i?zfI>X=DPh5kX2-0$!W(bW z^bJ0t58vdt3N1L^oP$ zTg&mRQDi-L+V_4Q7e>O?231m-2Mu4pB*xgypil*t`g#rYjRWAL?ttqP?dZ?j4k`DIbwJ`v=;Rs#oP{fXvo5*;ZZ($NuLS+vHcelRe zq(J|i)Di;mgzqGx1ToiWaNJwq=j&{eLiiz;4+gKj|B0MAmI4LIu!xFn6sI^ldkx5_ z8nm_%Ly~hl(3h)3k8q{uh;7$dG*m$NHh&!seg>lLRLgSf)ioZh@GpeP}wPu!X=cK-a)dp%oDCCZca)rgbiRP8L zo6z}uj}~)RcwpVWkc4d6NG>tGg%?ouz<=e*+m1KSA_w3shWKGiQlyWMtrHk08^@ad zvLN&I=Xjws{C=(@^(kRL@T@y_>?F~N4jjCIIbk7K9K>aR^ay0t7a<#DN7o1G zQ$qH&CVJBC&^vLl;EsObX0iB^yGRs!g3QsfrReSOXnFqpwZtJNUhIEE78rwy^r1XW zh;Dz*Jwh;*J&un8$a>P4{j=XF9XjPh_N@=2eo+@vtiDh=v`Y4w z6lSMz>EC8|9`E<@(siKmt55}wp5scf$dU2GYMblVj(ryz`yOD}8x1IT#ARNnaB6CN zgJf%g7_-A?VG(pU$ID=(bu|f4F%}28J29*~C-V}>vGsIu43U_+ zc7h`pg8~Oj`lA2!H~l&tTiRJ}9_C}#5->?)a@i9py8BpQujy;G9p0v&v)&wF|Iu{& d_@DaoOo;`$|Ig}KUI!Y);OXk;vd$@?2>|2JDxv@Y literal 0 HcmV?d00001 diff --git a/applications/plugins/heap_defence_game/heap_defence.c b/applications/plugins/heap_defence_game/heap_defence.c new file mode 100644 index 00000000000..c4375bafe7c --- /dev/null +++ b/applications/plugins/heap_defence_game/heap_defence.c @@ -0,0 +1,593 @@ +// +// Created by moh on 30.11.2021. +// +// Ported to latest firmware by @xMasterX - 18 Oct 2022 +// + +#include + +#include "hede_assets.h" +#include "heap_defence_icons.h" + +#include +#include +#include +#include +#include +#include + +#define Y_FIELD_SIZE 6 +#define Y_LAST (Y_FIELD_SIZE - 1) +#define X_FIELD_SIZE 12 +#define X_LAST (X_FIELD_SIZE - 1) + +#define DRAW_X_OFFSET 4 + +#define TAG "HeDe" + +#define BOX_HEIGHT 10 +#define BOX_WIDTH 10 +#define TIMER_UPDATE_FREQ 8 +#define BOX_GENERATION_RATE 15 + +static IconAnimation* BOX_DESTROYED; +static const Icon* boxes[] = { + (Icon*)&A_HD_BoxDestroyed_10x10, + &I_Box1_10x10, + &I_Box2_10x10, + &I_Box3_10x10, + &I_Box4_10x10, + &I_Box5_10x10}; + +static uint8_t BOX_TEXTURE_COUNT = sizeof(boxes) / sizeof(Icon*); + +typedef enum { + AnimationGameOver = 0, + AnimationPause, + AnimationLeft, + AnimationRight, +} Animations; + +static IconAnimation* animations[4]; + +typedef u_int8_t byte; + +typedef enum { + GameStatusVibro = 1 << 0, + GameStatusInProgress = 1 << 1, +} GameStatuses; + +typedef struct { + uint8_t x; + uint8_t y; +} Position; + +typedef enum { PlayerRising = 1, PlayerFalling = -1, PlayerNothing = 0 } PlayerStates; + +typedef struct { + Position p; + int8_t x_direction; + int8_t j_tick; + int8_t h_tick; + int8_t states; + bool right_frame; +} Person; + +typedef struct { + uint8_t offset : 4; + uint8_t box_id : 3; + uint8_t exists : 1; +} Box; + +static const uint8_t ROW_BYTE_SIZE = sizeof(Box) * X_FIELD_SIZE; + +typedef struct { + Box** field; + Person* person; + Animations animation; + GameStatuses game_status; +} GameState; + +typedef Box** Field; + +typedef enum { EventGameTick, EventKeyPress } EventType; + +typedef struct { + EventType type; + InputEvent input; +} GameEvent; + +/** + * #Construct / Destroy + */ + +static void game_reset_field_and_player(GameState* game) { + ///Reset field + bzero(game->field[0], X_FIELD_SIZE * Y_FIELD_SIZE * sizeof(Box)); + + ///Reset person + bzero(game->person, sizeof(Person)); + game->person->p.x = X_FIELD_SIZE / 2; + game->person->p.y = Y_LAST; +} + +static GameState* allocGameState() { + GameState* game = malloc(sizeof(GameState)); + + game->person = malloc(sizeof(Person)); + + game->field = malloc(Y_FIELD_SIZE * sizeof(Box*)); + game->field[0] = malloc(X_FIELD_SIZE * Y_FIELD_SIZE * sizeof(Box)); + for(int y = 1; y < Y_FIELD_SIZE; ++y) { + game->field[y] = game->field[0] + (y * X_FIELD_SIZE); + } + game_reset_field_and_player(game); + + game->game_status = GameStatusInProgress; + return game; +} + +static void game_destroy(GameState* game) { + furi_assert(game); + free(game->field[0]); + free(game->field); + free(game); +} + +static void assets_load() { + /// Init animations + animations[AnimationPause] = icon_animation_alloc(&A_HD_start_128x64); + animations[AnimationGameOver] = icon_animation_alloc(&A_HD_game_over_128x64); + animations[AnimationLeft] = icon_animation_alloc(&A_HD_person_left_10x20); + animations[AnimationRight] = icon_animation_alloc(&A_HD_person_right_10x20); + + BOX_DESTROYED = icon_animation_alloc(&A_HD_BoxDestroyed_10x10); + + icon_animation_start(animations[AnimationLeft]); + icon_animation_start(animations[AnimationRight]); +} + +static void assets_clear() { + for(int i = 0; i < 4; ++i) { + icon_animation_stop(animations[i]); + icon_animation_free(animations[i]); + } + icon_animation_free(BOX_DESTROYED); +} + +/** + * Box utils + */ + +static inline bool is_empty(Box* box) { + return !box->exists; +} + +static inline bool has_dropped(Box* box) { + return box->offset == 0; +} + +static Box* get_upper_box(Field field, Position current) { + return (&field[current.y - 1][current.x]); +} + +static Box* get_lower_box(Field field, Position current) { + return (&field[current.y + 1][current.x]); +} + +static Box* get_next_box(Field field, Position current, int x_direction) { + return (&field[current.y][current.x + x_direction]); +} + +static inline void decrement_y_offset_to_zero(Box* n) { + if(n->offset) --n->offset; +} + +static inline void heap_swap(Box* first, Box* second) { + Box temp = *first; + + *first = *second; + *second = temp; +} + +/** + * #Box logic + */ + +static void generate_box(GameState const* game) { + furi_assert(game); + + static byte tick_count = BOX_GENERATION_RATE; + if(tick_count++ != BOX_GENERATION_RATE) { + return; + } + tick_count = 0; + + int x_offset = rand() % X_FIELD_SIZE; + while(game->field[1][x_offset].exists) { + x_offset = rand() % X_FIELD_SIZE; + } + + game->field[1][x_offset].exists = true; + game->field[1][x_offset].offset = BOX_HEIGHT; + game->field[1][x_offset].box_id = (rand() % (BOX_TEXTURE_COUNT - 1)) + 1; +} + +static void drop_box(GameState* game) { + furi_assert(game); + + for(int y = Y_LAST; y > 0; y--) { + for(int x = 0; x < X_FIELD_SIZE; x++) { + Box* current_box = game->field[y] + x; + Box* upper_box = game->field[y - 1] + x; + + if(y == Y_LAST) { + decrement_y_offset_to_zero(current_box); + } + + decrement_y_offset_to_zero(upper_box); + + if(is_empty(current_box) && !is_empty(upper_box) && has_dropped(upper_box)) { + upper_box->offset = BOX_HEIGHT; + heap_swap(current_box, upper_box); + } + } + } +} + +static bool clear_rows(Box** field) { + for(int x = 0; x < X_FIELD_SIZE; ++x) { + if(is_empty(field[Y_LAST] + x) || !has_dropped(field[Y_LAST] + x)) { + return false; + } + } + + memset(field[Y_LAST], 128, ROW_BYTE_SIZE); + return true; +} + +/** + * Input Handling + */ + +static inline bool on_ground(Person* person, Field field) { + return person->p.y == Y_LAST || field[person->p.y + 1][person->p.x].exists; +} + +static void handle_key_presses(Person* person, InputEvent* input, GameState* game) { + switch(input->key) { + case InputKeyUp: + if(person->states == PlayerNothing && on_ground(person, game->field)) { + person->states = PlayerRising; + person->j_tick = 0; + } + break; + case InputKeyLeft: + person->right_frame = false; + if(person->h_tick == 0) { + person->h_tick = 1; + person->x_direction = -1; + } + break; + case InputKeyRight: + person->right_frame = true; + if(person->h_tick == 0) { + person->h_tick = 1; + person->x_direction = 1; + } + break; + case InputKeyOk: + game->game_status &= ~GameStatusInProgress; + game->animation = AnimationPause; + icon_animation_start(animations[AnimationPause]); + default: + break; + } +} + +/** + * #Person logic + */ + +static inline bool ground_box_check(Field field, Position new_position) { + Box* lower_box = get_lower_box(field, new_position); + + bool ground_box_dropped = + (new_position.y == Y_LAST || //Eсли мы и так в самом низу + is_empty(lower_box) || // Ecли снизу пустота + has_dropped(lower_box)); //Eсли бокс снизу допадал + return ground_box_dropped; +} + +static inline bool is_movable(Field field, Position box_pos, int x_direction) { + //TODO::Moжет и не двух, предположение + bool out_of_bounds = box_pos.x == 0 || box_pos.x == X_LAST; + if(out_of_bounds) return false; + bool box_on_top = box_pos.y < 1 || get_upper_box(field, box_pos)->exists; + if(box_on_top) return false; + bool has_next_box = get_next_box(field, box_pos, x_direction)->exists; + if(has_next_box) return false; + + return true; +} + +static bool horizontal_move(Person* person, Field field) { + Position new_position = person->p; + + if(!person->x_direction) return false; + + new_position.x += person->x_direction; + + bool on_edge_column = new_position.x > X_LAST; + if(on_edge_column) return false; + + if(is_empty(&field[new_position.y][new_position.x])) { + bool ground_box_dropped = ground_box_check(field, new_position); + if(ground_box_dropped) { + person->p = new_position; + return true; + } + } else if(is_movable(field, new_position, person->x_direction)) { + *get_next_box(field, new_position, person->x_direction) = + field[new_position.y][new_position.x]; + + field[new_position.y][new_position.x] = (Box){0}; + person->p = new_position; + return true; + } + return false; +} + +void hd_person_set_state(Person* person, PlayerStates state) { + person->states = state; + person->j_tick = 0; +} + +static void person_move(Person* person, Field field) { + /// Left-right logic + FURI_LOG_W(TAG, "[JUMP]func:[%s] line: %d", __FUNCTION__, __LINE__); + + if(person->states == PlayerNothing) { + if(!on_ground(person, field)) { + hd_person_set_state(person, PlayerFalling); + } + } else if(person->states == PlayerRising) { + if(person->j_tick++ == 0) { + person->p.y--; + } else if(person->j_tick == 6) { + hd_person_set_state(person, PlayerNothing); + } + + /// Destroy upper box + get_upper_box(field, person->p)->box_id = 0; + field[person->p.y][person->p.x].box_id = 0; + + } else if(person->states == PlayerFalling) { + if(person->j_tick++ == 0) { + if(on_ground(person, field)) { // TODO: Test the bugfix + hd_person_set_state(person, PlayerNothing); + } else { + person->p.y++; + } + } else if(person->j_tick == 5) { + if(on_ground(person, field)) { + hd_person_set_state(person, PlayerNothing); + } else { + hd_person_set_state(person, PlayerFalling); + } + } + } + + switch(person->h_tick) { + case 0: + break; + case 1: + person->h_tick++; + FURI_LOG_W(TAG, "[JUMP]func:[%s] line: %d", __FUNCTION__, __LINE__); + bool moved = horizontal_move(person, field); + if(!moved) { + person->h_tick = 0; + person->x_direction = 0; + } + break; + case 5: + FURI_LOG_W(TAG, "[JUMP]func:[%s] line: %d", __FUNCTION__, __LINE__); + person->h_tick = 0; + person->x_direction = 0; + break; + default: + FURI_LOG_W(TAG, "[JUMP]func:[%s] line: %d", __FUNCTION__, __LINE__); + person->h_tick++; + } +} + +static inline bool is_person_dead(Person* person, Box** field) { + return get_upper_box(field, person->p)->box_id != 0; +} + +/** + * #Callback + */ + +static void draw_box(Canvas* canvas, Box* box, int x, int y) { + if(is_empty(box)) { + return; + } + byte y_screen = y * BOX_HEIGHT - box->offset; + byte x_screen = x * BOX_WIDTH + DRAW_X_OFFSET; + + if(box->box_id == 0) { + canvas_set_bitmap_mode(canvas, true); + icon_animation_start(BOX_DESTROYED); + canvas_draw_icon_animation(canvas, x_screen, y_screen, BOX_DESTROYED); + if(icon_animation_is_last_frame(BOX_DESTROYED)) { + *box = (Box){0}; + icon_animation_stop(BOX_DESTROYED); + } + canvas_set_bitmap_mode(canvas, false); + } else { + canvas_draw_icon(canvas, x_screen, y_screen, boxes[box->box_id]); + } +} + +static void heap_defense_render_callback(Canvas* const canvas, void* mutex) { + furi_assert(mutex); + + const GameState* game = acquire_mutex((ValueMutex*)mutex, 25); + + ///Draw GameOver or Pause + if(!(game->game_status & GameStatusInProgress)) { + FURI_LOG_W(TAG, "[DAED_DRAW]func: [%s] line: %d ", __FUNCTION__, __LINE__); + + canvas_draw_icon_animation(canvas, 0, 0, animations[game->animation]); + release_mutex((ValueMutex*)mutex, game); + return; + } + + ///Draw field + canvas_draw_icon(canvas, 0, 0, &I_Background_128x64); + + ///Draw Person + const Person* person = game->person; + IconAnimation* player_animation = person->right_frame ? animations[AnimationRight] : + animations[AnimationLeft]; + + uint8_t x_screen = person->p.x * BOX_WIDTH + DRAW_X_OFFSET; + if(person->h_tick && person->h_tick != 1) { + if(person->right_frame) { + x_screen += (person->h_tick) * 2 - BOX_WIDTH; + } else { + x_screen -= (person->h_tick) * 2 - BOX_WIDTH; + } + } + + uint8_t y_screen = (person->p.y - 1) * BOX_HEIGHT; + if(person->j_tick) { + if(person->states == PlayerRising) { + y_screen += BOX_HEIGHT - (person->j_tick) * 2; + } else if(person->states == PlayerFalling) { + y_screen -= BOX_HEIGHT - (person->j_tick) * 2; + } + } + + canvas_draw_icon_animation(canvas, x_screen, y_screen, player_animation); + + ///Draw Boxes + canvas_set_color(canvas, ColorBlack); + for(int y = 1; y < Y_FIELD_SIZE; ++y) { + for(int x = 0; x < X_FIELD_SIZE; ++x) { + draw_box(canvas, &(game->field[y][x]), x, y); + } + } + + release_mutex((ValueMutex*)mutex, game); +} + +static void heap_defense_input_callback(InputEvent* input_event, FuriMessageQueue* event_queue) { + if(input_event->type != InputTypePress && input_event->type != InputTypeLong) return; + + furi_assert(event_queue); + GameEvent event = {.type = EventKeyPress, .input = *input_event}; + furi_message_queue_put(event_queue, &event, FuriWaitForever); +} + +static void heap_defense_timer_callback(FuriMessageQueue* event_queue) { + furi_assert(event_queue); + + GameEvent event = {.type = EventGameTick, .input = {0}}; + furi_message_queue_put(event_queue, &event, 0); +} + +int32_t heap_defence_app(void* p) { + UNUSED(p); + srand(DWT->CYCCNT); + + //FURI_LOG_W(TAG, "Heap defence start %d", __LINE__); + FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(GameEvent)); + GameState* game = allocGameState(); + + ValueMutex state_mutex; + if(!init_mutex(&state_mutex, game, sizeof(GameState))) { + game_destroy(game); + return 1; + } + + assets_load(); + ViewPort* view_port = view_port_alloc(); + view_port_draw_callback_set(view_port, heap_defense_render_callback, &state_mutex); + view_port_input_callback_set(view_port, heap_defense_input_callback, event_queue); + + FuriTimer* timer = + furi_timer_alloc(heap_defense_timer_callback, FuriTimerTypePeriodic, event_queue); + furi_timer_start(timer, furi_kernel_get_tick_frequency() / TIMER_UPDATE_FREQ); + + Gui* gui = furi_record_open("gui"); + gui_add_view_port(gui, view_port, GuiLayerFullscreen); + + NotificationApp* notification = furi_record_open("notification"); + + memset(game->field[Y_LAST], 128, ROW_BYTE_SIZE); + game->person->p.y -= 2; + game->game_status = 0; + game->animation = AnimationPause; + + GameEvent event = {0}; + while(event.input.key != InputKeyBack) { + if(furi_message_queue_get(event_queue, &event, 100) != FuriStatusOk) { + continue; + } + + game = (GameState*)acquire_mutex_block(&state_mutex); + + //unset vibration + if(game->game_status & GameStatusVibro) { + notification_message(notification, &sequence_reset_vibro); + game->game_status &= ~GameStatusVibro; + icon_animation_stop(BOX_DESTROYED); + memset(game->field[Y_LAST], 0, ROW_BYTE_SIZE); + } + + if(!(game->game_status & GameStatusInProgress)) { + if(event.type == EventKeyPress && event.input.key == InputKeyOk) { + game->game_status |= GameStatusInProgress; + icon_animation_stop(animations[game->animation]); + } + + } else if(event.type == EventKeyPress) { + handle_key_presses(game->person, &(event.input), game); + } else { // EventGameTick + + drop_box(game); + generate_box(game); + if(clear_rows(game->field)) { + notification_message(notification, &sequence_set_vibro_on); + icon_animation_start(BOX_DESTROYED); + game->game_status |= GameStatusVibro; + } + person_move(game->person, game->field); + + if(is_person_dead(game->person, game->field)) { + game->game_status &= ~GameStatusInProgress; + game->animation = AnimationGameOver; + icon_animation_start(animations[AnimationGameOver]); + game_reset_field_and_player(game); + notification_message(notification, &sequence_error); + } + } + release_mutex(&state_mutex, game); + view_port_update(view_port); + } + + furi_timer_free(timer); + view_port_enabled_set(view_port, false); + gui_remove_view_port(gui, view_port); + view_port_free(view_port); + furi_record_close("gui"); + furi_record_close("notification"); + furi_message_queue_free(event_queue); + assets_clear(); + delete_mutex(&state_mutex); + game_destroy(game); + + return 0; +} diff --git a/applications/plugins/heap_defence_game/hede_assets.c b/applications/plugins/heap_defence_game/hede_assets.c new file mode 100644 index 00000000000..ec8b933b933 --- /dev/null +++ b/applications/plugins/heap_defence_game/hede_assets.c @@ -0,0 +1,11 @@ +// +// Created by user on 15.12.2021. +// +#include "hede_assets.h" +#include + +const uint8_t _A_HD_BoxDestroyed_10x10_0[] = {0x01,0x00,0x10,0x00,0x00,0x1d,0xa2,0x01,0xc8,0x80,0x6d,0x20,0x15,0x08,0x06,0x72,0x01,0x48,0x07,0xa0,}; +const uint8_t _A_HD_BoxDestroyed_10x10_1[] = {0x00,0x00,0x00,0x28,0x01,0x4A,0x00,0xA8,0x01,0x84,0x00,0x22,0x00,0x88,0x00,0x58,0x01,0x22,0x00,0x00,0x00,}; +const uint8_t _A_HD_BoxDestroyed_10x10_2[] = {0x00,0x00,0x00,0x08,0x01,0x42,0x00,0x09,0x01,0x00,0x02,0x02,0x00,0x01,0x02,0x00,0x01,0x21,0x00,0x42,0x02,}; +const uint8_t *_A_HD_BoxDestroyed_10x10[] = {_A_HD_BoxDestroyed_10x10_0,_A_HD_BoxDestroyed_10x10_1,_A_HD_BoxDestroyed_10x10_2}; +const Icon A_HD_BoxDestroyed_10x10 = {.width=10,.height=10,.frame_count=3,.frame_rate=4,.frames=_A_HD_BoxDestroyed_10x10}; \ No newline at end of file diff --git a/applications/plugins/heap_defence_game/hede_assets.h b/applications/plugins/heap_defence_game/hede_assets.h new file mode 100644 index 00000000000..3bcabc59ff5 --- /dev/null +++ b/applications/plugins/heap_defence_game/hede_assets.h @@ -0,0 +1,11 @@ +// +// Created by user on 15.12.2021. +// + +#ifndef HEDE_ASSETS_H +#define HEDE_ASSETS_H +#include + +extern const Icon A_HD_BoxDestroyed_10x10; + +#endif