From e26464d843444e80a7f1464983e8bb7efc1c7eac Mon Sep 17 00:00:00 2001 From: Matteo Benedetto Date: Sat, 27 Jun 2026 17:53:45 +0200 Subject: [PATCH] Merge origin/new-newnassets: new LPC rat assets and animations Cherry-picked from new-newnassets (3 commits): - bdf5a8d Add new start animation asset for game launch - 5f2d09f Fix rat animations and restore map tiles - 2e2c5bb feat: add LPC-style rat assets, sprite generation scripts, and grid extraction tools Conflicts resolved: - engine/sdl2.py: kept 'if scale:' wrapper (compatible, default scale=True) - units/rat.py: kept animation frame computation (partial_move * 4) - 12 PNG files (BMP_BABY/MALE/FEMALE_*): kept new-newnassets versions Cleanup applied: removed ~480 working artifacts not appropriate for the production repo: - 25 PNG in repo root (male_rats*.png, spritesheet*.png) - 416 tile extracts in tools/lpc_extract/grid/ - scattered debug PNGs (bushes, preview, montages, etc.) - early iteration scripts (animate_rat v1-v4, restyle v2-v10, etc.) Kept: 32 new LPC-style sprites in assets/Rat_LPC_Style/, 4 animation sprite sheets in assets/Rat_Animated/, 64 updated Rat sprites, 22 final-version generator scripts, plus all .py/.md updates. --- assets/Rat/BMP_2_CAVE_DOWN_orig.png | Bin 0 -> 242 bytes assets/Rat/BMP_2_CAVE_LEFT_orig.png | Bin 0 -> 259 bytes assets/Rat/BMP_2_CAVE_RIGHT_orig.png | Bin 0 -> 286 bytes assets/Rat/BMP_2_CAVE_UP_orig.png | Bin 0 -> 243 bytes assets/Rat/BMP_2_EXPLOSION_DOWN_orig.png | Bin 0 -> 306 bytes assets/Rat/BMP_2_EXPLOSION_LEFT_orig.png | Bin 0 -> 312 bytes assets/Rat/BMP_2_EXPLOSION_RIGHT_orig.png | Bin 0 -> 277 bytes assets/Rat/BMP_2_EXPLOSION_UP_orig.png | Bin 0 -> 281 bytes assets/Rat/BMP_2_GAS_DOWN_orig.png | Bin 0 -> 371 bytes assets/Rat/BMP_2_GAS_LEFT_orig.png | Bin 0 -> 395 bytes assets/Rat/BMP_2_GAS_RIGHT_orig.png | Bin 0 -> 383 bytes assets/Rat/BMP_2_GAS_UP_orig.png | Bin 0 -> 421 bytes assets/Rat/BMP_3_CAVE_DOWN_orig.png | Bin 0 -> 213 bytes assets/Rat/BMP_3_CAVE_LEFT_orig.png | Bin 0 -> 245 bytes assets/Rat/BMP_3_CAVE_RIGHT_orig.png | Bin 0 -> 258 bytes assets/Rat/BMP_3_CAVE_UP_orig.png | Bin 0 -> 199 bytes assets/Rat/BMP_3_EXPLOSION_DOWN_orig.png | Bin 0 -> 340 bytes assets/Rat/BMP_3_EXPLOSION_LEFT_orig.png | Bin 0 -> 350 bytes assets/Rat/BMP_3_EXPLOSION_RIGHT_orig.png | Bin 0 -> 355 bytes assets/Rat/BMP_3_EXPLOSION_UP_orig.png | Bin 0 -> 313 bytes assets/Rat/BMP_3_GAS_DOWN_orig.png | Bin 0 -> 358 bytes assets/Rat/BMP_3_GAS_LEFT_orig.png | Bin 0 -> 362 bytes assets/Rat/BMP_3_GAS_RIGHT_orig.png | Bin 0 -> 378 bytes assets/Rat/BMP_3_GAS_UP_orig.png | Bin 0 -> 361 bytes assets/Rat/BMP_4_CAVE_DOWN_orig.png | Bin 0 -> 313 bytes assets/Rat/BMP_4_CAVE_LEFT_orig.png | Bin 0 -> 253 bytes assets/Rat/BMP_4_CAVE_RIGHT_orig.png | Bin 0 -> 331 bytes assets/Rat/BMP_4_CAVE_UP_orig.png | Bin 0 -> 259 bytes assets/Rat/BMP_4_EXPLOSION_DOWN_orig.png | Bin 0 -> 329 bytes assets/Rat/BMP_4_EXPLOSION_LEFT_orig.png | Bin 0 -> 321 bytes assets/Rat/BMP_4_EXPLOSION_RIGHT_orig.png | Bin 0 -> 340 bytes assets/Rat/BMP_4_EXPLOSION_UP_orig.png | Bin 0 -> 302 bytes assets/Rat/BMP_4_GAS_DOWN_orig.png | Bin 0 -> 389 bytes assets/Rat/BMP_4_GAS_LEFT_orig.png | Bin 0 -> 382 bytes assets/Rat/BMP_4_GAS_RIGHT_orig.png | Bin 0 -> 396 bytes assets/Rat/BMP_4_GAS_UP_orig.png | Bin 0 -> 376 bytes assets/Rat/BMP_ARROW_DOWN_orig.png | Bin 0 -> 362 bytes assets/Rat/BMP_ARROW_LEFT_orig.png | Bin 0 -> 366 bytes assets/Rat/BMP_ARROW_RIGHT_orig.png | Bin 0 -> 362 bytes assets/Rat/BMP_ARROW_UP_orig.png | Bin 0 -> 360 bytes assets/Rat/BMP_BABY_DOWN.png | Bin 390 -> 520 bytes assets/Rat/BMP_BABY_LEFT.png | Bin 405 -> 550 bytes assets/Rat/BMP_BABY_RIGHT.png | Bin 403 -> 532 bytes assets/Rat/BMP_BABY_UP.png | Bin 396 -> 534 bytes assets/Rat/BMP_EXPLOSION_DOWN_orig.png | Bin 0 -> 296 bytes assets/Rat/BMP_EXPLOSION_LEFT_orig.png | Bin 0 -> 310 bytes assets/Rat/BMP_EXPLOSION_RIGHT_orig.png | Bin 0 -> 298 bytes assets/Rat/BMP_EXPLOSION_UP_orig.png | Bin 0 -> 276 bytes assets/Rat/BMP_FEMALE_DOWN.png | Bin 772 -> 853 bytes assets/Rat/BMP_FEMALE_LEFT.png | Bin 788 -> 802 bytes assets/Rat/BMP_FEMALE_RIGHT.png | Bin 771 -> 882 bytes assets/Rat/BMP_FEMALE_UP.png | Bin 775 -> 814 bytes assets/Rat/BMP_GAS_DOWN_orig.png | Bin 0 -> 314 bytes assets/Rat/BMP_GAS_LEFT_orig.png | Bin 0 -> 324 bytes assets/Rat/BMP_GAS_RIGHT_orig.png | Bin 0 -> 331 bytes assets/Rat/BMP_GAS_UP_orig.png | Bin 0 -> 305 bytes assets/Rat/BMP_MALE_DOWN.png | Bin 780 -> 867 bytes assets/Rat/BMP_MALE_LEFT.png | Bin 800 -> 837 bytes assets/Rat/BMP_MALE_RIGHT.png | Bin 780 -> 900 bytes assets/Rat/BMP_MALE_UP.png | Bin 773 -> 822 bytes assets/Rat/BMP_START_1_DOWN_orig.png | Bin 0 -> 678 bytes assets/Rat/BMP_START_2_DOWN_orig.png | Bin 0 -> 698 bytes assets/Rat/BMP_START_3_DOWN_orig.png | Bin 0 -> 593 bytes assets/Rat/BMP_START_4_DOWN_orig.png | Bin 0 -> 591 bytes assets/Rat_Animated/MALE_DOWN_anim.png | Bin 0 -> 1574 bytes assets/Rat_Animated/MALE_LEFT_anim.png | Bin 0 -> 1637 bytes assets/Rat_Animated/MALE_RIGHT_anim.png | Bin 0 -> 1665 bytes assets/Rat_Animated/MALE_UP_anim.png | Bin 0 -> 1597 bytes assets/Rat_LPC_Style/BMP_1_CAVE_DOWN.png | Bin 0 -> 954 bytes assets/Rat_LPC_Style/BMP_1_CAVE_LEFT.png | Bin 0 -> 1142 bytes assets/Rat_LPC_Style/BMP_1_CAVE_RIGHT.png | Bin 0 -> 1078 bytes assets/Rat_LPC_Style/BMP_1_CAVE_UP.png | Bin 0 -> 982 bytes assets/Rat_LPC_Style/BMP_1_E.png | Bin 0 -> 622 bytes assets/Rat_LPC_Style/BMP_1_EN.png | Bin 0 -> 614 bytes assets/Rat_LPC_Style/BMP_1_ES.png | Bin 0 -> 596 bytes assets/Rat_LPC_Style/BMP_1_EXPLOSION_DOWN.png | Bin 0 -> 1028 bytes assets/Rat_LPC_Style/BMP_1_EXPLOSION_LEFT.png | Bin 0 -> 1185 bytes .../Rat_LPC_Style/BMP_1_EXPLOSION_RIGHT.png | Bin 0 -> 1149 bytes assets/Rat_LPC_Style/BMP_1_EXPLOSION_UP.png | Bin 0 -> 1036 bytes assets/Rat_LPC_Style/BMP_1_FLOWER_1.png | Bin 0 -> 2069 bytes assets/Rat_LPC_Style/BMP_1_FLOWER_2.png | Bin 0 -> 2118 bytes assets/Rat_LPC_Style/BMP_1_FLOWER_3.png | Bin 0 -> 1989 bytes assets/Rat_LPC_Style/BMP_1_FLOWER_4.png | Bin 0 -> 1979 bytes assets/Rat_LPC_Style/BMP_1_GAS_DOWN.png | Bin 0 -> 1145 bytes assets/Rat_LPC_Style/BMP_1_GAS_LEFT.png | Bin 0 -> 1304 bytes assets/Rat_LPC_Style/BMP_1_GAS_RIGHT.png | Bin 0 -> 1270 bytes assets/Rat_LPC_Style/BMP_1_GAS_UP.png | Bin 0 -> 1278 bytes assets/Rat_LPC_Style/BMP_1_GRASS_1.png | Bin 0 -> 1775 bytes assets/Rat_LPC_Style/BMP_1_GRASS_2.png | Bin 0 -> 1827 bytes assets/Rat_LPC_Style/BMP_1_GRASS_3.png | Bin 0 -> 1872 bytes assets/Rat_LPC_Style/BMP_1_GRASS_4.png | Bin 0 -> 1788 bytes assets/Rat_LPC_Style/BMP_1_N.png | Bin 0 -> 627 bytes assets/Rat_LPC_Style/BMP_1_NE.png | Bin 0 -> 625 bytes assets/Rat_LPC_Style/BMP_1_NW.png | Bin 0 -> 632 bytes assets/Rat_LPC_Style/BMP_1_S.png | Bin 0 -> 572 bytes assets/Rat_LPC_Style/BMP_1_SE.png | Bin 0 -> 567 bytes assets/Rat_LPC_Style/BMP_1_SW.png | Bin 0 -> 627 bytes assets/Rat_LPC_Style/BMP_1_W.png | Bin 0 -> 620 bytes assets/Rat_LPC_Style/BMP_1_WN.png | Bin 0 -> 597 bytes assets/Rat_LPC_Style/BMP_1_WS.png | Bin 0 -> 608 bytes engine/graphics.py | 4 +- engine/sdl2.py | 6 +- tools/lpc_extract/BMP_1_E.png | Bin 0 -> 360 bytes tools/lpc_extract/BMP_1_GRASS_1.png | Bin 0 -> 320 bytes tools/lpc_extract/BMP_1_GRASS_1_scaled.png | Bin 0 -> 320 bytes tools/lpc_extract/BMP_1_GRASS_1_tiled.png | Bin 0 -> 329 bytes tools/lpc_extract/BMP_1_GRASS_2.png | Bin 0 -> 320 bytes tools/lpc_extract/BMP_1_GRASS_3.png | Bin 0 -> 320 bytes tools/lpc_extract/BMP_1_GRASS_4.png | Bin 0 -> 320 bytes tools/lpc_extract/BMP_1_N.png | Bin 0 -> 358 bytes tools/lpc_extract/BMP_1_NE.png | Bin 0 -> 291 bytes tools/lpc_extract/BMP_1_NW.png | Bin 0 -> 277 bytes tools/lpc_extract/BMP_1_S.png | Bin 0 -> 319 bytes tools/lpc_extract/BMP_1_SE.png | Bin 0 -> 289 bytes tools/lpc_extract/BMP_1_SW.png | Bin 0 -> 322 bytes tools/lpc_extract/BMP_1_W.png | Bin 0 -> 414 bytes tools/lpc_extract/analyze_colors.py | 24 ++ tools/lpc_extract/analyze_edges.py | 22 ++ tools/lpc_extract/animate_rat_v5.py | 84 +++++++ tools/lpc_extract/check_black.py | 9 + tools/lpc_extract/check_rat.py | 14 ++ tools/lpc_extract/check_rat_size.py | 4 + tools/lpc_extract/check_screenshot.py | 4 + tools/lpc_extract/compare_bush_grass.py | 11 + tools/lpc_extract/extract.py | 35 +++ tools/lpc_extract/extract_all.py | 16 ++ tools/lpc_extract/extract_all2.py | 21 ++ tools/lpc_extract/extract_grass.py | 17 ++ tools/lpc_extract/generate_all.py | 90 ++++++++ .../lpc_extract/generate_all_animations_v8.py | 154 +++++++++++++ tools/lpc_extract/inspect_gas.py | 10 + tools/lpc_extract/inspect_lpc.py | 11 + tools/lpc_extract/montage_originals.py | 18 ++ tools/lpc_extract/recolor.py | 45 ++++ tools/lpc_extract/restyle_v11.py | 215 ++++++++++++++++++ tools/lpc_extract/sample_bush.py | 14 ++ tools/lpc_extract/solve_grass.py | 22 ++ tools/lpc_extract/test_hedge.py | 4 + units/rat.py | 10 +- 139 files changed, 857 insertions(+), 7 deletions(-) create mode 100644 assets/Rat/BMP_2_CAVE_DOWN_orig.png create mode 100644 assets/Rat/BMP_2_CAVE_LEFT_orig.png create mode 100644 assets/Rat/BMP_2_CAVE_RIGHT_orig.png create mode 100644 assets/Rat/BMP_2_CAVE_UP_orig.png create mode 100644 assets/Rat/BMP_2_EXPLOSION_DOWN_orig.png create mode 100644 assets/Rat/BMP_2_EXPLOSION_LEFT_orig.png create mode 100644 assets/Rat/BMP_2_EXPLOSION_RIGHT_orig.png create mode 100644 assets/Rat/BMP_2_EXPLOSION_UP_orig.png create mode 100644 assets/Rat/BMP_2_GAS_DOWN_orig.png create mode 100644 assets/Rat/BMP_2_GAS_LEFT_orig.png create mode 100644 assets/Rat/BMP_2_GAS_RIGHT_orig.png create mode 100644 assets/Rat/BMP_2_GAS_UP_orig.png create mode 100644 assets/Rat/BMP_3_CAVE_DOWN_orig.png create mode 100644 assets/Rat/BMP_3_CAVE_LEFT_orig.png create mode 100644 assets/Rat/BMP_3_CAVE_RIGHT_orig.png create mode 100644 assets/Rat/BMP_3_CAVE_UP_orig.png create mode 100644 assets/Rat/BMP_3_EXPLOSION_DOWN_orig.png create mode 100644 assets/Rat/BMP_3_EXPLOSION_LEFT_orig.png create mode 100644 assets/Rat/BMP_3_EXPLOSION_RIGHT_orig.png create mode 100644 assets/Rat/BMP_3_EXPLOSION_UP_orig.png create mode 100644 assets/Rat/BMP_3_GAS_DOWN_orig.png create mode 100644 assets/Rat/BMP_3_GAS_LEFT_orig.png create mode 100644 assets/Rat/BMP_3_GAS_RIGHT_orig.png create mode 100644 assets/Rat/BMP_3_GAS_UP_orig.png create mode 100644 assets/Rat/BMP_4_CAVE_DOWN_orig.png create mode 100644 assets/Rat/BMP_4_CAVE_LEFT_orig.png create mode 100644 assets/Rat/BMP_4_CAVE_RIGHT_orig.png create mode 100644 assets/Rat/BMP_4_CAVE_UP_orig.png create mode 100644 assets/Rat/BMP_4_EXPLOSION_DOWN_orig.png create mode 100644 assets/Rat/BMP_4_EXPLOSION_LEFT_orig.png create mode 100644 assets/Rat/BMP_4_EXPLOSION_RIGHT_orig.png create mode 100644 assets/Rat/BMP_4_EXPLOSION_UP_orig.png create mode 100644 assets/Rat/BMP_4_GAS_DOWN_orig.png create mode 100644 assets/Rat/BMP_4_GAS_LEFT_orig.png create mode 100644 assets/Rat/BMP_4_GAS_RIGHT_orig.png create mode 100644 assets/Rat/BMP_4_GAS_UP_orig.png create mode 100644 assets/Rat/BMP_ARROW_DOWN_orig.png create mode 100644 assets/Rat/BMP_ARROW_LEFT_orig.png create mode 100644 assets/Rat/BMP_ARROW_RIGHT_orig.png create mode 100644 assets/Rat/BMP_ARROW_UP_orig.png create mode 100644 assets/Rat/BMP_EXPLOSION_DOWN_orig.png create mode 100644 assets/Rat/BMP_EXPLOSION_LEFT_orig.png create mode 100644 assets/Rat/BMP_EXPLOSION_RIGHT_orig.png create mode 100644 assets/Rat/BMP_EXPLOSION_UP_orig.png create mode 100644 assets/Rat/BMP_GAS_DOWN_orig.png create mode 100644 assets/Rat/BMP_GAS_LEFT_orig.png create mode 100644 assets/Rat/BMP_GAS_RIGHT_orig.png create mode 100644 assets/Rat/BMP_GAS_UP_orig.png create mode 100644 assets/Rat/BMP_START_1_DOWN_orig.png create mode 100644 assets/Rat/BMP_START_2_DOWN_orig.png create mode 100644 assets/Rat/BMP_START_3_DOWN_orig.png create mode 100644 assets/Rat/BMP_START_4_DOWN_orig.png create mode 100644 assets/Rat_Animated/MALE_DOWN_anim.png create mode 100644 assets/Rat_Animated/MALE_LEFT_anim.png create mode 100644 assets/Rat_Animated/MALE_RIGHT_anim.png create mode 100644 assets/Rat_Animated/MALE_UP_anim.png create mode 100644 assets/Rat_LPC_Style/BMP_1_CAVE_DOWN.png create mode 100644 assets/Rat_LPC_Style/BMP_1_CAVE_LEFT.png create mode 100644 assets/Rat_LPC_Style/BMP_1_CAVE_RIGHT.png create mode 100644 assets/Rat_LPC_Style/BMP_1_CAVE_UP.png create mode 100644 assets/Rat_LPC_Style/BMP_1_E.png create mode 100644 assets/Rat_LPC_Style/BMP_1_EN.png create mode 100644 assets/Rat_LPC_Style/BMP_1_ES.png create mode 100644 assets/Rat_LPC_Style/BMP_1_EXPLOSION_DOWN.png create mode 100644 assets/Rat_LPC_Style/BMP_1_EXPLOSION_LEFT.png create mode 100644 assets/Rat_LPC_Style/BMP_1_EXPLOSION_RIGHT.png create mode 100644 assets/Rat_LPC_Style/BMP_1_EXPLOSION_UP.png create mode 100644 assets/Rat_LPC_Style/BMP_1_FLOWER_1.png create mode 100644 assets/Rat_LPC_Style/BMP_1_FLOWER_2.png create mode 100644 assets/Rat_LPC_Style/BMP_1_FLOWER_3.png create mode 100644 assets/Rat_LPC_Style/BMP_1_FLOWER_4.png create mode 100644 assets/Rat_LPC_Style/BMP_1_GAS_DOWN.png create mode 100644 assets/Rat_LPC_Style/BMP_1_GAS_LEFT.png create mode 100644 assets/Rat_LPC_Style/BMP_1_GAS_RIGHT.png create mode 100644 assets/Rat_LPC_Style/BMP_1_GAS_UP.png create mode 100644 assets/Rat_LPC_Style/BMP_1_GRASS_1.png create mode 100644 assets/Rat_LPC_Style/BMP_1_GRASS_2.png create mode 100644 assets/Rat_LPC_Style/BMP_1_GRASS_3.png create mode 100644 assets/Rat_LPC_Style/BMP_1_GRASS_4.png create mode 100644 assets/Rat_LPC_Style/BMP_1_N.png create mode 100644 assets/Rat_LPC_Style/BMP_1_NE.png create mode 100644 assets/Rat_LPC_Style/BMP_1_NW.png create mode 100644 assets/Rat_LPC_Style/BMP_1_S.png create mode 100644 assets/Rat_LPC_Style/BMP_1_SE.png create mode 100644 assets/Rat_LPC_Style/BMP_1_SW.png create mode 100644 assets/Rat_LPC_Style/BMP_1_W.png create mode 100644 assets/Rat_LPC_Style/BMP_1_WN.png create mode 100644 assets/Rat_LPC_Style/BMP_1_WS.png create mode 100644 tools/lpc_extract/BMP_1_E.png create mode 100644 tools/lpc_extract/BMP_1_GRASS_1.png create mode 100644 tools/lpc_extract/BMP_1_GRASS_1_scaled.png create mode 100644 tools/lpc_extract/BMP_1_GRASS_1_tiled.png create mode 100644 tools/lpc_extract/BMP_1_GRASS_2.png create mode 100644 tools/lpc_extract/BMP_1_GRASS_3.png create mode 100644 tools/lpc_extract/BMP_1_GRASS_4.png create mode 100644 tools/lpc_extract/BMP_1_N.png create mode 100644 tools/lpc_extract/BMP_1_NE.png create mode 100644 tools/lpc_extract/BMP_1_NW.png create mode 100644 tools/lpc_extract/BMP_1_S.png create mode 100644 tools/lpc_extract/BMP_1_SE.png create mode 100644 tools/lpc_extract/BMP_1_SW.png create mode 100644 tools/lpc_extract/BMP_1_W.png create mode 100644 tools/lpc_extract/analyze_colors.py create mode 100644 tools/lpc_extract/analyze_edges.py create mode 100644 tools/lpc_extract/animate_rat_v5.py create mode 100644 tools/lpc_extract/check_black.py create mode 100644 tools/lpc_extract/check_rat.py create mode 100644 tools/lpc_extract/check_rat_size.py create mode 100644 tools/lpc_extract/check_screenshot.py create mode 100644 tools/lpc_extract/compare_bush_grass.py create mode 100644 tools/lpc_extract/extract.py create mode 100644 tools/lpc_extract/extract_all.py create mode 100644 tools/lpc_extract/extract_all2.py create mode 100644 tools/lpc_extract/extract_grass.py create mode 100644 tools/lpc_extract/generate_all.py create mode 100644 tools/lpc_extract/generate_all_animations_v8.py create mode 100644 tools/lpc_extract/inspect_gas.py create mode 100644 tools/lpc_extract/inspect_lpc.py create mode 100644 tools/lpc_extract/montage_originals.py create mode 100644 tools/lpc_extract/recolor.py create mode 100644 tools/lpc_extract/restyle_v11.py create mode 100644 tools/lpc_extract/sample_bush.py create mode 100644 tools/lpc_extract/solve_grass.py create mode 100644 tools/lpc_extract/test_hedge.py diff --git a/assets/Rat/BMP_2_CAVE_DOWN_orig.png b/assets/Rat/BMP_2_CAVE_DOWN_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..bf80a88c49f6a5af9bb9b2d6356687a4a0543aff GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e{s5m4*Z=<+8XABcAldN$|9?xT z4lf{Qo~MgrNX4ADlfC(z6**k_&qg=oEc|_6`b`6$!QUC%X0`2`=+pD?*&#+z29ubB z7YcaUdD%spxhK!y>f0iuYIDBMJagL<15uBl22WWDJyz8-*#R%v-rQp216i z;Y7^+uoccJ3+rZwwBIn8&hgXtv_P}L8plWddscpX@=o!oWN3Ud zDPYkf%cs{?&e&4>Z;dO5^<44DyvLVSVl_33zsgIh=}wnVzqn>zOt;+K#n!jpabHWy gyBE^sZhuOUUp3uD=uPYqCy*aKUHx3vIVCg!034Zdb^rhX literal 0 HcmV?d00001 diff --git a/assets/Rat/BMP_2_CAVE_UP_orig.png b/assets/Rat/BMP_2_CAVE_UP_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..ac92b22c4a82ccf45159948e104706c072450a03 GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e{s5m4*M^1$AQMRZ{|`j}EguN6 z0QvJhT^vIy=DeM9kn^yC0L$|h?hD%|@M+@B7Kb_QqV`R#4*k)2dDERg z{9arYqkmuOPE&LN_rI`$KlW38+9U-{JAVAtq_<474c$!-{8ljL;CIwv=$n^rmMWYg zEU}2sV^WTjbs(Rl6Psfd!=a7e%}=p4TsoB|BDInKgOGp*FW=f1-ro|7uJmTUm^W3d mXVcDYcl37bFS-3((BCPOIQV90H{r zS<_N;i@5|16%7;=Gb>ii7G5kxv8{Z)AIpH$u2LIP5hd~`b`22CZ974)yx27Yh|Z1o z{Pp^9m_3p`wu$D3^vy$cNJ8&Dbft*`WQU}y)F!uNn~B8l#*Rw1lTnpXLgk>=`sbYEPk> zRUmMLRGLC_sB&W)P9X;fY!ysc9UdO<@#hgpr3IqO2~i?X@d5yFSO8I?ZZNh|QWHuB zTiUuC0;XC5I#3pKEJ&Ld=i)PR_CQO`j2>pk1K|8QDrwUyWW5iS$yeY(nE z;Mp9z`vO48Vo}8$z1#u-_5Ew;?9BYXdwIB6{kBY{0E}YhyXgtw(I}3$%)#SyoCACUdtI1?Ta*dIRqUf`UIy>Tgms>Nb$(c z2cNRuyv^i!#-PAhyzcwz)akL0m;dJ2=(|_+roO~lkNZJVv8UAUJWX`jle3WF!%RCa z&iwy@X1eZ@4AqRySDLmgX*F3LG3lC}$Bqdb!VR~bi#rf!I(>6(Ly_XyxK>BC+neTT dCFqMyH`o7XS+&(FdOy%l44$rjF6*2UngI2_aXtV5 literal 0 HcmV?d00001 diff --git a/assets/Rat/BMP_2_GAS_DOWN_orig.png b/assets/Rat/BMP_2_GAS_DOWN_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..de78bc93a85c0488ce100991a692ec071d9a0c95 GIT binary patch literal 371 zcmV-(0gV2MP)b&fPjDi001Qq8cF~F0USw0K~#90y_Laj!!Qg*AB7AcZeVby?%fFlPf%)s zh&|9w+FYCi5nl*f0w2HlDGLA^Q^C=g8WS`opg1%xp34olOeIRpjK{l6_qQ@!Zje*~ zE**GLQ-ZjzK~r8QX4dj|Rby7jlnxv+{pj0+BfUb!^W+p_ax@7lRVWI&cEbVb1A`&m z85JsSditPQ7QV*m3$V3+!Vh2f?}Wz$Z`(g#c-v|wYoOq58xYwje^M$CEjyF*1-f>H zn03Q@%MfnyaGGNw9&V+Gwz+8fOl*KCpSvH98rHBi6kEF<@^n?zkO*7*IKRYn6ch$l zr~;6#8Pk7`*7^YqJWU6vplg3G!~2Mw#W?TKpQL`$56}OE)gv->d(B*k_yskOgijUP Rnoa-!002ovPDHLkV1h=Rmx2HQ literal 0 HcmV?d00001 diff --git a/assets/Rat/BMP_2_GAS_LEFT_orig.png b/assets/Rat/BMP_2_GAS_LEFT_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..b6c14b2d71813833004ed36ad7e1b35088f01ad7 GIT binary patch literal 395 zcmV;60d)R}P)^_H7uQ=l3#5*TPR1&@b11+zE5e1q*bL;;B=Y9Q)CR#-s6 z_FH0#;XXy-0W+{yhMEUR3;Q|DA zFyEn}<*GvBl+A$b0gW&Rc7l18{qGVNS!kvNQkaj*9$iF*iwgj<5Hxmx&j1(|Es=;+ z0HaS0I36HA!(68_oN!?wB739&*e!q;-T%SEVh{L0+1akMjDSjb81~F%F4!6X?WIz~ zLqKXZZ8sm3*ELH30$Hp(q3x5k-X`m1R0Gcu1jNzn3T5+fncu&!BFbExT#JLr;I>9Zy~K+6 dz1%A#z5p#timVBI6951J002ovPDHLkV1jQzo+1DM literal 0 HcmV?d00001 diff --git a/assets/Rat/BMP_2_GAS_UP_orig.png b/assets/Rat/BMP_2_GAS_UP_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..9b02c5d7261bc412fe13a4fae9aa4b2b17bc7283 GIT binary patch literal 421 zcmV;W0b2fvP)b&fPeu1{{ZR2TEzeW0ZvIoK~#90y_Laf#4r#=-`JbGrURo27SzJF;BIqB z1A?tUxPwsvu_g!EOK!UmWsN{a4F7rld}R3dN7O4YEkHSTplxTt^i1Jt!R35Wh#(NOtUkckq2Oa$5%p>3nuEYo5V05>E664)ukfljs(-4Ypq2yi+&3XvdB zOC|yP9STGV_L9O2h$#YIX$62hMPRU_ME)J>h_NN z;U>XQubc-5W+08tY)5H(O3;pD~Sp>On` z2dJBRHB@v&9^jWjpl)EI9qsiU_k&3|nFdGC>ZUNN%`SN^uw&f$Vf=JPhL$% vLIt1M9+tr8m8az3z?_u3xKqp>&J4@}uM>e_Z{F_9lo6Y>TNp_2dt1OWJrqUFztEx_yO`x$Fa zFmLeND|Jg(f_4d!+UlL~cPAL1U`~G98~9vJK#@?-??!^+8^8SNA1(n)f|Y+`s`Vvc zjJI7zReV)yGh9RgHYHM<0X(!Vkqn+Hxlak-AGtf zM1ILeTwem#L9+5c`$4&lPjIjwoGXX}3F`9wVE-~sCumOa1)+W{r_DDx2><{907*qo IM6N<$g3}*rivR!s literal 0 HcmV?d00001 diff --git a/assets/Rat/BMP_3_CAVE_UP_orig.png b/assets/Rat/BMP_3_CAVE_UP_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..b233489fecb7d662a31b83ec5107d91544f95143 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^4j{|{BpCXc^q7EDpQnpsNX4ADQ@r^OC~&YY{ForK z*8Oot?3P}8sbIxM);CuyDwQ2=9K+i`?UQR@Sg`3sxQ7Fi(1ZpS6$Qp)3@Hrv_W1^i zB%E)`5&FSguqA#kTcrAi@EzT)8}8&3E-({I?0*(l;nH8~8$N_@kWs6Qc*14jbN}!rtMB1E7;Nhm_Rox~ZUwo})78&qol`;+0BX5Qb^rhX literal 0 HcmV?d00001 diff --git a/assets/Rat/BMP_3_EXPLOSION_DOWN_orig.png b/assets/Rat/BMP_3_EXPLOSION_DOWN_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..f70c065c35cd1f622c4a7712db72094627a8482d GIT binary patch literal 340 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|ep#Yx{*8>L*G&D2-dH+Fx;XeaI zqJV@xkpI`y#WAE}&fck~bB`GCxX6p^Ib3#JAa==tPqUi;WrtP*<5P!|^I4gy1=Z|s zEK@mOa7>9+tz-6)n!Asr)vv!~3TgOd7T~^S(=kpFhqc00)BpC=`xh#v zuTAZx!HjR4`+g_<&-5+2wBZrM`>+FvLU$RjM6P3Rg~0exJ`~>A$Dz6mG?Kyvn_nFVZ}9 k&7)ZBN}29tJmdKI;Vst0AUl6GXMYp literal 0 HcmV?d00001 diff --git a/assets/Rat/BMP_3_EXPLOSION_LEFT_orig.png b/assets/Rat/BMP_3_EXPLOSION_LEFT_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..8bfab53150ac1656be70943cefcfc4fb33f21e4d GIT binary patch literal 350 zcmV-k0iphhP)A`-sDt4!up_$$(iJ;BU*nf2u!eWU z!$AnE1yOM5fw(9j`g@37gK?w#s@7uhHqU}soQsAkMq053#<{x$z?9o9P}~!XbuZKM zIlowIGyvE`LM;v$G+29_!Ib$D>Ev`a^OBOu)&en1?J&Xlui-GizXnDlx(tZ%0@p1LMk<-#QIIIL wECiG@I6qj6eG{&0F>&)o=Gw)EWRoWA6QCAKUmDrvdH?_b07*qoM6N<$f)%Wh`~Uy| literal 0 HcmV?d00001 diff --git a/assets/Rat/BMP_3_EXPLOSION_RIGHT_orig.png b/assets/Rat/BMP_3_EXPLOSION_RIGHT_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..4788d230c34ddb5b697063b29ed5dfa741d504b2 GIT binary patch literal 355 zcmV-p0i6DcP)t8BKzIueV*rr+`~{o5>)BL@cw%oRiv!ogZgkq4C?G8FV|b0q)p!9fO?L#PS*Ok?svvQY zxenDkKXehcD&j3Xu=U7hSPS6L(xB=5&~>WG!w+hbR7Dcms(k*fCJyEYLqm>l(_;=JkWsG1_xbRDP8b>CV zm&0XdE#^Ge9gR2kEnc6tP{u_&MC{%LL!Uc4+mX#Pz8jXKjFI)4=weEec%^`cdVty`U^b{Pq% zUfHwOGB0;pDqr%cneQ|^R^Cu#HLUgFH`*h7v*YZmS%>ql@t-lWK9mz9l?wDNgQu&X J%Q~loCIB>)f2{xj literal 0 HcmV?d00001 diff --git a/assets/Rat/BMP_3_GAS_DOWN_orig.png b/assets/Rat/BMP_3_GAS_DOWN_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..ec6a0aafdae61304755fa37a803685e65794cdff GIT binary patch literal 358 zcmV-s0h#`ZP)UaP32sc$-@LRt}efD3E5E6p{%kAXYP6CtzVUT3wQ>;&aDg?7Hr($NeE=0k4 zJykl3jaahxGjODsF{mAQ2aO6JTT2%MLQu)|bB|1&3*4zvA(-vl|G~vz>&+=|JplKT`SHW= zhd>4K2xS@#iEookB`rP%GR?PnL$reR_rddO1=H2z_?ESGbvavv9L6NC;r2F3e0}(IG^g$L9gvPT<6Esa7L3iS~JT`B7efU~~A7 zu3X{F7XMlVuRpLy0|Ns)_Y{yuz4S*QUj5&NRWUe%`BIy!ychsV4wf1}Fg$ zGwUVw`!gSz23blkMj%Wgi=Psuad(qcDerpkVG~iik}V5OBn6W#pupVZZE1?KwJ-@j zX<<$9r)X&_*E}K6rIlxEutsLBL$H27nDp=>mB`-I&Z%5b;V@4*+`BC(p$pRAXtEZF zO^lp4t2&(O_90gA&dzt#0$nGMTogf8LW`mTWS80gAs=;ze+M$^ZZW07*qo IM6N<$f|kyjGynhq literal 0 HcmV?d00001 diff --git a/assets/Rat/BMP_3_GAS_RIGHT_orig.png b/assets/Rat/BMP_3_GAS_RIGHT_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..02ca880bb8efacf799df766e84609e625f12201d GIT binary patch literal 378 zcmV-=0fqjFP)9)FJfwaXVg z2l#csz^6N1Z$NOJf}wVoGe7`7z*}}?kBXULzd@fd_8|G7Z z;*8%-BIm0%szzxI3W_zloV&`g2!zZ`LXbtl9WD5q;u6$KNz%&-YXu685cjGqOCAC~ z=h}P0jhx#xjx3aL^%kuGO^D*johHqu31cdf91~cF3)rb-=f82BQ^;zBhv#4 z8J2<||9v3%y*F~~g~E*D1@kE+zYm%K#vE+IS{4f<#`vRAY`$`&EcDD%N#p40o`{P< zJ;Y)uJ%AODSfdY(SrkfKoljwV{dynJ=r6!pwUD9*YGVfszVvbt-1R|G%Fg0Zr>Vp-8f|fV~ z(xw)yebV+*NC4jGup02EbqzMG`7kR@U(ybFD7*%8TX~^|iTb?v!j|i`+?i(6VJIOe zFc95Zdf?(0+gKbC3CbD-`x7K`4(&YKgL=zr9FPJVO~8_StfI(x`BEJ^vzvcxBYhtv za*zi6)XtL?A@Thbj=%6v4*Myr9H#lO%q`$BeIJ%z@%AT%gFh~&_aG1iqC%n~+Aj+5jA z((N12MVb<;G-pj1E$YKqP1#3b=$q|%X-JZZ^j zIfdr$79leJvmuvs4>I(l>=WcIiTfwtYFa+2{9X&3=OgL z!;Lp@6~gM+LHF6Y?D6vMvhNltEVB5HormWCSo}`mNq7>TgrE2TtT;92k1_sR00000 LNkvXXu0mjf6^@4? literal 0 HcmV?d00001 diff --git a/assets/Rat/BMP_4_CAVE_LEFT_orig.png b/assets/Rat/BMP_4_CAVE_LEFT_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..88abe1fd3d57b0619902a9ed1866ebe44ec6a332 GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e{s5m4*M^3M{|pQV4jlOZpW*-i z|0b_(fies$JzX3_D(0M>8qMWo$m8PQ#r@)q!><3Poz@r9I;yM5JI)%$+q18uXn)~@?^yzcwW8*yCb(BV!Z@kvBMRCt`dmBEd|Knz8nqbXqA0ZIW}rhy!$ z&@F^R8rT*P9XRJzmf6E35VSyqaPV!Uum5EE+apK>qn1k4GO(z?U?`o002ovPDHLkV1nXni$nkb literal 0 HcmV?d00001 diff --git a/assets/Rat/BMP_4_CAVE_UP_orig.png b/assets/Rat/BMP_4_CAVE_UP_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..4708842cbf3b02c767f3b36c5748d2b9148e994c GIT binary patch literal 259 zcmV+e0sQ`nP)gP3pt006H^L_t(|ob8g)4Z<)CL|;q?h&PBl0TTP~zyww{2n&$% z(FTh6s1W`_y}wJGyVz$qaNxinK=a3u?7i77n6?J!oLanv&bJLs$~(^i76y*pucWNN ztC7>$v4}2q3(^I^rFhC<;4p@1F&1lB-4}IeQX1Clm~cQBx@89RY5<;ci?Nt&l^oKD z`7$DuCM9yK#hekqHwuw|=ymLaL9Z$WeD<)gq&!1fF9!MD;sLszF=1R3*dhP`002ov JPDHLkV1i&;Ze9QY literal 0 HcmV?d00001 diff --git a/assets/Rat/BMP_4_EXPLOSION_DOWN_orig.png b/assets/Rat/BMP_4_EXPLOSION_DOWN_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..06e908fb489f4a56205390dbd21e8f5a776a0e00 GIT binary patch literal 329 zcmV-P0k-~$P)Dx{T5iO48>N6lW>%D ztddB~7O6?Y5eSC}Ct##CMGB;_5>DLM{_>lz`5qFH5}YLBNyL+~Sbv3}HYDN!c+qPw zmcmXVwXJwa>lg&G*Kl$o;HruckOuP76x?1TU7C3x3*hopM@FZ!Tsm bH#GMH+X+$jl_c`B00000NkvXXu0mjfILwZ# literal 0 HcmV?d00001 diff --git a/assets/Rat/BMP_4_EXPLOSION_LEFT_orig.png b/assets/Rat/BMP_4_EXPLOSION_LEFT_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..1b0723bd93c77af7b64e4aa70f715bbe8f0e0d66 GIT binary patch literal 321 zcmV-H0lxl;P)qL?`Vf>7 zrBx!;sh{{U9JbF#;9wz1NP>X^7(_1Y(qTGITPblCh_l7{-VK)y;lrAuK+T{Y5O*Dd zoOjd-VgiKHia`10k>734q}D9Z)@`z%pPwlfEI`c)HUFNmUkc?QM40+jw83m0op1Dc1Lxh+$|Xt2x%b2(lrpwPidv=4nY5L{XX{>0;@(} TWg0id00000NkvXXu0mjfPx6E0 literal 0 HcmV?d00001 diff --git a/assets/Rat/BMP_4_EXPLOSION_RIGHT_orig.png b/assets/Rat/BMP_4_EXPLOSION_RIGHT_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..c1808b605b1d6ef238af7be1179aea95401def6a GIT binary patch literal 340 zcmV-a0jvIrP)vv2QUWD%r}PFGqv5V5;4Q+e?J59v?85s$7|ta+e=18Cp%R&y>4A!-G7evmhm1D? zx9%4Jip+3Cn3a0Gtdp;hxX1xRYQ@(_)O_e4%#2*5Sy{likG4tuYlfJclw0g!84__4 z-T*gQ;vX5gY@pPizgO=rW?N3<#>I}e-vIzozSQtTzXE3|rdlj{DSu(51K8BF zUeM`g2?c=Fg2qDkZC_CDENxIAKD0i{+#1ALgF0BeUrLE-?N4d?dcXITCczA(20%-TEj`0EpU)@_3s(7EZ-%DrPnm>xl>FaN#=V z`4_W+O90!8X3^8G8}A$`&*asWD2$njasPkHCzbC!A0E&*w*UYD07*qoM6N<$f^ai} ANdN!< literal 0 HcmV?d00001 diff --git a/assets/Rat/BMP_4_GAS_DOWN_orig.png b/assets/Rat/BMP_4_GAS_DOWN_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..ec37540d0348e6dfca8c51620d1e9d2b29c51a10 GIT binary patch literal 389 zcmV;00eb$4P)*<9X-Q)`SV`)3&r3lXv;<;|+ z`^+G2fFUywFUSN?pql{DZ91Y?AgtOBWAw{^)iMcTpm_drooZMCrG)kGh#)Y0=FPeG zUIlucfruNFxCuap)GNrjdxzTb20w()UR~U|dj-!O5@fuhb1Y{R(2xwy3`6dq%s>PI zZ3j>QQm+N#X6?{f2*0N?1OSShyGETgAAAdIUJ_V4@^Uv=QjXhe5oY)SpGwke8D&iH zu>Cxl((5&N;$}E!(ips5U+wVhTLBGg_SrWRA$;UfA}Gr}jaO<`FX+|Zi(!HX^*w&L jWa>}we;~r|$P*D?UCC*^l(jZt00000NkvXXu0mjfZJ?)o literal 0 HcmV?d00001 diff --git a/assets/Rat/BMP_4_GAS_LEFT_orig.png b/assets/Rat/BMP_4_GAS_LEFT_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..f8eca965ccb7df117036af2f5f75dabfa939ed50 GIT binary patch literal 382 zcmV-^0fGLBP)+A9|5P9h7quyD{QlD^RW{?0@8z` zg2FmE$X<;{P#h|=^nauDCJL~*#8H3^qplN>m38{t35PmaFep%)2q--R+Z7`#x#}4n=S7L|NcM#$h{&FbXn)|dH6{@bhP|@OT8!< z8CX`>JtY3V!*n5+VG3ZNuq4hskw6zKj`h37533G6F?W_uxI?-tI3%_w1n-m2p&AZg*|r}=Z%)tD@{fN zhCR~_+iV&npEdX}$dq5>)eGeFFuuKpS4S)4UgrQ^RwUlP4xib~S5!kU2&Osp;-gJF qm-#TbS$CBX!ZxYvRp$hIOZ)&o$#x!H(21o00000%p literal 0 HcmV?d00001 diff --git a/assets/Rat/BMP_4_GAS_UP_orig.png b/assets/Rat/BMP_4_GAS_UP_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..0670eeb3c0eea1d61fed9a8d8523fb7323d17df2 GIT binary patch literal 376 zcmV-;0f+vHP)mJNdZj+YZBP@ zePDE-bEow#Kc>}|iz>p=Jx(>nKZRL8VGR#o*~~T<@2boCp^LmEcbvt22;s%dFSK%5PtwQ W^mj}oKY#%M0000I(3)EF2VS{N990fib~ zFff!FFfhDI0I6bN5HFasE6@fg!Ib3f?!xfDz5mR9AdkJo)7O>#1rMW`hSF`x&gDQM zKTj9O5Q)oMCmiHGV8C&N=Tt(Dn47g)wmfg(t@_GD?+#|+_fiZWzuanKnZf#CerNrW z7Xk?dqH0RfXPMZa9<;bE<2iNqb+J_AZRh&y4)cbt7g6mn;u8d#tXkq4QIe8al4_M) zlnSI6j0}uSbPbJk4Gcq!jI4|-t&GgI4GgRd41E2YPoZeY%}>cpt3=UYXk}<-WoQ7= yut+jE5~x7~ZbM0CZfbE!Vr~J79wRFg11n<_h@PgW50!y>7(8A5T-G@yGywp$(P#7k literal 0 HcmV?d00001 diff --git a/assets/Rat/BMP_ARROW_LEFT_orig.png b/assets/Rat/BMP_ARROW_LEFT_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..eb08b5bd1a3132b96a1956c562e2b8f998478f94 GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UA6p}rHd>I(3)EF2VS{N990fib~ zFff!FFfhDI0I6bN5HFasE6@fg!Ib3f?!xfDz5mR9AdkJo)7O>#1rMW`hSF`x&gDR% zAWs*^5Q)pN{kM4!C~z?FKZ@Hlv($LTn!g62jq*jul@Vo!E$Fz2p5=Mk-Azq?{p z|AiwBVs5optd*n-Urg3r%xI`qSngn-G*|BXrKBx2=h<7g2tRSD&wK_nUA4qDq9i4; zB-JXpC>2OC7#SFu=o%X78W@Hc8Ce-wS{a#Z8yHv_82I`(pF+`)o1c=IR*9m)(8|!v z%FqC!VUc8TBv69}+=i0O+|=Td#M}ZDJw{e023E!<5Is##A1VX&FnGH9xvXI(3)EF2VS{N990fib~ zFff!FFfhDI0I6bN5HFasE6@fg!Ib3f?!xfDz5mR9AdkJo)7O>#1rMW`hSF`x&gDQM zKTj9O5Q)pB{RcS@IB>8WPe?3#Hf`D5r-dww6#vPvmu*ctcT~TlUr<_u;ZGo=YhyFp zOwBIY)e#EWO*t~3bksH-Tv>P5edC*}UuJB(zn^g)r{D^!(i6HslT}MxBT7;dOH!?p zi&B9UgOP!eiLRlMu7P2Qk&%^=rInGnwt<0_fq}1o^C=V!x%nxXX_Y7%46O{!tPBkx y8Wu?gM*=lyz-=hW%uOvWNz5%k(PLy~Vqj%#0@2g-^r13P4}+(xpUXO@geCw*IcstN literal 0 HcmV?d00001 diff --git a/assets/Rat/BMP_ARROW_UP_orig.png b/assets/Rat/BMP_ARROW_UP_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..6e7f0567f411b74dae19d52701ab9da7d030ae78 GIT binary patch literal 360 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UA6p}rHd>I(3)EF2VS{N990fib~ zFff!FFfhDI0I6bN5HFasE6@fg!Ib3f?!xfDz5mR9AdkJo)7O>#1rMW`hSF`x&gDQM zA5Ry@5Q)oM&mI(PFyL^xD6dxAdhW=%1xB_Fo?qV0yJ2qaTx=B8Zgck-_Z5rdY*_(H zo2Q?6rFk~+00WGI^(N!F3?=n64!{5l*E!$tK_0o zAjM#0U}U0eXryak7-D2(Wn^h(WUg&sU}a$7>)(6|MMG|WN@iLmiUva~Lo+Kw1Bix2 wlEINc4H|G8N-}d(i%Sx73sCeJS(zAE8Jj@#G(CN&4AjHm>FVdQ&MBb@01!lJ_W%F@ literal 0 HcmV?d00001 diff --git a/assets/Rat/BMP_BABY_DOWN.png b/assets/Rat/BMP_BABY_DOWN.png index bebe8b4ae0059a65655653e79528d5f07d533fda..e2f362021db41270ef87a8bd70f174beb27a4993 100644 GIT binary patch literal 520 zcmV+j0{8uiP)pPJZJX<{ew2Ft zJzN-QonOS8w0~46SZTyGVqCTXW+~%v>0oufdCKypxJMRiIOoSdPN3G z17C%e`le?f{j6bR7D}@(2(-GZfltG0pc0>11Lc=ON-3n2*!D2!GUhn*@ewhkl$w_^ zYamC+wYPW>@zO?*o!q^=tM$cvH>O5NAq^M+np{1c-t-k~poH-3(+XB9PCBkPeP0HS z3fKxB^|`wXBckg`d#+Dy;L`%OhPw=W8eRjHcnws-oq=@r?-98^^-``CFkKyR(+b+h z8l&}H473h7Uk-7c=kXS|H+>fatpm1(H+{ovAl-FY9c&3&eP5div{p!#K|Kq0iJ%@H zFZw>E4ggTBHN62-9LL{ziZP0gmoQQv$I-ev*t@Vrz!bIqy<8*o)yhY$jje$(Mpi_x zI4%Ui4L`F_r=6oW0LLyz09= z6X8fp-@Ra^K9PYhc(~h*c^X~=m3R$Q!u+otwbuylVCHKMckl~W<83@&h!zn50000< KMNUMnLSTX?MB=Id literal 390 zcmV;10eSw3P)BM`h}Qui zVj?0p#Iv^`00Ll!yhoI|lp~@90IH4~piD|c?Em_Efw6*g0ZPHKO3}4~s4?KFaztdR zlp;XS?IWT=umHvFGmMuxB#0$xs4e6NU^M8wvaAqE0eN{P41fR#fMoyxV50YpHd&ZnInE|%JHQ=TJq$WE&?+Awh kyoQTBrxFH00Q@b$2XXVNDvWyxH2?qr07*qoM6N<$f^u@9F8}}l diff --git a/assets/Rat/BMP_BABY_LEFT.png b/assets/Rat/BMP_BABY_LEFT.png index 64c9859fc9c34b518afaad7c43f8c6e2c68f5f17..10cd94b42a222a3dbb4c4ced6ea036fa1cc3ffe3 100644 GIT binary patch literal 550 zcmV+>0@?kEP)000yS1^@s63Y0cZ0005)NklT2`1Ky-534D@p%y`p6ax0j3tqJu`=U4TE)2yWp!>(ZAAT zq0+HSNmf7*2qIw@CwW{^OX@*eW^_w%&)#!B{*`fh3^Rkk95ANV`rVe{_(1Y}FZYsN zE#@EAGr~V0dkh1+8ocJhC7PpT_Yw!DMiUrZ6Wo&I!`dGI(losZ87Z)pc#%!%t<_eO zc$mk(G+hVL_*zO}3)KCnRw7mPO4!Z66y!Nz3lgufW+0b%XWzQja996wuqEJ~sHt{b o3AiiMe~`-E`gY?A|7s@X59P1xqHf3LH~;_u07*qoM6N<$f?E~@$p8QV literal 405 zcmV;G0c!q9ISMartW(+6`~-GSA74OrcQ)!Y#e zRn_Wswmq8R26*SqjEIOt~#$o3EG5HA%O0jnURQ) zs>0sYZGfuMzW>gln7L`HXNYSF!i266@QyHZ^FjARa~Qfh!|MSfr~Hi47`!6XYsjp+AfzZ7W4`>HNoQkQ zG(7vSv6`rvC2?AD7MLxt#^tNRXubxl?!amuRSCIgDxT(&00000NkvXXu0mjfcObPY diff --git a/assets/Rat/BMP_BABY_RIGHT.png b/assets/Rat/BMP_BABY_RIGHT.png index b43cef10159e4dde1891e51adba5a530d7588218..9b452309c8f1d1489b987cabbaeddfa05e303fee 100644 GIT binary patch literal 532 zcmV+v0_**WP)000yS1^@s63Y0cZ0005oNklYaqe0m%Je2xJCm)JPo`bmvvtzWkR?~veD zYVQ}9NU*l6=A6F_v99aazQ~11M1e@D_2aR&^mADS*VSGp z7y!D3tc^FKBkpa}#HhtmzZ!4-ng$##x47$nZQ{AZUvP`I-RhQ;*9gPw4CPb28dY5Un zlG{rtk8OsV{2J>5k#M9RZEs!Q+<>DJTuKo=#g}xMvzz>AA__#SpQIyq889lr5)&>R zQ=QjJ_bvtEp`WS)MkM&^luVCjs2ca;qP)(V!8jU6<7Vy`i#2OS3w~sMk|oVjSA5H-LuO9!$Gm16Fq=n!*#^w!J@R49 z+=IESqTw9-QF7!0V0Bwj=dWqc8joV8Pv_zKtzBWUf?c(=i65iEJBD#mk7&xfKsa< zc{uclu)F{zA_9nb_>|?cMTD*-IJ>;nLQF%)VrR1eQ5oKwl#;1BbO~^kly(p&$2|my zXbBOly}{6F(2LRoOTn%24?7BQ)(Pf~Q+O4)LUV*y82lQIbF>p|dFwe#d%%c%64D6O zDuo5><~1C8dy}O-;0$$pWw~(}3NP@?2U{J9sj)rbU>%3=5*`A2kZJXXeA8tviI_of x^j~AOO^hD2h9|+wC`=2<_Q1*002ovPDHLkV1k)ksfz#r diff --git a/assets/Rat/BMP_BABY_UP.png b/assets/Rat/BMP_BABY_UP.png index f1011bd1f1c00878eb195bf83ef4c1b824b0390b..4199e3f95a008b0ccfb5b3b4980d817d7b27fcf3 100644 GIT binary patch literal 534 zcmV+x0_pvUP)0d`^q*a?*Y z0l)!(MrjsW^sxezG#q(C2%?d=yS{vSsf^0nCcRV5H`_7IUYJObAA zt?R5#tN=T)0_?;JuoLD2xd49+rUIPVeNr{e1gH_7L~Zf^#%Ko7gSWc> Y0boG=XvGgw7XSbN07*qoM6N<$g49RufB*mh literal 396 zcmV;70dxL|P)p;QMWTEPk;nSfMEb40wOvG zfQW#ZftiOO4gnAmlv1G93bj@!r5uLX4Iq_Iko-+4ZE& zYMIhZft+@F@?HsAk{A*v3@{=O(%Z??P3WdTuLKc8evqSB%R8RUDi9B}f%cfugRs;s z!;uPz8hDupysP>Jz-u@@rSGhQ1W17Y4Pe~^O94J5?=o@$R_%g&9nXT0$BOqxaCczz z-4D$Ida=455JQga#Jh#OZOe5!A~)rp_u=l>vDGC-+V5ciD|p){F8e|8A+* diff --git a/assets/Rat/BMP_EXPLOSION_DOWN_orig.png b/assets/Rat/BMP_EXPLOSION_DOWN_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..d30f732dcec90bb9149637504f7824a21a31f190 GIT binary patch literal 296 zcmV+@0oVSCP)KtcfKNs6qu|FY@>qaR)a?rDq$3t6p+COkQ&E!qJ)PQ3MIJWlF7Y_87& u<=Q;V{ac#1>k^>R5z_%Vo}X^@JNW{KB|UlhLkF-ur}M ziIVU9qb>{5cmLjZ=l_}H8LE3_?PF>#>D_iwV83ABtpDr0+fx(sgx5e1GkCiCxvXa+GH3n7EFr9?1oSEy^rzuYUVG?jNT!_}Z-Z uu&+2O_h!4>e}jE_7c*E_EO=P|L^|rUDSOMqE-RoX89ZJ6T-G@yGywn{dVc%> literal 0 HcmV?d00001 diff --git a/assets/Rat/BMP_EXPLOSION_UP_orig.png b/assets/Rat/BMP_EXPLOSION_UP_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..2940d227771a3ea5b0ceae9a8a6e2fdb87527d3d GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0L3?#3!&-4XSJOMr-uKz)R;Xjbuz~FJ-IvvP3 z?CIhdQZeW4L`6RqM*-LPiBk@q*R)_-Rx{gghUWwsUhieD%2Aio{4O)KubdFKF+0I` zOas60n?SKz_`^3*Oy4>rMXFKzqCvLjKsi}bsdzcJvr(Kkt zWi@NplK?IQ29?mXUioFW52wm8K3Ta+biKFbdGoJ~_rfKfm$wLbo;^@~@r;yn8tcid z;(WE6)emmoKVK)&b2R#%X)W7?pI@2c#1Hd7{`a-bE`@2)?d0~4g6{vOeaioHh4W^v W^S2jg9?k=Lhr!d;&t;ucLK6V}2XjII literal 0 HcmV?d00001 diff --git a/assets/Rat/BMP_FEMALE_DOWN.png b/assets/Rat/BMP_FEMALE_DOWN.png index 797f12de87ebeadef916d3d537c780dcc4d1b243..0045ad72a670e16117f85962774096d7b062960d 100644 GIT binary patch literal 853 zcmV-b1FHOqP)?OGsLUrj&MS5g2=f`N!2K)?i( zsr$xvy#pqFrTs{dAil>N-{~W8f(Zl&kRSmO&3g#C9yQY{txELefR1iNG~Cx*BHb`m z93p~L5;oXCDA9EOE76w%J;DVX^(T+OANZ*fF~L;TK89L-G5GXnrEn=|Dz})}q2UR# zQ`bgz3YX%)Q<(#y)YbU66xMi+PZk~$o`U$})Lau}xYaoy(oArPU!^s4W0AIN1mb(Hw}UdP3`YUxd%xeqKkvo;~UxAO_s zZD`w+zI)Xt06v>&8*GP0Hc^aFPp&x=eF*e+q*r}cP56R+hoQ6GYB>fT^F8ZJUJHi^ zx!cxoa&o2U%L-twVb{bS!)tsNkDxR3?KTra^Gb-20ufASiLxece>KE$|s)#n_69ER<-q57`=a_gU^&jhfg zVGi`Fui2kU)I`o`Xni8=eroj{=0Fa^yUCiYKlT41J~OWNz3aPj6H@5ilx_Rl^cF%G zPR(PN+i0!N4!Er^X#{c_rl568%3JG;UD0FZhou~+VFMvPuhR02{)_ZgzmsRe7g%^3&V&Q{6mO}OnF?cH+_c`rj^!lIgrxt^f|eh zNRB!^>T_;qaT=!ex$g0L(&ya|kX*H?!Q0|xZyAt20i3fCF}Hb^1)y;qC! zR2)u6!319Jjt?bp1gZ&84E%(Eo%cT>P`mqT0^R!h z8G$2ERfy(xS{}yoHU5tUQom~U_ne}XMZhk*uuZ?>)jrMhZG1o|kxeE_fOhq2pO`Vl zrf$gT@k3T95hWo)EtyhkvojmF@ex$+;yyMcCT*t_N^4}n}qZgGihERa%O0wO%O zlh+!%G<217cYGTk8=1MCysp_1@cEpp9Dz6>(E4`D1`CmGx^IvmToKrPu432R-0x2- z#i0$EG^{Z>SFwgRX(@muQDdc+W9F1{nk%pnxFC`DIhjDImSa7dLppbr&|PG1CzgA- zbFRL@l0{2#N*1`)F-agMP&3~*XGg%E#9h=kKea}+3+(vt#R`puvg9hI#9cL2Kf$RW z_0<)s1Hm-BjgO+*&MjKOo{+mMdpzZLflr@!!P=ovw~|6m#dGJxtg^9yk3?;IwyfEh z)04YivL(y4Oj!AT%+OS#d)ZL(&sk9=^jYHczwMSfAvTAM68r(}p}NtNcPWPe0000000yS1^@s63Y0cZ0008%NklaY2L=N)X$y!tvNO&oma^S#lTdJo*un}RqRBBt zT%+qn92iYm4}PDk%i#CcT*vrT{anrj{A7cPXu#oIT_&6ur>Xz|fO~lxwBLfGhF{h1 z_$q=e6hnfvuEEmGSifVzB(HIwsT_0K!mghRbpn10L5o}4cEQ^@r<$1xK0n21zP>e{ zZ_rPUc}x8yf)nuF23zR4jgDIpMKhFfs)o@zG|XogWdIi{*%j;K)G(`c8bxY96l!i{Nn3&+p?qORlpJF}PQiv(1r`=H^7B zZ`QBh+KJrtLZ*I_UtdF$4=(5mF~e@j~h+7_1?-vbW^4>o@H)YXZhP3*p_b gx_>%;RX-m0KT$GZ+kERB$p8QV07*qoM6N<$g7U<8;Q#;t literal 788 zcmV+v1MB>WP)!ZJvhg(j?sB~posyDF%Gf8jL!8KX#lvcHvqtf_utp_aOUZ0 zh|>m;3EA%2?AxWh;My55e%2Cuk0mvg1!M-8$SAa9;p4OT!1*Y%bp zZo^hpOJo_q7=vwdHw&fI@nAWStDgHC+c3}Rj=_vgT_NcL#u)haNokN2mU9kE>BnE>tKHvdJFK7DFZFX)4`K#f6gbArKKXv=bmdGC{VMY->TO zU^WQhB2pP=0$PZ?f~u|s4h2AmcY!m7M$5)UPKKBZI~MS^*sLq;G(~qe;_q?@d@~1O z@U0E=5P5h9{sF_Z%z5o8ufv1h6U5tV0x zMC2`oG<4G6Yg%ExF|X-yD)5Dn9Rqwf{>3kFq9>8N=lAFaGfvk6oIBW%FGZx>OZtNL z+&x~51bc#|@V(P>`-<_3(000yS1^@s63Y0cZ0009yNklsbE;xl*G#rI}vSMRUQ{eRW(lEDp#C1{RuFmWS3pVJor;0L$Gb@V$4>3`o7 zfBM~#wE$~7nCxwdZj5o)aA*E>x2J1Ar!R3_vKwPN1@90bwe-u*fVCZLVWEtQT7=xO zTO1_J-PL6uYws0`QrosuZ4k~BAf@$lL1S8x<3}nvpI{E=?&`#|*1}pVZb@WwzyJUk zFgOmwAZzxqqkhp_uz#aOa4TKM)GoY^BTxpUzum{&$4hKK!4saffKr>=NeD;k zm%}d=F(+h6zoZ(_H&TpXz`(n=N$MPLpWN$Sbnwja~Uu;1(zfk za)_U0Br$2sKXLhdkrBbEIJfV|zY7@OotY7k68Gqsqz<(R}F#o4?M=yO~(0Izq@Z;|!z{A4G@Z!i5mz@i~kM{S8)l3?!Q z(^{jM+C|eewtoSZd^o zc=WMKWjzIj8FyQ29sLkz;=9%dP+4VEV;2Ymj{OI~x`X#>&bA*F)v6eZwb9t23c+Kf3{YH$*_telY`*o~Z1at6I zTp#pe=N4+{$7?^Bxc|4Ne$kKOLU^V4{=>fd@iq~EmVOre1A!os*c=HM1^@s607*qo IM6N<$g4HOaumAu6 literal 771 zcmV+e1N{7nP)*RH% z)M0Z0fUhHdBqaTqZqa)OJ^J%d4E~%}LUk3uP1q4Wo6GBhdA&WS`^OkA4i`hZ)~#Be3G9_&&Um+kLd;?`uLtA#ZxFk69F8d z+)4KU5xpHT>j*`N)&V&wq$f&Tq_k4xW%Qc>oV10-g2jKn;)(?euDBLYuoOL?jnz^u zE+9?60`O?QtS?8_ectnf4l!~y6=MrTU0_~c()Yk`ON&Ail!!WkjuL^^3cak0zKqOXq&*~3m6q_MwUW0kxL-1*^hP;E6 z{!%G1)(hl}4Iz=o+6-~47|i%V9xevBU?=(f7L-yTO|Zs_zFoVj(pXL?X?3hHa$}Oc zfC~yU=4L*fQ}LA`+WBQ5Wz}CwDQK-hpehR}MUE)3mG7}Nb^=qVHU=oAKp+fe6zlk$ z+CFx@iad)6TYOIZ#yvZ%wPU$Bl5jbQHA9DPiGf*yWac%dzcpqsqj%e|8Tyk=Q9dy+ zvrQ3sPWN41?ACA^#4C*i+QB#t+n{o=C<=m$?7{002ovPDHLkV1mP& BUCRIf diff --git a/assets/Rat/BMP_FEMALE_UP.png b/assets/Rat/BMP_FEMALE_UP.png index 9ff5f303adffdf97f3519a045df7546b2e1ef25e..fbf557cd755ccf7e9ab7cb302ed78da69c623785 100644 GIT binary patch literal 814 zcmV+}1JV46P)Lb3>>;WLb+Rc;U)sfLjLZ^fg(;o0Bu=x>`jkJcv!u$C|f?>!#d~bcZT3k|ojylBAG*#t$!T!6K+8&D3&y1Sgs>^Zh5-M`UK9CT-pciq98xcALEjue zEkfs9@uXkk;;^dkRPrsgwzkC1OAs~{=UmaZ-XrzRIZ%s`|JHI+Af#!WC4KXHU~G-7 z6tT5C;tX>aB98I$9G69Xiv?9JhdF1>BB;b=O<(l0rk2B;Geo#rT*6~f-y(op2_;Yf z!tblK9DC`j)ft`2rSi{KQChI1?~tjS^=TTRL}zgTHJtX|W5A%cFOWm~r8wu%puvD) z{q8J|Z+vTM+XYAI`&bjE+BaY@kw;75oSQXQZEw>AebWW-r-H{ZU;q-mfAJPyA}Ik6 z8h%$&uu~7YMqdeMss8K+%Myavy@W6S1^g}}X$J38FNmH&`88Gp7vn%~#Cy#(_;EjQ s*vBa-=u08oLqoND^-RQC-m;|cA1W?J-Guc5cmMzZ07*qoM6N<$g1%;ni2wiq literal 775 zcmV+i1Ni)jP)HShO2{E3A)t^_8Z<&F1ptsz zwswJ^9_41gERkO$z!h%O+DzioqI{cH0KgNE1BpS6)zeXB0jfNN7E3hyz*!`U3FJl} zYJUm=rBt<9EzuIWBmv&RpvP>7gB}msc)(Lx}g3E>m=UKoCUG)vm>EQ|VlHf!RPI%Qf_n#`i z>f7O62qkSODHn#e9Z0G}J_{d_E$_f144}FpA zu*B(7P8yOwURyI`=6hrLqFAO8H{fWuXK%tX{*j9n$ruU$>wW zo{?Zm(G-R?RtZ@$SQR5vOtx61WEu}O;U`FN<#hB&ZO=LT7H148=Mem;)>bMlc_BsA zD(9P2&jK_o0USazhm`Wz?%1;c1uxZVry(|KisTWEl+sxO0E|v&OP*>=j%~ANM2D@k z5-x**ZoQpzg}2~c1Y%_PsaNYagRgH+tB>m`-g91ec0loeTVTP`O`zKXcig{Apw|jr z1bRo`P2dc4eYRV$e9s5mac*JGZzjOM87ZYOW5#{IdXdZnRv7@yYQOKw&qCG$R-u7$ z{}(I}`_*IqECE*?;aw9fSTJLTl(Jhnaut!qSxavS{{S(Op7%)_|EK@}002ovPDHLk FV1n(zSrq^P diff --git a/assets/Rat/BMP_GAS_DOWN_orig.png b/assets/Rat/BMP_GAS_DOWN_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..90484eecb940d40459ced75742c2c01a602c4e27 GIT binary patch literal 314 zcmV-A0mc4_P)>Qb%ls_jXYew5@PZ*~FHi+lnM(xNXvQ{nfCmpAJYa-zqXGa5fb4e9j}EU{ z2GbWD{Ha14NWjVTquPj;q?QFB6SIeeYAXV=ausBsf~Z2lZea%r(-#C5)5(_nk#5U6 z`vsqG5rfduSd>_@%$2J{6S9khqdoEJC^zn0iLxeu>@h83u&N&jI0f-)M%E8V!@r8b zVhPM&S{MgE`oiK9@-FvFSn`+z{HBssp07barEqSW#sE~`!wp<~otV1WWExS1sJCX2 zbU5wX58!7>9!@L^U83%n(EoJRVV2Nnes#NF!ul9|H~0aA=?neb&rez2{00027xV6oo%SU@$|n(3L%p(51~AfK;POEP0gh zCh36G@}sbH=|Wzj>?~Qlz+$Nc;SQ}jpr~B#V(ZA?J;y(?;8P%fy2NOO+`Fz!fiPW?^9pTRe& WZ$vODJD7U_0000b&&g6t)0002`NklqRTDh1w zcu2X)7T7<#sUx&-K&U*E%lO8Wc?zaI&%TQ>Id>{e!o>+Jp?$cABShh z+lBWCy}70j8^^s~a;QM|MTgPE(!%jLW1~0002sNklb>!6hog3|HVtY=n_4JZcqWWTqILw-=|)* zcxm9;Mxovy_tBCmivp-ar=|g-?B(=9e3BsHZYV&T6tsbO0IJK6KST}SlIWrFUbQLQ zmRupk8B$;#cKRiVDe_2%72*oIO`#wK#NxIii0f(I%Tk(oJ@xZM8aiK+QYlN!0XCMW zwy^#MYSOZ=rZgyb+9B58mMGPVoxiL$K-c&JNu3vYL>#Xh8@uPCa%YI2BarrQd0BG7 z>iH;ULi$N8ANHX@a>XO(thS?`$Dg}kk9>E^Kk*yiJ_kaU>42E=4>3b8r5p=HJ8fmnE*KolUR-rYrfG0_n^CUTyzLQ_!K!Pd$fdnIdRUC>R zKY##5f~u5K4`5&zhUIUiRM4}>(**zkzCPZ)eNw^EmpaDrbb%(O6Z|;C_k4Z0|NI)g z&!>W`FJ&BRSIy~!9Ye$^rC^>~==#-pN~xC!kwT2V*l~`h3(Qjs^VGuI-+Pz?0RXyw zgn4RNX{eNfuaEa7Dj;K8#pvSzornB5Mz8}B*pchR`f$$@eWvk1c%m@EO_LMsz}xkl zB%hr;-pOwO~psAcI3Uf`6p1L~NDIAO6PGt$WQWx=SDU8S!DY;VEr#E;X z_}q@fiJ%d;rt-SgkXZ0j^da=jz|_Sylg`R^5^<41pwX0rZe=LAoRaz^bZ#6dX*4dt z6g1UndeF_b3ppkwMW@k$5=QGss}S6-XPBpU`EBDZN#Ei?NrQE++x5(Pd6*0@RbOo* z3_;hAR)b>2fx$^7>#OyDN*GLGwnrK2XZwn0*-?+jeRxP2aK)jG5Uj zp}mZRg0TT6cQ*8yF#owKrHGQMPe z$;E_}GpMbvxzqz;(71!EExEBxQ;4OUz5|| z6wn%6$@+rJS)qjVHzM?{m-Ff~m%hf-C~a`a_QA(hsy<@`N*Jv7bvJwW7bxyqg)PyKdTBp9ftVY zbL&fiF#^$;e-<&mc8Zq>(42HUU7YPUNa}OFKtf(H8wW}nY`esKG z#xa<3y7*!)!b{L+EN6ub%>5h#KQ59$N&2iCXpq4FCW&{8|1V%eA*Y>$fq8 tVHiXV);X!@RIWYsc^$|l+yi^+`wtnKN0tcj1$F=c002ovPDHLkV1ipRqG134 literal 780 zcmV+n1M~ceP)u$p%{#M$=fz=Ui0BwsgMU9A20kR-Dfjsal3J>YuYVYN8|0PNz9$88?f zuVSFc5xq^Uru{GZu0?1OsW|mA?NhnyKbMPR~-YZ&2i!!i2+yzfanK+%Sqnt z)3ac;IpTWWB|B>lpoKJvfwuu5`rihicK4{Q1K$j!<-8#$Kq=)RA;8o#_#h@}=sVBd@%6kL=}^O>$pAq5<|T(s$Qjw^DXSJDPTey= zkj$X$KGm^LckcU_m11o}LmJjlp6l2y?n7D{06kc~N=i92$DGqzD%Tc~yidslO0^XB zXbt(CR6^efZ@qIIq^_As4@-=e%1g4quZ~dwA%&Xt(wYeXz9`qIv_58|>CH%r6?&#+ ziE+;LycGM0pAmq(ZBx^bk6V1@5V+i;rFO-!oonxT-Oz;hi56cSiZ*1B9HfBbYeKAy z7?42JwrBrr?uXlxZ!g-Cr81*CpFZO~;fMipE`i8pf}F=TWD&UoXo@Ay=~+@w_$o;T z(DJUpWw@B6e1;a{2cdW~0^2eF_B8;tJEC|w4b1{dgLU@tf!%yMJr52j`hI$GHpZwx zE~mY!^XKyu5N^n75K4wZ&o$>Eogjc$$=d-$hg845zBvH=2vAw7qcUKO85ttO#u&B4 zhIF(MO>jmeNl6+O4XJz}IYo$rh>hu@K}ZI2`vT`&yT5F5CZB$-Zvp_BePfPf)qxm@ z+}$H}R_qHM-M>#i0RR@u0bs5aRYHl0m;Y_&oP)&@7RzGi0Pq)cnWo^$hz2A80000< KMNUMnLSTZ!kz(}# diff --git a/assets/Rat/BMP_MALE_LEFT.png b/assets/Rat/BMP_MALE_LEFT.png index fa65254074bf7ef0a4043a2a54789c6ca87b4a42..34adf7234fb9a2749782a4037e3950ce5ce05a02 100644 GIT binary patch literal 837 zcmV-L1G@Z)P)000yS1^@s63Y0cZ0009FNklKN+w3v6Lwkfh!4oACc|~^EiQ}=y!30q9 zOGprz_{%@e*q$Uq#0C<`7}Gn3h$&8e69cIz51rq~df)jyHmj|v`j^EFz-JDyF{Z~m@vW7@*(pD1wv zJ`13at!diion@IAOs(kunm|+kzUz4f|LB^1H-lC&{&D3#z@}-gK~4c!l!vIm_}D(J zxnli`Q7;4f0xX&6gCoFD8;wHda}#|5 z_hp=-JUD|v1Fvmc0f5{NChi}A{|4pi48XAfZ&}Ys10*KHthbf=uH_lySTEsNhucb; zihnUngz{`sa{uA%;EwU7Ys z9bm1bHH$W&L#D3oZne#NzQH&9H(ZNH0csZ06yyv1gE#m)s2`uCfb#5MXSvYeBTd;q z&KH`Ba{|1Fq-lh9bVYf9e0A=9=etZqgdG0#&T*{w*Uu1^&=iM=PV-#HX8&Y9svJnl z9|6eEeK{?A-|cl6B04#!%%Ne_OmjoB(JT8$gCwQN)G3^?fcJDTO&i}wit`y*yyZRP*S06E@hY+JL z+YKpk%>KzN#N*0_x!rhdKwF_TgO8D~J%;G(eRtE~nEjLeL&WP6Azz)ZjJ-Nwo2uOx zU_VSB0(dzsy(Vaah={N;rc>t7JkJc3F)pWNux}09EBME!V@T|u#6ZVCzN>3N-}x*U z5n=PQcFBH%tT8OKvrG|S&d5I+`OKs1OYyLO_RlZwh5CKKnAeGJ1sp0(<{?ow;kq~5 z?B8!4_2avpj+4BQ`V0Y<6e`$`$u#@dKWEec44urSN5AU+?3${7blv{}#^rYGp$VzS P00000NkvXXu0mjfmywoU literal 800 zcmV+*1K<3KP)UAxW_n{;661_L;%*>88K_kY(7L9 z0M4g90HE1Sf495iY@eEfXx47vl7~Y$Mm~hDKcMRmu+~OhCl{*)Ai+oceA+)Q4$`>$ zzq?lrAtbp#&V$Fn1n1AEeUvyy*B_#L<{)YTME-WW%`X08DR8x(a}T*gNhGHoLsg^Mgrbv49S^$w>LZVdaOGUG}6mf;8Ea1!Q@MxbV%q&1EYJPie zR7x$%05O76Y;gA}jfVgv&EqZvrPS>DUmzi*#)=qPM934?_;pPaPmKdoz*GQkSNsJ4 z{Otb}eYw&IX`j!zRp$A$$Mx&&@tX^yS}zbn$Qq=6VF`HsK*H$y1Deg{DSNb9Yc%!; z0H8zt^hLy6Eg>Vw&1(;HAA@&Ha^V(tlZg4!nnI^0Qi>sKEyls1>n9;k<@8iYJ?el- z2*yin9L!Vgza$NE_0fi;ar$%BiO3NaPD-l4Qu>{OU* zo!p4VQV5hHDS?9gq@3@=RArA~^Yg^<=-Y=%zq9A+)(+`STO;_kaEsQ+J5C1;$n3` eDr)+34*mfK6s&-n>egZa0000000yS1^@s63Y0cZ0009^Nkl1mU-W2Y7WGj7D#OUrWQ@^OO6u^0TsV# zn%-n-P8@%_lsyO2IAB@DCLaAxs%?&hKv>Y=GCe$J0zexZrrRJwMlU1%L=x~~0PblI>y zALG$u+u?mS4M3LlW3(>3=Uh_15PrUJ*&&(F>$@iN#sM7W9)~>9IqtC8HV;k&>c9%RnXX4;vHthp)j`C({ z{rX|c<#E44UG4jO@HyYrkM;pg`egvn&_PnlrahuqsH;LW*v3VIjib*l6ANhC=J?6R z(#_G9^rKl1|6hE9*!YF$$N5lk7qqo2ABAy z(l4hM+v=z(abpq;4L+q5)KxKPnz}Ynp)=NGz-MQ)E%;#N`eE?ZRROQBaq!`B3jO#T z6gywD>#7h7ZWn?kU>_@1)_Z;J0ic~r>gd}zBVU*Izgy8SKRk_D&xBa|xhxv5J|NZ# za~kXmn_w3e2e=t^ItifKWpDt_f6OcZ0000P>ICu;$zV@Td6z@PWd-|0RG&^I-u~VN(_rllq9@t>JWmA;;FQ-~7qXdvi=s z5|jwqii861z^gVW!3vqa9W+D*MocsDuVV$lw|5|cWK#g1gYf53_&FO5bE-giw49>- zuBm@igRV?q%QvRMCBhS=^yf>7u3jK!tPM$cyqY0y6OY^ zZ!guVG?okGvpU`kh1|ISfXA&GC(Y&4shPuutMiM2&#KEog9eXVHAZ%0%xc@yF{HRO zzsA;Bwq0SeoM|mFAf|Y7xl2fRR}A=43WtbHmaQ3DYB9X=v4dZ1FmyFTo9_u~t?{^3 zq9&J^e$2T+`S}S5%}}gDR@oJ{&DJLf?=P0%Tvb3qyvn{Gz?qjKw{Jg?zeDd4iS}H% zPKGu)8YA$nGhb5#mYTsx{qN2OZTL=&2y^<79N6S^*hWfGlN;Z*;ij#0lbL`30000< KMNUMnLSTYkY;u?Y diff --git a/assets/Rat/BMP_MALE_UP.png b/assets/Rat/BMP_MALE_UP.png index 5019516e7b32d03d1f463bbc6ea533258019db94..44c7e4958b27a1545addef66ca99b6f447a4cc4b 100644 GIT binary patch literal 822 zcmV-61Ihe}P)BboIfC#L$003Z&i8YM^x$f{6TKFc)xrM$qhY)|4Vt+Wn+u;-T zhf^`<*7~9j%q0xLS_}KbX~A7;_?G&D4wN$3TI=NEZE~SOU*n2_*w{xn4n06(%;6oo zIFSz#YkB=Al={U8lr*>owCP(oP#R6dfLMKP@F|&Fzi^@3f9z#8uhi{c@GK=UD|GcI8E0yL#7xS>Wkj5SzpTwN(o(UVsRv;53Tw- zTEOT08bV)LEY^%eAADies&AG=Bn{3PF|PKtABdE`&evcqA;y`@`3SG?A5%TQj+K9{ zY5U1&t@;`OcmM#jFSjB>$QU6$T+YYo_v`z|j8Ch+juue(L~tWq2Ot`K~uVAk42>;i{jv_8b8QQu-iRmxz>nX?HRDy!}r+t}*NYR<>KnbI9 zTHLQY@sT3^P>eBfzwXNZokj6~=f#buO<{@T@oX4lro$}XD6HZ@+8Lhd0$Gb{2X_`f zPoZ!+kUIcYEPE(N`*H&i%#afLa{37A_m04|4xsn_`t!AYR3mBBd_ep!AQ)ehM<5l6 zS#u43e!nH}sH{P$z7Y7KJ}*NgtwglNElv9V0sq1{Gv4bP&;S4c07*qoM6N<$f*%%z ADF6Tf literal 773 zcmV+g1N!`lP)Vt%pPWOFi0T4o}E?IR80V( zrjZ25jZ(^>P_)(n0Hsvv6liOVkNCuh&k4x40q_m(kC$Q)P3{(Gt+78|$iDmSoV^`c z48)A1kcna+SPFy~Kx*~W_(cF{t+Q#hKqY!nC!{7wv2eeg$#%{;Sq8M$_yq)ioB?Z` z(%}}v0?=B+7=t%6C+E!=7-L8f_uDzD!^wv2aVE%>9G%6(FjsyqfTn5Kb}kZPI-HO` zuz7#S?~e~skuz@FW5!5uejc#ll9Tm(aihe}guVFn;K-PQoKASNG39ka0n#OZM2 z9$2eHK@QlT6NXADHpL>-DJ2J%^?@J^DG()&xj$Zlxu~|J6V^n9uS+d1V8AL3{Rz9n zwb(cZ!Ur;Q!l6G+|GUPA{xs{OL^8$&HHD$Qa<$uMQjs$t0mn%LzyLtIeJ(Vz(hkMDFC25x1=t1X7uh+7h=-vSq39K^X21*W}7_eI+)YypXKn zjGU};7{#2_?`z$T)PxeJi#aK!Kg$DP=;sWl#>PT>d~_iI>E6eTNOi|Y2c;A?_FUGw z18@ljF71%7O!)PibiySPj8uxkFozY2N%B^V#AULC70EWv?u2WA@QwSGH1>J!qc3qr z%D6A=)2t*f#DH4keyJv4U>=s3g=R`(#yU2VrYTOFYpb%>!R=`B%Aa$y>9CfuTR4 z-99JdyTcXZqpPMLQU=CHH@l*he4^zO;=f>1WVe-{G%zVH1 znJZeaw2U{Zw9=WrnmgOK{clj>^&+k3pGqU9Jw3IvBF4KrId5(?Tl;e7lS$z#CW>9TrO*GH?-jFIP~Ft7 z8*OLaMqO49dTusp^6k*%;>pPz3w!zax1V49Pxh7VM#rzbf*dCbe>e1}3fQ&2OC7#SFu=o%X78W@Hc8Ce-wS{a#Z8yHv_82I`( zpF+`)o1c=IR*9m)(8|!v%FqC!VUc8TBv69}+=i0O+|=Td#M}ZDJw{e023E$V5IriB SUQGw;VeoYIb6Mw<&;$VH;|RF` literal 0 HcmV?d00001 diff --git a/assets/Rat/BMP_START_2_DOWN_orig.png b/assets/Rat/BMP_START_2_DOWN_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..7f813916b3cce3d4133b326e65662f2e98812e22 GIT binary patch literal 698 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NV3?%C=ER6$F3dtTpz6=aiY77hwEes65fIx8kU)JW4 zk>OT%>FrKNVWdH<}5ogkibUO8*cYDS6Q6L#5}eq!0PZu_Z!j@zAs9<$6Ye!73k zs@QX-`}Yc8z0p;w7ROxqitTaOuHEM+u&%wGsJCNv+=V@xHVX%)9Nu9a-&dWoD(1r8 z!#@J1ZndynKf`n(M`p!WPUe1|-laZM`%c=uYW$MSanj(*9o7nC}Q!>*kQ8XA@8Jbxc8bCBGk_?UnYS4h&P?DLO kT3nKtTY#d+$jZdP%Gea5M`hBh=|DXUp00i_>zopr0G(SE4gdfE literal 0 HcmV?d00001 diff --git a/assets/Rat/BMP_START_3_DOWN_orig.png b/assets/Rat/BMP_START_3_DOWN_orig.png new file mode 100644 index 0000000000000000000000000000000000000000..9c3b55208c5a700f49bb550c9a112e5945f2eff7 GIT binary patch literal 593 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NV3?%C=ER6$F3dtTpz6=aiY77hwEes65fIEfH1><2F;)6Sb+@2 zByV>YW)n04xrvwNTAgd1aMx=RPmAh24bCO=?=$qBja=GzoUukGo_X#4 zzU=p#6RQ8TG@P=1e&*lKr6rx)=WLGuyVCz+#Kah9z9n8$KA)Gm(XTl%>(z^2Qy#fQ zIf$O_c_(T1x6w@bio*M-Qs-Kmx`P{*{1;%hyyB}}*cq}>)Jruz)5J{V=$T0NMJsL2 z`s;dX)fyc-aJF;Vk*(*$G;;W~l1_Ykx7Vuksmf+yCr*v{#qrOMoxErNDD|D-j@h$4 zGXA^XUc5s8BfIUkB(}8MrOv=GQ!R0gC`m~yNwrEYN(E93Mg~SEx`sx&28JOY)*tyVj{`aEC7!;n>@Rp2#Wa-H$n7))N{e~AIEHAPuf6oJ@UQ|8YeIU9)pgc+ zADAwsGKS_Pyxs5ho^$fDboD=m|C$(WQzO?Md;8kv-UF>P2AA2~3T!#2b6YbL11z+#Xoow|& z=)KJa0o(5k+}Cz3w=^`av{@4{_4u|kUk(Th9<1;Y^kETR?KJKD42h02OK<(yBAd`GmS{&I&3+SbhG_~s)pvHH)#KhE>w zVy|8NTho2NQfj}?)DD@Q%eL$V2AXP#YeY#(Vo9o1a#1RfVlXl=GSM|O(lsy)F*33; zva~WX*ETS)GBEJhAvZrIGp!OugQ1n7nU$ddM8hJ<;7Fhb4Y&;@nYpROC5gEO fD0+;nObo1yO(A+zCcT;t)WhKE>gTe~DWM4fi8I^F literal 0 HcmV?d00001 diff --git a/assets/Rat_Animated/MALE_DOWN_anim.png b/assets/Rat_Animated/MALE_DOWN_anim.png new file mode 100644 index 0000000000000000000000000000000000000000..f09884f5ba94c8ec8473b29710a18e0ab640ebda GIT binary patch literal 1574 zcmV+>2HE+EP)I`T!6&K@CGi5BlrZa4RL`3&>%GW z{|EW2B3Kxy`|EB=Esdn@2q70l0;TlfZ$e0LeaqDb0C3!|asHY|sW%m3^G^ZMrhV*+ zm#Yo>#cBL5q&|k@evP+}E&9a?{o)iPP)hN~-}6zo<9-bQn8m0Z0G6xG z=qLc_7pJks`l4T)aNOVjX7w#s8&En_(ZW*lkD=SO(G0h5wm5&yao7RN6>!)MVLiZI zz-c6Z*bO*;%|}D{f)FA#ARz?r-|A>#Df!0+(~S@ULI@7KYfuFD05SmpKUhm%s-i02M5E7mPynSpZ*`gsQc>;7C;e{`Y5{i`ycFEjru%05aix^zn%02!4En zA?f1x3&hlc*F{8X{-XR8wy+9-5{}?sv$}v!%6yU{l`bU$F^3Jb0Z_^b{Me?en}^IP ztYto95azOhG5|_A!DMjVluIU?J@2!XtW*%@w!tI`3{gOa`}Qck6KqLs&+^Nq>{N}coDC@#UBMZdAB$V%-@`EPwaJ9pRL7?EuxC^gF4gm;_V3lqUm5@< z9l$>m<9Q#ax5R%E05v$k1*Rm4e<@d7D<1!BAhaLxLU`*o6c56{Sdc0Ff5 zIPZGV39wN>b$bSTR`nV*bm>)Wk*)JrP6Kl(pn|JW`R`3KblbFA~1aa`73T7c#BzpTV&k^jYZOThnz3QeIAGgpjWJUgt2%l-1WV|Jn56yb8$V@p>F~ z{^PTZkM0Cbi~J`!KuHHMIifrt9rz<;CY?kbTH^l@0HqwD+k)+*gGx60PIbp%i~M^R z1#Dqfp#0Hp9xd~){*EAq(6RX0k&3@{0Hkz)X&U4zo9+IU!S@*TtMVU@hS_w3F`#n* z-!;lk-iGLBI-=Do|A(`IB^|&+H%9u7)wA#4v7YNMZ*Gyl^l)e?2Z-`7m+86HuIrR~ z9Cm}YjOzhS8FKPhan${$Dgc#%jCoEpOt|*K>Pr}zdwHHL`h}4e6Mo8u8fTi zrTD7?O*gi?mVqt+YH&bFw8H;srh)$>4XVE+>hm^!1HjLgEy<@$t1$KepItY8Y~fQz zL?&i;PPxLSE8}|vtQ3D;o}uEeE8}!U49i0Qloa^Ikcg<=z;w@nrmsIRLB3b?2(hzbkR6%N8-6 zj|TW#O#@3hfY%|`R&F2JwsVAyf9-w+ z0QC3?$aLGstMPXZfY=K7f>Mez{u$-xmi;RHy#gSn0wG}8aVgoaz~4InVkz*y)Hi6SM^PNkH3hY_K*wq93CjnL2RRK>fYz2>cWP?|GfCG zQcVC$RX_@8t$T8ra@b@B05~0Ad!Ijk{l>O4XMGg@^YNck4@o9~B`aVkOxY3GcbDv7 zk)LaCj=CuP=jA`A9#%se;1obV`zS!dZhwH?{s3BQXXrRLaB`oHueXDO63!XF)ZQFW z_~((5e{3s<4%W$AykfUMJa_^sxG6MVlN8W4HE69T@dh!9H)S_*I=*@tK1F8?^{hQ2 zqVS)Ve@>q%;57j}vjSW|+27y$E2XNcZvFCsIqUoWkExd_CV|5LBhMirJ|yBl2lvh; z05t%5&`$XvRsj?k4vvjq%sF#HaKRklJ{})P*q8zsN{8sM@XyN_y0jU>zxll>b>OuJ zFtq_tj5!GC_x!$kd=oaWWDb&#U%%ZB6P$tIeS8$)XUNp(SKBkJw&&h?9~Ay&jKO~@ z2f)EP0nEh!aw;5tMH<3dAhb(|p*x+jbF>npYu^{ENzce+N(pOa# zya8q-I%E<+BW|1fAh>%3yjBB1w_{AxXIj^=+MeO^wqbXZ3;&P&a}iBQl#_~oE-N$? zy$N9M29QGm2x;KMRR@)@2A&eMzo%pOm#Z4{O&b;dW&Wo~L2@u1z);*KfTb8fY6XBp zcEpgdb_@@9dD{Ruj2-1{n@8_o_+K{vu~@^x72vxLk_Xm%GeA_%0k`(@z$v+VJV~c~FmbR4ywaB)pf_ z{DuEY6*Pp|S z7XFvRzX{r>)wa_e)_!2bHDwl58CO8}*mnCd_Sphs+4M5=G6 z*QIh%>AVX{shfOA09Q?h_fXl|rWR}ALv-L;+l6>PEbvK*!oSSF^f1s^{QE2ysEpVz zl+#u<*xLh`s{y21FVR6@yNA<*R11%w)pjZRO8+<44zh{Dzs$c2Ir-<#Ne+Pa|MIrE zjUOq(d#D7Y6=M{?t4gc}10zHvHtgd-^WCXKXsiRr_NfkhWN_VsJK8w2=ib#X{D&bo|FNJv za?ejBO9ReT0SFWv4G262IlXT4ekM2_P`EszD-AZMlpf;Q`42%3{)adKy1!#i0?xMr zYpvmzU;wtAaN8@BT)=;{QH67IAZ+Vl^BPyhmm7tDzEaZlO0d-Y zQ~6_M|M_S0uzYex07@zN!kqW54d-Su@bGf3K8*>b6jW8!I{*OIFE7q;*Cg1-%W;N3 z)x#)-|NiDElRFl6_3V#0SblYAh6Ytl8KZ62tfGZ#|XIe9)v(ZZ$9rkGcdf8G#FI+wgN;E|=Z`i;Oc^xC#KXr&IU8OL!^$ z)50_WobU=e}j2>3wv4SQ{6vC+d9 zB_!sNOl*|Se<*zAPszWoouq?gOMoHdY5-*XbzOIdI_uDyU+vGv_;oX*+K)>jtYRTA z;cMpi&U58I6hpkF;9rV}q&p{)4x&4NDHITD02Br21{8M$6cIoekW-?ns@|cyuGEH5 zBLA`AbH^hV)FqNF|554yh|nn&pbi4F0&Ytv+f6%b><#yi>GP&pV82aUpyDz^x?YD) z2fp|W{D;6Nnu*zG2>)6KFmEB{SuxrgxJ-wvj7X9+p;-{k-( zn@I^SB0C1*ri~8#H}?QZPM=$2A(-JAGxP`lga2VrbSM>m*&;XowM&3Dv$+2Fn}2ir znTs+cPsbH7h8LXS8HiXb&g%%Kf@$llgdy1<{9nOmd~T$st-52wm;X6fA;)2dt`G*6 z3YvPYNQi9!wrH0D3jq2}AVYNmG~4ZU&NcAnhT4@Gs-m@LPV)$2JM9E&+A? zjlsXP8OVnJ3c!T~B=TK%(S^UWQD2S! z!9Ry2m!w0T{3baOnSY)B`FA@0yCr}R`KAjt2_bzaC7f)aGl1U!zFH_C6+%Nv^-kF!pJ+!PQCrka3|b)S#yUoMw!798U7 z!T%N4S=`-unI?d-`R5qoG1^ms`BQZ;q5_7JV7WXN3YL50RlU*r(%l=vTe|dfPmW4KzNxY@zU)>C3D?`+Wf>J_6@>aeI=og{%K??Zq=g*r#FqQH1 zr2yTAG0D!$Ykja-#qd(Y_YJ}l$aSf%m*_n$@d zJ|R>|=E(mjuLdLJsDLqHvx{u(f~Axwfq$tIGG_nkxsVzENnQ*>xGg(1XEZTTb@dsH z0)h9mOF}99lhYZ?_;TVusRPgG4#31El1>0;4Adc%$J+H<9U!Fvgb?_q`Te7XLwhCV`L)p#H%#BnlzWbsZkNp>IBR9lEa5a%fKn>odMct>0wihuyPLzwH?l z?o0%z(f+Hd{`beOLkFO$s!^e20NXPmPz^fQGct10KR2`vAR~nVa>Cm6M_&g1!EGU1 z2QY<9UHIiZb89foHC&TGpWk5{0;;OgPM%x_Fg@dgyU(BT^W{bRoNJ;J%h);S*BQ>G z-)3wbw9CNb<$|9tFV>1ouo2)ag=n_yv*xyO&^3&UM@jle4v^9SzS*`Z{A?Uhkp6)K zq%?r*EgJ$dakl$?ImARx`ujTg&rfG~R zPI!jD)SE^^kV=2Q3~ZVPLX5|aPy();xyb-NOCMhjHeRLbALRj38Gy!M-7}$3%j1OR z()9NZkc$DRzPHys?w^jqb*tsc(D5i$|0n{aGJsmAT=(1Se)OB}S=T)>Cn5Af%i{Gr)T>%=G^zkL}~i9 zJAzUgAO>ucB+dk?B>l6z46;p8nQv*mhjMSpF(xC8-6nK5qpTrRer ztY+g%)n5VVASFV45*@C4ZA+``c{8|HZ!hf7Ypa9%?Df3)^#*X52r5l~P$EcPCaKq4 zW2;PF&czF{0q{F-9wXUd;s5~c$$ZWA`A#F1`0xV$=dA6Hd@6W*@>EjY1QDCwIEY$;YXlNaZjsQ#beoDaP_Gy=#oRa1O zZ?Ai=D3J9ekVJ3}Ym|=AwhD59*oM)0D~BIh<`eWd|$M5?gi6+coyrW=6017E2 zp0aVV!XJ%U*Yl>|w3*9zj|KEk0nPqt1t5?A9B!-#a6NAZTcl!+%h&S;?dhHDr;Lm) vV@~}sARlhA9XQc}wI5(DuRcSuX8r#Ia}?Szdn(@v00000NkvXXu0mjf%-#V& literal 0 HcmV?d00001 diff --git a/assets/Rat_LPC_Style/BMP_1_CAVE_DOWN.png b/assets/Rat_LPC_Style/BMP_1_CAVE_DOWN.png new file mode 100644 index 0000000000000000000000000000000000000000..9aa512290f5b9b6dc58616202097a91f6e6ccb74 GIT binary patch literal 954 zcmV;r14aCaP)8n;496KmQe?rb9x3 zqIoBt?1rs-KOlf1-N&Ciew=c3`~CA%*X{uTpeS=d@L32P&*#&*v1|5CKm2x;^NykK z_#Q=>L$hfo*D1;zGRgQ;;6`eUmhg$@_;gpRa-=~zh_2nkLK3PK-L?B!^CbGFADw<^ z9I!}1noTP{=T4$y7W4%-XpX?5%*9i|=h8bK_S(?*>7n88dxvwcmR~G4Py6s2092+O-IsY>e@-f;EJ~oq~q(=m|L*$7L!d0nivcfo9W+&I%PNQ;JY(nm;isLt>j5wq`9RPENC_D08^ETf)uV@@TFY0kJ3UDtAlXM`o>kO5~@|Hx~ov49H0>@-S+q??bh8< zRhIg<8#awL1E69DV>+tMb_ae1WMPq}=}cc#8g$*}}Ksx34~h zzGpIc>7o465eiFw`tRJ^)2x`uL;pD3{4{!b5d?IAbTf+$?e}la^FKu`KYkL;3avC% zMs3j7KdnPsi&iI16{Oj;;d_8Kv|s!5WA}XMABW#ORWj)-iH4MgaauImFjcTtAo%&d z0G9XGZS7A&?ZeyQs0REic|Qkg8?6UfsHOeQ;je|;KwD?CX(5wB{t^tQpgmIS%q}_X zeNdY--s&#x^eK{U*(Dn+!R?Lym)NC|9AGWLn&bd$0oEi3SPQTwIlx+gHOT?i0<1|6 zuohrVa)7k}Ymx)31z3|DU@gF!Mc$pO{^tVs^A7GOx^hT9Gm(f|Me07*qoM6N<$f@EjgbN~PV literal 0 HcmV?d00001 diff --git a/assets/Rat_LPC_Style/BMP_1_CAVE_LEFT.png b/assets/Rat_LPC_Style/BMP_1_CAVE_LEFT.png new file mode 100644 index 0000000000000000000000000000000000000000..ada3777bd9825dbedf682b67498497a0fbe365d4 GIT binary patch literal 1142 zcmV-+1d02JP)% zzi!(w5XQe0odOgLP&EJ-FIu#CZGk>O7tel|jv4(fp1t%9+*KX4Xz?PTaexv9ytYGp z#OZt@3y_k``|9{>PT832H5oWF)%leot9 z-m_)lpLgvZwk*(W+UV!lvcTIHu;n6LeSn$Y_6$ehOG~)%oN7_}=OhaMpZ>o2$M5~3 zxcUHBAI4pK6iNyP0L`XVUzZ~BYbF=q%kPi=L5!XHnz1+vF$BFwV{fL40XW71;?X_f z+q>^D^IQMgIc}gC&D{WO>VpX|=?u8PD{y}&rYCcU&~)dJVWu)Y(YV19x^D6y$l-3V z#dCIu8BcJ-O=bKzF2ZizVYalraY+auXThU;I{PzhSpPeK4N5qMl6VzGdt zycB_grY#HDug}*=ktWXqF~$Z$0NAc-?ADz(oW^cf^~tqK1i?#jje~2P&j37waLDhw zcJId!*$BYDv@HwRvgoC`mEX<{k*omP zA}M58C{ER`)5*nAB0APzGSt1kC_;W?zwL`Kl5JGl%2>vU};5igP zlbivs4Hx6T6d=n|SQ5+oV`w&Qo-u$R5n@e~(EC{nK*;JYbRCX@&_e1e1dwQzqHLKF z*$JR+aD>(iv~(Vd8QBRS8M6_hL4stP1%`HkhOQkVyBR=jEeQ{BF*o63vJ(K2z5q2$ z_zI9`3At&SoeK>0_c^9A>hf13I{|RU>QADHkevXZzRoWizg^XSb|l#l8AGfo8Y0QP z!E?C8cr80*Hv?k(101=TqLG~dIJ56hTx}^FgD-?M5we^C7&!~1yJ(%^>;$l7ak9f3 z!c+#XKKKHP#!*bTN*9pPUORY|Z5HU-z1rrcb-%=x1zdeNIWb0LC%_nFu;bOEbe*da zKpL$@e65DK8UYXyL7otyK$>I_)J}@M7Rd=f$LL>**ak{+0uXc`fkZp)DUoe(37ri< zZZUvT*>2tSIzvM{#aiXZugzv_j12GEJ!VVWGh(}{{V7ml%!)CaLWuf%yo)2zPJ%+& zGUK0$)Api11xRgX$d+0b0%!)2-_MrT z2T5++Y-yuQ=A?FpLe<}FX?^M=5zPGdB-itUkWiW?$=)$Cruw5VuKlWGkIQH-k%R!m zQ1wSh<6{+HjNQ7MR)E-|Cv=bCC5D5=mC4c|O?!H9LWiMUeYn_oFn5^T1+-}&x?gbU zju4Evb4)T@+B^y&>H&soeC^zDr~pE0ZSkS=yhEw(lCy!Fzt5s^+xr})7ytkO07*qo IM6N<$f+~6vxc~qF literal 0 HcmV?d00001 diff --git a/assets/Rat_LPC_Style/BMP_1_CAVE_RIGHT.png b/assets/Rat_LPC_Style/BMP_1_CAVE_RIGHT.png new file mode 100644 index 0000000000000000000000000000000000000000..72cacae9e99b2539e910eb08ec414b706d4a6aba GIT binary patch literal 1078 zcmV-61j+k}P) zYF?=m@1(Po_!#s7Ml45?MIOl`dFPAUub-dmssR9iG+P3KpZUP^?d$2au6wp+3jhGC zha0%km+=1Gzw=%b#R)$JTXFU=3Jw6!9)8dAol{Wwrmh-x1bqw%YlFhaAULAvflmN@ zc%5tS4P8o1v!%Jm?XM4~Kk>|{p%bXd4hi3utx-UlEsYY|vh9ujmA*9Boy-3L0F-ZJ zLxgwXGy8K2jtpAB5IExHt}=f)WyNIn6t4oNj5>F1EM`wpXqx#t12_gRmjE1i{#arW z97(tjLq}fc+9(hSQOY?{*P9d|VD9I@IG}Sqdb*4S)&fGYl_y1b2vva3tWgP)gojfs zV92-AY&lz9@fw(EFr*G}`MI4FnDZmb{cVC0AsXbsVGS`BJU%+rpv_P|K>ueeBi78% zM$w{$LaR3$PARr^fR*_{gh>#%T!7B&Q;AV%N&<}ej%|lYi})M~kUD@eB{P(Sf&gK0 z#OtbIJ3eW)>`j5OlY|J5bUHlby+nFJ(3KF?RRd4k+8pa*AzE-G2?=6YIld(ZGeLV{ z!=;3BSFyn~c2sC@--XV#$eClX8bqNa3O9yP<*>b`M}whs6biGtE6j(!xm@R3Orc|(=c~J-BQV`#AT2xWxqz<+P*;r!meOkgBzSSu*Z!912D2=TNanu+#+>xDt-aZw zGr^J)Dc}QoDC3(fsfMZ3DP!~OW=^r6B3vl1gZ5%bO)mVI@&6befb&tX71K=^YPatNTdBCZ^8Gxh3;45}I3K&xla4}+ke-N1i0G$Ty z#D}^-XJK^HcL5p~Yz4;d4#om#19YgPv#Q>e_(GSo0eZJ02YAhixBycQhs2StKj}d@7&sRvrmKF9kO1cuB5L}A0Gs76N z!i(a|r{|aa0&W&K_pe1MW}o0oMRQ*=6oWfBH%ZYzI5nfg>!~%w;tstSfC`||d~Rr= wbnYTa`FeVD2yfp%w)~*e7JrR-JGLU}52WZt35+_LJpcdz07*qoM6N<$f@X;E3IG5A literal 0 HcmV?d00001 diff --git a/assets/Rat_LPC_Style/BMP_1_CAVE_UP.png b/assets/Rat_LPC_Style/BMP_1_CAVE_UP.png new file mode 100644 index 0000000000000000000000000000000000000000..20c2b0fa59aac6ed7d79227246795a3de5f4ecd3 GIT binary patch literal 982 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEV4myg;uumf=WXQ1yxRr>w$igU zZDwSMPFi&%t_+C!_y+?IPdHHvy`4Y*wOt(CkGK4R<2|3JeFq_11i)G71mJ4bNdQ}?C z7;{w^w{T`Cb1v|8koIICTIu|_hBqHG-{1N1D|M0EGpPq3)AsMScki`Z#nJCy4dl&! zzyHnAH_y#kqpq{}T27W);A__nc8%XDd*+dX$qfgY)edg6EO9AjCb$1?{ zZ|UQbkaOJ$m4BvtJ-3Wm!`v{Ho#oasbBW012Ec&(rr!}LWqOP?iofArRbRnqA*6_c12o84P`OPMdIq4sam{B!(Dxtq7k zD;#`&lqK!-DLx-_ze}d<``nq^h1YZ^zX@CWSST~cr|eJdt!;7U|7sgdR_`klV!W^O z^{kwGczGZ5vhF*Q`NjKNYhL#CA8HdaJ@(vULB3k!%HI3t-)}EScpkzNEOmUU(EhW3 zul?4Oo&Bx(yYZ|A8ZT}g+se+s(Ea$5Q~K5P7Si)q;In~vETWw_l!AH>DV%phWXoWR-e97GI77Ev0`PSz>m5WcX&C? z*lKjVa`nQ57>F#mWi|P8BGpg=dC?)Q{w65p-)$pLD)qgbZ=gxooPmv{fRx`uy zQ0~pCqM{r4FR^vmPc{p!cw5|>FYomGrLdUdTg4p7H@83VFseJP_rH6w^_;@S$!bTR z=rn$3o0}T1^f>Zfd57bi&91~^o?rVhtT z_vO#mFETjv)L@ldUi^|4CMPp{agz!AE~j!V-26X)J^j+PZTSlnAN);LbvU9D8)v%Y zvfSN0p7x)9ebY;p2yoMDRXp@*n<4w$8P7ZRGfWUZZo4A86PRBaJYD@<);T3K0RY=h B!6*O# literal 0 HcmV?d00001 diff --git a/assets/Rat_LPC_Style/BMP_1_E.png b/assets/Rat_LPC_Style/BMP_1_E.png new file mode 100644 index 0000000000000000000000000000000000000000..ab966c539bd9bf11ac688df8778896c73f6dfa5f GIT binary patch literal 622 zcmV-!0+IcRP)nU0|lBm``$KlJft+ zHaz6WSXvn4J*^wEk0Y}Mx}a+f08o|k3Y2J|agxC??u`hFW0i9SF_a!YJ7hlLTwq9f zDvtUD*c1!_c}gd|-ZrAKoRZz`n|b$Apekja6i8gd5yedJzX1T%LuoA4wT@Ow>xV*& zK&r>8QpN!S8O4n=WBYIOjFvBV=OLDJ@YIVr)T`Hp84IRi4D6hjl-p@JQ&Y^;G|d1X z*JMPDa{Q&?QJ>P&FmynrN?323i!&moVNvGM7ZR_Il5z=c)5&QVrST7{QsSwO*#|2N zdIm@rQ7GJeE~OUSf8Ch(u`6u8a7xvYqN8gaMW;6lX!CzBpiorill+$gJJfB{1wHV! zZ*(!mI4}mg2RMdwHykm_51-v{1Y(sDw{|NAM;iO&ntmWfIf2)EdQWL;c_Hf60as7g zHXYudTl1}!S5c*zqk1UK`5-vcP{Q@Ph+1bW0dQeFN3aswr`=@))q6=f0IW7kGsi1o zupdbMTeA1^J%joI5->zLJcl!>AF#b}@#%tV{d|%mqsi4~X(n7ef>Muh7&1C!Y<9ga zdSRl?j?Y&X>0cAr~K5p-UzyJUM07*qo IM6N<$f)F(oM*si- literal 0 HcmV?d00001 diff --git a/assets/Rat_LPC_Style/BMP_1_EN.png b/assets/Rat_LPC_Style/BMP_1_EN.png new file mode 100644 index 0000000000000000000000000000000000000000..f9b70ad63ad16d2f73d175243279e7e4ea458bbb GIT binary patch literal 614 zcmV-s0-61ZP)%p@2lZ^68&z0sfygx}0g^x- zs#1taSZcXz-5|k;ltpedeVFZvvFevkY?($5m2ZH} zm`YYsi4tD!*Lb;K1H24N?g1^%DNDKB^F`hNE^0)sb$>jNTYgel1|EyIK0v=qhuW~(BCNK5-?lyhx0)U$y zWwmC_2rRz8)H0O7J6H;F>ji5(F&VQH#@Vis@XHSEyb+ZHz~${!TsP-|(zm7ftn`+| z*Ua0HHt(Yxf&sCdtm~K`3O)?tX@T#L6Sty=JVsg^L8bRI$mWo?$d0BDvz=B6F_HMC zf)K}=uS0n!ptWQOc#D?WHI!KM|4(--(F^qa3uP=%#h`g88UO$Q07*qoM6N<$f`PLb A6aWAK literal 0 HcmV?d00001 diff --git a/assets/Rat_LPC_Style/BMP_1_ES.png b/assets/Rat_LPC_Style/BMP_1_ES.png new file mode 100644 index 0000000000000000000000000000000000000000..56f614b283ef19297151e22b9c7f1a60be596025 GIT binary patch literal 596 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 literal 0 HcmV?d00001 diff --git a/assets/Rat_LPC_Style/BMP_1_EXPLOSION_RIGHT.png b/assets/Rat_LPC_Style/BMP_1_EXPLOSION_RIGHT.png new file mode 100644 index 0000000000000000000000000000000000000000..2820565e58e20291c2c27b9ee1811be2147dc6ea GIT binary patch literal 1149 zcmV-@1cLjCP)1 zEq3ET43_-{l?(|nDKRlIE-79TvLrXyL-Yuxdye9qpr|;+#9#~7Bw$UJW;Xnvv0q@pSt!4002d~0R(>M0*>d`(`%)B_Dv4}0Ka}5yuTBS zj2xd%L6<0-@N>Ww$Inr40D%7Rcah(m1BC}&d$i7=3qD~vQ1~?nj!^W(B>+CWuC()p zk`jw@WA5?iXFK6hsYz%4AtTtY$$dZDH+``1)V!%n^-T}W{zK?B%{~BtatTKT@(C|t zjb=}w0>(IjGmSIc>|3j{rkOp3VD>Y|I~6cz)~8;3Z74L&YFh%FgIA0II6hTagJA6J z=}H>~B2rO`y5AK55o^B<7zcEvgI5eMxC@6RcG2)IgCXF`OU3^oRsk-vMkS;qJWR0w zpKllCCZMi3kx#&o#m)co#%39esRJZG=Q)8HztSWKViO@6tOzu2sfV>zG5C4Y7Kv99z;G2A**fi(!yb^X?ngT;J9>9DYfe+gvqpNxFS_c@R{ zfMQN&m=Y932#Yh`wMQ%CQ z*Y#bJQJ+Ix25rE~@s{At1o_5>q=aVQT7&7@p<=mx3A)k~ua)TT>ktCoY7m9G)nzfL z9Oip^G#I81g~B{M)#gjrTCOV{Sm|+-l?ou~`=w3Z?rQ3OSB%nG3}##rCdloEx5nfs zML1o6Ms+E|qw>C{CYX;L&OUCNL7OYQJs$=!Kn{|;Ac=*mn3<9l+Mi{#J4{IsS`O3g z^M|K;ATaGQNG&@YxqyoU=-Q(RmY1smu8Zi+Q5XGv(Lgw`_PLbWCl=WlNg4mW0)kus zqrOxK#r76`4eW`Kv4E-kUaIRqA_oiG17z0WOnyiN$hv3Uj{zr0X)a0Nl)67cFgplR z>zU>bQdT#G2Xu|MXM#onbhfK)8N}|qzjW4&FeNCM(awUag47w70uxw=7(_sUEh8DJ7ayv^^cZD~^D6l#MU&TBk1V|@4!0c_(^ z+9n@0O8V%p5Tr2kh(RWJ3D{PFu&glju>uRA!CR%Dho(>PQqg?v$&lD2MFZhnA@KS& z<^);&`go!|AGLy|iH_;+z!C5kX&{t~(_2D#e*d*KQVwYGYeet06-oa9dHZXsI&^3- P00000NkvXXu0mjf1j!X+ literal 0 HcmV?d00001 diff --git a/assets/Rat_LPC_Style/BMP_1_EXPLOSION_UP.png b/assets/Rat_LPC_Style/BMP_1_EXPLOSION_UP.png new file mode 100644 index 0000000000000000000000000000000000000000..df4b8698bdeae60f8a4db91bbd3353e97845b2b0 GIT binary patch literal 1036 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 literal 0 HcmV?d00001 diff --git a/assets/Rat_LPC_Style/BMP_1_FLOWER_2.png b/assets/Rat_LPC_Style/BMP_1_FLOWER_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8d23226c759a2de0ddb376c9f94e23072ddfdb1c GIT binary patch literal 2118 zcmV-M2)Xx(P)+q4)SZ@*;!keieL9USx1CG2aE8Nej~wG@>~)y34DgL4&jq z^=bn>iBK!i^=fm}JPF%s+gN?yIAEHBsP0$dbuJ`2rblmZhK?aHFEVje@Va!5tG!kA zHF~J}Yxi*O+2HHNlaC>bP13Pk^$@YXAO_s#5tJ7GUgWFiTiF=qV+ppvr|uNU7}p-3 zpmE%}i4qTx8C-$tekBUa=WM0ufv}hzumwuX)Xk&MTu*E0-{g&X4Idyq)Mt|#d_?>F z4EGT+?+t0ydRmLu&(c4NCjfxqc;E=+&W5A7uH5g{=d$tl_jh?T@sxqZWC_FZzzHct z3n=~t7a=WE)&Fd(t*il7=B2-1zO5SsSXEfliWosICQDdPYbP|EyO=CnW6e>3f-`%0 zo4DVvX8Yfh&7P6f=h93#h0h;wP~nzW#Xb*M?jRi`Ey3kQ=Cqr_EC6JFoMrHBv~$;A zk23f;`$6o(-H&@z2tG9gw$hRis438AX))iYIaCOyD8QM2J!(3f=HDA9gyOn_)#uU_ z_CmIf_qNrxsfq7$XLfK9y3g$RJ#Q4C(3t0VJ<8znHi6NzXYLwbrS-IKd1WbnOM;`! zN`DvERg~Xw8W3Z9$ACVU$6^jmW2`<1HIIUtnz|S8y_DL$1^@i^ubVHe2-O09Us?oe zhL^XAV;(i~+i2IIvAC{WUcvng{om^Zx78M2zOBvbPw{cKfmgExCYy~K5hMpFA>@Pj zd#NMd{dEDL2sJM<=xORkuVZMV-rffshx0ga|508QW_#`8gFtY8$e(Becrz_iw|dV% znf)aIu}N+9ai^v&01C;PNLfIWGjz;75Tw&6a=fV)U0y29x5j87UjA4gl)RWjz1paI znjQ%IW}unl z9`1JVaJOqP?|a^Mxf8djd`sNb2jT8iLUq4tr@~@s`+YgA-&70K1Si=$`N7CMSO12? zyJ^p(_i^)5zo{05qD2<$KGX~NU7xRpK@EImLw_UqYFppi)dwZN=Z<;mSIVmb%Bv#0 z8A3wyFBik_zs?t6WSXx&7F~DLG3vd=YiRO z*Uau1ALMJ4w2Gpk32B*%w!CPW8x9)a^Ykr71gFTg2|PYXg4DX};SY%z$rP~k z%$cC8%o(+sixrK8$;dn?o3K_C@Y!fyWUa=9Mi|902QawZ`Wl@vK>rmL1}S(ike9Pj zKnR~hMOZdPRDEMMQW}tt=;kQx#A^4XV=4$se_ztVv`oDo-2zDiKa42K(xKA@uDFjROfUp)>UdE!Js@Ll39(sHD zZ=7XrpU)eflz6Sg?K_^gUGBunH&6la!v@*}iuJVi9+ad+B2(7h9-4>rtPnUIG%@2^ zelA_K0;57GGo#GMoG(aT%w4}fBmn6+EY}DOpY(a>PED8lm!^Y6%((FWu^XG1-X6dP zo`34W?C~+`9nv{v?w_a-fSN!$NZbH8n1MA%|39OV2=P5T{@zyGqgTFDZ|`m&HGIvD z5JF+PM-M}4Ne!04q@+aC6gs|ZZ?C*69Bo=+L=n=;v`n3&7f*{zMULTk;Ix2;oKO~d zs`CX@2#vz5aspk-{P+noH4ljSW2usk(f*%yJy9@2!2^BM(D&d~egb(-T~U4VZCayIyS@kD!lq4Jl8 zt}QJNt*w3P@0g3ekEiCOV&V1L^M@?^~ zXT0wAvv+$M^Yp!q-v>MH3N&%20ovCXr~F>f`eAekzFJ_c2A}(CdZ%DsN?0h97N^VG wX;OtqO5Q>OZ@^n$>jw1L#Ob_;`+KKL7v#07*qoM6N<$f}$7#KL7v# literal 0 HcmV?d00001 diff --git a/assets/Rat_LPC_Style/BMP_1_FLOWER_3.png b/assets/Rat_LPC_Style/BMP_1_FLOWER_3.png new file mode 100644 index 0000000000000000000000000000000000000000..ad60b454b4a340241aef73d60b7b18729384e8de GIT binary patch literal 1989 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 LNkvXXu0mjflW!DC literal 0 HcmV?d00001 diff --git a/assets/Rat_LPC_Style/BMP_1_GAS_LEFT.png b/assets/Rat_LPC_Style/BMP_1_GAS_LEFT.png new file mode 100644 index 0000000000000000000000000000000000000000..0e8df30215d3eff1a0196bb5bc1fe9ddbda0966c GIT binary patch literal 1304 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 literal 0 HcmV?d00001 diff --git a/assets/Rat_LPC_Style/BMP_1_GAS_UP.png b/assets/Rat_LPC_Style/BMP_1_GAS_UP.png new file mode 100644 index 0000000000000000000000000000000000000000..b8614af351fc807e835f3bd249b1d657dd8709fd GIT binary patch literal 1278 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 literal 0 HcmV?d00001 diff --git a/assets/Rat_LPC_Style/BMP_1_GRASS_4.png b/assets/Rat_LPC_Style/BMP_1_GRASS_4.png new file mode 100644 index 0000000000000000000000000000000000000000..642c71a659c2f4347aed0a8b2e6755d1599d8dd4 GIT binary patch literal 1788 zcmV|59!v_%&)y;tz{F?_JkMrf++%?C3oc><5l{rR!!#(Qe zK>cM%u2VM$+G~ej13YBp&>AeF5ft2?$hzt&rk0_5uKD{QS=zO zwjc+n^9)G~?#t)ec{iJL_*{Y`@Wfq$4~Ej?F`CEiLzFn+!|)CCmqBHgXKXd^!HB3G z!39-qHO-T2-p+S=eyeBmW;Q@u)YC}|9?_niK^u{?Z%V3e=ezp*ZtNa3c8}TSQLfY1 zfjpxVU4wBwb&JEK7{TK$YhO19dU-$6%lmOLSCxR=8?V}GVQ`}Q%dn&(hnDN9qucpD zc?+I`FVqAy02BxWhPCC%~@vjQQUToR-(SOPSIh1pwb zJ&O(u(s&-9qiQSP2xNCzN3u8*3DrOUC!#H&&GU!VU@4`FU%sroWsin zq&|5C6)PzkyN9_?M5niq(Ec(k;{Yolx(^?-=&d^b$V!_DOJ;A&@ABZBTX^8_DLTCG zrW@3dir`48!&%?9D#KHTy^zL`bBAOkh}Pa>LVp>iloScWVyOm>ALL%8(1JJ1vn12u zHAJBpTk2I>dDc|G%1>}l{ykI=i0Gp>hY?M%a#C4#-KgJHTdC@0(GW_9u`pp37%j;0 znn8+`&+wb|3Z%hvxqBu~77V=!Ra==ZOoEw~%PdXANy$Vty2!C5+T1A{v@9|*LL-bE z6|r8A`8Th+qwPZ(s)Eri?}aZ{t_sM(mKDc@1d|x9)M`Xpuqr}PX{y?4!90s;Qz)!) zTT=x*kbG*k5Q!fsk+jfP@I{&L7PvlQ;RQSqtD6H|PaVCyA5D>$OhZwQRC6hy@7{q@ z;ODU{Hz;A1nFtuf*dpoC7_v57EM`CoxAT1xRSl8%eQ(~HGMeTcvdiKrSo&V_$ZD-a zLFQ>CG{oi%Kv)MaHDpwH`<9UomBrcWTepk;zVxPLxq7SS3~AIgCQK3#Ekq!;OlxIG z%n_#*bw-$i>Y`PKccfH%2!f94_`@uKd{-Ns)$LU`hj7CdiO`+TBYOr2y+G+pPpZWw zTKh-H=#$;4tT}k`3IjuKoU_^pVi`+9s~eW88i^2BGpt^F-q=0NP<~dtD)MZq$I}>A{{a?LrL3fKSse`!Ric)Jf&mfqSj{^VUX4itMwYOH1c{+&wm|1 zNtCJiwbm+QYp&2E(8|NTyg*B3w`{plJ485ql~vPH<7FYDTCC?<6UBF676{2Ki6F<1 zrnCr@CKP!bO9fRV4=Fc2bAw(n(TWDGYLFby36fMZMnuY_7;D|0h=|Il&*S*sC-eB1 z_v5rNx}212<9V1R=IS-?f$Cws6l;+m+8#3($oV$|8UfZV<*Je_a`MBB-0ynosD9Tw zOCx2snFK_F6wO9lPo2xKwV5BjLL;_Crq+AboMF^`yTH6Cu&imR+C~uI7Zt)-#s{t=)#PlP&RH=lAnl{o9xs-JmkE z^J;-xrqJ46UJQW^mJ2t?*^~D;A)y@xLt|by)r=W&soHN?s2#fpJ-^jS)tg?1Zs+@y zFqG!^USFO(IQnS*e@iN?IAm0sr&F|RF~sBsQvpv7yoRgNm|h+{wO?utiOtL69=s=W zd5hLKFMKY+?R@{84o7wVyWrIoNICr45<5%!q9TNKw=I2m4y>lfv3qRtzQF46bo}-6 zQ!^;!6go-~DRr-T6D;Xu*?Tp;Ee@}>zR5#Ij4pZ&E!&g9Tcmf0$Ii;)|CRpdFjnhI erQK0GlLAX%B(_Ow3YciJ zp4m@8JPDD^dVX&{-efngw?ngP0RUG|mpC_PxHz3c!rNz$cl&|o>zBQZbTl~t_3Yww zio9!k(b0e4?XySj3g7KVvLQ{!XN%6VdOaU(W0Rf!6(#^+DwC|J=~RnS)sfD!*+V^O z201e^LE6S1IN|+Ol!uK?XQLiS1sSGEYF4cnEID)o@dj{AY4F2@rt3~!ZZ|uC)u(HF zuK~&6Z<=@_2~#sSl^Hb{1r-V|tJm`($(sPGD`z7%36X(RxOJ7B7v*&ScXR+gIw=Uv zxrSs0LN%4Lq!A@-A3JOxJAjWNuVZWwZnnNmx!u{a*ndu1M5Zza48)F~RF)9~Qs$w3 zz|T^5!E9N;HWm|&HXog)GNZtV9oty34>;(#YEjBfNXo~qV(v%-Ev_5_)m__rGl0X8 zTR!S~Edef{KzUEcOoI=x>}5Bvw?nKm->6EA`Ro$w;-%E*9L^q~&!Liy0@&em}baVCs{o)vP6f<@Y~z3?=Xl=7YO>!4{7jOmGvr-L3`EtXfoyQgjXgS9i52 z58elS;}$|uPQ{BUmj&O3^zbpxAtd11iFzG#CEM6hJwxEnyN#REA+M2EN6_f~Tx4T{ z4h5Ul>-nHff*T0GIdizR=5i>%2}tHG0bkMDPcEs}{QL9$Mr47`zW{D`N4FucdUpT- N002ovPDHLkV1fWO81Mi9 literal 0 HcmV?d00001 diff --git a/assets/Rat_LPC_Style/BMP_1_NE.png b/assets/Rat_LPC_Style/BMP_1_NE.png new file mode 100644 index 0000000000000000000000000000000000000000..2ae5929cae2b9c875ed758715e93d17bcf63c53b GIT binary patch literal 625 zcmV-%0*?KOP)ZMp zrVzbS=>X2BzEZpxP0pD%^6PbPc1_0#Oa{xeHHL#^k4o>?eVkIRE zHK%=VZgS%;AcOgulaQU=&Vaw0917|K-iWcLC8!zb3rSuJN+dbfyQUw3P&$c3YVeKS zVq>@cWf*Hv3dXZiK2@zA;SwG4gBnvG2`w9;^L5pz#E%-qu@2|w_ywO4!KWNLEqrq5tn7^41rKVXAbyoSyv4{9&7jC z6emfe*@uZ40U;S`pf6_(@^u8DMV^rKB$M6lBSG_C3l0FwyFy*-^uVFrZ*tR__p|xf z`SbaWevV@fe4xyQN}T*2;K6Na)p~}Y?RS%q7MFL0TlCctBt53%7-=mypM->{U+>=lCSmTUt{VIRmcB_440DU;00000 LNkvXXu0mjfJ?|## literal 0 HcmV?d00001 diff --git a/assets/Rat_LPC_Style/BMP_1_NW.png b/assets/Rat_LPC_Style/BMP_1_NW.png new file mode 100644 index 0000000000000000000000000000000000000000..191c33a850a0a4938db816439db68094f17903b5 GIT binary patch literal 632 zcmV-;0*C#HP)HSH@Nq!Uo9?nzc6KTWt(3yV&#&J@Ik znG{#gwYf_q$sp|~45|U2_Z+&?&b>S;9RjX=hm1CL3tj0bViFRtywf!ls#LuKBT^x9 zofM31FUqSbl`%+>3q??DLqcrM?Yv5Id6AhbNI;cJRN@OKk#HGz!5aYyp`1!yQi~Ek z)(t+^4FDh=Gwtj=bK@@XG|iW}c}|B^JufmuM1#xOFcI)ozHgw|iiggE`7(#Dbbk_( z(!9u=N+nV}I`+J`!S^Nl?F)3#OWxO~z!w!FncjU~nZ*s>4Rc>X!74c0Q>uEG1AIN1 zsVQb^+S}v`Uo2vymtLG_(H|bv<4xW62ul6$bApcT=;N3x=W~FbLn*UCbte)aFFBgJ zHN6V}YH=1dnq5v{`EwgIiunZd!5+O}gU2QlOo3hPE)vyqjq<(_jRU~-!$MpaBQT}| zRH@L^ZRaF)wJI;-B-8=4aVRM=Zj-R}Br%_1Tu4{Cm(LLRe!FnR!^l_Ns#Iod`#_{a zWGC~dMd$CBe_YxHX0000I literal 0 HcmV?d00001 diff --git a/assets/Rat_LPC_Style/BMP_1_S.png b/assets/Rat_LPC_Style/BMP_1_S.png new file mode 100644 index 0000000000000000000000000000000000000000..37cfd89750f8621e484c521eae95a7299cef5de8 GIT binary patch literal 572 zcmV-C0>k}@P)?$U*&e}kF-)VaTaiMb3}vUDI46bTEdYZ>6ut8@Np z#gnQeuJ6-#FPCEW_OS1}EdZdZry$T;2(;go=dv-KN-};9TqChSist!#PY+TA{|&_- zLWXT?0RY8>fA)!4OJrAfzy6JO|u472KJjtX*}(RdUu>>_G=k zjoP->E9=&Vvg;iHz|8AmLr8(7(07C>5Q{K3a&7bw0D+u}Id{YZr-HX$YR3?wZI}Z0 zTqWaGJso~0I}l1IIpH(zLv{vYXDUTWElSuddu*0Hz}qnAJ>Wa%P^4V%&7vCavxrC= zeUyRJ_LGiflmRL77$5Nea=GAUQNgwrr7vxvbZVnVj!|}OYsEU?pnYau%SA}S=e~eK zSs~(55K`TD+vw{wG-^@R`vTzWCHIEo+^Hxvdj%g#V+ggXl(E=^rHwuerK!f@@BrQC z4z+f@gI({&Jm8D6@3uql0)TENN!08M0*l{^w+$t51`ENZUNGWuoryA`TkSq4+EoWL zuSMekaQD=R>(O~2_iM?OmA;brnu<}VI~nItuC&)(EA(TXG!f}$a!~R&N9MpMuV&x3 zNeW)@I^3tqq{yo)eHj)0u%Dx~6uA_6b$t~n60000< KMNUMnLSTaXa|W;g literal 0 HcmV?d00001 diff --git a/assets/Rat_LPC_Style/BMP_1_SE.png b/assets/Rat_LPC_Style/BMP_1_SE.png new file mode 100644 index 0000000000000000000000000000000000000000..219220b106133b033e482d13eb5ed5a3e5e34461 GIT binary patch literal 567 zcmV-70?7S|P)z%3fR%1!xTIvHzjC<0VA7=F4TOXYtWrOuT9ZaQ((5jceYvEM z)$!fEd%ionljZmGdD|QS07aRBKx-0czi-cNxzBpj0017}?lH4d^cllMjxhvl0lb4bB5-k2K){B!_*$$HFM~h@ecV z!s|^FBpW+kk-*rjUG3Di#(n$(0IF39T$m1VK>NpFcRGZNaA@YXveyI%L@GvZ?~d5J zBPNU2r}Lm_0r1w7I%ZTGYTy@GD0oq39hES&3#8g060zW5okDdtm_Q#1L?&UqXF4{M*=d`A2DY-TLejQhOtC!8{t1LK?~|K<8#@bif{iZat*MpE!wFCdL71_7zJ&7n5~>G?+Orb!?Hy9YSNylyzum(h@5bhiFejDO?M z_)UfcC-6s%^q|q8GY4V=Y1wt7cCMoP!XyK^lk8~eZDTD zL9106yl`+)EJ$GJABh-jWm~rV!U2GHe1-}16_Ecj))X9NPZ!SK9iw}VFI5b@=(IK( z7+7xV5dJ`!Sd7$wl!YZr7S>kk1F*1k;Waw+El7liIooYqKk7r z$COWsk~q%YcRxO#N2~Xzb6qt6fGkfzpfL?J-~FHe8S@g4?OqYEjnv4B+FPet>(yT{^KC z>b+z>O~IEUkub|iF9~Ul*Ht5SJg(QYevr29P7-SE85hp$06h=wfViRdaJmq1yCSJJ z)K$~2T`&*%AX(obxw+ihQaqog9U?p*=;9SjgOoph<0?br5(6d3dAF1=B&q-a literal 0 HcmV?d00001 diff --git a/assets/Rat_LPC_Style/BMP_1_W.png b/assets/Rat_LPC_Style/BMP_1_W.png new file mode 100644 index 0000000000000000000000000000000000000000..4adafaae757c9e03a626e4722e18c96cf439ce73 GIT binary patch literal 620 zcmV-y0+aoTP)w*YUmkvR}@2yWRKu$AE)BVt@Mz0C1ZIeK#P7x>*50n5&=Vm>y>=vQ{QS8_78m zB~ar19Am`M`X@eHhjdRvG4Nd#n(p&%OaJq?aPG6gvU!lrmx>=b7Vg_Y&cu%m7XE`q#0om98K`Mew(i9}Q<1{6;xautjYnVTIqP))v-kX`7>2|bQt!{_Q2}gUz?(G`@P%a9z%?Tmo#RLGlx$>Tm$#FtlM+NTLV1DZjes#NqgAqIGEO4B(&AW3sYD6;b&LJF1$Y^{TBuKi z^w#Gow>w?t-E~qUGNt(!f!OlX($b57=6R?e@Mo#LV7kmSEIYU literal 0 HcmV?d00001 diff --git a/assets/Rat_LPC_Style/BMP_1_WS.png b/assets/Rat_LPC_Style/BMP_1_WS.png new file mode 100644 index 0000000000000000000000000000000000000000..bb4cb144c7b1525f2cd5552e5032a51ef4ce2926 GIT binary patch literal 608 zcmV-m0-ybfP)tAOmHvkh;Qv&RpC( z|Fq(hs>Y6e_ua3Z+4BAFdmMHEfTo>;KyxwB`fxwro03^e%1=S4BxT5~d%69lfn>pd zqvnH{V%IwWfUzbjP%}acMU`UcdY7%7)`bdVsJMcdz?AY5aB_8YWr48%dGP-dSuNS4 z1dg@Z^-kRz=0@!{djNo4wSGZNfFw{0VGhJ3EVbNN;|(AXsT8?MA2=4g^l~ePkSxO- zgmIOWH|^a2jwTRuCy~&UYbf?WDyEW^RHB6K(}?ZU2=Fp2IR~^j$1LS?7wg797d0Yd z&BOz_>?(@5DUdpmlcD%1KC@Pd$KQ zUZKWSLvZyt?2^Z6?5agsuNlDSE6#@F)LT)m_h$T3nnJ8pC6A?USjL*aOKGlh1bu*> zOE0x-%|kM z9NFieoV1aBD5X38s3rqpiz5BZrQ%$dl|JF_#A?3csX=lmsQBF=l%Fw#7N;SvirBn?cCU=SOvbGysaR=A<|*}>R;kP|PGOKep!8MW*iKJe(t+J0(Ras{s0a5L zKn@IKgt`>YSQ+N9diQCg1>ab8g*BY-NH@G^zwo+=XGQ74D|~!k|2VQ;V0`hs{~d1t fhE9+Xv-A)6x*mRXH197k1Q|SC{an^LB{Ts5V(yM{ literal 0 HcmV?d00001 diff --git a/tools/lpc_extract/BMP_1_GRASS_1.png b/tools/lpc_extract/BMP_1_GRASS_1.png new file mode 100644 index 0000000000000000000000000000000000000000..f116afb9cc2eeb277cb8614b3f8adcfcc4ee19e5 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU}X1naSW-L^LF}1-a`f=th`Fu zE-Pnto}9tAk&QJ(Z$paYhW&jf%6(@YvE2JV$+G?Q*FQeO#YZ0c+M3zbT9T zXP7mJo!IhEchLsMEe^}R<_GTHFD~uCJ!OlUb(Q~&eT-}l+!rK(_9ZiHVd!PNz+{3` b;4_oUC5IO!ZgSgzA;aM5>gTe~DWM4fu`_m1 literal 0 HcmV?d00001 diff --git a/tools/lpc_extract/BMP_1_GRASS_1_scaled.png b/tools/lpc_extract/BMP_1_GRASS_1_scaled.png new file mode 100644 index 0000000000000000000000000000000000000000..f116afb9cc2eeb277cb8614b3f8adcfcc4ee19e5 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU}X1naSW-L^LF}1-a`f=th`Fu zE-Pnto}9tAk&QJ(Z$paYhW&jf%6(@YvE2JV$+G?Q*FQeO#YZ0c+M3zbT9T zXP7mJo!IhEchLsMEe^}R<_GTHFD~uCJ!OlUb(Q~&eT-}l+!rK(_9ZiHVd!PNz+{3` b;4_oUC5IO!ZgSgzA;aM5>gTe~DWM4fu`_m1 literal 0 HcmV?d00001 diff --git a/tools/lpc_extract/BMP_1_GRASS_1_tiled.png b/tools/lpc_extract/BMP_1_GRASS_1_tiled.png new file mode 100644 index 0000000000000000000000000000000000000000..5b22526f9e59b74c52b84c5a4d28e117a1d6bd2b GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU=;9laSW-L^LCc^x+Vt!hNCUn z0@vo9oLp&j$TZ@Gm$N~Q+wzqMLUe0qtqWmO|5#dDe`ntGrk$6VOxPB%X7D(0Uyx`J zTVTkb>#*6<;r5k{Y8U=25iU5!VaMcMpELVc@ZQ($d*_tR-7oRLwnWQNtUIOu=gEGC zN+qRd>)BrXdYFCV&WDa*L0kKuENiC9d%Linw6uS%YcNfD-I@4j>6`^mZYy~=yxjiv z%h!y5Gvj|Q&Ugs3E}0>!;TXdfhF-=DMk(eCXzn?1&3xX+_{ZYknQK_?@E6!Cd}V&e zzC->&-2t6<>@pv=71$s6+i(cvY-Dq0J!0O&kho{&|LfW}?gN8}!PC{xWt~$(69AcX BhOGbq literal 0 HcmV?d00001 diff --git a/tools/lpc_extract/BMP_1_GRASS_2.png b/tools/lpc_extract/BMP_1_GRASS_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f116afb9cc2eeb277cb8614b3f8adcfcc4ee19e5 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU}X1naSW-L^LF}1-a`f=th`Fu zE-Pnto}9tAk&QJ(Z$paYhW&jf%6(@YvE2JV$+G?Q*FQeO#YZ0c+M3zbT9T zXP7mJo!IhEchLsMEe^}R<_GTHFD~uCJ!OlUb(Q~&eT-}l+!rK(_9ZiHVd!PNz+{3` b;4_oUC5IO!ZgSgzA;aM5>gTe~DWM4fu`_m1 literal 0 HcmV?d00001 diff --git a/tools/lpc_extract/BMP_1_GRASS_3.png b/tools/lpc_extract/BMP_1_GRASS_3.png new file mode 100644 index 0000000000000000000000000000000000000000..f116afb9cc2eeb277cb8614b3f8adcfcc4ee19e5 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU}X1naSW-L^LF}1-a`f=th`Fu zE-Pnto}9tAk&QJ(Z$paYhW&jf%6(@YvE2JV$+G?Q*FQeO#YZ0c+M3zbT9T zXP7mJo!IhEchLsMEe^}R<_GTHFD~uCJ!OlUb(Q~&eT-}l+!rK(_9ZiHVd!PNz+{3` b;4_oUC5IO!ZgSgzA;aM5>gTe~DWM4fu`_m1 literal 0 HcmV?d00001 diff --git a/tools/lpc_extract/BMP_1_GRASS_4.png b/tools/lpc_extract/BMP_1_GRASS_4.png new file mode 100644 index 0000000000000000000000000000000000000000..f116afb9cc2eeb277cb8614b3f8adcfcc4ee19e5 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU}X1naSW-L^LF}1-a`f=th`Fu zE-Pnto}9tAk&QJ(Z$paYhW&jf%6(@YvE2JV$+G?Q*FQeO#YZ0c+M3zbT9T zXP7mJo!IhEchLsMEe^}R<_GTHFD~uCJ!OlUb(Q~&eT-}l+!rK(_9ZiHVd!PNz+{3` b;4_oUC5IO!ZgSgzA;aM5>gTe~DWM4fu`_m1 literal 0 HcmV?d00001 diff --git a/tools/lpc_extract/BMP_1_N.png b/tools/lpc_extract/BMP_1_N.png new file mode 100644 index 0000000000000000000000000000000000000000..b16c3fa25dff4e5f0253400d7aef07c011101d23 GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEVAS<=aSW-L^Y)UVpOd4&v5)?r zJuDhGDh1pS4gSaW)1SzAt3FbT~&m~?-~%u;n5-H-oQ-!R{7eEOUh z&@gn+@VQWsHSb-1|D-K(d)qAc8*Yi45?&`it9;e@r}6(U?95m+d+yoUcBwbcx}U0g zJ@vob*R3|e^PWF6+*<$YdSKiaC!K!rfO|96ig){auRIod=g-R7+p1>&`@QLH%-lWi z?);nNd+)}+>Cb=dO#i%lu}bbetE=Y@bMM%7@4Nl+NxKiK^qGHpC9M7WCd;zPb(7v6 zJZgV0cz){c>FN3@DxSCA{n_`Y$!%T!IqB*O1&Mez2XA>6HaZ8sNmtQE@tUZNK`Bn>zZ1@v=}$UY@`4>iX$zlWOzs{xYAvN+r|w_OeNz^gRxgT=ed} zp_ZQ0boQEVsQujc`SCBl-7cOsqu$%;rSOL$E{WMOo4;0Giu5eFuIu>D{%Sur#&lrm>xN%S!b4@jv&<_q4Xg@0yH2BhbNx znFhV5fN0w}>20MK_Dhx4Hmc>FI)1nALrlDSYwhRnv%i^M^>nx{zM^>YD*s!Y&&nD+ z^*p0=!k4PdgTe~DWM4f6Zm#f literal 0 HcmV?d00001 diff --git a/tools/lpc_extract/BMP_1_S.png b/tools/lpc_extract/BMP_1_S.png new file mode 100644 index 0000000000000000000000000000000000000000..49b88b27e6704dc456ed976d64cb4068efe1fd7f GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU}W=jaSW-L^LC~q*C7W1mc=vj zTjtbG*8g1k$lT^drX$m9r#n8pIaf_pE?+4rIx#Qr`|E0{8OE{=Zj2=iQmhvkGejKN z7X&gO30&fem|ht*{pSbEOjeh|PPvF}zbf|C#q}Rz3uxXxd!6Z{j2wqA2R6ODwp;Eh zhqMFlx?GE2(FQfl7zSYo?BeXOI{C7f_r>1>QNo+dQhu-#qv_L^Ti z_icsozP%u3-u<7~cGh1@yU|cDf8kcnwX@=F`3+1j7)-bpFkjGU;B#2aV8zf26R2Sb XRMoAJZjE~g3>XGaS3j3^P6J!$iF^M%U24W|u?s2<#N!VPuZ{d)8*Tnv z$#B+LR%iLY(;uWKFhn^VzQ@>_Ywvgc>+Xg7{^xIE441z!YsI{p#2>snYz}ObU!M8O ze*dh8<_m6zFUWDs{u6{1- HoD!MMJ7?Dwq8E6=a2V{B)YIHvit%}jk&{DFtt4`pkg$W_&Qu!{fG+b7Id m^$*}O&5%LYAsK4jS#d8PBTYLYo0q__VeoYIb6Mw<&;$S~1$%%1 literal 0 HcmV?d00001 diff --git a/tools/lpc_extract/BMP_1_W.png b/tools/lpc_extract/BMP_1_W.png new file mode 100644 index 0000000000000000000000000000000000000000..4b7f5c293f281f3c980284578632f2bd3b437a6d GIT binary patch literal 414 zcmV;P0b%}$P)1- zB#9W5NI;a4cja^Pv?2jk9ceRPTcHv;y|WAnh%#z@=e^exBtW{+I;wi96h~{EB%t(w zM8YU5x?W!rAl;Bg-%%=WB@$42K&o(S<)da7tq%#PZD3Wo((DrDLjs}=wX;i<4+-!# zDD4_Y`Q=K#Pfx%abwWhDvtvE_OMXey6EMtkkK&!0&U6O!kL+>v` zJSA2s*g3&bL;|7>(d&d 0: + is_tail = False + if direction == 'UP' and y > 40: is_tail = True + if direction == 'DOWN' and y < 24: is_tail = True + if direction == 'LEFT' and x > 40: is_tail = True + if direction == 'RIGHT' and x < 24: is_tail = True + + nx, ny = x, y + + if is_tail: + if direction == 'UP': + factor = (y - 40) / 20.0 + nx = int(x + offset_mag * (factor**1.8)) + ny = y + bounce_y # FIX: tail bounces too! + elif direction == 'DOWN': + factor = (24 - y) / 20.0 + nx = int(x + offset_mag * (factor**1.8)) + ny = y + bounce_y # FIX: tail bounces too! + elif direction == 'LEFT': + factor = (x - 40) / 20.0 + ny = int(y + offset_mag * (factor**1.8)) + bounce_y + elif direction == 'RIGHT': + factor = (24 - x) / 20.0 + ny = int(y + offset_mag * (factor**1.8)) + bounce_y + else: + ny = y + bounce_y + + if 0 <= nx < w and 0 <= ny < h: + if is_blink and px in [C_WHITE, C_PUPIL]: + fp[nx, ny] = C_BODY + else: + fp[nx, ny] = px + + frames.append(frame) + return frames + +os.makedirs('/home/enne2/dev/mice/assets/Rat_Animated', exist_ok=True) + +for d in ['UP', 'DOWN', 'LEFT', 'RIGHT']: + img = Image.open(f'/home/enne2/dev/mice/assets/Rat/BMP_MALE_{d}.png').convert('RGBA') + frames = animate_rat_v5(img, d) + + w, h = img.size + sheet = Image.new('RGBA', (w * 4, h)) + for i, f in enumerate(frames): + sheet.paste(f, (i * w, 0)) + + sheet.save(f'/home/enne2/dev/mice/assets/Rat_Animated/MALE_{d}_anim.png') + +print("Animations fixed: no more gap between tail and body!") diff --git a/tools/lpc_extract/check_black.py b/tools/lpc_extract/check_black.py new file mode 100644 index 0000000..1960f51 --- /dev/null +++ b/tools/lpc_extract/check_black.py @@ -0,0 +1,9 @@ +from PIL import Image + +img = Image.open('/home/enne2/dev/mice/assets/Rat_LPC_Style/BMP_1_E.png').convert('RGBA') +pixels = img.load() +w, h = img.size +for x in range(w): + for y in range(h): + if pixels[x, y][:3] == (0, 0, 0): + print(f"Black at {x}, {y}: {pixels[x, y]}") diff --git a/tools/lpc_extract/check_rat.py b/tools/lpc_extract/check_rat.py new file mode 100644 index 0000000..5f2be7d --- /dev/null +++ b/tools/lpc_extract/check_rat.py @@ -0,0 +1,14 @@ +from PIL import Image +import os + +img = Image.open('/home/enne2/dev/mice/assets/Rat/BMP_MALE_UP.png').convert('RGBA') +pixels = img.load() +w, h = img.size + +print(f"Size: {w}x{h}") +colors = set() +for y in range(h): + for x in range(w): + if pixels[x,y][3] > 0: + colors.add(pixels[x,y]) +print("Colors:", colors) diff --git a/tools/lpc_extract/check_rat_size.py b/tools/lpc_extract/check_rat_size.py new file mode 100644 index 0000000..1e9b936 --- /dev/null +++ b/tools/lpc_extract/check_rat_size.py @@ -0,0 +1,4 @@ +from PIL import Image +for d in ['UP', 'DOWN', 'LEFT', 'RIGHT']: + img = Image.open(f'/home/enne2/dev/mice/assets/Rat/BMP_MALE_{d}.png') + print(f"{d}: {img.size}") diff --git a/tools/lpc_extract/check_screenshot.py b/tools/lpc_extract/check_screenshot.py new file mode 100644 index 0000000..0699559 --- /dev/null +++ b/tools/lpc_extract/check_screenshot.py @@ -0,0 +1,4 @@ +from PIL import Image + +img = Image.open('/home/enne2/dev/gameboy-hello/iso_test/doc/1719484435-screenshot.png').convert('RGB') +# wait, the image is at /home/enne2/.gemini/... no, it's not local. Let me find it! diff --git a/tools/lpc_extract/compare_bush_grass.py b/tools/lpc_extract/compare_bush_grass.py new file mode 100644 index 0000000..0275ea1 --- /dev/null +++ b/tools/lpc_extract/compare_bush_grass.py @@ -0,0 +1,11 @@ +from PIL import Image + +lpc = Image.open('/home/enne2/dev/asset-maker/assets/poses/sources/lpc-revised/Terrain/terrain_spring.png').convert('RGBA') +grass = lpc.crop((4*32, 1*32, 5*32, 2*32)) +bush_center = lpc.crop((1*32, 1*32, 2*32, 2*32)) + +g_data = list(grass.getdata()) +b_data = list(bush_center.getdata()) + +diff = sum(1 for i in range(len(g_data)) if g_data[i] != b_data[i]) +print(f"Differences: {diff} pixels out of {len(g_data)}") diff --git a/tools/lpc_extract/extract.py b/tools/lpc_extract/extract.py new file mode 100644 index 0000000..e221fe6 --- /dev/null +++ b/tools/lpc_extract/extract.py @@ -0,0 +1,35 @@ +from PIL import Image + +# Load the source image +src_img = Image.open('/home/enne2/dev/asset-maker/assets/poses/sources/lpc-revised/Terrain/terrain_spring.png').convert('RGBA') + +# Define a function to extract a 32x32 tile and scale it to 64x64 +def get_tile(tx, ty): + box = (tx * 32, ty * 32, (tx + 1) * 32, (ty + 1) * 32) + img = src_img.crop(box) + return img.resize((64, 64), Image.NEAREST) + +# Create a dictionary of the files to create and their corresponding tiles +# Using some standard LPC terrain coordinates as a guess +tiles = { + 'BMP_1_GRASS_1.png': get_tile(4, 1), # center of grass-on-dirt + 'BMP_1_GRASS_2.png': get_tile(4, 1), + 'BMP_1_GRASS_3.png': get_tile(4, 1), + 'BMP_1_GRASS_4.png': get_tile(4, 1), + + # Let's extract some path edges for N, S, E, W + 'BMP_1_N.png': get_tile(4, 0), # Top edge of grass (dirt above) + 'BMP_1_S.png': get_tile(4, 2), # Bottom edge + 'BMP_1_E.png': get_tile(5, 1), # Right edge + 'BMP_1_W.png': get_tile(3, 1), # Left edge + + # Corners + 'BMP_1_NW.png': get_tile(3, 0), + 'BMP_1_NE.png': get_tile(5, 0), + 'BMP_1_SW.png': get_tile(3, 2), + 'BMP_1_SE.png': get_tile(5, 2), +} + +for name, img in tiles.items(): + img.save('/home/enne2/dev/mice/tools/lpc_extract/' + name) + print(f"Saved {name}") diff --git a/tools/lpc_extract/extract_all.py b/tools/lpc_extract/extract_all.py new file mode 100644 index 0000000..e80ebeb --- /dev/null +++ b/tools/lpc_extract/extract_all.py @@ -0,0 +1,16 @@ +from PIL import Image +import os + +src_img = Image.open('/home/enne2/dev/asset-maker/assets/poses/sources/lpc-revised/Terrain/terrain_spring.png').convert('RGBA') + +os.makedirs('/home/enne2/dev/mice/tools/lpc_extract/grid', exist_ok=True) +cols = src_img.width // 32 +rows = src_img.height // 32 + +for ty in range(min(10, rows)): + for tx in range(min(10, cols)): + box = (tx * 32, ty * 32, (tx + 1) * 32, (ty + 1) * 32) + tile = src_img.crop(box) + tile.save(f'/home/enne2/dev/mice/tools/lpc_extract/grid/{tx}_{ty}.png') + +print("Created grid tiles") diff --git a/tools/lpc_extract/extract_all2.py b/tools/lpc_extract/extract_all2.py new file mode 100644 index 0000000..2f133da --- /dev/null +++ b/tools/lpc_extract/extract_all2.py @@ -0,0 +1,21 @@ +from PIL import Image +import os + +src_img = Image.open('/home/enne2/dev/asset-maker/assets/poses/sources/lpc-revised/Terrain/terrain_spring.png').convert('RGBA') + +cols = src_img.width // 32 +rows = src_img.height // 32 + +for ty in range(10, rows): + for tx in range(cols): + box = (tx * 32, ty * 32, (tx + 1) * 32, (ty + 1) * 32) + tile = src_img.crop(box) + tile.save(f'/home/enne2/dev/mice/tools/lpc_extract/grid/{tx}_{ty}.png') + +for ty in range(10): + for tx in range(10, cols): + box = (tx * 32, ty * 32, (tx + 1) * 32, (ty + 1) * 32) + tile = src_img.crop(box) + tile.save(f'/home/enne2/dev/mice/tools/lpc_extract/grid/{tx}_{ty}.png') + +print("Created rest of grid tiles") diff --git a/tools/lpc_extract/extract_grass.py b/tools/lpc_extract/extract_grass.py new file mode 100644 index 0000000..f537bba --- /dev/null +++ b/tools/lpc_extract/extract_grass.py @@ -0,0 +1,17 @@ +from PIL import Image +import os + +lpc_img = Image.open('/home/enne2/dev/asset-maker/assets/poses/sources/lpc-revised/Terrain/terrain_spring.png').convert('RGBA') + +os.makedirs('/home/enne2/dev/mice/tools/lpc_extract/grass_test', exist_ok=True) + +def get_lpc_texture(tx, ty): + box = (tx * 32, ty * 32, (tx + 1) * 32, (ty + 1) * 32) + return lpc_img.crop(box) + +# Let's extract some potential grass tiles. We know (4,1) is grass. +# It's likely part of a 3x3 block from (3,0) to (5,2) maybe? +for y in range(0, 4): + for x in range(3, 7): + tile = get_lpc_texture(x, y) + tile.save(f'/home/enne2/dev/mice/tools/lpc_extract/grass_test/tile_{x}_{y}.png') diff --git a/tools/lpc_extract/generate_all.py b/tools/lpc_extract/generate_all.py new file mode 100644 index 0000000..e668cf6 --- /dev/null +++ b/tools/lpc_extract/generate_all.py @@ -0,0 +1,90 @@ +from PIL import Image, ImageDraw +import os + +src_img = Image.open('/home/enne2/dev/asset-maker/assets/poses/sources/lpc-revised/Terrain/terrain_spring.png').convert('RGBA') +out_dir = '/home/enne2/dev/mice/assets/Rat' + +def get_tile(tx, ty): + box = (tx * 32, ty * 32, (tx + 1) * 32, (ty + 1) * 32) + return src_img.crop(box) + +def scale(img): + return img.resize((64, 64), Image.NEAREST) + +# Grass variations (just use the same grass for now) +grass = get_tile(4, 1) +grass_scaled = scale(grass) +grass_scaled.save(os.path.join(out_dir, 'BMP_1_GRASS_1.png')) +grass_scaled.save(os.path.join(out_dir, 'BMP_1_GRASS_2.png')) +grass_scaled.save(os.path.join(out_dir, 'BMP_1_GRASS_3.png')) +grass_scaled.save(os.path.join(out_dir, 'BMP_1_GRASS_4.png')) + +# Paths +paths = { + 'BMP_1_N.png': (4, 0), + 'BMP_1_S.png': (4, 2), + 'BMP_1_E.png': (5, 1), + 'BMP_1_W.png': (3, 1), + 'BMP_1_NE.png': (5, 0), + 'BMP_1_NW.png': (3, 0), + 'BMP_1_SE.png': (5, 2), + 'BMP_1_SW.png': (3, 2), + 'BMP_1_WN.png': (3, 3), # dirt bottom-right + 'BMP_1_WS.png': (3, 4), # dirt top-right + 'BMP_1_EN.png': (4, 3), # dirt bottom-left + 'BMP_1_ES.png': (4, 4), # dirt top-left +} + +for name, (tx, ty) in paths.items(): + scale(get_tile(tx, ty)).save(os.path.join(out_dir, name)) + +# Flowers - draw simple flowers on grass +def make_flower(color, positions): + img = grass.copy() + draw = ImageDraw.Draw(img) + for px, py in positions: + draw.rectangle([px, py, px+2, py+2], fill=color) + return scale(img) + +make_flower((255, 255, 255), [(16, 16), (10, 20), (22, 10)]).save(os.path.join(out_dir, 'BMP_1_FLOWER_1.png')) # white +make_flower((255, 0, 0), [(10, 10), (20, 20), (14, 26)]).save(os.path.join(out_dir, 'BMP_1_FLOWER_2.png')) # red +make_flower((255, 100, 200), [(16, 16)]).save(os.path.join(out_dir, 'BMP_1_FLOWER_3.png')) # pink +make_flower((100, 200, 255), [(8, 8), (24, 24)]).save(os.path.join(out_dir, 'BMP_1_FLOWER_4.png')) # blue + +# Caves - draw black hole on dirt (tx=7, ty=1) +dirt = get_tile(7, 1) +def make_cave(direction): + img = dirt.copy() + draw = ImageDraw.Draw(img) + if direction == 'UP': + draw.pieslice([8, -16, 24, 16], 0, 180, fill=(0,0,0)) + elif direction == 'DOWN': + draw.pieslice([8, 16, 24, 48], 180, 360, fill=(0,0,0)) + elif direction == 'LEFT': + draw.pieslice([-16, 8, 16, 24], 270, 90, fill=(0,0,0)) + elif direction == 'RIGHT': + draw.pieslice([16, 8, 48, 24], 90, 270, fill=(0,0,0)) + return scale(img) + +make_cave('UP').save(os.path.join(out_dir, 'BMP_1_CAVE_UP.png')) +make_cave('DOWN').save(os.path.join(out_dir, 'BMP_1_CAVE_DOWN.png')) +make_cave('LEFT').save(os.path.join(out_dir, 'BMP_1_CAVE_LEFT.png')) +make_cave('RIGHT').save(os.path.join(out_dir, 'BMP_1_CAVE_RIGHT.png')) + +# Gas and Explosion +def make_fx(color, is_gas=False): + img = grass.copy() + draw = ImageDraw.Draw(img) + if is_gas: + draw.ellipse([4, 4, 28, 28], fill=(200, 200, 200, 200)) + draw.ellipse([8, 8, 20, 20], fill=(255, 255, 255, 220)) + else: + draw.ellipse([4, 4, 28, 28], fill=(255, 100, 0, 255)) + draw.ellipse([8, 8, 20, 20], fill=(255, 255, 0, 255)) + return scale(img) + +for d in ['UP', 'DOWN', 'LEFT', 'RIGHT']: + make_fx(None, True).save(os.path.join(out_dir, f'BMP_1_GAS_{d}.png')) + make_fx(None, False).save(os.path.join(out_dir, f'BMP_1_EXPLOSION_{d}.png')) + +print("All 32 files generated.") diff --git a/tools/lpc_extract/generate_all_animations_v8.py b/tools/lpc_extract/generate_all_animations_v8.py new file mode 100644 index 0000000..4f846ad --- /dev/null +++ b/tools/lpc_extract/generate_all_animations_v8.py @@ -0,0 +1,154 @@ +import os +import math +from PIL import Image + +RAT_CONFIGS = { + 'MALE': { + 'C_PUPIL': (202, 0, 0, 255), + 'C_BODY': (47, 96, 130, 255), + 'C_PINK': (254, 0, 241, 255) + }, + 'FEMALE': { + 'C_PUPIL': (255, 0, 0, 255), + 'C_BODY': (235, 94, 167, 255), + 'C_PINK': (128, 0, 128, 255) # or similar + }, + 'BABY': { + 'C_PUPIL': None, + 'C_BODY': (192, 192, 192, 255), + 'C_PINK': None + } +} +C_WHITE = (255, 255, 255, 255) +C_BLACK = (0, 0, 0, 255) +BG_COLOR = (125, 125, 125, 255) + +def get_color_priority(color, config): + if color[3] == 0 or color == BG_COLOR: return 0 + if color == C_BLACK: return 100 + if color == config.get('C_PUPIL'): return 90 + if color == C_WHITE: return 80 + if color == config.get('C_PINK'): return 70 + if color == config.get('C_BODY'): return 60 + return 50 + +def pixel_art_scale_down(img, config): + # Scale from 32x64 (or 64x32) down to 5/8 size (20x40 or 40x20) + w, h = img.size + nw, nh = w * 5 // 8, h * 5 // 8 + + scaled = Image.new('RGBA', (nw, nh), BG_COLOR) + sp = scaled.load() + ip = img.load() + + for dy in range(nh): + for dx in range(nw): + # map back to source range + sx1 = int(dx * 8 / 5) + sy1 = int(dy * 8 / 5) + sx2 = int((dx + 1) * 8 / 5) + sy2 = int((dy + 1) * 8 / 5) + + # ensure at least 1 pixel + if sx2 == sx1: sx2 += 1 + if sy2 == sy1: sy2 += 1 + + best_color = BG_COLOR + best_pri = 0 + + for y in range(sy1, min(sy2, h)): + for x in range(sx1, min(sx2, w)): + c = ip[x, y] + pri = get_color_priority(c, config) + if pri > best_pri: + best_pri = pri + best_color = c + + sp[dx, dy] = best_color + + return scaled + +def generate_animation_v8(sex, direction, file_path): + config = RAT_CONFIGS[sex] + c_pupil = config['C_PUPIL'] + c_body = config['C_BODY'] + + orig_img = Image.open(file_path.replace('.png', '_orig.png')).convert('RGBA') + + # Custom scale down BEFORE animation + img = pixel_art_scale_down(orig_img, config) + w, h = img.size + frames = [] + + pixels = img.load() + + for frame_idx in range(4): + frame = Image.new('RGBA', (w, h), BG_COLOR) + fp = frame.load() + + offset_mag = 0 + bounce_y = 0 + is_blink = False + + if frame_idx == 1: + offset_mag = -5 # reduced since width is smaller (was -8 for 32px, 5/8 * 8 = 5) + bounce_y = -1 + elif frame_idx == 3: + offset_mag = 5 + bounce_y = -1 + is_blink = True + + for y in range(h): + for x in range(w): + src_x = x + src_y = y + + is_tail = False + # Adjusted thresholds for 20x40 (was 40, now 25. Was 24, now 15) + if direction == 'UP' and y > 25: is_tail = True + if direction == 'DOWN' and y < 15: is_tail = True + if direction == 'LEFT' and x > 25: is_tail = True + if direction == 'RIGHT' and x < 15: is_tail = True + + shift_x = 0 + shift_y = 0 + + if is_tail: + if direction == 'UP': + factor = (y - 25) / 12.0 + shift_x = int(round(offset_mag * (factor**1.8))) + elif direction == 'DOWN': + factor = (15 - y) / 12.0 + shift_x = int(round(offset_mag * (factor**1.8))) + elif direction == 'LEFT': + factor = (x - 25) / 12.0 + shift_y = int(round(offset_mag * (factor**1.8))) + elif direction == 'RIGHT': + factor = (15 - x) / 12.0 + shift_y = int(round(offset_mag * (factor**1.8))) + + src_x = x - shift_x + src_y = y - shift_y - bounce_y + + if 0 <= src_x < w and 0 <= src_y < h: + px = pixels[src_x, src_y] + if px != BG_COLOR and px[3] > 0: + if is_blink and px in [C_WHITE, c_pupil]: + fp[x, y] = c_body + else: + fp[x, y] = px + + frames.append(frame) + + sheet = Image.new('RGBA', (w * 4, h)) + for i, f in enumerate(frames): + sheet.paste(f, (i * w, 0)) + + sheet.save(file_path) + print(f"Generated {file_path}") + +for sex in ['MALE', 'FEMALE', 'BABY']: + for direction in ['UP', 'DOWN', 'LEFT', 'RIGHT']: + file_path = f'/home/enne2/dev/mice/assets/Rat/BMP_{sex}_{direction}.png' + if os.path.exists(file_path.replace('.png', '_orig.png')): + generate_animation_v8(sex, direction, file_path) diff --git a/tools/lpc_extract/inspect_gas.py b/tools/lpc_extract/inspect_gas.py new file mode 100644 index 0000000..43c7045 --- /dev/null +++ b/tools/lpc_extract/inspect_gas.py @@ -0,0 +1,10 @@ +import glob +from PIL import Image + +gas = Image.open('/home/enne2/dev/mice/assets/Rat/BMP_1_GAS_DOWN.png').convert('RGB') +colors = set(gas.getdata()) +print("Colors in GAS_DOWN:", colors) + +flower = Image.open('/home/enne2/dev/mice/assets/Rat/BMP_1_FLOWER_1.png').convert('RGB') +colors = set(flower.getdata()) +print("Colors in FLOWER_1:", colors) diff --git a/tools/lpc_extract/inspect_lpc.py b/tools/lpc_extract/inspect_lpc.py new file mode 100644 index 0000000..91a3ed3 --- /dev/null +++ b/tools/lpc_extract/inspect_lpc.py @@ -0,0 +1,11 @@ +from PIL import Image +import subprocess + +src_img = Image.open('/home/enne2/dev/asset-maker/assets/poses/sources/lpc-revised/Terrain/terrain_spring.png').convert('RGBA') + +# Extract the 3x4 block from tx=3 to 5, ty=0 to 3 +# Also extract ty=4 just in case +box = (3 * 32, 0, 6 * 32, 5 * 32) +block = src_img.crop(box) +block.save('/home/enne2/dev/mice/tools/lpc_extract/lpc_grass_dirt.png') +print("Created lpc_grass_dirt.png") diff --git a/tools/lpc_extract/montage_originals.py b/tools/lpc_extract/montage_originals.py new file mode 100644 index 0000000..4c2e1e3 --- /dev/null +++ b/tools/lpc_extract/montage_originals.py @@ -0,0 +1,18 @@ +import glob +import subprocess +import os + +files = sorted(glob.glob('/home/enne2/dev/mice/assets/Rat/*BMP_1*.png')) + +# Use ImageMagick montage to create a preview with labels +cmd = [ + 'montage', + '-label', '%t', # Use the filename (without extension) as label + *files, + '-geometry', '+2+2', + '-background', 'transparent', + '-tile', '6x', + '/home/enne2/dev/mice/tools/lpc_extract/originals_with_labels.png' +] +subprocess.run(cmd) +print("Done creating originals_with_labels.png") diff --git a/tools/lpc_extract/recolor.py b/tools/lpc_extract/recolor.py new file mode 100644 index 0000000..8f95d8b --- /dev/null +++ b/tools/lpc_extract/recolor.py @@ -0,0 +1,45 @@ +import glob +import os +from PIL import Image + +# Original colors mapped to LPC approximate equivalents +color_map = { + (0, 128, 0): (92, 154, 42), # Dark Green + (0, 255, 0): (124, 184, 47), # Bright Green + (128, 128, 128): (173, 132, 79), # Grey -> Brown dirt + (192, 192, 192): (248, 188, 118), # Light Grey -> Light dirt/sand + (0, 0, 0): (107, 60, 46), # Black -> Dark brown (for softer LPC look) + (255, 255, 0): (224, 156, 76), # Yellow -> LPC Yellow/Orange + (255, 255, 255): (244, 215, 160), # White -> LPC Light bone/sand + (0, 255, 255): (164, 221, 219), # Cyan + (255, 0, 255): (210, 100, 150), # Magenta -> Pink + (255, 0, 0): (180, 50, 50), # Red +} + +def recolor_pixel(px): + # px is (r, g, b) or (r, g, b, a) + rgb = px[:3] + if rgb in color_map: + new_rgb = color_map[rgb] + if len(px) == 4: + return new_rgb + (px[3],) + return new_rgb + + # If not exact match, find closest by euclidean distance + closest = min(color_map.keys(), key=lambda c: sum((a-b)**2 for a, b in zip(rgb, c))) + new_rgb = color_map[closest] + if len(px) == 4: + return new_rgb + (px[3],) + return new_rgb + +input_files = glob.glob('/home/enne2/dev/mice/assets/Rat/*BMP_1*.png') +out_dir = '/home/enne2/dev/mice/assets/Rat_LPC_Style/' + +for f in input_files: + img = Image.open(f).convert('RGBA') + new_data = [recolor_pixel(p) for p in img.getdata()] + img.putdata(new_data) + + basename = os.path.basename(f) + img.save(os.path.join(out_dir, basename)) + print(f"Recolored {basename}") diff --git a/tools/lpc_extract/restyle_v11.py b/tools/lpc_extract/restyle_v11.py new file mode 100644 index 0000000..643d20d --- /dev/null +++ b/tools/lpc_extract/restyle_v11.py @@ -0,0 +1,215 @@ +import glob +import os +import random +import math +from PIL import Image + +# Vibrant colors closer to the original 8-bit sprites, but rich and organic +C_DARK = (15, 110, 35, 255) +C_MED = (30, 155, 45, 255) +C_LIGHT = (45, 195, 60, 255) +C_BRIGHT = (70, 230, 80, 255) +C_SHADOW = (20, 50, 30, 100) # Softer, greener shadow instead of black/purple +C_SHADOW_SOFT = (20, 50, 30, 50) +C_DIRT = (128, 128, 128, 255) + +def draw_wrapped_circle(pixels, w, h, cx, cy, r, color): + for y in range(int(cy - r - 1), int(cy + r + 2)): + for x in range(int(cx - r - 1), int(cx + r + 2)): + d = math.hypot(x - cx, y - cy) + if d <= r: + pixels[x % w, y % h] = color + +def generate_seamless_hedge(w, h): + img = Image.new('RGBA', (w, h), C_MED) + pixels = img.load() + + # Large clusters of base grass color + for _ in range((w * h) // 16): + cx, cy = random.uniform(0, w), random.uniform(0, h) + draw_wrapped_circle(pixels, w, h, cx, cy, random.uniform(2.0, 3.5), C_LIGHT) + + # Highlights + for _ in range((w * h) // 32): + cx, cy = random.uniform(0, w), random.uniform(0, h) + draw_wrapped_circle(pixels, w, h, cx, cy, random.uniform(1.0, 2.0), C_BRIGHT) + + # Tiny dark gaps + for _ in range((w * h) // 80): + cx, cy = random.uniform(0, w), random.uniform(0, h) + draw_wrapped_circle(pixels, w, h, cx, cy, random.uniform(0.5, 1.2), C_DARK) + + return img + +def get_class(rgb): + if rgb in [(0, 128, 0), (0, 255, 0)]: + return 'GRASS' + return 'DIRT' + +def alpha_blend(c1, c2): + a = c1[3] / 255.0 + r = int(c1[0] * a + c2[0] * (1 - a)) + g = int(c1[1] * a + c2[1] * (1 - a)) + b = int(c1[2] * a + c2[2] * (1 - a)) + return (r, g, b, 255) + +input_files = glob.glob('/home/enne2/dev/mice/assets/Rat/*BMP_1*.png') +out_dir = '/home/enne2/dev/mice/assets/Rat_LPC_Style/' +os.makedirs(out_dir, exist_ok=True) + +base_hedge_64 = generate_seamless_hedge(64, 64) + +for f in input_files: + basename = os.path.basename(f) + img = Image.open(f).convert('RGBA') + width, height = img.size + pixels = img.load() + + out_img = Image.new('RGBA', (width, height)) + out_pixels = out_img.load() + + is_fx = 'EXPLOSION' in basename or 'GAS' in basename + is_flower = 'FLOWER' in basename + + mask = {} + for y in range(height): + for x in range(width): + px = pixels[x, y][:3] + cls = get_class(px) + if is_flower: + mask[(x, y)] = 'GRASS' + elif is_fx: + if cls == 'GRASS': + mask[(x, y)] = 'GRASS' + else: + mask[(x, y)] = 'DIRT' + else: + mask[(x, y)] = cls + + tile_hedge = base_hedge_64.copy() + tile_pixels = tile_hedge.load() + + if basename == 'BMP_1_GRASS_2.png': + for _ in range(8): + cx, cy = random.randint(16, 48), random.randint(16, 48) + tile_pixels[cx, cy] = (220, 50, 50, 255) + elif basename == 'BMP_1_GRASS_3.png': + for _ in range(12): + cx, cy = random.randint(16, 48), random.randint(16, 48) + tile_pixels[cx, cy] = (255, 255, 255, 255) + elif basename == 'BMP_1_GRASS_4.png': + for _ in range(20): + cx, cy = random.randint(20, 44), random.randint(20, 44) + draw_wrapped_circle(tile_pixels, 64, 64, cx, cy, random.uniform(1.0, 2.5), C_MED) + + for y in range(height): + for x in range(width): + if mask[(x, y)] == 'GRASS': + dist_to_dirt = 999 + for dy in range(-3, 4): + for dx in range(-3, 4): + nx, ny = x + dx, y + dy + if 0 <= nx < width and 0 <= ny < height: + if mask[(nx, ny)] == 'DIRT': + d = math.hypot(dx, dy) + if d < dist_to_dirt: + dist_to_dirt = d + + if dist_to_dirt <= 1.5: + dirt_below = (y+1 < height and mask[(x, y+1)] == 'DIRT') or (y+2 < height and mask[(x, y+2)] == 'DIRT') + if dirt_below: + # Solid dark green outline on the bottom (no more dashes!) + out_pixels[x, y] = C_DARK + else: + out_pixels[x, y] = C_MED + elif dist_to_dirt <= 2.5: + out_pixels[x, y] = C_MED + else: + out_pixels[x, y] = tile_pixels[x % 64, y % 64] + else: + orig_color = pixels[x, y][:3] + if orig_color == (0, 0, 0) and not is_fx: + # Replace debug dashed lines with dirt + orig_color = C_DIRT[:3] + + if orig_color == (0, 0, 0): + out_pixels[x, y] = (0, 0, 0, 255) + elif orig_color in [(128,128,128), (192,192,192)]: + dist_to_grass = 999 + for dy in range(-2, 3): + for dx in range(-2, 3): + nx, ny = x + dx, y + dy + if 0 <= nx < width and 0 <= ny < height: + if mask[(nx, ny)] == 'GRASS': + d = math.hypot(dx, dy) + if d < dist_to_grass: + dist_to_grass = d + base_c = orig_color + if dist_to_grass <= 1.5: + out_pixels[x, y] = alpha_blend(C_SHADOW, base_c) + elif dist_to_grass <= 2.5: + out_pixels[x, y] = alpha_blend(C_SHADOW_SOFT, base_c) + else: + out_pixels[x, y] = base_c + (255,) + else: + out_pixels[x, y] = orig_color + (255,) + + # Flowers logic + if is_flower: + def draw_circle(cx, cy, r, color, outline=None): + for fy in range(cy - r - 1, cy + r + 2): + for fx in range(cx - r - 1, cx + r + 2): + if 0 <= fx < width and 0 <= fy < height: + d = math.hypot(fx - cx, fy - cy) + if d <= r: + out_pixels[fx, fy] = color + elif outline and r < d <= r + 1.2: + if out_pixels[fx, fy] != color: + out_pixels[fx, fy] = outline + + def draw_petal(cx, cy, angle, length, pw, color, outline): + cos_a, sin_a = math.cos(angle), math.sin(angle) + size = int(length + pw) + for fy in range(cy - size, cy + size + 1): + for fx in range(cx - size, cx + size + 1): + if 0 <= fx < width and 0 <= fy < height: + dx, dy = fx - cx, fy - cy + rx = dx * cos_a + dy * sin_a + ry = -dx * sin_a + dy * cos_a + if length > 0 and pw > 0: + val = (rx / length)**2 + (ry / pw)**2 + if val <= 1.0: + out_pixels[fx, fy] = color + elif val <= 1.5: + if out_pixels[fx, fy] != color: + out_pixels[fx, fy] = outline + + def draw_large_flower(cx, cy, petal_color, outline_color, center_color, num_petals, petal_length, petal_width): + draw_circle(cx, cy + 3, petal_length + 1, (20, 50, 20, 200)) + for i in range(num_petals): + angle = i * (2 * math.pi / num_petals) + pcolor = (int(petal_color[0]*0.8), int(petal_color[1]*0.8), int(petal_color[2]*0.8), 255) if math.sin(angle) > 0 else petal_color + draw_petal(cx, cy, angle, petal_length, petal_width, pcolor, outline_color) + draw_circle(cx, cy, petal_width + 1, center_color, (int(center_color[0]*0.6), int(center_color[1]*0.6), int(center_color[2]*0.6), 255)) + + if 'FLOWER_1' in basename: + draw_large_flower(32, 32, (240, 240, 240, 255), (100, 100, 110, 255), (240, 200, 50, 255), 10, 14, 5) + elif 'FLOWER_2' in basename: + draw_large_flower(16, 16, (200, 40, 40, 255), (80, 20, 20, 255), (240, 200, 50, 255), 5, 7, 4) + draw_large_flower(48, 20, (200, 40, 40, 255), (80, 20, 20, 255), (240, 200, 50, 255), 5, 7, 4) + draw_large_flower(32, 48, (200, 40, 40, 255), (80, 20, 20, 255), (240, 200, 50, 255), 5, 7, 4) + elif 'FLOWER_3' in basename: + draw_large_flower(32, 32, (220, 80, 180, 255), (100, 30, 80, 255), (240, 200, 50, 255), 8, 12, 6) + elif 'FLOWER_4' in basename: + draw_large_flower(32, 32, (80, 150, 230, 255), (30, 70, 120, 255), (240, 200, 50, 255), 8, 12, 6) + + if is_fx: + for y in range(height): + for x in range(width): + px = pixels[x, y][:3] + if get_class(px) != 'GRASS' and px not in [(128,128,128), (192,192,192), (0,0,0)]: + out_pixels[x, y] = px + (255,) + + out_img.save(os.path.join(out_dir, basename)) + +print("V11 - Vibrant 8-bit-like colors and NO dashed lines!") diff --git a/tools/lpc_extract/sample_bush.py b/tools/lpc_extract/sample_bush.py new file mode 100644 index 0000000..34f70c0 --- /dev/null +++ b/tools/lpc_extract/sample_bush.py @@ -0,0 +1,14 @@ +from PIL import Image + +img = Image.open('/home/enne2/dev/mice/tools/lpc_extract/bushes.png').convert('RGBA') +pixels = img.load() + +print("Top edge transition:") +for y in range(0, 48): + if pixels[48, y][3] > 0: + print(f"y={y}: {pixels[48, y]}") + +print("\nBottom edge transition:") +for y in range(95, 48, -1): + if pixels[48, y][3] > 0: + print(f"y={y}: {pixels[48, y]}") diff --git a/tools/lpc_extract/solve_grass.py b/tools/lpc_extract/solve_grass.py new file mode 100644 index 0000000..58e0ba9 --- /dev/null +++ b/tools/lpc_extract/solve_grass.py @@ -0,0 +1,22 @@ +from PIL import Image + +src_img = Image.open('/home/enne2/dev/asset-maker/assets/poses/sources/lpc-revised/Terrain/terrain_spring.png').convert('RGBA') + +# The plain grass tile in LPC terrain is typically at col 4, row 1 (0-indexed) +tx, ty = 4, 1 +box = (tx * 32, ty * 32, (tx + 1) * 32, (ty + 1) * 32) +tile32 = src_img.crop(box) + +# Strategy 1: Tile it 2x2 to make a 64x64 image +img_tiled = Image.new('RGBA', (64, 64)) +img_tiled.paste(tile32, (0, 0)) +img_tiled.paste(tile32, (32, 0)) +img_tiled.paste(tile32, (0, 32)) +img_tiled.paste(tile32, (32, 32)) +img_tiled.save('/home/enne2/dev/mice/tools/lpc_extract/BMP_1_GRASS_1_tiled.png') + +# Strategy 2: Scale it 2x to make a 64x64 image +img_scaled = tile32.resize((64, 64), Image.NEAREST) +img_scaled.save('/home/enne2/dev/mice/tools/lpc_extract/BMP_1_GRASS_1_scaled.png') + +print("Created BMP_1_GRASS_1_tiled.png and BMP_1_GRASS_1_scaled.png") diff --git a/tools/lpc_extract/test_hedge.py b/tools/lpc_extract/test_hedge.py new file mode 100644 index 0000000..68d9c7c --- /dev/null +++ b/tools/lpc_extract/test_hedge.py @@ -0,0 +1,4 @@ +import sys +from PIL import Image +lpc = Image.open('/home/enne2/dev/asset-maker/assets/poses/sources/lpc-revised/Terrain/terrain_spring.png').convert('RGBA') +lpc.crop((0, 0, 96, 96)).save('/home/enne2/dev/mice/tools/lpc_extract/bushes.png') diff --git a/units/rat.py b/units/rat.py index 21c79fb..fb5b8fe 100644 --- a/units/rat.py +++ b/units/rat.py @@ -207,8 +207,9 @@ class Rat(Unit): if not self.game.map.is_empty(cell_x, cell_y): return - # Use pre-calculated positions - self.game.render_engine.draw_image(self.render_x, self.render_y, image, anchor="nw", tag="unit") + frame = min(3, int(self.partial_move * 4)) + source_rect = (frame * image_size[0], 0, image_size[0], image_size[1]) + self.game.render_engine.draw_image(self.render_x, self.render_y, image, anchor="nw", tag="unit", source_rect=source_rect) def _draw_partially_hidden_in_tunnel(self, image, image_size, center_x, center_y, cell_x, cell_y, direction): cell_size = self.game.cell_size @@ -219,13 +220,16 @@ class Rat(Unit): if width <= 0 or height <= 0: return False + frame = min(3, int(self.partial_move * 4)) + actual_source_x = source_x + (frame * image_size[0]) + self.game.render_engine.draw_image( self.render_x if draw_x is None else draw_x, self.render_y if draw_y is None else draw_y, image, anchor="nw", tag="unit", - source_rect=(source_x, source_y, width, height), + source_rect=(actual_source_x, source_y, width, height), dest_size=(width, height), ) return True