From 0f0fb59915bf3279cb50dfdfe784c1098cab38f1 Mon Sep 17 00:00:00 2001 From: SunakazeKun Date: Mon, 24 Dec 2018 18:02:04 +0100 Subject: [PATCH] v0.5 Cleanup, revised editors, LZ10 and 11 decompression --- .gitignore | 3 +- docs/format_map.txt | 200 ++ docs/format_mesg.txt | 16 + docs/list_mons.txt | 500 +++++ nbproject/private/private.xml | 1 + src/com/aurum/almia/BitConverter.java | 149 -- src/com/aurum/almia/ByteOrder.java | 46 - src/com/aurum/almia/Lists.java | 29 +- src/com/aurum/almia/Main.form | 4 +- src/com/aurum/almia/Main.java | 77 +- src/com/aurum/almia/Resources.java | 90 + src/com/aurum/almia/Utils.java | 45 - .../aurum/almia/editors/CollisionWidget.form | 48 + .../aurum/almia/editors/CollisionWidget.java | 65 + .../aurum/almia/editors/LocationWidget.form | 160 ++ .../aurum/almia/editors/LocationWidget.java | 218 ++ src/com/aurum/almia/editors/MapEditor.form | 150 ++ src/com/aurum/almia/editors/MapEditor.java | 534 +++++ .../aurum/almia/editors/MapInfoWidget.form | 135 ++ .../aurum/almia/editors/MapInfoWidget.java | 183 ++ src/com/aurum/almia/editors/MonWidget.form | 221 ++ src/com/aurum/almia/editors/MonWidget.java | 285 +++ src/com/aurum/almia/editors/NpcWidget.form | 230 ++ src/com/aurum/almia/editors/NpcWidget.java | 293 +++ .../{swing => editors}/PokeIDEditor.form | 4 +- .../{swing => editors}/PokeIDEditor.java | 142 +- src/com/aurum/almia/editors/TargetWidget.form | 266 +++ src/com/aurum/almia/editors/TargetWidget.java | 353 +++ .../aurum/almia/editors/TexInfoWidget.form | 135 ++ .../aurum/almia/editors/TexInfoWidget.java | 183 ++ src/com/aurum/almia/game/Compression.java | 124 ++ src/com/aurum/almia/game/Game.java | 70 +- src/com/aurum/almia/game/NARC.java | 181 -- src/com/aurum/almia/game/Narc.java | 181 ++ .../aurum/almia/game/map/AbstractData.java | 35 + .../aurum/almia/game/map/AbstractEntry.java | 39 + .../aurum/almia/game/map/CollOverlayData.java | 40 + .../aurum/almia/game/map/CollisionData.java | 107 + src/com/aurum/almia/game/map/Layer.java | 96 +- .../map/{WarpData.java => LocationData.java} | 77 +- src/com/aurum/almia/game/map/Map.java | 106 +- src/com/aurum/almia/game/map/MapInfo.java | 18 +- src/com/aurum/almia/game/map/MonData.java | 80 +- src/com/aurum/almia/game/map/NpcData.java | 67 +- src/com/aurum/almia/game/map/TargetData.java | 65 +- src/com/aurum/almia/game/map/TextureInfo.java | 61 +- .../aurum/almia/game/param/BattlePokemon.java | 72 +- src/com/aurum/almia/game/param/PokeID.java | 82 +- src/com/aurum/almia/swing/MapEditor.form | 1694 -------------- src/com/aurum/almia/swing/MapEditor.java | 1968 ----------------- src/com/aurum/almia/util/ArrayUtils.java | 545 +++++ src/com/aurum/almia/util/BitConverter.java | 162 ++ .../aurum/almia/{ => util}/ByteBuffer.java | 125 +- src/com/aurum/almia/util/IOHelper.java | 58 + src/com/aurum/almia/util/RenderHelper.java | 37 + src/res/icon.png | Bin 926 -> 688 bytes src/res/lists/npcs.txt | 256 +++ src/res/lists/obstacles.txt | 554 ++--- src/res/mapEditor/node_location.png | Bin 0 -> 817 bytes src/res/mapEditor/node_misc.png | Bin 0 -> 803 bytes src/res/mapEditor/node_mon.png | Bin 0 -> 838 bytes src/res/mapEditor/node_npc.png | Bin 0 -> 820 bytes src/res/mapEditor/node_target.png | Bin 0 -> 830 bytes src/res/mons/0_0.png | Bin 0 -> 367 bytes src/res/mons/100_0.png | Bin 0 -> 722 bytes src/res/mons/101_0.png | Bin 0 -> 844 bytes src/res/mons/109_0.png | Bin 0 -> 843 bytes src/res/mons/110_0.png | Bin 0 -> 1098 bytes src/res/mons/111_0.png | Bin 0 -> 1074 bytes src/res/mons/112_0.png | Bin 0 -> 1639 bytes src/res/mons/115_0.png | Bin 0 -> 2012 bytes src/res/mons/116_0.png | Bin 0 -> 647 bytes src/res/mons/117_0.png | Bin 0 -> 1069 bytes src/res/mons/120_0.png | Bin 0 -> 1001 bytes src/res/mons/121_0.png | Bin 0 -> 1059 bytes src/res/mons/122_0.png | Bin 0 -> 1311 bytes src/res/mons/123_0.png | Bin 0 -> 1498 bytes src/res/mons/124_0.png | Bin 0 -> 1298 bytes src/res/mons/125_0.png | Bin 0 -> 1287 bytes src/res/mons/126_0.png | Bin 0 -> 1135 bytes src/res/mons/127_0.png | Bin 0 -> 1323 bytes src/res/mons/128_0.png | Bin 0 -> 1283 bytes src/res/mons/133_0.png | Bin 0 -> 792 bytes src/res/mons/134_0.png | Bin 0 -> 1179 bytes src/res/mons/135_0.png | Bin 0 -> 1011 bytes src/res/mons/136_0.png | Bin 0 -> 1064 bytes src/res/mons/138_0.png | Bin 0 -> 891 bytes src/res/mons/139_0.png | Bin 0 -> 1220 bytes src/res/mons/13_0.png | Bin 0 -> 625 bytes src/res/mons/142_0.png | Bin 0 -> 1474 bytes src/res/mons/147_0.png | Bin 0 -> 897 bytes src/res/mons/148_0.png | Bin 0 -> 1215 bytes src/res/mons/15_0.png | Bin 0 -> 1049 bytes src/res/mons/167_0.png | Bin 0 -> 874 bytes src/res/mons/168_0.png | Bin 0 -> 1248 bytes src/res/mons/169_0.png | Bin 0 -> 1217 bytes src/res/mons/170_0.png | Bin 0 -> 869 bytes src/res/mons/171_0.png | Bin 0 -> 1027 bytes src/res/mons/172_0.png | Bin 0 -> 715 bytes src/res/mons/179_0.png | Bin 0 -> 896 bytes src/res/mons/180_0.png | Bin 0 -> 962 bytes src/res/mons/181_0.png | Bin 0 -> 982 bytes src/res/mons/182_0.png | Bin 0 -> 882 bytes src/res/mons/185_0.png | Bin 0 -> 990 bytes src/res/mons/190_0.png | Bin 0 -> 863 bytes src/res/mons/193_0.png | Bin 0 -> 924 bytes src/res/mons/196_0.png | Bin 0 -> 1048 bytes src/res/mons/197_0.png | Bin 0 -> 897 bytes src/res/mons/198_0.png | Bin 0 -> 850 bytes src/res/mons/19_0.png | Bin 0 -> 682 bytes src/res/mons/200_0.png | Bin 0 -> 856 bytes src/res/mons/203_0.png | Bin 0 -> 1333 bytes src/res/mons/204_0.png | Bin 0 -> 836 bytes src/res/mons/205_0.png | Bin 0 -> 1123 bytes src/res/mons/207_0.png | Bin 0 -> 1080 bytes src/res/mons/20_0.png | Bin 0 -> 962 bytes src/res/mons/211_0.png | Bin 0 -> 825 bytes src/res/mons/212_0.png | Bin 0 -> 1660 bytes src/res/mons/215_0.png | Bin 0 -> 843 bytes src/res/mons/218_0.png | Bin 0 -> 809 bytes src/res/mons/219_0.png | Bin 0 -> 1040 bytes src/res/mons/21_0.png | Bin 0 -> 804 bytes src/res/mons/220_0.png | Bin 0 -> 712 bytes src/res/mons/221_0.png | Bin 0 -> 1010 bytes src/res/mons/222_0.png | Bin 0 -> 860 bytes src/res/mons/225_0.png | Bin 0 -> 765 bytes src/res/mons/226_0.png | Bin 0 -> 1411 bytes src/res/mons/227_0.png | Bin 0 -> 1138 bytes src/res/mons/228_0.png | Bin 0 -> 938 bytes src/res/mons/229_0.png | Bin 0 -> 1209 bytes src/res/mons/22_0.png | Bin 0 -> 1426 bytes src/res/mons/230_0.png | Bin 0 -> 1321 bytes src/res/mons/236_0.png | Bin 0 -> 770 bytes src/res/mons/239_0.png | Bin 0 -> 1075 bytes src/res/mons/240_0.png | Bin 0 -> 794 bytes src/res/mons/241_0.png | Bin 0 -> 1117 bytes src/res/mons/246_0.png | Bin 0 -> 676 bytes src/res/mons/247_0.png | Bin 0 -> 865 bytes src/res/mons/248_0.png | Bin 0 -> 2572 bytes src/res/mons/251_0.png | Bin 0 -> 821 bytes src/res/mons/252_0.png | Bin 0 -> 687 bytes src/res/mons/253_0.png | Bin 0 -> 754 bytes src/res/mons/254_0.png | Bin 0 -> 1513 bytes src/res/mons/255_0.png | Bin 0 -> 608 bytes src/res/mons/256_0.png | Bin 0 -> 701 bytes src/res/mons/257_0.png | Bin 0 -> 1493 bytes src/res/mons/258_0.png | Bin 0 -> 659 bytes src/res/mons/259_0.png | Bin 0 -> 774 bytes src/res/mons/25_0.png | Bin 0 -> 763 bytes src/res/mons/260_0.png | Bin 0 -> 1126 bytes src/res/mons/26_0.png | Bin 0 -> 953 bytes src/res/mons/273_0.png | Bin 0 -> 647 bytes src/res/mons/274_0.png | Bin 0 -> 450 bytes src/res/mons/275_0.png | Bin 0 -> 1350 bytes src/res/mons/276_0.png | Bin 0 -> 756 bytes src/res/mons/277_0.png | Bin 0 -> 925 bytes src/res/mons/278_0.png | Bin 0 -> 848 bytes src/res/mons/279_0.png | Bin 0 -> 952 bytes src/res/mons/27_0.png | Bin 0 -> 880 bytes src/res/mons/280_0.png | Bin 0 -> 570 bytes src/res/mons/281_0.png | Bin 0 -> 747 bytes src/res/mons/282_0.png | Bin 0 -> 1196 bytes src/res/mons/287_0.png | Bin 0 -> 1043 bytes src/res/mons/28_0.png | Bin 0 -> 1284 bytes src/res/mons/291_0.png | Bin 0 -> 998 bytes src/res/mons/296_0.png | Bin 0 -> 878 bytes src/res/mons/297_0.png | Bin 0 -> 1695 bytes src/res/mons/299_0.png | Bin 0 -> 966 bytes src/res/mons/302_0.png | Bin 0 -> 800 bytes src/res/mons/303_0.png | Bin 0 -> 915 bytes src/res/mons/304_0.png | Bin 0 -> 675 bytes src/res/mons/305_0.png | Bin 0 -> 1135 bytes src/res/mons/306_0.png | Bin 0 -> 2280 bytes src/res/mons/311_0.png | Bin 0 -> 781 bytes src/res/mons/312_0.png | Bin 0 -> 815 bytes src/res/mons/315_0.png | Bin 0 -> 445 bytes src/res/mons/319_0.png | Bin 0 -> 1196 bytes src/res/mons/320_0.png | Bin 0 -> 995 bytes src/res/mons/321_0.png | Bin 0 -> 2099 bytes src/res/mons/322_0.png | Bin 0 -> 881 bytes src/res/mons/323_0.png | Bin 0 -> 1868 bytes src/res/mons/324_0.png | Bin 0 -> 1287 bytes src/res/mons/330_0.png | Bin 0 -> 1338 bytes src/res/mons/331_0.png | Bin 0 -> 870 bytes src/res/mons/332_0.png | Bin 0 -> 1121 bytes src/res/mons/334_0.png | Bin 0 -> 1121 bytes src/res/mons/344_0.png | Bin 0 -> 1089 bytes src/res/mons/353_0.png | Bin 0 -> 570 bytes src/res/mons/354_0.png | Bin 0 -> 765 bytes src/res/mons/355_0.png | Bin 0 -> 781 bytes src/res/mons/356_0.png | Bin 0 -> 1322 bytes src/res/mons/359_0.png | Bin 0 -> 1495 bytes src/res/mons/361_0.png | Bin 0 -> 864 bytes src/res/mons/362_0.png | Bin 0 -> 1236 bytes src/res/mons/363_0.png | Bin 0 -> 885 bytes src/res/mons/364_0.png | Bin 0 -> 1106 bytes src/res/mons/365_0.png | Bin 0 -> 1242 bytes src/res/mons/367_0.png | Bin 0 -> 942 bytes src/res/mons/368_0.png | Bin 0 -> 855 bytes src/res/mons/371_0.png | Bin 0 -> 684 bytes src/res/mons/372_0.png | Bin 0 -> 884 bytes src/res/mons/373_0.png | Bin 0 -> 1465 bytes src/res/mons/377_0.png | Bin 0 -> 1857 bytes src/res/mons/378_0.png | Bin 0 -> 1575 bytes src/res/mons/379_0.png | Bin 0 -> 1908 bytes src/res/mons/37_0.png | Bin 0 -> 1001 bytes src/res/mons/387_0.png | Bin 0 -> 451 bytes src/res/mons/388_0.png | Bin 0 -> 767 bytes src/res/mons/389_0.png | Bin 0 -> 1024 bytes src/res/mons/38_0.png | Bin 0 -> 1343 bytes src/res/mons/390_0.png | Bin 0 -> 447 bytes src/res/mons/391_0.png | Bin 0 -> 586 bytes src/res/mons/392_0.png | Bin 0 -> 691 bytes src/res/mons/393_0.png | Bin 0 -> 398 bytes src/res/mons/394_0.png | Bin 0 -> 562 bytes src/res/mons/395_0.png | Bin 0 -> 826 bytes src/res/mons/396_0.png | Bin 0 -> 574 bytes src/res/mons/397_0.png | Bin 0 -> 636 bytes src/res/mons/398_0.png | Bin 0 -> 771 bytes src/res/mons/399_0.png | Bin 0 -> 473 bytes src/res/mons/39_0.png | Bin 0 -> 776 bytes src/res/mons/400_0.png | Bin 0 -> 673 bytes src/res/mons/401_0.png | Bin 0 -> 463 bytes src/res/mons/402_0.png | Bin 0 -> 591 bytes src/res/mons/403_0.png | Bin 0 -> 511 bytes src/res/mons/404_0.png | Bin 0 -> 632 bytes src/res/mons/405_0.png | Bin 0 -> 785 bytes src/res/mons/406_0.png | Bin 0 -> 367 bytes src/res/mons/407_0.png | Bin 0 -> 486 bytes src/res/mons/408_0.png | Bin 0 -> 550 bytes src/res/mons/409_0.png | Bin 0 -> 713 bytes src/res/mons/40_0.png | Bin 0 -> 891 bytes src/res/mons/410_0.png | Bin 0 -> 455 bytes src/res/mons/411_0.png | Bin 0 -> 819 bytes src/res/mons/412_0.png | Bin 0 -> 616 bytes src/res/mons/412_1.png | Bin 0 -> 486 bytes src/res/mons/412_2.png | Bin 0 -> 602 bytes src/res/mons/413_0.png | Bin 0 -> 733 bytes src/res/mons/413_1.png | Bin 0 -> 616 bytes src/res/mons/413_2.png | Bin 0 -> 764 bytes src/res/mons/414_0.png | Bin 0 -> 604 bytes src/res/mons/415_0.png | Bin 0 -> 483 bytes src/res/mons/416_0.png | Bin 0 -> 621 bytes src/res/mons/417_0.png | Bin 0 -> 439 bytes src/res/mons/418_0.png | Bin 0 -> 467 bytes src/res/mons/419_0.png | Bin 0 -> 620 bytes src/res/mons/41_0.png | Bin 0 -> 840 bytes src/res/mons/420_0.png | Bin 0 -> 397 bytes src/res/mons/421_0.png | Bin 0 -> 526 bytes src/res/mons/421_1.png | Bin 0 -> 493 bytes src/res/mons/422_0.png | Bin 0 -> 425 bytes src/res/mons/422_1.png | Bin 0 -> 900 bytes src/res/mons/423_0.png | Bin 0 -> 688 bytes src/res/mons/423_1.png | Bin 0 -> 535 bytes src/res/mons/424_0.png | Bin 0 -> 747 bytes src/res/mons/425_0.png | Bin 0 -> 442 bytes src/res/mons/426_0.png | Bin 0 -> 602 bytes src/res/mons/427_0.png | Bin 0 -> 393 bytes src/res/mons/428_0.png | Bin 0 -> 586 bytes src/res/mons/429_0.png | Bin 0 -> 620 bytes src/res/mons/42_0.png | Bin 0 -> 1356 bytes src/res/mons/430_0.png | Bin 0 -> 632 bytes src/res/mons/431_0.png | Bin 0 -> 565 bytes src/res/mons/432_0.png | Bin 0 -> 603 bytes src/res/mons/433_0.png | Bin 0 -> 396 bytes src/res/mons/434_0.png | Bin 0 -> 467 bytes src/res/mons/435_0.png | Bin 0 -> 653 bytes src/res/mons/436_0.png | Bin 0 -> 450 bytes src/res/mons/437_0.png | Bin 0 -> 684 bytes src/res/mons/438_0.png | Bin 0 -> 368 bytes src/res/mons/439_0.png | Bin 0 -> 412 bytes src/res/mons/43_0.png | Bin 0 -> 729 bytes src/res/mons/440_0.png | Bin 0 -> 449 bytes src/res/mons/441_0.png | Bin 0 -> 527 bytes src/res/mons/442_0.png | Bin 0 -> 564 bytes src/res/mons/443_0.png | Bin 0 -> 525 bytes src/res/mons/444_0.png | Bin 0 -> 623 bytes src/res/mons/445_0.png | Bin 0 -> 837 bytes src/res/mons/446_0.png | Bin 0 -> 427 bytes src/res/mons/447_0.png | Bin 0 -> 428 bytes src/res/mons/447_1.png | Bin 0 -> 790 bytes src/res/mons/448_0.png | Bin 0 -> 653 bytes src/res/mons/448_1.png | Bin 0 -> 980 bytes src/res/mons/449_0.png | Bin 0 -> 543 bytes src/res/mons/44_0.png | Bin 0 -> 1008 bytes src/res/mons/450_0.png | Bin 0 -> 839 bytes src/res/mons/451_0.png | Bin 0 -> 534 bytes src/res/mons/452_0.png | Bin 0 -> 952 bytes src/res/mons/453_0.png | Bin 0 -> 445 bytes src/res/mons/454_0.png | Bin 0 -> 658 bytes src/res/mons/455_0.png | Bin 0 -> 612 bytes src/res/mons/456_0.png | Bin 0 -> 454 bytes src/res/mons/457_0.png | Bin 0 -> 509 bytes src/res/mons/458_0.png | Bin 0 -> 460 bytes src/res/mons/459_0.png | Bin 0 -> 603 bytes src/res/mons/45_0.png | Bin 0 -> 1023 bytes src/res/mons/460_0.png | Bin 0 -> 943 bytes src/res/mons/461_0.png | Bin 0 -> 483 bytes src/res/mons/462_0.png | Bin 0 -> 725 bytes src/res/mons/463_0.png | Bin 0 -> 651 bytes src/res/mons/464_0.png | Bin 0 -> 1098 bytes src/res/mons/465_0.png | Bin 0 -> 948 bytes src/res/mons/466_0.png | Bin 0 -> 974 bytes src/res/mons/467_0.png | Bin 0 -> 792 bytes src/res/mons/468_0.png | Bin 0 -> 491 bytes src/res/mons/469_0.png | Bin 0 -> 823 bytes src/res/mons/470_0.png | Bin 0 -> 578 bytes src/res/mons/471_0.png | Bin 0 -> 604 bytes src/res/mons/472_0.png | Bin 0 -> 682 bytes src/res/mons/473_0.png | Bin 0 -> 972 bytes src/res/mons/474_0.png | Bin 0 -> 454 bytes src/res/mons/475_0.png | Bin 0 -> 552 bytes src/res/mons/476_0.png | Bin 0 -> 725 bytes src/res/mons/477_0.png | Bin 0 -> 911 bytes src/res/mons/478_0.png | Bin 0 -> 563 bytes src/res/mons/483_0.png | Bin 0 -> 1815 bytes src/res/mons/484_0.png | Bin 0 -> 1691 bytes src/res/mons/485_0.png | Bin 0 -> 1036 bytes src/res/mons/485_1.png | Bin 0 -> 1585 bytes src/res/mons/486_0.png | Bin 0 -> 1654 bytes src/res/mons/488_0.png | Bin 0 -> 749 bytes src/res/mons/488_1.png | Bin 0 -> 1127 bytes src/res/mons/489_0.png | Bin 0 -> 603 bytes src/res/mons/490_0.png | Bin 0 -> 606 bytes src/res/mons/490_1.png | Bin 0 -> 689 bytes src/res/mons/491_0.png | Bin 0 -> 617 bytes src/res/mons/491_1.png | Bin 0 -> 617 bytes src/res/mons/492_0.png | Bin 0 -> 397 bytes src/res/mons/4_0.png | Bin 0 -> 880 bytes src/res/mons/56_0.png | Bin 0 -> 995 bytes src/res/mons/57_0.png | Bin 0 -> 1265 bytes src/res/mons/58_0.png | Bin 0 -> 1066 bytes src/res/mons/59_0.png | Bin 0 -> 2187 bytes src/res/mons/5_0.png | Bin 0 -> 1017 bytes src/res/mons/63_0.png | Bin 0 -> 838 bytes src/res/mons/65_0.png | Bin 0 -> 1067 bytes src/res/mons/66_0.png | Bin 0 -> 740 bytes src/res/mons/67_0.png | Bin 0 -> 1143 bytes src/res/mons/68_0.png | Bin 0 -> 1471 bytes src/res/mons/6_0.png | Bin 0 -> 1972 bytes src/res/mons/6_1.png | Bin 0 -> 1716 bytes src/res/mons/71_0.png | Bin 0 -> 1223 bytes src/res/mons/73_0.png | Bin 0 -> 1168 bytes src/res/mons/74_0.png | Bin 0 -> 882 bytes src/res/mons/75_0.png | Bin 0 -> 1374 bytes src/res/mons/76_0.png | Bin 0 -> 1329 bytes src/res/mons/77_0.png | Bin 0 -> 1217 bytes src/res/mons/78_0.png | Bin 0 -> 1715 bytes src/res/mons/7_0.png | Bin 0 -> 899 bytes src/res/mons/81_0.png | Bin 0 -> 654 bytes src/res/mons/82_0.png | Bin 0 -> 998 bytes src/res/mons/84_0.png | Bin 0 -> 1038 bytes src/res/mons/85_0.png | Bin 0 -> 1185 bytes src/res/mons/89_0.png | Bin 0 -> 1302 bytes src/res/mons/8_0.png | Bin 0 -> 1157 bytes src/res/mons/92_0.png | Bin 0 -> 940 bytes src/res/mons/93_0.png | Bin 0 -> 1123 bytes src/res/mons/94_0.png | Bin 0 -> 936 bytes src/res/mons/96_0.png | Bin 0 -> 1082 bytes src/res/mons/97_0.png | Bin 0 -> 1131 bytes src/res/mons/9_0.png | Bin 0 -> 1837 bytes src/res/npcs/1.png | Bin 0 -> 1400 bytes src/res/npcs/10.png | Bin 0 -> 1266 bytes src/res/npcs/11.png | Bin 0 -> 1285 bytes src/res/npcs/12.png | Bin 0 -> 1347 bytes src/res/npcs/13.png | Bin 0 -> 1415 bytes src/res/npcs/14.png | Bin 0 -> 1312 bytes src/res/npcs/15.png | Bin 0 -> 1370 bytes src/res/npcs/16.png | Bin 0 -> 1269 bytes src/res/npcs/17.png | Bin 0 -> 1260 bytes src/res/npcs/18.png | Bin 0 -> 1754 bytes src/res/npcs/19.png | Bin 0 -> 1374 bytes src/res/npcs/2.png | Bin 0 -> 1395 bytes src/res/npcs/3.png | Bin 0 -> 1192 bytes src/res/npcs/4.png | Bin 0 -> 1261 bytes src/res/npcs/5.png | Bin 0 -> 1309 bytes src/res/npcs/6.png | Bin 0 -> 1329 bytes src/res/npcs/7.png | Bin 0 -> 1546 bytes src/res/npcs/8.png | Bin 0 -> 1289 bytes src/res/npcs/9.png | Bin 0 -> 1262 bytes src/res/targets/1.png | Bin 0 -> 385 bytes src/res/targets/10.png | Bin 0 -> 491 bytes src/res/targets/108.png | Bin 0 -> 719 bytes src/res/targets/109.png | Bin 0 -> 895 bytes src/res/targets/11.png | Bin 0 -> 346 bytes src/res/targets/12.png | Bin 0 -> 549 bytes src/res/targets/13.png | Bin 0 -> 684 bytes src/res/targets/130.png | Bin 0 -> 822 bytes src/res/targets/131.png | Bin 0 -> 1418 bytes src/res/targets/132.png | Bin 0 -> 882 bytes src/res/targets/133.png | Bin 0 -> 869 bytes src/res/targets/134.png | Bin 0 -> 1078 bytes src/res/targets/136.png | Bin 0 -> 1104 bytes src/res/targets/137.png | Bin 0 -> 1114 bytes src/res/targets/138.png | Bin 0 -> 1084 bytes src/res/targets/139.png | Bin 0 -> 519 bytes src/res/targets/14.png | Bin 0 -> 598 bytes src/res/targets/140.png | Bin 0 -> 1754 bytes src/res/targets/141.png | Bin 0 -> 637 bytes src/res/targets/15.png | Bin 0 -> 595 bytes src/res/targets/16.png | Bin 0 -> 592 bytes src/res/targets/17.png | Bin 0 -> 592 bytes src/res/targets/18.png | Bin 0 -> 585 bytes src/res/targets/19.png | Bin 0 -> 571 bytes src/res/targets/2.png | Bin 0 -> 587 bytes src/res/targets/20.png | Bin 0 -> 541 bytes src/res/targets/21.png | Bin 0 -> 634 bytes src/res/targets/22.png | Bin 0 -> 540 bytes src/res/targets/23.png | Bin 0 -> 821 bytes src/res/targets/24.png | Bin 0 -> 1447 bytes src/res/targets/25.png | Bin 0 -> 719 bytes src/res/targets/26.png | Bin 0 -> 739 bytes src/res/targets/27.png | Bin 0 -> 514 bytes src/res/targets/28.png | Bin 0 -> 653 bytes src/res/targets/29.png | Bin 0 -> 1193 bytes src/res/targets/3.png | Bin 0 -> 576 bytes src/res/targets/30.png | Bin 0 -> 1153 bytes src/res/targets/31.png | Bin 0 -> 1125 bytes src/res/targets/32.png | Bin 0 -> 1029 bytes src/res/targets/33.png | Bin 0 -> 943 bytes src/res/targets/34.png | Bin 0 -> 954 bytes src/res/targets/35.png | Bin 0 -> 1455 bytes src/res/targets/36.png | Bin 0 -> 1474 bytes src/res/targets/37.png | Bin 0 -> 726 bytes src/res/targets/38.png | Bin 0 -> 577 bytes src/res/targets/39.png | Bin 0 -> 1082 bytes src/res/targets/4.png | Bin 0 -> 453 bytes src/res/targets/40.png | Bin 0 -> 890 bytes src/res/targets/41.png | Bin 0 -> 1002 bytes src/res/targets/42.png | Bin 0 -> 582 bytes src/res/targets/43.png | Bin 0 -> 2356 bytes src/res/targets/44.png | Bin 0 -> 717 bytes src/res/targets/45.png | Bin 0 -> 731 bytes src/res/targets/46.png | Bin 0 -> 2931 bytes src/res/targets/47.png | Bin 0 -> 857 bytes src/res/targets/48.png | Bin 0 -> 1374 bytes src/res/targets/49.png | Bin 0 -> 1446 bytes src/res/targets/5.png | Bin 0 -> 608 bytes src/res/targets/50.png | Bin 0 -> 857 bytes src/res/targets/51.png | Bin 0 -> 1279 bytes src/res/targets/52.png | Bin 0 -> 1148 bytes src/res/targets/53.png | Bin 0 -> 592 bytes src/res/targets/54.png | Bin 0 -> 734 bytes src/res/targets/55.png | Bin 0 -> 505 bytes src/res/targets/59.png | Bin 0 -> 869 bytes src/res/targets/6.png | Bin 0 -> 602 bytes src/res/targets/60.png | Bin 0 -> 1061 bytes src/res/targets/64.png | Bin 0 -> 408 bytes src/res/targets/68.png | Bin 0 -> 576 bytes src/res/targets/7.png | Bin 0 -> 475 bytes src/res/targets/70.png | Bin 0 -> 586 bytes src/res/targets/72.png | Bin 0 -> 2401 bytes src/res/targets/74.png | Bin 0 -> 2805 bytes src/res/targets/78.png | Bin 0 -> 550 bytes src/res/targets/8.png | Bin 0 -> 667 bytes src/res/targets/84.png | Bin 0 -> 765 bytes src/res/targets/85.png | Bin 0 -> 738 bytes src/res/targets/86.png | Bin 0 -> 755 bytes src/res/targets/87.png | Bin 0 -> 742 bytes src/res/targets/88.png | Bin 0 -> 866 bytes src/res/targets/89.png | Bin 0 -> 1081 bytes src/res/targets/9.png | Bin 0 -> 729 bytes src/res/targets/91.png | Bin 0 -> 754 bytes src/res/tp_npc.png | Bin 1035 -> 0 bytes src/res/tp_pokemon.png | Bin 1395 -> 0 bytes src/res/tp_target.png | Bin 1104 -> 0 bytes src/res/tp_warp.png | Bin 1381 -> 0 bytes 467 files changed, 6861 insertions(+), 4804 deletions(-) create mode 100644 docs/format_map.txt create mode 100644 docs/format_mesg.txt create mode 100644 docs/list_mons.txt delete mode 100644 src/com/aurum/almia/BitConverter.java delete mode 100644 src/com/aurum/almia/ByteOrder.java create mode 100644 src/com/aurum/almia/Resources.java delete mode 100644 src/com/aurum/almia/Utils.java create mode 100644 src/com/aurum/almia/editors/CollisionWidget.form create mode 100644 src/com/aurum/almia/editors/CollisionWidget.java create mode 100644 src/com/aurum/almia/editors/LocationWidget.form create mode 100644 src/com/aurum/almia/editors/LocationWidget.java create mode 100644 src/com/aurum/almia/editors/MapEditor.form create mode 100644 src/com/aurum/almia/editors/MapEditor.java create mode 100644 src/com/aurum/almia/editors/MapInfoWidget.form create mode 100644 src/com/aurum/almia/editors/MapInfoWidget.java create mode 100644 src/com/aurum/almia/editors/MonWidget.form create mode 100644 src/com/aurum/almia/editors/MonWidget.java create mode 100644 src/com/aurum/almia/editors/NpcWidget.form create mode 100644 src/com/aurum/almia/editors/NpcWidget.java rename src/com/aurum/almia/{swing => editors}/PokeIDEditor.form (99%) rename src/com/aurum/almia/{swing => editors}/PokeIDEditor.java (88%) create mode 100644 src/com/aurum/almia/editors/TargetWidget.form create mode 100644 src/com/aurum/almia/editors/TargetWidget.java create mode 100644 src/com/aurum/almia/editors/TexInfoWidget.form create mode 100644 src/com/aurum/almia/editors/TexInfoWidget.java create mode 100644 src/com/aurum/almia/game/Compression.java delete mode 100644 src/com/aurum/almia/game/NARC.java create mode 100644 src/com/aurum/almia/game/Narc.java create mode 100644 src/com/aurum/almia/game/map/AbstractData.java create mode 100644 src/com/aurum/almia/game/map/AbstractEntry.java create mode 100644 src/com/aurum/almia/game/map/CollOverlayData.java create mode 100644 src/com/aurum/almia/game/map/CollisionData.java rename src/com/aurum/almia/game/map/{WarpData.java => LocationData.java} (58%) delete mode 100644 src/com/aurum/almia/swing/MapEditor.form delete mode 100644 src/com/aurum/almia/swing/MapEditor.java create mode 100644 src/com/aurum/almia/util/ArrayUtils.java create mode 100644 src/com/aurum/almia/util/BitConverter.java rename src/com/aurum/almia/{ => util}/ByteBuffer.java (89%) create mode 100644 src/com/aurum/almia/util/IOHelper.java create mode 100644 src/com/aurum/almia/util/RenderHelper.java create mode 100644 src/res/lists/npcs.txt create mode 100644 src/res/mapEditor/node_location.png create mode 100644 src/res/mapEditor/node_misc.png create mode 100644 src/res/mapEditor/node_mon.png create mode 100644 src/res/mapEditor/node_npc.png create mode 100644 src/res/mapEditor/node_target.png create mode 100644 src/res/mons/0_0.png create mode 100644 src/res/mons/100_0.png create mode 100644 src/res/mons/101_0.png create mode 100644 src/res/mons/109_0.png create mode 100644 src/res/mons/110_0.png create mode 100644 src/res/mons/111_0.png create mode 100644 src/res/mons/112_0.png create mode 100644 src/res/mons/115_0.png create mode 100644 src/res/mons/116_0.png create mode 100644 src/res/mons/117_0.png create mode 100644 src/res/mons/120_0.png create mode 100644 src/res/mons/121_0.png create mode 100644 src/res/mons/122_0.png create mode 100644 src/res/mons/123_0.png create mode 100644 src/res/mons/124_0.png create mode 100644 src/res/mons/125_0.png create mode 100644 src/res/mons/126_0.png create mode 100644 src/res/mons/127_0.png create mode 100644 src/res/mons/128_0.png create mode 100644 src/res/mons/133_0.png create mode 100644 src/res/mons/134_0.png create mode 100644 src/res/mons/135_0.png create mode 100644 src/res/mons/136_0.png create mode 100644 src/res/mons/138_0.png create mode 100644 src/res/mons/139_0.png create mode 100644 src/res/mons/13_0.png create mode 100644 src/res/mons/142_0.png create mode 100644 src/res/mons/147_0.png create mode 100644 src/res/mons/148_0.png create mode 100644 src/res/mons/15_0.png create mode 100644 src/res/mons/167_0.png create mode 100644 src/res/mons/168_0.png create mode 100644 src/res/mons/169_0.png create mode 100644 src/res/mons/170_0.png create mode 100644 src/res/mons/171_0.png create mode 100644 src/res/mons/172_0.png create mode 100644 src/res/mons/179_0.png create mode 100644 src/res/mons/180_0.png create mode 100644 src/res/mons/181_0.png create mode 100644 src/res/mons/182_0.png create mode 100644 src/res/mons/185_0.png create mode 100644 src/res/mons/190_0.png create mode 100644 src/res/mons/193_0.png create mode 100644 src/res/mons/196_0.png create mode 100644 src/res/mons/197_0.png create mode 100644 src/res/mons/198_0.png create mode 100644 src/res/mons/19_0.png create mode 100644 src/res/mons/200_0.png create mode 100644 src/res/mons/203_0.png create mode 100644 src/res/mons/204_0.png create mode 100644 src/res/mons/205_0.png create mode 100644 src/res/mons/207_0.png create mode 100644 src/res/mons/20_0.png create mode 100644 src/res/mons/211_0.png create mode 100644 src/res/mons/212_0.png create mode 100644 src/res/mons/215_0.png create mode 100644 src/res/mons/218_0.png create mode 100644 src/res/mons/219_0.png create mode 100644 src/res/mons/21_0.png create mode 100644 src/res/mons/220_0.png create mode 100644 src/res/mons/221_0.png create mode 100644 src/res/mons/222_0.png create mode 100644 src/res/mons/225_0.png create mode 100644 src/res/mons/226_0.png create mode 100644 src/res/mons/227_0.png create mode 100644 src/res/mons/228_0.png create mode 100644 src/res/mons/229_0.png create mode 100644 src/res/mons/22_0.png create mode 100644 src/res/mons/230_0.png create mode 100644 src/res/mons/236_0.png create mode 100644 src/res/mons/239_0.png create mode 100644 src/res/mons/240_0.png create mode 100644 src/res/mons/241_0.png create mode 100644 src/res/mons/246_0.png create mode 100644 src/res/mons/247_0.png create mode 100644 src/res/mons/248_0.png create mode 100644 src/res/mons/251_0.png create mode 100644 src/res/mons/252_0.png create mode 100644 src/res/mons/253_0.png create mode 100644 src/res/mons/254_0.png create mode 100644 src/res/mons/255_0.png create mode 100644 src/res/mons/256_0.png create mode 100644 src/res/mons/257_0.png create mode 100644 src/res/mons/258_0.png create mode 100644 src/res/mons/259_0.png create mode 100644 src/res/mons/25_0.png create mode 100644 src/res/mons/260_0.png create mode 100644 src/res/mons/26_0.png create mode 100644 src/res/mons/273_0.png create mode 100644 src/res/mons/274_0.png create mode 100644 src/res/mons/275_0.png create mode 100644 src/res/mons/276_0.png create mode 100644 src/res/mons/277_0.png create mode 100644 src/res/mons/278_0.png create mode 100644 src/res/mons/279_0.png create mode 100644 src/res/mons/27_0.png create mode 100644 src/res/mons/280_0.png create mode 100644 src/res/mons/281_0.png create mode 100644 src/res/mons/282_0.png create mode 100644 src/res/mons/287_0.png create mode 100644 src/res/mons/28_0.png create mode 100644 src/res/mons/291_0.png create mode 100644 src/res/mons/296_0.png create mode 100644 src/res/mons/297_0.png create mode 100644 src/res/mons/299_0.png create mode 100644 src/res/mons/302_0.png create mode 100644 src/res/mons/303_0.png create mode 100644 src/res/mons/304_0.png create mode 100644 src/res/mons/305_0.png create mode 100644 src/res/mons/306_0.png create mode 100644 src/res/mons/311_0.png create mode 100644 src/res/mons/312_0.png create mode 100644 src/res/mons/315_0.png create mode 100644 src/res/mons/319_0.png create mode 100644 src/res/mons/320_0.png create mode 100644 src/res/mons/321_0.png create mode 100644 src/res/mons/322_0.png create mode 100644 src/res/mons/323_0.png create mode 100644 src/res/mons/324_0.png create mode 100644 src/res/mons/330_0.png create mode 100644 src/res/mons/331_0.png create mode 100644 src/res/mons/332_0.png create mode 100644 src/res/mons/334_0.png create mode 100644 src/res/mons/344_0.png create mode 100644 src/res/mons/353_0.png create mode 100644 src/res/mons/354_0.png create mode 100644 src/res/mons/355_0.png create mode 100644 src/res/mons/356_0.png create mode 100644 src/res/mons/359_0.png create mode 100644 src/res/mons/361_0.png create mode 100644 src/res/mons/362_0.png create mode 100644 src/res/mons/363_0.png create mode 100644 src/res/mons/364_0.png create mode 100644 src/res/mons/365_0.png create mode 100644 src/res/mons/367_0.png create mode 100644 src/res/mons/368_0.png create mode 100644 src/res/mons/371_0.png create mode 100644 src/res/mons/372_0.png create mode 100644 src/res/mons/373_0.png create mode 100644 src/res/mons/377_0.png create mode 100644 src/res/mons/378_0.png create mode 100644 src/res/mons/379_0.png create mode 100644 src/res/mons/37_0.png create mode 100644 src/res/mons/387_0.png create mode 100644 src/res/mons/388_0.png create mode 100644 src/res/mons/389_0.png create mode 100644 src/res/mons/38_0.png create mode 100644 src/res/mons/390_0.png create mode 100644 src/res/mons/391_0.png create mode 100644 src/res/mons/392_0.png create mode 100644 src/res/mons/393_0.png create mode 100644 src/res/mons/394_0.png create mode 100644 src/res/mons/395_0.png create mode 100644 src/res/mons/396_0.png create mode 100644 src/res/mons/397_0.png create mode 100644 src/res/mons/398_0.png create mode 100644 src/res/mons/399_0.png create mode 100644 src/res/mons/39_0.png create mode 100644 src/res/mons/400_0.png create mode 100644 src/res/mons/401_0.png create mode 100644 src/res/mons/402_0.png create mode 100644 src/res/mons/403_0.png create mode 100644 src/res/mons/404_0.png create mode 100644 src/res/mons/405_0.png create mode 100644 src/res/mons/406_0.png create mode 100644 src/res/mons/407_0.png create mode 100644 src/res/mons/408_0.png create mode 100644 src/res/mons/409_0.png create mode 100644 src/res/mons/40_0.png create mode 100644 src/res/mons/410_0.png create mode 100644 src/res/mons/411_0.png create mode 100644 src/res/mons/412_0.png create mode 100644 src/res/mons/412_1.png create mode 100644 src/res/mons/412_2.png create mode 100644 src/res/mons/413_0.png create mode 100644 src/res/mons/413_1.png create mode 100644 src/res/mons/413_2.png create mode 100644 src/res/mons/414_0.png create mode 100644 src/res/mons/415_0.png create mode 100644 src/res/mons/416_0.png create mode 100644 src/res/mons/417_0.png create mode 100644 src/res/mons/418_0.png create mode 100644 src/res/mons/419_0.png create mode 100644 src/res/mons/41_0.png create mode 100644 src/res/mons/420_0.png create mode 100644 src/res/mons/421_0.png create mode 100644 src/res/mons/421_1.png create mode 100644 src/res/mons/422_0.png create mode 100644 src/res/mons/422_1.png create mode 100644 src/res/mons/423_0.png create mode 100644 src/res/mons/423_1.png create mode 100644 src/res/mons/424_0.png create mode 100644 src/res/mons/425_0.png create mode 100644 src/res/mons/426_0.png create mode 100644 src/res/mons/427_0.png create mode 100644 src/res/mons/428_0.png create mode 100644 src/res/mons/429_0.png create mode 100644 src/res/mons/42_0.png create mode 100644 src/res/mons/430_0.png create mode 100644 src/res/mons/431_0.png create mode 100644 src/res/mons/432_0.png create mode 100644 src/res/mons/433_0.png create mode 100644 src/res/mons/434_0.png create mode 100644 src/res/mons/435_0.png create mode 100644 src/res/mons/436_0.png create mode 100644 src/res/mons/437_0.png create mode 100644 src/res/mons/438_0.png create mode 100644 src/res/mons/439_0.png create mode 100644 src/res/mons/43_0.png create mode 100644 src/res/mons/440_0.png create mode 100644 src/res/mons/441_0.png create mode 100644 src/res/mons/442_0.png create mode 100644 src/res/mons/443_0.png create mode 100644 src/res/mons/444_0.png create mode 100644 src/res/mons/445_0.png create mode 100644 src/res/mons/446_0.png create mode 100644 src/res/mons/447_0.png create mode 100644 src/res/mons/447_1.png create mode 100644 src/res/mons/448_0.png create mode 100644 src/res/mons/448_1.png create mode 100644 src/res/mons/449_0.png create mode 100644 src/res/mons/44_0.png create mode 100644 src/res/mons/450_0.png create mode 100644 src/res/mons/451_0.png create mode 100644 src/res/mons/452_0.png create mode 100644 src/res/mons/453_0.png create mode 100644 src/res/mons/454_0.png create mode 100644 src/res/mons/455_0.png create mode 100644 src/res/mons/456_0.png create mode 100644 src/res/mons/457_0.png create mode 100644 src/res/mons/458_0.png create mode 100644 src/res/mons/459_0.png create mode 100644 src/res/mons/45_0.png create mode 100644 src/res/mons/460_0.png create mode 100644 src/res/mons/461_0.png create mode 100644 src/res/mons/462_0.png create mode 100644 src/res/mons/463_0.png create mode 100644 src/res/mons/464_0.png create mode 100644 src/res/mons/465_0.png create mode 100644 src/res/mons/466_0.png create mode 100644 src/res/mons/467_0.png create mode 100644 src/res/mons/468_0.png create mode 100644 src/res/mons/469_0.png create mode 100644 src/res/mons/470_0.png create mode 100644 src/res/mons/471_0.png create mode 100644 src/res/mons/472_0.png create mode 100644 src/res/mons/473_0.png create mode 100644 src/res/mons/474_0.png create mode 100644 src/res/mons/475_0.png create mode 100644 src/res/mons/476_0.png create mode 100644 src/res/mons/477_0.png create mode 100644 src/res/mons/478_0.png create mode 100644 src/res/mons/483_0.png create mode 100644 src/res/mons/484_0.png create mode 100644 src/res/mons/485_0.png create mode 100644 src/res/mons/485_1.png create mode 100644 src/res/mons/486_0.png create mode 100644 src/res/mons/488_0.png create mode 100644 src/res/mons/488_1.png create mode 100644 src/res/mons/489_0.png create mode 100644 src/res/mons/490_0.png create mode 100644 src/res/mons/490_1.png create mode 100644 src/res/mons/491_0.png create mode 100644 src/res/mons/491_1.png create mode 100644 src/res/mons/492_0.png create mode 100644 src/res/mons/4_0.png create mode 100644 src/res/mons/56_0.png create mode 100644 src/res/mons/57_0.png create mode 100644 src/res/mons/58_0.png create mode 100644 src/res/mons/59_0.png create mode 100644 src/res/mons/5_0.png create mode 100644 src/res/mons/63_0.png create mode 100644 src/res/mons/65_0.png create mode 100644 src/res/mons/66_0.png create mode 100644 src/res/mons/67_0.png create mode 100644 src/res/mons/68_0.png create mode 100644 src/res/mons/6_0.png create mode 100644 src/res/mons/6_1.png create mode 100644 src/res/mons/71_0.png create mode 100644 src/res/mons/73_0.png create mode 100644 src/res/mons/74_0.png create mode 100644 src/res/mons/75_0.png create mode 100644 src/res/mons/76_0.png create mode 100644 src/res/mons/77_0.png create mode 100644 src/res/mons/78_0.png create mode 100644 src/res/mons/7_0.png create mode 100644 src/res/mons/81_0.png create mode 100644 src/res/mons/82_0.png create mode 100644 src/res/mons/84_0.png create mode 100644 src/res/mons/85_0.png create mode 100644 src/res/mons/89_0.png create mode 100644 src/res/mons/8_0.png create mode 100644 src/res/mons/92_0.png create mode 100644 src/res/mons/93_0.png create mode 100644 src/res/mons/94_0.png create mode 100644 src/res/mons/96_0.png create mode 100644 src/res/mons/97_0.png create mode 100644 src/res/mons/9_0.png create mode 100644 src/res/npcs/1.png create mode 100644 src/res/npcs/10.png create mode 100644 src/res/npcs/11.png create mode 100644 src/res/npcs/12.png create mode 100644 src/res/npcs/13.png create mode 100644 src/res/npcs/14.png create mode 100644 src/res/npcs/15.png create mode 100644 src/res/npcs/16.png create mode 100644 src/res/npcs/17.png create mode 100644 src/res/npcs/18.png create mode 100644 src/res/npcs/19.png create mode 100644 src/res/npcs/2.png create mode 100644 src/res/npcs/3.png create mode 100644 src/res/npcs/4.png create mode 100644 src/res/npcs/5.png create mode 100644 src/res/npcs/6.png create mode 100644 src/res/npcs/7.png create mode 100644 src/res/npcs/8.png create mode 100644 src/res/npcs/9.png create mode 100644 src/res/targets/1.png create mode 100644 src/res/targets/10.png create mode 100644 src/res/targets/108.png create mode 100644 src/res/targets/109.png create mode 100644 src/res/targets/11.png create mode 100644 src/res/targets/12.png create mode 100644 src/res/targets/13.png create mode 100644 src/res/targets/130.png create mode 100644 src/res/targets/131.png create mode 100644 src/res/targets/132.png create mode 100644 src/res/targets/133.png create mode 100644 src/res/targets/134.png create mode 100644 src/res/targets/136.png create mode 100644 src/res/targets/137.png create mode 100644 src/res/targets/138.png create mode 100644 src/res/targets/139.png create mode 100644 src/res/targets/14.png create mode 100644 src/res/targets/140.png create mode 100644 src/res/targets/141.png create mode 100644 src/res/targets/15.png create mode 100644 src/res/targets/16.png create mode 100644 src/res/targets/17.png create mode 100644 src/res/targets/18.png create mode 100644 src/res/targets/19.png create mode 100644 src/res/targets/2.png create mode 100644 src/res/targets/20.png create mode 100644 src/res/targets/21.png create mode 100644 src/res/targets/22.png create mode 100644 src/res/targets/23.png create mode 100644 src/res/targets/24.png create mode 100644 src/res/targets/25.png create mode 100644 src/res/targets/26.png create mode 100644 src/res/targets/27.png create mode 100644 src/res/targets/28.png create mode 100644 src/res/targets/29.png create mode 100644 src/res/targets/3.png create mode 100644 src/res/targets/30.png create mode 100644 src/res/targets/31.png create mode 100644 src/res/targets/32.png create mode 100644 src/res/targets/33.png create mode 100644 src/res/targets/34.png create mode 100644 src/res/targets/35.png create mode 100644 src/res/targets/36.png create mode 100644 src/res/targets/37.png create mode 100644 src/res/targets/38.png create mode 100644 src/res/targets/39.png create mode 100644 src/res/targets/4.png create mode 100644 src/res/targets/40.png create mode 100644 src/res/targets/41.png create mode 100644 src/res/targets/42.png create mode 100644 src/res/targets/43.png create mode 100644 src/res/targets/44.png create mode 100644 src/res/targets/45.png create mode 100644 src/res/targets/46.png create mode 100644 src/res/targets/47.png create mode 100644 src/res/targets/48.png create mode 100644 src/res/targets/49.png create mode 100644 src/res/targets/5.png create mode 100644 src/res/targets/50.png create mode 100644 src/res/targets/51.png create mode 100644 src/res/targets/52.png create mode 100644 src/res/targets/53.png create mode 100644 src/res/targets/54.png create mode 100644 src/res/targets/55.png create mode 100644 src/res/targets/59.png create mode 100644 src/res/targets/6.png create mode 100644 src/res/targets/60.png create mode 100644 src/res/targets/64.png create mode 100644 src/res/targets/68.png create mode 100644 src/res/targets/7.png create mode 100644 src/res/targets/70.png create mode 100644 src/res/targets/72.png create mode 100644 src/res/targets/74.png create mode 100644 src/res/targets/78.png create mode 100644 src/res/targets/8.png create mode 100644 src/res/targets/84.png create mode 100644 src/res/targets/85.png create mode 100644 src/res/targets/86.png create mode 100644 src/res/targets/87.png create mode 100644 src/res/targets/88.png create mode 100644 src/res/targets/89.png create mode 100644 src/res/targets/9.png create mode 100644 src/res/targets/91.png delete mode 100644 src/res/tp_npc.png delete mode 100644 src/res/tp_pokemon.png delete mode 100644 src/res/tp_target.png delete mode 100644 src/res/tp_warp.png diff --git a/.gitignore b/.gitignore index f3d6549..95832e8 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -/build/ \ No newline at end of file +/build/ +/dist/ \ No newline at end of file diff --git a/docs/format_map.txt b/docs/format_map.txt new file mode 100644 index 0000000..f9b3c5d --- /dev/null +++ b/docs/format_map.txt @@ -0,0 +1,200 @@ +Every map consists of two NARC archives storing the layout and +textures of the scene: +* .map.tex.lz: Textures +* .map.dat.lz: Layout + +The exact content of these archives is thoroughly described +below. As denoted by the file extension, the archives are LZ10 +compressed. + +* Content of .map.tex.lz: +- Magic "TEX" + - NARC + - NARCs for each tileset + - NCBR texture + - NCLR palette + + +* Content of .map.dat.lz: +- Binary file "MPIF" +- Binary file "TXIF" +- Binary file "LYR" + - NARC container + - NARC files for each layer + - binary files; first uint32 is the data identifier +- Binary file "CTA" + - NARC container + - ~todo~ +- Binary file "PLA" + - NARC container + - ~todo~ + + +--------------------------------------------------------------- + +* MPIF (0x14 bytes) +0x00 uint32 magic +0x04 uint32 width +0x08 uint32 height +0x0C uint32 unknown +0x10 uint32 unknown + + +* TXIF (0x8 bytes + entries * 0x8 bytes) +0x00 uint32 magic +0x04 uint16 textures count +0x06 uint16 unknown +0x08 texture entries (à 0x8 bytes) + 0x00 uint16 unknown + 0x02 uint16 texture ID + 0x04 uint16 unknown + 0x05 uint16 unknown + + +--------------------------------------------------------------- + +* LYR files: + +Type 0x01 - Unknown: +0x00 uint32 identifier + + +Type 0x02 - Tiles +0x00 uint32 identifier +0x04 uint32 data size +0x08 uint32 always 0x14, header size without identifier?? +0x0C uint32 entry size(?) +0x10 uint32 unknown + ~todo~ + + +Type 0x03 - Collision +0x00 uint32 identifier +0x04 uint32 always 0x10, header size without identifier?? +0x08 uint32 entries count (width * height) +0x0C uint32 width +0x10 uint32 height +0x14 entries (à 0x2 bytes) + 0x00 uint16 collision type + + +Type 0x04 - Obstacles: +0x00 uint32 identifier +0x04 uint32 entries count +0x08 entries (à 0xC bytes) + 0x00 uint16 X-Pos + 0x02 uint16 Y-Pos + 0x04 int8 unknown + 0x05 int8 unknown + 0x06 uint16 Obstacle ID + 0x08 int16 upper bytes for 0x06 (?) + 0x0A int8 unknown, maybe uint16 + 0x0B int8 unknown, upper byte for 0x0A (?) + + +Type 0x05 - Unused +0x00 uint32 identifier + ~todo~ + + +Type 0x06 - Overlay collision(?) +0x00 uint32 identifier +0x04 uint32 always 0x10, header size without identifier?? +0x08 uint32 entries count (width * height) +0x0C uint32 width +0x10 uint32 height +0x14 entries (à 0x2 bytes) + 0x00 uint16 collision type + + +Type 0x07 - Trigger: +0x00 uint32 identifier +0x04 uint32 entries count +0x08 entries (à 0xA bytes) + 0x00 uint16 X-Pos + 0x02 uint16 Y-Pos + 0x04 uint16 Width + 0x06 uint16 Height + 0x08 uint16 unknown + + +Type 0x08 - NPC: +0x00 uint32 identifier +0x04 uint32 entries count +0x08 entries (à 0xB bytes) + 0x00 uint16 X-Pos + 0x02 uint16 Y-Pos + 0x04 uint8 Direction + 0x05 bool8 Is active? + 0x06 uint16 NPC ID + 0x08 int8 unknown + 0x09 int8 unknown + 0x0A bool8 unknown + + +Type 0x09 - Pokémon: +0x00 uint32 identifier +0x04 uint32 entries count +0x08 entries (à 0xA bytes) + 0x00 uint16 X-Pos + 0x02 uint16 Y-Pos + 0x04 uint8 Behavior + 0x05 uint8 Appearance + 0x06 uint16 Pokémon ID + 0x08 int8 unknown + 0x09 int8 unknown + + +Type 0x0A - Unknown +0x00 uint32 identifier + ~todo~ + + +Type 0x0B - Unknown +0x00 uint32 identifier + ~todo~ + + +Type 0x0C - Unknown +0x00 uint32 identifier + ~todo~ + + +Type 0x0D - Unknown: +0x00 uint32 identifier +0x04 uint32 entries count +0x08 entries (à 0x12 bytes) + ~todo~ + + +Type 0x0E - Unknown +0x00 uint32 identifier + ~todo~ + + +-------------------------------------------------------------- + +* Direction values +0x00 down +0x01 left +0x02 up +0x03 right +0x04 down(?) +0x05 left(?) +0x06 up(?) +0x07 right(?) +0x08 down(?) +0x09 left(?) +0x0A up(?) +0x0B right(?) + +* Appearance values +0x00 Not active +0x01 Active +0x02 Spawns from Tree + +* Behavior values Qwilfish +0x00 Moving +0x01 Cautious +0x02 Still (Unused) +0x03 Still \ No newline at end of file diff --git a/docs/format_mesg.txt b/docs/format_mesg.txt new file mode 100644 index 0000000..a689e3e --- /dev/null +++ b/docs/format_mesg.txt @@ -0,0 +1,16 @@ +* FORMAT: MESG +* EXTENSION: .meslz +* COMPRESSION: LZ10 +* USE: Stores list of message strings. + +* STRUCTURE: +Every MESG file starts with a header that is 0x18 bytes long: + 0x00 int File size + 0x04 int Number of messages + 0x08 int Unknown (always 0x10) + 0x0C byte[12] Unknown (constant) + +The header is followed by the actual text strings. The messages +are preceeded by an integer denoting the length of the string. +All messages appear to be encoded in UTF-8, although this needs +to be confirmed... diff --git a/docs/list_mons.txt b/docs/list_mons.txt new file mode 100644 index 0000000..58917cb --- /dev/null +++ b/docs/list_mons.txt @@ -0,0 +1,500 @@ +NONE (NONE x0) +Charmander (Burn x1) +Charmeleon (Burn x2) +Squirtle (Soak x1) +Wartortle (Soak x2) +Blastoise (Rain Dance x9) +Weedle (Tackle x1) +Beedrill (Crush x2) +Rattata (Tackle x1) +Raticate (Cut x2) +Spearow (Cut x1) +Fearow (Cut x3) +Pikachu (Recharge x3) +Raichu (Recharge x4) +Sandshrew (Tunnel x1) +Sandslash (Tunnel x1) +Vulpix (Burn x1) +Ninetales (Burn x4) +Jigglypuff (Tackle x1) +Wigglytuff (Tackle x2) +Zubat (Cut x1) +Golbat (Crush x2) +Oddish (Cut x1) +Gloom (Cut x2) +Vileplume (Cut x3) +Mankey (Crush x1) +Primeape (Crush x3) +Growlithe (Burn x2) +Arcanine (Burn x4) +Abra (Tackle x1) +Alakazam (Teleport x9) +Machop (NONE x0) +Machoke (Tackle x2) +Machamp (Crush x3) +Victreebel (Cut x2) +Tentacruel (Crush x2) +Geodude (Crush x1) +Graveler (Crush x2) +Golem (Crush x4) +Ponyta (Burn x1) +Rapidash (Burn x3) +Magnemite (Recharge x2) +Magneton (Recharge x5) +Doduo (Agility x9) +Dodrio (Tackle x2) +Muk (Crush x3) +Gastly (Psy Power x1) +Haunter (Psy Power x2) +Gengar (Psy Power x3) +Drowzee (Crush x2) +Hypno (Psy Power x2) +Voltorb (Electrify x2) +Electrode (Electrify x3) +Koffing (Tackle x1) +Weezing (Tackle x2) +Rhyhorn (Tackle x2) +Rhydon (Tackle x3) +Kangaskhan (Crush x2) +Horsea (Tackle x2) +Seadra (Soak x3) +Staryu (Cut x1) +Starmie (Cut x3) +Mr. Mime (Teleport x9) +Scyther (Cut x3) +Jynx (Teleport x9) +Electabuzz (Flash x9) +Magmar (Burn x2) +Pinsir (Cut x2) +Tauros (Tackle x2) +Eevee (Tackle x1) +Vaporeon (Soak x3) +Jolteon (Electrify x3) +Flareon (Burn x3) +Omanyte (Tackle x2) +Omastar (Soak x3) +Dratini (Tackle x1) +Spinarak (Tackle x1) +Ariados (Tackle x3) +Crobat (Crush x3) +Chinchou (Recharge x2) +Lanturn (Recharge x4) +Pichu (Recharge x1) +Mareep (Electrify x1) +Flaaffy (Electrify x2) +Ampharos (Electrify x3) +Bellossom (Cut x3) +Sudowoodo (Crush x2) +Aipom (Tackle x1) +Yanma (Cut x2) +Espeon (Teleport x9) +Umbreon (Cut x3) +Murkrow (Cut x1) +Misdreavus (NONE x0) +Girafarig (Tackle x2) +Pineco (Tackle x1) +Forretress (Crush x2) +Gligar (Cut x1) +Qwilfish (Soak x1) +Scizor (Cut x4) +Sneasel (NONE x0) +Slugma (Burn x1) +Magcargo (Burn x2) +Swinub (Tackle x1) +Piloswine (Tackle x3) +Corsola (Crush x2) +Delibird (Crush x1) +Mantine (Swim x9) +Skarmory (Demist x9) +Houndour (Tackle x1) +Houndoom (Burn x2) +Tyrogue (Crush x1) +Elekid (Electrify x2) +Magby (Burn x1) +Miltank (Tackle x2) +Larvitar (Crush x1) +Pupitar (Crush x2) +Tyranitar (Crush x4) +Sceptile (Cut x3) +Blaziken (Burn x3) +Seedot (Tackle x1) +Nuzleaf (Tackle x2) +Shiftry (Cut x3) +Taillow (Cut x1) +Swellow (Cut x2) +Wingull (Soak x1) +Pelipper (Soak x3) +Ralts (Tackle x1) +Kirlia (Teleport x9) +Gardevoir (Psy Power x3) +Slakoth (Cut x1) +Ninjask (Cut x2) +Makuhita (Crush x2) +Hariyama (Crush x3) +Nosepass (Crush x2) +Sableye (Cut x2) +Mawile (Crush x2) +Aron (Tackle x1) +Lairon (Tackle x2) +Aggron (Tackle x4) +Roselia (Cut x2) +Numel (Burn x1) +Camerupt (Burn x3) +Torkoal (Magma Flow x9) +Cacnea (Tackle x1) +Cacturne (Crush x2) +Altaria (Cut x2) +Claydol (Crush x3) +Shuppet (Psy Power x1) +Banette (Psy Power x2) +Duskull (Psy Power x1) +Dusclops (Psy Power x3) +Absol (Cut x4) +Snorunt (Crush x1) +Glalie (Crush x3) +Spheal (Tackle x1) +Sealeo (Crush x2) +Walrein (Crush x3) +Huntail (Crush x3) +Gorebyss (Crush x2) +Bagon (Tackle x1) +Shelgon (Tackle x2) +Turtwig (NONE x0) +Grotle (Tackle x2) +Torterra (Tackle x4) +Chimchar (NONE x0) +Monferno (Burn x2) +Infernape (Burn x3) +Piplup (NONE x0) +Prinplup (Cut x2) +Empoleon (River Flow x2) +Starly (NONE x0) +Staravia (Cut x2) +Staraptor (Fly x9) +Bidoof (Crush x1) +Bibarel (Soak x2) +Kricketot (NONE x0) +Kricketune (Cut x2) +Shinx (Electrify x1) +Luxio (Electrify x2) +Luxray (Electrify x3) +Budew (Tackle x1) +Roserade (Cut x3) +Cranidos (NONE x0) +Shieldon (NONE x0) +Bastiodon (Tackle x3) +Mothim (Cut x2) +Combee (Cut x1) +Vespiquen (Crush x3) +Pachirisu (NONE x0) +Buizel (Soak x1) +Floatzel (River Flow x1) +Cherubi (Tackle x1) +Cherrim (Tackle x2) +Shellos (Soak x1) +Gastrodon (Soak x2) +Ambipom (Crush x2) +Drifloon (Airlift x9) +Drifblim (Elevate x9) +Buneary (Crush x1) +Lopunny (Crush x2) +Mismagius (Psy Power x3) +Honchkrow (Cut x3) +Glameow (Cut x1) +Purugly (Tackle x2) +Chingling (Teleport x9) +Stunky (Crush x1) +Skuntank (Stink x9) +Bronzor (Crush x1) +Bronzong (Crush x3) +Bonsly (Tackle x1) +Mime Jr. (NONE x0) +Happiny (Crush x1) +Chatot (Cut x1) +Gible (NONE x0) +Gabite (Cut x3) +Munchlax (NONE x0) +Riolu (Crush x1) +Hippopotas (NONE x0) +Hippowdon (Sand Fill x9) +Skorupi (Crush x1) +Croagunk (NONE x0) +Toxicroak (Crush x2) +Carnivine (Cut x2) +Finneon (Crush x1) +Lumineon (Crush x2) +Mantyke (Tackle x1) +Snover (NONE x0) +Abomasnow (Crush x3) +Weavile (Cut x4) +Lickilicky (Crush x3) +Tangrowth (Tackle x2) +Togekiss (Cut x3) +Leafeon (Cut x3) +Glaceon (Crush x3) +Porygon-Z (Crush x3) +Probopass (Crush x4) +Dummy (NONE x0) +Sharpedo (Crush x4) +Wailmer (Tackle x2) +Duskull (NONE x0) +Riolu (NONE x0) +Lucario (NONE x0) +Wailord (NONE x0) +Toxicroak (Crush x2) +Spiritomb (NONE x0) +Lucario (NONE x0) +Heatran (NONE x0) +Cresselia (NONE x0) +Yanmega (NONE x0) +Gliscor (NONE x0) +Mamoswine (NONE x0) +Rhyperior (NONE x0) +Flygon (Cut x4) +Salamence (Crush x4) +Charizard (Burn x4) +Drapion (NONE x0) +Weavile (Cut x4) +Starly (NONE x0) +Pachirisu (NONE x0) +Munchlax (NONE x0) +Gardevoir (Psy Power x3) +Shiftry (Cut x3) +Honchkrow (Cut x3) +Crobat (Crush x3) +Bronzong (Crush x3) +Alakazam (Teleport x9) +Gabite (Cut x3) +Drifblim (Elevate x9) +Absol (Cut x4) +Abomasnow (Crush x3) +Bellossom (Cut x3) +Claydol (Crush x3) +Primeape (Crush x3) +Blaziken (Burn x3) +Gengar (Psy Power x3) +Fearow (Cut x3) +Swellow (Cut x2) +Kangaskhan (Crush x2) +Aggron (Tackle x4) +Tyranitar (Crush x4) +Tangrowth (Tackle x2) +Eevee (Tackle x1) +Flareon (Burn x3) +Vaporeon (Soak x3) +Jolteon (Electrify x3) +Espeon (Teleport x9) +Umbreon (Cut x3) +Leafeon (Cut x3) +Glaceon (Crush x3) +Ariados (Tackle x3) +Cacturne (Crush x2) +Banette (Psy Power x2) +Houndoom (Burn x2) +Garchomp (Crush x5) +Magmortar (Burn x5) +Electivire (Electrify x3) +Torterra (Tackle x4) +Empoleon (River Flow x2) +Infernape (Burn x3) +Riolu (NONE x0) +Bibarel (Soak x2) +Bidoof (Crush x1) +Pichu (Recharge x1) +Bibarel (Soak x2) +Bibarel (Soak x2) +Bibarel (Soak x2) +Bibarel (Soak x2) +Bibarel (Soak x2) +Bibarel (Soak x2) +Pikachu (Recharge x3) +Bidoof (Crush x1) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +Charizard (Burn x4) +Aerodactyl (Crush x4) +Dragonair (Crush x3) +Kingdra (Crush x4) +Celebi (NONE x0) +Sharpedo (Crush x4) +Flygon (Cut x4) +Salamence (Crush x4) +Rampardos (Tackle x5) +Spiritomb (NONE x0) +Garchomp (Crush x5) +Lucario (NONE x0) +Drapion (NONE x0) +Magnezone (Electrify x3) +Rhyperior (NONE x0) +Electivire (Electrify x3) +Magmortar (Burn x5) +Yanmega (NONE x0) +Gliscor (NONE x0) +Mamoswine (NONE x0) +Gallade (Cut x5) +Dusknoir (Psy Power x3) +Froslass (Crush x4) +Heatran (NONE x0) +Regigigas (NONE x0) +Cresselia (NONE x0) +Darkrai (Dark Power x9) +Darkrai (Dark Power x9) +Lucario (NONE x0) +Heatran (NONE x0) +Cresselia (NONE x0) +Regirock (NONE x0) +Regice (NONE x0) +Registeel (NONE x0) +Dialga (NONE x0) +Palkia (NONE x0) +Shaymin (NONE x0) +Gallade (Cut x5) +Rhyperior (NONE x0) +Magmortar (Burn x5) +Dialga (NONE x0) +Dialga (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) +NONE (NONE x0) \ No newline at end of file diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml index 6ffd51f..6bb7f93 100644 --- a/nbproject/private/private.xml +++ b/nbproject/private/private.xml @@ -3,6 +3,7 @@ + file:/C:/Users/Aurum/Documents/GitHub/AlmiaE/src/com/aurum/almia/game/Compression.java file:/C:/Users/Aurum/Documents/GitHub/AlmiaE/src/com/aurum/almia/Main.java diff --git a/src/com/aurum/almia/BitConverter.java b/src/com/aurum/almia/BitConverter.java deleted file mode 100644 index edbe38c..0000000 --- a/src/com/aurum/almia/BitConverter.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (C) 2018 Aurum - * - * AlmiaE is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * AlmiaE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.aurum.almia; - -public class BitConverter { - public static int stringToInt(String value) { - return value != null ? Integer.decode(value) : 0; - } - - public static byte[] reverse(byte[] data) { - byte[] ret = new byte[data.length]; - for (int i = 0 ; i < data.length ; i++) - ret[i] = data[data.length - 1 - i]; - return ret; - } - - public static byte toByte(byte[] data, int offset) { - return data[offset]; - } - - public static short toUByte(byte[] data, int offset) { - return (short) (data[offset] & 0xFF); - } - - public static short toShort(byte[] data, ByteOrder endian, int offset) { - byte[] bytes = new byte[Short.BYTES]; - for (int i = 0 ; i < Short.BYTES ; i++) - bytes[i] = data[i+offset]; - bytes = endian == ByteOrder.LITTLE_ENDIAN ? reverse(bytes) : bytes; - return (short) ( - ((bytes[0] & 0xFF) << 8) - | (bytes[1] & 0xFF) - ); - } - - public static int toUShort(byte[] data, ByteOrder endian, int offset) { - return (int) (toShort(data, endian, offset) & 0xFFFF); - } - - public static int toInt(byte[] data, ByteOrder endian, int offset) { - byte[] bytes = new byte[Integer.BYTES]; - for (int i = 0 ; i < Integer.BYTES ; i++) - bytes[i] = data[i+offset]; - bytes = endian == ByteOrder.LITTLE_ENDIAN ? reverse(bytes) : bytes; - return (int) ( - ((bytes[0] & 0xFF) << 24) - | ((bytes[1] & 0xFF) << 16) - | ((bytes[2] & 0xFF) << 8) - | (bytes[3] & 0xFF) - ); - } - - public static long toUInt(byte[] data, ByteOrder endian, int offset) { - return (long) (toInt(data, endian, offset) & 0xFFFFFFFF); - } - - public static long toLong(byte[] data, ByteOrder endian, int offset) { - byte[] bytes = new byte[Long.BYTES]; - for (int i = 0 ; i < Long.BYTES ; i++) - bytes[i] = data[i+offset]; - bytes = endian == ByteOrder.LITTLE_ENDIAN ? reverse(bytes) : bytes; - return (long) ( - ((long) (bytes[0] & 0xFF) << 56) - | ((long) (bytes[1] & 0xFF) << 48) - | ((long) (bytes[2] & 0xFF) << 40) - | ((long) (bytes[3] & 0xFF) << 32) - | ((long) (bytes[4] & 0xFF) << 24) - | ((long) (bytes[5] & 0xFF) << 16) - | ((long) (bytes[6] & 0xFF) << 8) - | (long) (bytes[7] & 0xFF) - ); - } - - public static float toFloat(byte[] data, ByteOrder endian, int offset) { - return Float.intBitsToFloat(toInt(data, endian, offset)); - } - - public static double toDouble(byte[] data, ByteOrder endian, int offset) { - return Double.longBitsToDouble(toLong(data, endian, offset)); - } - - public static char toCharacter(byte[] data, ByteOrder endian, int offset) { - return (char) toShort(data, endian, offset); - } - - public static boolean toBoolean(byte[] data, int offset) { - return data[offset] != 0; - } - - public static byte[] getBytes(short val, ByteOrder endian) { - byte[] bytes = new byte[Short.BYTES]; - bytes[0] = (byte) ((val >> 8) & 0xFF); - bytes[1] = (byte) (val & 0xFF); - return endian == ByteOrder.LITTLE_ENDIAN ? reverse(bytes) : bytes; - } - - public static byte[] getBytes(int val, ByteOrder endian) { - byte[] bytes = new byte[Integer.BYTES]; - bytes[0] = (byte) ((val >> 24) & 0xFF); - bytes[1] = (byte) ((val >> 16) & 0xFF); - bytes[2] = (byte) ((val >> 8) & 0xFF); - bytes[3] = (byte) (val & 0xFF); - return endian == ByteOrder.LITTLE_ENDIAN ? reverse(bytes) : bytes; - } - - public static byte[] getBytes(long val, ByteOrder endian) { - byte[] bytes = new byte[Long.BYTES]; - bytes[0] = (byte) ((val >> 56) & 0xFF); - bytes[1] = (byte) ((val >> 48) & 0xFF); - bytes[2] = (byte) ((val >> 40) & 0xFF); - bytes[3] = (byte) ((val >> 32) & 0xFF); - bytes[4] = (byte) ((val >> 24) & 0xFF); - bytes[5] = (byte) ((val >> 16) & 0xFF); - bytes[6] = (byte) ((val >> 8) & 0xFF); - bytes[7] = (byte) (val & 0xFF); - return endian == ByteOrder.LITTLE_ENDIAN ? reverse(bytes) : bytes; - } - - public static byte[] getBytes(float val, ByteOrder endian) { - return getBytes(Float.floatToIntBits(val), endian); - } - - public static byte[] getBytes(double val, ByteOrder endian) { - return getBytes(Double.doubleToLongBits(val), endian); - } - - public static byte[] getBytes(char val, ByteOrder endian) { - return getBytes((short) val, endian); - } - - public static byte[] getBytes(boolean val) { - return new byte[] { (byte) (val ? 1 : 0) }; - } -} \ No newline at end of file diff --git a/src/com/aurum/almia/ByteOrder.java b/src/com/aurum/almia/ByteOrder.java deleted file mode 100644 index 3e06879..0000000 --- a/src/com/aurum/almia/ByteOrder.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2018 Aurum - * - * AlmiaE is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * AlmiaE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.aurum.almia; - -public enum ByteOrder { - BIG_ENDIAN (new byte[] { (byte) 0xFE, (byte) 0xFF }), // Left to right - LITTLE_ENDIAN (new byte[] { (byte) 0xFF, (byte) 0xFE }); // Right to left - - private final byte[] bom; - private ByteOrder(byte[] identifier) { - this.bom = identifier; - } - - /** - * Returns the BOM. - * @return the BOM. - */ - public byte[] getBOM() { - return bom; - } - - /** - * Returns the byte order for the given BOM. - * @param bom the identifier - * @return the byte order for the given BOM. - */ - public static ByteOrder getByteOrder(byte[] bom) { - return (bom == BIG_ENDIAN.bom) ? BIG_ENDIAN : - (bom == LITTLE_ENDIAN.bom) ? LITTLE_ENDIAN : null; - } -} \ No newline at end of file diff --git a/src/com/aurum/almia/Lists.java b/src/com/aurum/almia/Lists.java index ae80810..6df3874 100644 --- a/src/com/aurum/almia/Lists.java +++ b/src/com/aurum/almia/Lists.java @@ -19,29 +19,40 @@ package com.aurum.almia; import java.io.BufferedReader; import java.io.IOException; -import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; -public class Lists { - public static List pokemon_name, fieldwaza_name, assist_mes, yakumono_name, obstacles; +public final class Lists { + private Lists() {} + + public static List pokemon_name; + public static List fieldwaza_name; + public static List assist_mes; + public static List yakumono_name; + public static List obstacles; + public static List npcs; public static void init() { - pokemon_name = populate("/res/lists/pokemon_name.txt"); - fieldwaza_name = populate("/res/lists/fieldwaza_name.txt"); - assist_mes = populate("/res/lists/assist_mes.txt"); - yakumono_name = populate("/res/lists/yakumono_name.txt"); - obstacles = populate("/res/lists/obstacles.txt"); + pokemon_name = populate("lists/pokemon_name.txt"); + fieldwaza_name = populate("lists/fieldwaza_name.txt"); + assist_mes = populate("lists/assist_mes.txt"); + yakumono_name = populate("lists/yakumono_name.txt"); + + obstacles = populate("lists/obstacles.txt"); + npcs = populate("lists/npcs.txt"); } private static List populate(String filepath) { - BufferedReader reader = new BufferedReader(new InputStreamReader(Lists.class.getResourceAsStream(filepath))); + BufferedReader reader = new BufferedReader(Resources.loadReader(filepath)); List list = new ArrayList(); String line; + try { while ((line = reader.readLine()) != null) list.add(line.trim()); + + reader.close(); } catch (IOException ex) { System.out.println(ex); diff --git a/src/com/aurum/almia/Main.form b/src/com/aurum/almia/Main.form index 4d48b05..dc1b236 100644 --- a/src/com/aurum/almia/Main.form +++ b/src/com/aurum/almia/Main.form @@ -74,10 +74,10 @@ - + - + diff --git a/src/com/aurum/almia/Main.java b/src/com/aurum/almia/Main.java index 1f3ea8c..8f067c3 100644 --- a/src/com/aurum/almia/Main.java +++ b/src/com/aurum/almia/Main.java @@ -19,42 +19,51 @@ package com.aurum.almia; import com.aurum.almia.game.Game; import com.aurum.almia.game.map.Map; -import com.aurum.almia.swing.MapEditor; -import com.aurum.almia.swing.PokeIDEditor; +import com.aurum.almia.editors.MapEditor; +import com.aurum.almia.editors.PokeIDEditor; import java.awt.Image; -import java.awt.Toolkit; import java.io.File; import java.io.IOException; -import java.util.ArrayList; -import java.util.List; +import java.util.Arrays; +import java.util.Iterator; import java.util.prefs.Preferences; import javax.swing.JFileChooser; +import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.UIManager; -import javax.swing.UnsupportedLookAndFeelException; -public class Main extends javax.swing.JFrame { - public static String name = "AlmiaE v0.1.1"; - public static Image icon = Toolkit.getDefaultToolkit().createImage(Main.class.getResource("/res/icon.png")); - public static boolean debug = false; +public class Main extends JFrame { + public static final String NAME = "AlmiaE v0.5"; + public static final Image ICON = Resources.loadImage("icon.png"); + private static boolean debug = false; - public static void main(String[] args) throws IOException { - if (args.length > 0) { - debug = args[0].equals("-d"); - } + public static void main(String[] args) { + Iterator argsi = Arrays.stream(args).iterator(); - try { - javax.swing.UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - } - catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { - System.err.print(ex); + while(argsi.hasNext()) { + String arg = argsi.next(); + + switch(arg) { + case "-d": debug = true; break; + } } Lists.init(); + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } + catch (Exception ex) { + System.err.print(ex); + } + new Main().setVisible(true); } + public static boolean isDebug() { + return debug; + } + public Main() { initComponents(); } @@ -75,8 +84,8 @@ public class Main extends javax.swing.JFrame { mnuAbout = new javax.swing.JMenuItem(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); - setTitle(Main.name); - setIconImage(Main.icon); + setTitle(Main.NAME); + setIconImage(Main.ICON); setResizable(false); btnMapEditor.setText("Edit map"); @@ -210,7 +219,7 @@ public class Main extends javax.swing.JFrame { }//GEN-LAST:event_mnuCloseActionPerformed private void mnuAboutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuAboutActionPerformed - JOptionPane.showMessageDialog(this, "Copyright 2018 SunakazeKun\nhttps://github.com/SunakazeKun/AlmiaE", Main.name, JOptionPane.PLAIN_MESSAGE, null); + JOptionPane.showMessageDialog(this, "Copyright 2018 SunakazeKun\nhttps://github.com/SunakazeKun/AlmiaE", Main.NAME, JOptionPane.PLAIN_MESSAGE, null); }//GEN-LAST:event_mnuAboutActionPerformed private void btnPokemonEditorActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnPokemonEditorActionPerformed @@ -218,14 +227,13 @@ public class Main extends javax.swing.JFrame { }//GEN-LAST:event_btnPokemonEditorActionPerformed private void btnMapEditorActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnMapEditorActionPerformed - Object[] maps = getMaps().toArray(); + Object[] maps = Game.current.getMapsList().toArray(); if (maps.length == 0) return; - String mapname = (String) JOptionPane.showInputDialog(this, "Select a map file.", Main.name, JOptionPane.PLAIN_MESSAGE, null, maps, maps[0]); + String mapname = (String) JOptionPane.showInputDialog(this, "Select a map file.", Main.NAME, JOptionPane.PLAIN_MESSAGE, null, maps, maps[0]); if (mapname == null) return; if (mapname.isEmpty()) return; - try { Map map = new Map(Game.current, mapname); new MapEditor(map).setVisible(true); @@ -235,25 +243,6 @@ public class Main extends javax.swing.JFrame { } }//GEN-LAST:event_btnMapEditorActionPerformed - public List getMaps() { - File[] files = new File(Game.current.filesystem.getAbsolutePath() + "/field/map").listFiles(); - List maps = new ArrayList(); - - for (File file : files) { - if (!file.isFile()) { - continue; - } - - String filename = file.getName(); - - if (filename.endsWith(".map.dat.lz")) { - maps.add(filename.replace(".map.dat.lz", "")); - } - } - - return maps; - } - // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton btnMapEditor; private javax.swing.JButton btnPokemonEditor; diff --git a/src/com/aurum/almia/Resources.java b/src/com/aurum/almia/Resources.java new file mode 100644 index 0000000..536f4a6 --- /dev/null +++ b/src/com/aurum/almia/Resources.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2018 Aurum + * + * AlmiaE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AlmiaE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.aurum.almia; + +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import javax.imageio.ImageIO; +import javax.swing.Icon; +import javax.swing.ImageIcon; + +public class Resources { + public static InputStream loadStream(String resdir) { + return Resources.class.getResourceAsStream("/res/" + resdir); + } + + public static Reader loadReader(String resdir) { + return new InputStreamReader(loadStream(resdir)); + } + + public static BufferedImage loadImage(String resdir) { + BufferedImage image = null; + InputStream in = loadStream(resdir); + + if (in == null) + return null; + + try { + image = ImageIO.read(in); + in.close(); + } + catch(IOException ex) { + System.out.println(ex); + } + + return image; + } + + public static Icon loadIcon(String resdir) { + return new ImageIcon(loadImage(resdir)); + } + + // Helpers for map object sprites + public static BufferedImage getTargetImg(int target) { + switch(target) { + case 56: target = 55; break; + case 61: + case 62: + case 63: target = 60; break; + case 65: + case 66: + case 67: target = 64; break; + case 69: target = 68; break; + case 71: target = 70; break; + case 73: target = 72; break; + case 79: + case 80: + case 81: + case 82: + case 83: target = 78; break; + } + + return loadImage(String.format("targets/%d.png", target)); + } + + public static BufferedImage getNpcImg(int npc) { + return loadImage(String.format("npcs/%d.png", npc)); + } + + public static BufferedImage getMonImg(int mon, int form) { + return loadImage(String.format("mons/%d_%d.png", mon, form)); + } +} diff --git a/src/com/aurum/almia/Utils.java b/src/com/aurum/almia/Utils.java deleted file mode 100644 index 7cf47a9..0000000 --- a/src/com/aurum/almia/Utils.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2018 Aurum - * - * AlmiaE is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * AlmiaE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.aurum.almia; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; - -public class Utils { - public static ByteBuffer loadFileIntoBuffer(String filepath) throws IOException { - FileInputStream in = new FileInputStream(new File(filepath)); - ByteBuffer buffer = new ByteBuffer(in.available()); - in.read(buffer.getBuffer()); - - return buffer; - } - - public static void saveBytesToFile(byte[] bytes, File file) throws IOException { - if (!(file.exists() && file.isFile())) { - file.getParentFile().mkdirs(); - file.createNewFile(); - } - - try (FileOutputStream out = new FileOutputStream(file)) { - out.write(bytes); - out.flush(); - } - } -} \ No newline at end of file diff --git a/src/com/aurum/almia/editors/CollisionWidget.form b/src/com/aurum/almia/editors/CollisionWidget.form new file mode 100644 index 0000000..7c51966 --- /dev/null +++ b/src/com/aurum/almia/editors/CollisionWidget.form @@ -0,0 +1,48 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/com/aurum/almia/editors/CollisionWidget.java b/src/com/aurum/almia/editors/CollisionWidget.java new file mode 100644 index 0000000..be155e9 --- /dev/null +++ b/src/com/aurum/almia/editors/CollisionWidget.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2018 Aurum + * + * AlmiaE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AlmiaE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.aurum.almia.editors; + +import com.aurum.almia.game.map.CollisionData; + +public class CollisionWidget extends javax.swing.JPanel { + private CollisionData data; + + public CollisionWidget(CollisionData data) { + this.data = data; + + initComponents(); + } + + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; + + lblUnk0 = new javax.swing.JLabel(); + filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767)); + + setLayout(new java.awt.GridBagLayout()); + + lblUnk0.setFont(new java.awt.Font("Dialog", 3, 12)); // NOI18N + lblUnk0.setText("--WIP--"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblUnk0, gridBagConstraints); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 4; + gridBagConstraints.gridwidth = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.weighty = 1.0; + add(filler1, gridBagConstraints); + }// //GEN-END:initComponents + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.Box.Filler filler1; + private javax.swing.JLabel lblUnk0; + // End of variables declaration//GEN-END:variables +} \ No newline at end of file diff --git a/src/com/aurum/almia/editors/LocationWidget.form b/src/com/aurum/almia/editors/LocationWidget.form new file mode 100644 index 0000000..2b9645c --- /dev/null +++ b/src/com/aurum/almia/editors/LocationWidget.form @@ -0,0 +1,160 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/com/aurum/almia/editors/LocationWidget.java b/src/com/aurum/almia/editors/LocationWidget.java new file mode 100644 index 0000000..93a7d8c --- /dev/null +++ b/src/com/aurum/almia/editors/LocationWidget.java @@ -0,0 +1,218 @@ +/* + * Copyright (C) 2018 Aurum + * + * AlmiaE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AlmiaE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.aurum.almia.editors; + +import com.aurum.almia.game.map.LocationData; + +public class LocationWidget extends javax.swing.JPanel { + private LocationData.Entry entry; + + public LocationWidget(LocationData.Entry entry) { + this.entry = entry; + + initComponents(); + + spnPosX.setValue(entry.posX); + spnPosY.setValue(entry.posY); + spnWidth.setValue(entry.width); + spnHeight.setValue(entry.height); + spnUnk8.setValue(entry.unk8); + } + + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; + + lblPosX = new javax.swing.JLabel(); + lblPosY = new javax.swing.JLabel(); + lblWidth = new javax.swing.JLabel(); + lblHeight = new javax.swing.JLabel(); + lblUnk8 = new javax.swing.JLabel(); + spnPosX = new javax.swing.JSpinner(); + spnPosY = new javax.swing.JSpinner(); + spnWidth = new javax.swing.JSpinner(); + spnHeight = new javax.swing.JSpinner(); + spnUnk8 = new javax.swing.JSpinner(); + filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767)); + + setLayout(new java.awt.GridBagLayout()); + + lblPosX.setText("X Position"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblPosX, gridBagConstraints); + + lblPosY.setText("Y Position"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 1; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblPosY, gridBagConstraints); + + lblWidth.setText("Width"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblWidth, gridBagConstraints); + + lblHeight.setText("Height"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 3; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblHeight, gridBagConstraints); + + lblUnk8.setText("short (0x8)"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 4; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblUnk8, gridBagConstraints); + + spnPosX.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); + spnPosX.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnPosXStateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnPosX, gridBagConstraints); + + spnPosY.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); + spnPosY.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnPosYStateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 1; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnPosY, gridBagConstraints); + + spnWidth.setModel(new javax.swing.SpinnerNumberModel(0, 0, 65535, 1)); + spnWidth.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnWidthStateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnWidth, gridBagConstraints); + + spnHeight.setModel(new javax.swing.SpinnerNumberModel(0, 0, 65535, 1)); + spnHeight.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnHeightStateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 3; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnHeight, gridBagConstraints); + + spnUnk8.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); + spnUnk8.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnUnk8StateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 4; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnUnk8, gridBagConstraints); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 5; + gridBagConstraints.gridwidth = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.weighty = 1.0; + add(filler1, gridBagConstraints); + }// //GEN-END:initComponents + + private void spnPosXStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnPosXStateChanged + entry.posX = (short)spnPosX.getValue(); + }//GEN-LAST:event_spnPosXStateChanged + + private void spnPosYStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnPosYStateChanged + entry.posY = (short)spnPosY.getValue(); + }//GEN-LAST:event_spnPosYStateChanged + + private void spnWidthStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnWidthStateChanged + entry.width = (int)spnWidth.getValue(); + }//GEN-LAST:event_spnWidthStateChanged + + private void spnHeightStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnHeightStateChanged + entry.height = (int)spnHeight.getValue(); + }//GEN-LAST:event_spnHeightStateChanged + + private void spnUnk8StateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnUnk8StateChanged + entry.unk8 = (short)spnUnk8.getValue(); + }//GEN-LAST:event_spnUnk8StateChanged + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.Box.Filler filler1; + private javax.swing.JLabel lblHeight; + private javax.swing.JLabel lblPosX; + private javax.swing.JLabel lblPosY; + private javax.swing.JLabel lblUnk8; + private javax.swing.JLabel lblWidth; + private javax.swing.JSpinner spnHeight; + private javax.swing.JSpinner spnPosX; + private javax.swing.JSpinner spnPosY; + private javax.swing.JSpinner spnUnk8; + private javax.swing.JSpinner spnWidth; + // End of variables declaration//GEN-END:variables +} \ No newline at end of file diff --git a/src/com/aurum/almia/editors/MapEditor.form b/src/com/aurum/almia/editors/MapEditor.form new file mode 100644 index 0000000..0bc27c8 --- /dev/null +++ b/src/com/aurum/almia/editors/MapEditor.form @@ -0,0 +1,150 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/com/aurum/almia/editors/MapEditor.java b/src/com/aurum/almia/editors/MapEditor.java new file mode 100644 index 0000000..00fe8e4 --- /dev/null +++ b/src/com/aurum/almia/editors/MapEditor.java @@ -0,0 +1,534 @@ +/* + * Copyright (C) 2018 Aurum + * + * AlmiaE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AlmiaE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.aurum.almia.editors; + +import com.aurum.almia.Main; +import com.aurum.almia.Resources; +import com.aurum.almia.game.map.*; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Graphics; +import java.io.IOException; +import javax.swing.Icon; +import javax.swing.JPanel; +import javax.swing.JTree; +import javax.swing.SwingUtilities; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeCellRenderer; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; +import javax.swing.tree.TreeSelectionModel; + +public class MapEditor extends javax.swing.JFrame { + private class MapRenderer extends JPanel implements Runnable { + static final int FPS = 30; + + Thread thread; + boolean isRunning; + + public MapRenderer() { + update(); + } + + public void update() { + setPreferredSize(new Dimension(map.mapInfo.width, map.mapInfo.height)); + repaint(); + } + + @Override + public void paintComponent(Graphics g) { + super.paintComponent(g); + + try { + map.render(g); + } + catch (IOException ex) { + System.out.println(ex); + } + } + + @Override + public void run() { + double timePerTick = 1000000000 / FPS; + double delta = 0; + long now = 0; + long diff = 0; + long last = System.nanoTime(); + long timer = 0; + + while(isRunning) { + now = System.nanoTime(); + diff = now - last; + timer += diff; + delta += diff / timePerTick; + + if (delta >= 1) { + update(); + delta--; + } + + if (timer >= 1000000000) { + timer = 0; + } + + last = now; + } + } + + public synchronized void start() { + if (isRunning) + return; + + isRunning = true; + + thread = new Thread(this); + thread.start(); + } + + public synchronized void stop() { + if (!isRunning) + return; + + isRunning = false; + + try { + thread.join(); + } + catch(InterruptedException ex) { + System.out.println(ex); + } + } + } + + private class ObjTreeCellRenderer extends DefaultTreeCellRenderer { + final Icon ICON_MISC = Resources.loadIcon("mapEditor/node_misc.png"); + final Icon ICON_LOCATION = Resources.loadIcon("mapEditor/node_location.png"); + final Icon ICON_TARGET = Resources.loadIcon("mapEditor/node_target.png"); + final Icon ICON_POKEMON = Resources.loadIcon("mapEditor/node_mon.png"); + final Icon ICON_NPC = Resources.loadIcon("mapEditor/node_npc.png"); + + @Override + public Component getTreeCellRendererComponent(JTree tree, + Object value, boolean selected, boolean expanded, + boolean leaf, int row, boolean hasFocus) { + super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); + + Object val = ((DefaultMutableTreeNode)value).getUserObject(); + + if (val != null) { + if (val instanceof MapInfo) setIcon(ICON_MISC); + else if (val instanceof CollisionData) setIcon(ICON_MISC); + else if (val instanceof TextureInfo) setIcon(ICON_MISC); + else if (val instanceof TextureInfo.Entry) setIcon(ICON_MISC); + else if (val instanceof LocationData) setIcon(ICON_LOCATION); + else if (val instanceof LocationData.Entry) setIcon(ICON_LOCATION); + else if (val instanceof TargetData) setIcon(ICON_TARGET); + else if (val instanceof TargetData.Entry) setIcon(ICON_TARGET); + else if (val instanceof MonData) setIcon(ICON_POKEMON); + else if (val instanceof MonData.Entry) setIcon(ICON_POKEMON); + else if (val instanceof NpcData) setIcon(ICON_NPC); + else if (val instanceof NpcData.Entry) setIcon(ICON_NPC); + } + + return this; + } + } + + private Map map; + private Object selectedData; + + private JPanel editorWidget; + private MapRenderer renderer; + private DefaultTreeModel treeModel; + private DefaultMutableTreeNode treeRoot; + + public MapEditor(Map map) { + this.map = map; + this.selectedData = null; + this.editorWidget = null; + this.renderer = new MapRenderer(); + this.treeModel = null; + this.treeRoot = null; + + initComponents(); + initData(); + } + + public void initData() { + setTitle(String.format("Map Editor: Editing %s", map.name)); + treeModel = (DefaultTreeModel)tree.getModel(); + tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); + scrRender.getViewport().add(renderer); + renderer.start(); + + treeRoot = new DefaultMutableTreeNode(map.name, true); + + // Generic map info blocks + DefaultMutableTreeNode mapInfoNode = new DefaultMutableTreeNode(map.mapInfo, false); + DefaultMutableTreeNode texInfoNode = new DefaultMutableTreeNode(map.texInfo, true); + + for (TextureInfo.Entry entry : map.texInfo.entries) { + texInfoNode.add(new DefaultMutableTreeNode(entry, false)); + } + + treeRoot.add(mapInfoNode); + treeRoot.add(texInfoNode); + + // Layer object blocks + for (Layer layer : map.layers) { + DefaultMutableTreeNode layerNode = new DefaultMutableTreeNode(layer, true); + DefaultMutableTreeNode collisionNode = new DefaultMutableTreeNode(layer.collisionData, false); + DefaultMutableTreeNode collOverlayNode = new DefaultMutableTreeNode(layer.collOverlayData, false); + DefaultMutableTreeNode locationsNode = new DefaultMutableTreeNode(layer.locationData, true); + DefaultMutableTreeNode targetsNode = new DefaultMutableTreeNode(layer.targetData, true); + DefaultMutableTreeNode monsNode = new DefaultMutableTreeNode(layer.monData, true); + DefaultMutableTreeNode npcsNode = new DefaultMutableTreeNode(layer.npcData, true); + + for (LocationData.Entry entry : layer.locationData.entries) + locationsNode.add(new DefaultMutableTreeNode(entry, false)); + + for (TargetData.Entry entry : layer.targetData.entries) + targetsNode.add(new DefaultMutableTreeNode(entry, false)); + + for (MonData.Entry entry : layer.monData.entries) + monsNode.add(new DefaultMutableTreeNode(entry, false)); + + for (NpcData.Entry entry : layer.npcData.entries) + npcsNode.add(new DefaultMutableTreeNode(entry, false)); + + layerNode.add(collisionNode); + layerNode.add(collOverlayNode); + layerNode.add(locationsNode); + layerNode.add(targetsNode); + layerNode.add(monsNode); + layerNode.add(npcsNode); + + treeRoot.add(layerNode); + } + + treeModel.setRoot(treeRoot); + } + + public DefaultMutableTreeNode getSelectedNode() { + return (DefaultMutableTreeNode)tree.getLastSelectedPathComponent(); + } + + public Object getSelectedNodeObject() { + DefaultMutableTreeNode node = getSelectedNode(); + return node == null ? null : node.getUserObject(); + } + + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; + + treeMenu = new javax.swing.JPopupMenu(); + mnuAdd = new javax.swing.JMenuItem(); + mnuDelete = new javax.swing.JMenuItem(); + mnuClone = new javax.swing.JMenuItem(); + scrTree = new javax.swing.JScrollPane(); + tree = new javax.swing.JTree(); + scrRender = new javax.swing.JScrollPane(); + scrSettings = new javax.swing.JScrollPane(); + tlb1 = new javax.swing.JToolBar(); + btnSaveAll = new javax.swing.JButton(); + + mnuAdd.setText("Add"); + mnuAdd.setToolTipText(""); + mnuAdd.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + mnuAddActionPerformed(evt); + } + }); + treeMenu.add(mnuAdd); + + mnuDelete.setText("Delete"); + mnuDelete.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + mnuDeleteActionPerformed(evt); + } + }); + treeMenu.add(mnuDelete); + + mnuClone.setText("Copy"); + mnuClone.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + mnuCloneActionPerformed(evt); + } + }); + treeMenu.add(mnuClone); + + setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); + setTitle("Map Editor: Editing "); + setIconImage(Main.ICON); + setMinimumSize(new java.awt.Dimension(800, 600)); + setPreferredSize(new java.awt.Dimension(900, 600)); + addWindowListener(new java.awt.event.WindowAdapter() { + public void windowClosing(java.awt.event.WindowEvent evt) { + formWindowClosing(evt); + } + }); + getContentPane().setLayout(new java.awt.GridBagLayout()); + + javax.swing.tree.DefaultMutableTreeNode treeNode1 = new javax.swing.tree.DefaultMutableTreeNode("root"); + tree.setModel(new javax.swing.tree.DefaultTreeModel(treeNode1)); + tree.setCellRenderer(new ObjTreeCellRenderer()); + tree.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + treeMouseClicked(evt); + } + }); + tree.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() { + public void valueChanged(javax.swing.event.TreeSelectionEvent evt) { + treeValueChanged(evt); + } + }); + scrTree.setViewportView(tree); + + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 1; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.weightx = 0.2; + gridBagConstraints.weighty = 1.0; + gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 0); + getContentPane().add(scrTree, gridBagConstraints); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 1; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.weightx = 0.6; + gridBagConstraints.weighty = 1.0; + gridBagConstraints.insets = new java.awt.Insets(2, 0, 2, 0); + getContentPane().add(scrRender, gridBagConstraints); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 2; + gridBagConstraints.gridy = 1; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.weightx = 0.3; + gridBagConstraints.weighty = 1.0; + gridBagConstraints.insets = new java.awt.Insets(2, 0, 2, 2); + getContentPane().add(scrSettings, gridBagConstraints); + + tlb1.setFloatable(false); + tlb1.setRollover(true); + + btnSaveAll.setIcon(new javax.swing.ImageIcon(getClass().getResource("/res/tl_save.png"))); // NOI18N + btnSaveAll.setText("Save all data"); + btnSaveAll.setFocusable(false); + btnSaveAll.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); + btnSaveAll.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); + btnSaveAll.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + btnSaveAllActionPerformed(evt); + } + }); + tlb1.add(btnSaveAll); + + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.gridwidth = 3; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 1.0; + getContentPane().add(tlb1, gridBagConstraints); + + pack(); + setLocationRelativeTo(null); + }// //GEN-END:initComponents + + private void btnSaveAllActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSaveAllActionPerformed + try { + map.save(); + } + catch (IOException ex) { + System.out.println(ex); + } + }//GEN-LAST:event_btnSaveAllActionPerformed + + private void treeValueChanged(javax.swing.event.TreeSelectionEvent evt) {//GEN-FIRST:event_treeValueChanged + if (editorWidget != null) { + scrSettings.getViewport().remove(editorWidget); + editorWidget = null; + selectedData = null; + } + + Object userObject = getSelectedNodeObject(); + + if (userObject == null) + return; + + if (userObject instanceof MapInfo) + editorWidget = new MapInfoWidget((MapInfo)userObject); + else if (userObject instanceof TextureInfo.Entry) + editorWidget = new TexInfoWidget((TextureInfo.Entry)userObject); + else if (userObject instanceof MonData.Entry) + editorWidget = new MonWidget((MonData.Entry)userObject); + else if (userObject instanceof NpcData.Entry) + editorWidget = new NpcWidget((NpcData.Entry)userObject); + else if (userObject instanceof LocationData.Entry) + editorWidget = new LocationWidget((LocationData.Entry)userObject); + else if (userObject instanceof TargetData.Entry) + editorWidget = new TargetWidget((TargetData.Entry)userObject); + else if (userObject instanceof CollisionData) + editorWidget = new CollisionWidget((CollisionData)userObject); + + selectedData = userObject; + + if (editorWidget != null) + scrSettings.getViewport().add(editorWidget); + + scrSettings.repaint(); + }//GEN-LAST:event_treeValueChanged + + private void treeMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_treeMouseClicked + if (!SwingUtilities.isRightMouseButton(evt)) + return; + + // Find the node + int x = evt.getX(); + int y = evt.getY(); + TreePath path = tree.getPathForLocation(x, y); + if (path == null) + return; + + tree.setSelectionPath(path); + + Object userObject = getSelectedNodeObject(); + + if (userObject == null) + return; + + // Display operations + if (userObject instanceof AbstractData) { + mnuAdd.setEnabled(true); + mnuDelete.setEnabled(false); + mnuClone.setEnabled(false); + treeMenu.show(evt.getComponent(), x, y); + } + else if (userObject instanceof AbstractEntry) { + mnuAdd.setEnabled(false); + mnuDelete.setEnabled(true); + mnuClone.setEnabled(true); + treeMenu.show(evt.getComponent(), x, y); + } + }//GEN-LAST:event_treeMouseClicked + + private void mnuAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuAddActionPerformed + // Get the node and object + DefaultMutableTreeNode selected = getSelectedNode(); + if (selected == null) + return; + AbstractData data = (AbstractData)selected.getUserObject(); + if (data == null) + return; + + // Create the entry + AbstractEntry entry = null; + + if (data instanceof TextureInfo) entry = ((TextureInfo) data).new Entry(); + else if (data instanceof MonData) entry = ((MonData) data).new Entry(); + else if (data instanceof NpcData) entry = ((NpcData) data).new Entry(); + else if (data instanceof LocationData) entry = ((LocationData) data).new Entry(); + else if (data instanceof TargetData) entry = ((TargetData) data).new Entry(); + + // Create the node, and add this and the data + if (entry == null) + return; + + data.entries.add(entry); + + DefaultMutableTreeNode node = new DefaultMutableTreeNode(entry, false); + treeModel.insertNodeInto(node, selected, selected.getChildCount()); + + // Select new node + TreePath path = new TreePath(treeModel.getPathToRoot(node)); + tree.setSelectionPath(path); + tree.scrollPathToVisible(path); + }//GEN-LAST:event_mnuAddActionPerformed + + private void mnuDeleteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuDeleteActionPerformed + // The code here is made for entry nodes only. Any folders or the root + // will not work with this. Of course, they have been taken care of + // earlier already (treeMouseClicked event), so nothing should go wrong + // in theory. + + // Get the node, object and parent + DefaultMutableTreeNode selected = getSelectedNode(); + if (selected == null) + return; + AbstractEntry entry = (AbstractEntry)selected.getUserObject(); + AbstractData data = (AbstractData)((DefaultMutableTreeNode)selected.getParent()).getUserObject(); + + // Delete the node and data + treeModel.removeNodeFromParent(selected); + + if (data == null || entry == null) + return; + + data.entries.remove(entry); + }//GEN-LAST:event_mnuDeleteActionPerformed + + private void mnuCloneActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuCloneActionPerformed + // Similar to the node deletion code, as written above. They are used + // in the same context, which is not very suprising... + + // Get the node, object and parent + DefaultMutableTreeNode selected = getSelectedNode(); + if (selected == null) + return; + DefaultMutableTreeNode parent = (DefaultMutableTreeNode)selected.getParent(); + AbstractEntry entry = (AbstractEntry)selected.getUserObject(); + AbstractData data = (AbstractData)parent.getUserObject(); + if (data == null || entry == null) + return; + + // Create the entry and node, and add them as well + AbstractEntry clone = entry.clone(); + if (clone == null) + return; + + data.entries.add(clone); + + DefaultMutableTreeNode node = new DefaultMutableTreeNode(clone, false); + treeModel.insertNodeInto(node, parent, parent.getChildCount()); + + // Select new node + TreePath path = new TreePath(treeModel.getPathToRoot(node)); + tree.setSelectionPath(path); + tree.scrollPathToVisible(path); + }//GEN-LAST:event_mnuCloneActionPerformed + + private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing + renderer.stop(); + }//GEN-LAST:event_formWindowClosing + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton btnSaveAll; + private javax.swing.JMenuItem mnuAdd; + private javax.swing.JMenuItem mnuClone; + private javax.swing.JMenuItem mnuDelete; + private javax.swing.JScrollPane scrRender; + private javax.swing.JScrollPane scrSettings; + private javax.swing.JScrollPane scrTree; + private javax.swing.JToolBar tlb1; + private javax.swing.JTree tree; + private javax.swing.JPopupMenu treeMenu; + // End of variables declaration//GEN-END:variables +} \ No newline at end of file diff --git a/src/com/aurum/almia/editors/MapInfoWidget.form b/src/com/aurum/almia/editors/MapInfoWidget.form new file mode 100644 index 0000000..de60949 --- /dev/null +++ b/src/com/aurum/almia/editors/MapInfoWidget.form @@ -0,0 +1,135 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/com/aurum/almia/editors/MapInfoWidget.java b/src/com/aurum/almia/editors/MapInfoWidget.java new file mode 100644 index 0000000..60389c9 --- /dev/null +++ b/src/com/aurum/almia/editors/MapInfoWidget.java @@ -0,0 +1,183 @@ +/* + * Copyright (C) 2018 Aurum + * + * AlmiaE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AlmiaE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.aurum.almia.editors; + +import com.aurum.almia.game.map.MapInfo; + +public class MapInfoWidget extends javax.swing.JPanel { + private MapInfo entry; + + public MapInfoWidget(MapInfo entry) { + this.entry = entry; + + initComponents(); + + spnWidth.setValue(entry.width); + spnHeight.setValue(entry.height); + spnUnk8.setValue(entry.unk8); + spnUnkC.setValue(entry.unkC); + } + + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; + + lblWidth = new javax.swing.JLabel(); + lblHeight = new javax.swing.JLabel(); + lblUnk8 = new javax.swing.JLabel(); + lblUnkC = new javax.swing.JLabel(); + spnWidth = new javax.swing.JSpinner(); + spnHeight = new javax.swing.JSpinner(); + spnUnk8 = new javax.swing.JSpinner(); + spnUnkC = new javax.swing.JSpinner(); + filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767)); + + setLayout(new java.awt.GridBagLayout()); + + lblWidth.setText("Width"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblWidth, gridBagConstraints); + + lblHeight.setText("Height"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 1; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblHeight, gridBagConstraints); + + lblUnk8.setText("unk8"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblUnk8, gridBagConstraints); + + lblUnkC.setText("unkC"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 3; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblUnkC, gridBagConstraints); + + spnWidth.setModel(new javax.swing.SpinnerNumberModel()); + spnWidth.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnWidthStateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnWidth, gridBagConstraints); + + spnHeight.setModel(new javax.swing.SpinnerNumberModel()); + spnHeight.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnHeightStateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 1; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnHeight, gridBagConstraints); + + spnUnk8.setModel(new javax.swing.SpinnerNumberModel()); + spnUnk8.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnUnk8StateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnUnk8, gridBagConstraints); + + spnUnkC.setModel(new javax.swing.SpinnerNumberModel()); + spnUnkC.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnUnkCStateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 3; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnUnkC, gridBagConstraints); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 4; + gridBagConstraints.gridwidth = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.weighty = 1.0; + add(filler1, gridBagConstraints); + }// //GEN-END:initComponents + + private void spnWidthStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnWidthStateChanged + entry.width = (int)spnWidth.getValue(); + }//GEN-LAST:event_spnWidthStateChanged + + private void spnHeightStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnHeightStateChanged + entry.height = (int)spnHeight.getValue(); + }//GEN-LAST:event_spnHeightStateChanged + + private void spnUnk8StateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnUnk8StateChanged + entry.unk8 = (int)spnUnk8.getValue(); + }//GEN-LAST:event_spnUnk8StateChanged + + private void spnUnkCStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnUnkCStateChanged + entry.unkC = (int)spnUnkC.getValue(); + }//GEN-LAST:event_spnUnkCStateChanged + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.Box.Filler filler1; + private javax.swing.JLabel lblHeight; + private javax.swing.JLabel lblUnk8; + private javax.swing.JLabel lblUnkC; + private javax.swing.JLabel lblWidth; + private javax.swing.JSpinner spnHeight; + private javax.swing.JSpinner spnUnk8; + private javax.swing.JSpinner spnUnkC; + private javax.swing.JSpinner spnWidth; + // End of variables declaration//GEN-END:variables +} \ No newline at end of file diff --git a/src/com/aurum/almia/editors/MonWidget.form b/src/com/aurum/almia/editors/MonWidget.form new file mode 100644 index 0000000..1b04dbf --- /dev/null +++ b/src/com/aurum/almia/editors/MonWidget.form @@ -0,0 +1,221 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/com/aurum/almia/editors/MonWidget.java b/src/com/aurum/almia/editors/MonWidget.java new file mode 100644 index 0000000..68ef40c --- /dev/null +++ b/src/com/aurum/almia/editors/MonWidget.java @@ -0,0 +1,285 @@ +/* + * Copyright (C) 2018 Aurum + * + * AlmiaE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AlmiaE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.aurum.almia.editors; + +import com.aurum.almia.game.map.MonData; + +public class MonWidget extends javax.swing.JPanel { + private MonData.Entry entry; + + public MonWidget(MonData.Entry entry) { + this.entry = entry; + + initComponents(); + + spnPosX.setValue(entry.posX); + spnPosY.setValue(entry.posY); + spnBehavior.setValue(entry.behavior); + cmoAppearance.setSelectedIndex(entry.appearance); + cmoID.setSelectedIndex(entry.monID); + spnUnk8.setValue(entry.unk8); + spnUnk9.setValue(entry.unk9); + } + + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; + + lblPosX = new javax.swing.JLabel(); + lblPosY = new javax.swing.JLabel(); + lblBehavior = new javax.swing.JLabel(); + lblAppearance = new javax.swing.JLabel(); + lblID = new javax.swing.JLabel(); + lblUnk8 = new javax.swing.JLabel(); + lblUnk9 = new javax.swing.JLabel(); + spnPosX = new javax.swing.JSpinner(); + spnPosY = new javax.swing.JSpinner(); + spnBehavior = new javax.swing.JSpinner(); + cmoAppearance = new javax.swing.JComboBox<>(); + cmoID = new javax.swing.JComboBox<>(); + spnUnk8 = new javax.swing.JSpinner(); + spnUnk9 = new javax.swing.JSpinner(); + filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767)); + + setLayout(new java.awt.GridBagLayout()); + + lblPosX.setText("X Position"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblPosX, gridBagConstraints); + + lblPosY.setText("Y Position"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 1; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblPosY, gridBagConstraints); + + lblBehavior.setText("Behavior"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblBehavior, gridBagConstraints); + + lblAppearance.setText("Appearance"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 3; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblAppearance, gridBagConstraints); + + lblID.setText("Pokémon"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 4; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblID, gridBagConstraints); + + lblUnk8.setText("byte (0x8)"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 5; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblUnk8, gridBagConstraints); + + lblUnk9.setText("byte (0x9)"); + lblUnk9.setToolTipText(""); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 6; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblUnk9, gridBagConstraints); + + spnPosX.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); + spnPosX.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnPosXStateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnPosX, gridBagConstraints); + + spnPosY.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); + spnPosY.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnPosYStateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 1; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnPosY, gridBagConstraints); + + spnBehavior.setModel(new javax.swing.SpinnerNumberModel(Short.valueOf((short)0), Short.valueOf((short)0), Short.valueOf((short)255), Short.valueOf((short)1))); + spnBehavior.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnBehaviorStateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnBehavior, gridBagConstraints); + + cmoAppearance.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "00: Inactive", "01: Active", "02: Tree" })); + cmoAppearance.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + cmoAppearanceActionPerformed(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 3; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(cmoAppearance, gridBagConstraints); + + cmoID.setModel(new javax.swing.DefaultComboBoxModel(entry.parent.layer.map.game.getPokemonList().toArray())); + cmoID.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + cmoIDActionPerformed(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 4; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(cmoID, gridBagConstraints); + + spnUnk8.setModel(new javax.swing.SpinnerNumberModel((byte)0, null, null, (byte)1)); + spnUnk8.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnUnk8StateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 5; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnUnk8, gridBagConstraints); + + spnUnk9.setModel(new javax.swing.SpinnerNumberModel((byte)0, null, null, (byte)1)); + spnUnk9.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnUnk9StateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 6; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnUnk9, gridBagConstraints); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 7; + gridBagConstraints.gridwidth = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.weighty = 1.0; + add(filler1, gridBagConstraints); + }// //GEN-END:initComponents + + private void spnPosXStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnPosXStateChanged + entry.posX = (short)spnPosX.getValue(); + }//GEN-LAST:event_spnPosXStateChanged + + private void spnPosYStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnPosYStateChanged + entry.posY = (short)spnPosY.getValue(); + }//GEN-LAST:event_spnPosYStateChanged + + private void spnBehaviorStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnBehaviorStateChanged + entry.behavior = (short)spnBehavior.getValue(); + }//GEN-LAST:event_spnBehaviorStateChanged + + private void cmoAppearanceActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmoAppearanceActionPerformed + entry.appearance = (short)cmoAppearance.getSelectedIndex(); + }//GEN-LAST:event_cmoAppearanceActionPerformed + + private void cmoIDActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmoIDActionPerformed + entry.monID = cmoID.getSelectedIndex(); + }//GEN-LAST:event_cmoIDActionPerformed + + private void spnUnk8StateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnUnk8StateChanged + entry.unk8 = (byte)spnUnk8.getValue(); + }//GEN-LAST:event_spnUnk8StateChanged + + private void spnUnk9StateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnUnk9StateChanged + entry.unk9 = (byte)spnUnk9.getValue(); + }//GEN-LAST:event_spnUnk9StateChanged + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JComboBox cmoAppearance; + private javax.swing.JComboBox cmoID; + private javax.swing.Box.Filler filler1; + private javax.swing.JLabel lblAppearance; + private javax.swing.JLabel lblBehavior; + private javax.swing.JLabel lblID; + private javax.swing.JLabel lblPosX; + private javax.swing.JLabel lblPosY; + private javax.swing.JLabel lblUnk8; + private javax.swing.JLabel lblUnk9; + private javax.swing.JSpinner spnBehavior; + private javax.swing.JSpinner spnPosX; + private javax.swing.JSpinner spnPosY; + private javax.swing.JSpinner spnUnk8; + private javax.swing.JSpinner spnUnk9; + // End of variables declaration//GEN-END:variables +} \ No newline at end of file diff --git a/src/com/aurum/almia/editors/NpcWidget.form b/src/com/aurum/almia/editors/NpcWidget.form new file mode 100644 index 0000000..6338e18 --- /dev/null +++ b/src/com/aurum/almia/editors/NpcWidget.form @@ -0,0 +1,230 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/com/aurum/almia/editors/NpcWidget.java b/src/com/aurum/almia/editors/NpcWidget.java new file mode 100644 index 0000000..8fcdcc6 --- /dev/null +++ b/src/com/aurum/almia/editors/NpcWidget.java @@ -0,0 +1,293 @@ +/* + * Copyright (C) 2018 Aurum + * + * AlmiaE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AlmiaE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.aurum.almia.editors; + +import com.aurum.almia.game.map.NpcData; + +public class NpcWidget extends javax.swing.JPanel { + private NpcData.Entry entry; + + public NpcWidget(NpcData.Entry entry) { + this.entry = entry; + + initComponents(); + + spnPosX.setValue(entry.posX); + spnPosY.setValue(entry.posY); + cmoDirection.setSelectedIndex(entry.direction); + chkIsVisible.setSelected(entry.isVisible); + cmoNpc.setSelectedIndex(entry.npcID); + spnUnk8.setValue(entry.unk8); + spnUnk9.setValue(entry.unk9); + chkUnkA.setSelected(entry.unkA); + } + + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; + + lblPosX = new javax.swing.JLabel(); + lblPosY = new javax.swing.JLabel(); + lblDirection = new javax.swing.JLabel(); + lblNpc = new javax.swing.JLabel(); + lblUnk8 = new javax.swing.JLabel(); + lblUnk9 = new javax.swing.JLabel(); + spnPosX = new javax.swing.JSpinner(); + spnPosY = new javax.swing.JSpinner(); + cmoDirection = new javax.swing.JComboBox<>(); + cmoNpc = new javax.swing.JComboBox<>(); + chkIsVisible = new javax.swing.JCheckBox(); + spnUnk9 = new javax.swing.JSpinner(); + spnUnk8 = new javax.swing.JSpinner(); + chkUnkA = new javax.swing.JCheckBox(); + filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767)); + + setLayout(new java.awt.GridBagLayout()); + + lblPosX.setText("X Position"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblPosX, gridBagConstraints); + + lblPosY.setText("Y Position"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 1; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblPosY, gridBagConstraints); + + lblDirection.setText("Direction"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblDirection, gridBagConstraints); + + lblNpc.setText("Sprite"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 4; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblNpc, gridBagConstraints); + + lblUnk8.setText("byte (0x8)"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 5; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblUnk8, gridBagConstraints); + + lblUnk9.setText("byte (0x9)"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 6; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblUnk9, gridBagConstraints); + + spnPosX.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); + spnPosX.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnPosXStateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnPosX, gridBagConstraints); + + spnPosY.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); + spnPosY.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnPosYStateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 1; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnPosY, gridBagConstraints); + + cmoDirection.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "00: Down", "01: Left", "02: Up", "03: Right", "04: Down(?)", "05: Left(?)", "06: Up(?)", "07: Right(?)", "08: Down(?)", "09: Left(?)", "0A: Up(?)", "0B: Right(?)" })); + cmoDirection.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + cmoDirectionActionPerformed(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(cmoDirection, gridBagConstraints); + + cmoNpc.setModel(new javax.swing.DefaultComboBoxModel(entry.parent.layer.map.game.getNpcList().toArray())); + cmoNpc.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + cmoNpcActionPerformed(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 4; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(cmoNpc, gridBagConstraints); + + chkIsVisible.setText("Is visible?"); + chkIsVisible.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + chkIsVisibleActionPerformed(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 3; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(chkIsVisible, gridBagConstraints); + + spnUnk9.setModel(new javax.swing.SpinnerNumberModel((byte)0, null, null, (byte)1)); + spnUnk9.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnUnk9StateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 6; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnUnk9, gridBagConstraints); + + spnUnk8.setModel(new javax.swing.SpinnerNumberModel((byte)0, null, null, (byte)1)); + spnUnk8.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnUnk8StateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 5; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnUnk8, gridBagConstraints); + + chkUnkA.setText("bool (0xA)"); + chkUnkA.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + chkUnkAStateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 7; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(chkUnkA, gridBagConstraints); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 8; + gridBagConstraints.gridwidth = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.weighty = 1.0; + add(filler1, gridBagConstraints); + }// //GEN-END:initComponents + + private void spnPosXStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnPosXStateChanged + entry.posX = (short)spnPosX.getValue(); + }//GEN-LAST:event_spnPosXStateChanged + + private void spnPosYStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnPosYStateChanged + entry.posY = (short)spnPosY.getValue(); + }//GEN-LAST:event_spnPosYStateChanged + + private void cmoDirectionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmoDirectionActionPerformed + entry.direction = (byte)cmoDirection.getSelectedIndex(); + }//GEN-LAST:event_cmoDirectionActionPerformed + + private void chkIsVisibleActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chkIsVisibleActionPerformed + entry.isVisible = chkIsVisible.isSelected(); + }//GEN-LAST:event_chkIsVisibleActionPerformed + + private void spnUnk8StateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnUnk8StateChanged + entry.unk8 = (byte)spnUnk8.getValue(); + }//GEN-LAST:event_spnUnk8StateChanged + + private void spnUnk9StateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnUnk9StateChanged + entry.unk9 = (byte)spnUnk9.getValue(); + }//GEN-LAST:event_spnUnk9StateChanged + + private void chkUnkAStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_chkUnkAStateChanged + entry.unkA = chkUnkA.isSelected(); + }//GEN-LAST:event_chkUnkAStateChanged + + private void cmoNpcActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmoNpcActionPerformed + entry.npcID = cmoNpc.getSelectedIndex(); + }//GEN-LAST:event_cmoNpcActionPerformed + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox chkIsVisible; + private javax.swing.JCheckBox chkUnkA; + private javax.swing.JComboBox cmoDirection; + private javax.swing.JComboBox cmoNpc; + private javax.swing.Box.Filler filler1; + private javax.swing.JLabel lblDirection; + private javax.swing.JLabel lblNpc; + private javax.swing.JLabel lblPosX; + private javax.swing.JLabel lblPosY; + private javax.swing.JLabel lblUnk8; + private javax.swing.JLabel lblUnk9; + private javax.swing.JSpinner spnPosX; + private javax.swing.JSpinner spnPosY; + private javax.swing.JSpinner spnUnk8; + private javax.swing.JSpinner spnUnk9; + // End of variables declaration//GEN-END:variables +} \ No newline at end of file diff --git a/src/com/aurum/almia/swing/PokeIDEditor.form b/src/com/aurum/almia/editors/PokeIDEditor.form similarity index 99% rename from src/com/aurum/almia/swing/PokeIDEditor.form rename to src/com/aurum/almia/editors/PokeIDEditor.form index cf8acf2..6637540 100644 --- a/src/com/aurum/almia/swing/PokeIDEditor.form +++ b/src/com/aurum/almia/editors/PokeIDEditor.form @@ -3,9 +3,9 @@
- + - + diff --git a/src/com/aurum/almia/swing/PokeIDEditor.java b/src/com/aurum/almia/editors/PokeIDEditor.java similarity index 88% rename from src/com/aurum/almia/swing/PokeIDEditor.java rename to src/com/aurum/almia/editors/PokeIDEditor.java index 051f819..8183b4b 100644 --- a/src/com/aurum/almia/swing/PokeIDEditor.java +++ b/src/com/aurum/almia/editors/PokeIDEditor.java @@ -15,10 +15,11 @@ * along with this program. If not, see . */ -package com.aurum.almia.swing; +package com.aurum.almia.editors; import com.aurum.almia.Lists; import com.aurum.almia.Main; +import com.aurum.almia.Resources; import com.aurum.almia.game.param.PokeID; import java.io.IOException; import javax.swing.DefaultComboBoxModel; @@ -27,49 +28,68 @@ import javax.swing.ImageIcon; import javax.swing.JFrame; public class PokeIDEditor extends JFrame { - public PokeID mons; - - protected DefaultListModel model; + private PokeID data; + private PokeID.Entry selected; + private DefaultListModel model; public PokeIDEditor(PokeID mons) { initComponents(); - this.mons = mons; + this.data = mons; + this.selected = null; + this.model = new DefaultListModel(); initGUI(); - for (PokeID.Entry mon : mons.entries) { + for (PokeID.Entry mon : mons.entries) model.addElement(mon.toString()); - } } protected void initGUI() { - model = new DefaultListModel(); - - setTitle("PokeID Editor"); - + enableComponents(false); list.setModel(model); - Object[] assist = Lists.assist_mes.toArray(); cmoType.setModel(new DefaultComboBoxModel(assist)); + cmoAssist.setModel(new DefaultComboBoxModel(assist)); cmoAssist.addActionListener((java.awt.event.ActionEvent evt) -> { - lblAssist.setIcon(new ImageIcon(getClass().getResource("/res/assist/" + cmoAssist.getSelectedIndex() + ".png"))); + lblAssist.setIcon(new ImageIcon(Resources.loadImage(String.format("assist/%d.png", cmoAssist.getSelectedIndex())))); }); cmoAssist.setSelectedIndex(0); + cmoField.setModel(new DefaultComboBoxModel(Lists.fieldwaza_name.toArray())); cmoField.addActionListener((java.awt.event.ActionEvent evt) -> { - lblField.setIcon(new ImageIcon(getClass().getResource("/res/field/" + cmoField.getSelectedIndex() + ".png"))); + lblField.setIcon(new ImageIcon(Resources.loadImage(String.format("field/%d.png", cmoField.getSelectedIndex())))); }); cmoField.setSelectedIndex(0); + cmoPokemon.setModel(new DefaultComboBoxModel(Lists.pokemon_name.toArray())); } + public void enableComponents(boolean b) { + cmoPokemon.setEnabled(b); + spnForm.setEnabled(b); + cmoType.setEnabled(b); + cmoAssist.setEnabled(b); + cmoField.setEnabled(b); + spnFieldLevel.setEnabled(b); + spnShadowWidth.setEnabled(b); + spnShadowHeight.setEnabled(b); + spnUnk8.setEnabled(b); + spnUnkA.setEnabled(b); + spnUnkE.setEnabled(b); + spnUnkF.setEnabled(b); + spnUnk14.setEnabled(b); + spnUnk16.setEnabled(b); + btnSave.setEnabled(b); + btnRemove.setEnabled(b); + } + public void saveAll() { try { - mons.save(); + data.save(); } catch (IOException ex) { System.out.println(ex); @@ -121,8 +141,8 @@ public class PokeIDEditor extends JFrame { btnRemove = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); - setTitle("Map Editor: Editing "); - setIconImage(Main.icon); + setTitle("Pokémon Editor"); + setIconImage(Main.ICON); setResizable(false); toolbar.setFloatable(false); @@ -495,69 +515,71 @@ public class PokeIDEditor extends JFrame { int index = list.getSelectedIndex(); if (index < 0) { + enableComponents(false); return; } - PokeID.Entry mon = mons.entries.get(index); + selected = data.entries.get(index); - cmoPokemon.setSelectedIndex(mon.nameID); - spnForm.setValue(mon.formID); - cmoType.setSelectedIndex(mon.typeID); - cmoAssist.setSelectedIndex(mon.assistID); - cmoField.setSelectedIndex(mon.fieldID); - spnFieldLevel.setValue(mon.fieldLevel); - spnShadowWidth.setValue(mon.shadowWidth); - spnShadowHeight.setValue(mon.shadowHeight); - spnUnk8.setValue(mon.unk8); - spnUnkA.setValue(mon.unkA); - spnUnkE.setValue(mon.unkE); - spnUnkF.setValue(mon.unkF); - spnUnk14.setValue(mon.unk14); - spnUnk16.setValue(mon.unk16); + cmoPokemon.setSelectedIndex(selected.nameID); + spnForm.setValue(selected.formID); + cmoType.setSelectedIndex(selected.typeID); + cmoAssist.setSelectedIndex(selected.assistID); + cmoField.setSelectedIndex(selected.fieldID); + spnFieldLevel.setValue(selected.fieldLevel); + spnShadowWidth.setValue(selected.shadowWidth); + spnShadowHeight.setValue(selected.shadowHeight); + spnUnk8.setValue(selected.unk8); + spnUnkA.setValue(selected.unkA); + spnUnkE.setValue(selected.unkE); + spnUnkF.setValue(selected.unkF); + spnUnk14.setValue(selected.unk14); + spnUnk16.setValue(selected.unk16); + + enableComponents(true); }//GEN-LAST:event_listValueChanged private void btnSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSaveActionPerformed - int index = list.getSelectedIndex(); - - if (index < 0) { + if (selected == null) return; - } - PokeID.Entry mon = mons.entries.get(index); + selected.nameID = cmoPokemon.getSelectedIndex(); + selected.formID = (short) spnForm.getValue(); + selected.typeID = (short) cmoType.getSelectedIndex(); + selected.assistID = (short) cmoAssist.getSelectedIndex(); + selected.fieldID = (short) cmoField.getSelectedIndex(); + selected.fieldLevel = (short) spnFieldLevel.getValue(); + selected.shadowWidth = (short) spnShadowWidth.getValue(); + selected.shadowHeight = (short) spnShadowHeight.getValue(); + selected.unk8 = (int) spnUnk8.getValue(); + selected.unkA = (int) spnUnkA.getValue(); + selected.unkE = (byte) spnUnkE.getValue(); + selected.unkF = (byte) spnUnkF.getValue(); + selected.unk14 = (int) spnUnk14.getValue(); + selected.unk16 = (int) spnUnk16.getValue(); - mon.nameID = cmoPokemon.getSelectedIndex(); - mon.formID = (short) spnForm.getValue(); - mon.typeID = (short) cmoType.getSelectedIndex(); - mon.assistID = (short) cmoAssist.getSelectedIndex(); - mon.fieldID = (short) cmoField.getSelectedIndex(); - mon.fieldLevel = (short) spnFieldLevel.getValue(); - mon.shadowWidth = (short) spnShadowWidth.getValue(); - mon.shadowHeight = (short) spnShadowHeight.getValue(); - mon.unk8 = (int) spnUnk8.getValue(); - mon.unkA = (int) spnUnkA.getValue(); - mon.unkE = (byte) spnUnkE.getValue(); - mon.unkF = (byte) spnUnkF.getValue(); - mon.unk14 = (int) spnUnk14.getValue(); - mon.unk16 = (int) spnUnk16.getValue(); - - model.setElementAt(mon.toString(), index); + model.setElementAt(selected.toString(), list.getSelectedIndex()); }//GEN-LAST:event_btnSaveActionPerformed private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddActionPerformed - PokeID.Entry mon = mons.new Entry(); + PokeID.Entry mon = data.new Entry(); - mons.entries.add(mon); + data.entries.add(mon); model.addElement(mon.toString()); + + int index = data.entries.size() - 1; + + if (index < 0) + return; + + list.setSelectedIndex(index); + list.ensureIndexIsVisible(index); }//GEN-LAST:event_btnAddActionPerformed private void btnRemoveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRemoveActionPerformed int index = list.getSelectedIndex(); - if (index < 0) { - return; - } - - mons.entries.remove(index); + data.entries.remove(index); model.remove(index); }//GEN-LAST:event_btnRemoveActionPerformed diff --git a/src/com/aurum/almia/editors/TargetWidget.form b/src/com/aurum/almia/editors/TargetWidget.form new file mode 100644 index 0000000..47a3a1f --- /dev/null +++ b/src/com/aurum/almia/editors/TargetWidget.form @@ -0,0 +1,266 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/com/aurum/almia/editors/TargetWidget.java b/src/com/aurum/almia/editors/TargetWidget.java new file mode 100644 index 0000000..438ccc7 --- /dev/null +++ b/src/com/aurum/almia/editors/TargetWidget.java @@ -0,0 +1,353 @@ +/* + * Copyright (C) 2018 Aurum + * + * AlmiaE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AlmiaE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.aurum.almia.editors; + +import com.aurum.almia.game.map.TargetData; + +public class TargetWidget extends javax.swing.JPanel { + private TargetData.Entry entry; + + public TargetWidget(TargetData.Entry entry) { + this.entry = entry; + + initComponents(); + + spnPosX.setValue(entry.posX); + spnPosY.setValue(entry.posY); + spnUnk4.setValue(entry.unk4); + spnUnk5.setValue(entry.unk5); + cmoID.setSelectedIndex(entry.obstacleID); + spnUnk8.setValue(entry.unk8); + spnUnk9.setValue(entry.unk9); + spnUnkA.setValue(entry.unkA); + spnUnkB.setValue(entry.unkB); + } + + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; + + lblPosX = new javax.swing.JLabel(); + lblPosY = new javax.swing.JLabel(); + lblUnk4 = new javax.swing.JLabel(); + lblUnk5 = new javax.swing.JLabel(); + lblID = new javax.swing.JLabel(); + lblUnk8 = new javax.swing.JLabel(); + lblUnk9 = new javax.swing.JLabel(); + lblUnkA = new javax.swing.JLabel(); + lblUnkB = new javax.swing.JLabel(); + spnPosX = new javax.swing.JSpinner(); + spnPosY = new javax.swing.JSpinner(); + spnUnk4 = new javax.swing.JSpinner(); + spnUnk5 = new javax.swing.JSpinner(); + cmoID = new javax.swing.JComboBox<>(); + spnUnk8 = new javax.swing.JSpinner(); + spnUnk9 = new javax.swing.JSpinner(); + spnUnkA = new javax.swing.JSpinner(); + spnUnkB = new javax.swing.JSpinner(); + filler = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767)); + + setLayout(new java.awt.GridBagLayout()); + + lblPosX.setText("X Position"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblPosX, gridBagConstraints); + + lblPosY.setText("Y Position"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 1; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblPosY, gridBagConstraints); + + lblUnk4.setText("byte (0x4)"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblUnk4, gridBagConstraints); + + lblUnk5.setText("byte (0x5)"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 3; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblUnk5, gridBagConstraints); + + lblID.setText("Obstacle"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 4; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblID, gridBagConstraints); + + lblUnk8.setText("byte (0x8)"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 5; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblUnk8, gridBagConstraints); + + lblUnk9.setText("byte (0x9)"); + lblUnk9.setToolTipText(""); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 6; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblUnk9, gridBagConstraints); + + lblUnkA.setText("byte (0xA)"); + lblUnkA.setToolTipText(""); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 7; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblUnkA, gridBagConstraints); + + lblUnkB.setText("byte (0xB)"); + lblUnkB.setToolTipText(""); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 8; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblUnkB, gridBagConstraints); + + spnPosX.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); + spnPosX.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnPosXStateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnPosX, gridBagConstraints); + + spnPosY.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); + spnPosY.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnPosYStateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 1; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnPosY, gridBagConstraints); + + spnUnk4.setModel(new javax.swing.SpinnerNumberModel((byte)0, null, null, (byte)1)); + spnUnk4.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnUnk4StateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnUnk4, gridBagConstraints); + + spnUnk5.setModel(new javax.swing.SpinnerNumberModel((byte)0, null, null, (byte)1)); + spnUnk5.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnUnk5StateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 3; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnUnk5, gridBagConstraints); + + cmoID.setModel(new javax.swing.DefaultComboBoxModel(entry.parent.layer.map.game.getTargetList().toArray())); + cmoID.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + cmoIDActionPerformed(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 4; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(cmoID, gridBagConstraints); + + spnUnk8.setModel(new javax.swing.SpinnerNumberModel((byte)0, null, null, (byte)1)); + spnUnk8.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnUnk8StateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 5; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnUnk8, gridBagConstraints); + + spnUnk9.setModel(new javax.swing.SpinnerNumberModel((byte)0, null, null, (byte)1)); + spnUnk9.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnUnk9StateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 6; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnUnk9, gridBagConstraints); + + spnUnkA.setModel(new javax.swing.SpinnerNumberModel((byte)0, null, null, (byte)1)); + spnUnkA.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnUnkAStateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 7; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnUnkA, gridBagConstraints); + + spnUnkB.setModel(new javax.swing.SpinnerNumberModel((byte)0, null, null, (byte)1)); + spnUnkB.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnUnkBStateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 8; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnUnkB, gridBagConstraints); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 9; + gridBagConstraints.gridwidth = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.weighty = 1.0; + add(filler, gridBagConstraints); + }// //GEN-END:initComponents + + private void spnPosXStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnPosXStateChanged + entry.posX = (short)spnPosX.getValue(); + }//GEN-LAST:event_spnPosXStateChanged + + private void spnPosYStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnPosYStateChanged + entry.posY = (short)spnPosY.getValue(); + }//GEN-LAST:event_spnPosYStateChanged + + private void spnUnk4StateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnUnk4StateChanged + entry.unk4 = (byte)spnUnk4.getValue(); + }//GEN-LAST:event_spnUnk4StateChanged + + private void spnUnk5StateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnUnk5StateChanged + entry.unk5 = (byte)spnUnk5.getValue(); + }//GEN-LAST:event_spnUnk5StateChanged + + private void cmoIDActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmoIDActionPerformed + entry.obstacleID = cmoID.getSelectedIndex(); + }//GEN-LAST:event_cmoIDActionPerformed + + private void spnUnk8StateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnUnk8StateChanged + entry.unk8 = (byte)spnUnk8.getValue(); + }//GEN-LAST:event_spnUnk8StateChanged + + private void spnUnk9StateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnUnk9StateChanged + entry.unk9 = (byte)spnUnk9.getValue(); + }//GEN-LAST:event_spnUnk9StateChanged + + private void spnUnkAStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnUnkAStateChanged + entry.unkA = (byte)spnUnkA.getValue(); + }//GEN-LAST:event_spnUnkAStateChanged + + private void spnUnkBStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnUnkBStateChanged + entry.unkB = (byte)spnUnkB.getValue(); + }//GEN-LAST:event_spnUnkBStateChanged + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JComboBox cmoID; + private javax.swing.Box.Filler filler; + private javax.swing.JLabel lblID; + private javax.swing.JLabel lblPosX; + private javax.swing.JLabel lblPosY; + private javax.swing.JLabel lblUnk4; + private javax.swing.JLabel lblUnk5; + private javax.swing.JLabel lblUnk8; + private javax.swing.JLabel lblUnk9; + private javax.swing.JLabel lblUnkA; + private javax.swing.JLabel lblUnkB; + private javax.swing.JSpinner spnPosX; + private javax.swing.JSpinner spnPosY; + private javax.swing.JSpinner spnUnk4; + private javax.swing.JSpinner spnUnk5; + private javax.swing.JSpinner spnUnk8; + private javax.swing.JSpinner spnUnk9; + private javax.swing.JSpinner spnUnkA; + private javax.swing.JSpinner spnUnkB; + // End of variables declaration//GEN-END:variables +} \ No newline at end of file diff --git a/src/com/aurum/almia/editors/TexInfoWidget.form b/src/com/aurum/almia/editors/TexInfoWidget.form new file mode 100644 index 0000000..0b788ac --- /dev/null +++ b/src/com/aurum/almia/editors/TexInfoWidget.form @@ -0,0 +1,135 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/com/aurum/almia/editors/TexInfoWidget.java b/src/com/aurum/almia/editors/TexInfoWidget.java new file mode 100644 index 0000000..753c06c --- /dev/null +++ b/src/com/aurum/almia/editors/TexInfoWidget.java @@ -0,0 +1,183 @@ +/* + * Copyright (C) 2018 Aurum + * + * AlmiaE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AlmiaE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.aurum.almia.editors; + +import com.aurum.almia.game.map.TextureInfo; + +public class TexInfoWidget extends javax.swing.JPanel { + private TextureInfo.Entry entry; + + public TexInfoWidget(TextureInfo.Entry entry) { + this.entry = entry; + + initComponents(); + + spnUnk0.setValue(entry.unk0); + spnTextureID.setValue(entry.textureID); + spnUnk4.setValue(entry.unk4); + spnUnk6.setValue(entry.unk6); + } + + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; + + lblUnk0 = new javax.swing.JLabel(); + lblID = new javax.swing.JLabel(); + lblUnk4 = new javax.swing.JLabel(); + lblUnk6 = new javax.swing.JLabel(); + spnUnk0 = new javax.swing.JSpinner(); + spnTextureID = new javax.swing.JSpinner(); + spnUnk4 = new javax.swing.JSpinner(); + spnUnk6 = new javax.swing.JSpinner(); + filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767)); + + setLayout(new java.awt.GridBagLayout()); + + lblUnk0.setText("unk0"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblUnk0, gridBagConstraints); + + lblID.setText("Texture ID"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 1; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblID, gridBagConstraints); + + lblUnk4.setText("unk4"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblUnk4, gridBagConstraints); + + lblUnk6.setText("unk6"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 3; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(lblUnk6, gridBagConstraints); + + spnUnk0.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); + spnUnk0.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnUnk0StateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnUnk0, gridBagConstraints); + + spnTextureID.setModel(new javax.swing.SpinnerNumberModel(0, 0, 65535, 1)); + spnTextureID.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnTextureIDStateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 1; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnTextureID, gridBagConstraints); + + spnUnk4.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); + spnUnk4.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnUnk4StateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnUnk4, gridBagConstraints); + + spnUnk6.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); + spnUnk6.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spnUnk6StateChanged(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 3; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); + add(spnUnk6, gridBagConstraints); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 4; + gridBagConstraints.gridwidth = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.weighty = 1.0; + add(filler1, gridBagConstraints); + }// //GEN-END:initComponents + + private void spnUnk0StateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnUnk0StateChanged + entry.unk0 = (short)spnUnk0.getValue(); + }//GEN-LAST:event_spnUnk0StateChanged + + private void spnTextureIDStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnTextureIDStateChanged + entry.textureID = (int)spnTextureID.getValue(); + }//GEN-LAST:event_spnTextureIDStateChanged + + private void spnUnk4StateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnUnk4StateChanged + entry.unk4 = (short)spnUnk4.getValue(); + }//GEN-LAST:event_spnUnk4StateChanged + + private void spnUnk6StateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnUnk6StateChanged + entry.unk6 = (short)spnUnk6.getValue(); + }//GEN-LAST:event_spnUnk6StateChanged + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.Box.Filler filler1; + private javax.swing.JLabel lblID; + private javax.swing.JLabel lblUnk0; + private javax.swing.JLabel lblUnk4; + private javax.swing.JLabel lblUnk6; + private javax.swing.JSpinner spnTextureID; + private javax.swing.JSpinner spnUnk0; + private javax.swing.JSpinner spnUnk4; + private javax.swing.JSpinner spnUnk6; + // End of variables declaration//GEN-END:variables +} \ No newline at end of file diff --git a/src/com/aurum/almia/game/Compression.java b/src/com/aurum/almia/game/Compression.java new file mode 100644 index 0000000..5821d19 --- /dev/null +++ b/src/com/aurum/almia/game/Compression.java @@ -0,0 +1,124 @@ +/* + * Copyright (C) 2018 Aurum + * + * AlmiaE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AlmiaE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.aurum.almia.game; + +import com.aurum.almia.util.BitConverter; +import java.nio.ByteOrder; + +public final class Compression { + public static final int LZ10 = 0x10; + public static final int LZ11 = 0x11; + + public static byte[] decompress(byte[] compressed, ByteOrder endian) { + switch(compressed[0] & 0xFF) { + case LZ10: return decompressLZ10(compressed, endian); + case LZ11: return decompressLZ11(compressed, endian); + default: return compressed; + } + } + + public static byte[] decompressLZ10(byte[] compressed, ByteOrder endian) { + int decompressedSize = BitConverter.toUnsignedInt24(compressed, endian, 1); + int compressedStart = 4; + + if (decompressedSize == 0) { + decompressedSize = BitConverter.toInt(compressed, endian, 4); + compressedStart = 8; + } + + byte[] decompressed = new byte[decompressedSize]; + int curIn = compressedStart; + int curOut = 0; + + while (curOut < decompressed.length) { + byte flags = compressed[curIn++]; + + for (int fi = 0 ; fi < 8 && curIn < compressed.length ; fi++) { + if ((flags & (0x80 >> fi)) != 0) { + int token = compressed[curIn++] & 0xFF; + int lenCopy = (token >> 4) + 3; + int disp = ((token & 0xF) << 8) | (compressed[curIn++] & 0xFF); + int offCopy = curOut - disp - 1; + + for (int i = 0 ; i < lenCopy ; i++) + decompressed[curOut++] = decompressed[offCopy + i]; + } + else + decompressed[curOut++] = compressed[curIn++]; + } + } + + return decompressed; + } + + public static byte[] decompressLZ11(byte[] compressed, ByteOrder endian) { + int decompressedSize = BitConverter.toUnsignedInt24(compressed, endian, 1); + int compressedStart = 4; + + if (decompressedSize == 0) { + decompressedSize = BitConverter.toInt(compressed, endian, 4); + compressedStart = 8; + } + + byte[] decompressed = new byte[decompressedSize]; + int curIn = compressedStart; + int curOut = 0; + + while (curOut < decompressed.length) { + byte flags = compressed[curIn++]; + + for (int fi = 0 ; fi < 8 && curIn < compressed.length ; fi++) { + if ((flags & (0x80 >> fi)) != 0) { + int token = compressed[curIn++] & 0xFF; + int token2, token3; + int lenCopy; + int disp; + int offCopy; + + switch(token >> 4) { + case 0: + token2 = compressed[curIn++] & 0xFF; + + lenCopy = (((token & 0xF) << 4) | (token2 >> 4)) + 0x11; + disp = ((token2 & 0xF) << 8) | (compressed[curIn++] & 0xFF); + break; + case 1: + token2 = compressed[curIn++] & 0xFF; + token3 = compressed[curIn++] & 0xFF; + + lenCopy = (((token & 0xF) << 12) | (token2 << 4) | (token3 >> 4)) + 0x111; + disp = ((token3 & 0xF) << 8) | (compressed[curIn++] & 0xFF); + break; + default: + lenCopy = (token >> 4) + 0x1; + disp = ((token & 0xF) << 8) | (compressed[curIn++] & 0xFF); + } + + offCopy = curOut + disp + 1; + + for (int i = 0 ; i < lenCopy ; i++) + decompressed[curOut++] = decompressed[offCopy + i]; + } + else + decompressed[curOut++] = compressed[curIn++]; + } + } + + return decompressed; + } +} \ No newline at end of file diff --git a/src/com/aurum/almia/game/Game.java b/src/com/aurum/almia/game/Game.java index 8dba5fe..7544e66 100644 --- a/src/com/aurum/almia/game/Game.java +++ b/src/com/aurum/almia/game/Game.java @@ -17,22 +17,24 @@ package com.aurum.almia.game; +import com.aurum.almia.Lists; import com.aurum.almia.game.param.BattlePokemon; import com.aurum.almia.game.param.PokeID; -import com.aurum.almia.Utils; import java.io.File; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; public class Game { public static Game current; - //-------------------------------------------------------------------------- - public File filesystem; public PokeID monDataBase; public BattlePokemon monDataBattle; - //-------------------------------------------------------------------------- + public Game(String fsdir) { + this(new File(fsdir)); + } public Game(File fs) { this.filesystem = fs; @@ -40,25 +42,65 @@ public class Game { this.monDataBattle = null; } - public Game(String fsdir) { - this(new File(fsdir)); - } - @Override public String toString() { return filesystem.getAbsolutePath(); } - public String getPath() { - return filesystem.getAbsolutePath(); + public String getFilePath(String file) { + return String.format("%s/%s", toString(), file); } - public String getFullPath(String file) { - return String.format("%s/%s", getPath(), file); + public File getFile(String file) { + return new File(getFilePath(file)); } public void init() throws IOException { - monDataBase = new PokeID(this, Utils.loadFileIntoBuffer(getFullPath("param/PokeID.bin"))); - monDataBattle = new BattlePokemon(this, Utils.loadFileIntoBuffer(getFullPath("param/BattlePokemon.bin"))); + monDataBase = new PokeID(this); + //monDataBattle = new BattlePokemon(this); + } + + public List getMapsList() { + File[] files = getFile("field/map").listFiles(); + List list = new ArrayList(); + + for (File file : files) { + if (!file.isFile()) + continue; + + String filename = file.getName(); + + if (filename.endsWith(".map.dat.lz")) + list.add(filename.replace(".map.dat.lz", "")); + } + + return list; + } + + public List getPokemonList() { + List list = new ArrayList(); + + for (int i = 0 ; i < monDataBase.entries.size() ; i++) + list.add(String.format("%03X: %s", i, monDataBase.entries.get(i).toShortString())); + + return list; + } + + public List getTargetList() { + List list = new ArrayList(); + + for (int i = 0 ; i < Lists.obstacles.size() ; i++) + list.add(String.format("%02X: %s", i, Lists.obstacles.get(i))); + + return list; + } + + public List getNpcList() { + List list = new ArrayList(); + + for (int i = 0 ; i < Lists.npcs.size() ; i++) + list.add(String.format("%02X: %s", i, Lists.npcs.get(i))); + + return list; } } \ No newline at end of file diff --git a/src/com/aurum/almia/game/NARC.java b/src/com/aurum/almia/game/NARC.java deleted file mode 100644 index 8ccd4e0..0000000 --- a/src/com/aurum/almia/game/NARC.java +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright (C) 2018 Aurum - * - * AlmiaE is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * AlmiaE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.aurum.almia.game; - -import com.aurum.almia.ByteBuffer; -import com.aurum.almia.ByteOrder; -import java.util.ArrayList; -import java.util.List; - -public class NARC { - public static final int NARC_MAGIC = 0x4E415243; - public static final int FATB_MAGIC = 0x46415442; - public static final int FNTB_MAGIC = 0x464E5442; - public static final int FIMG_MAGIC = 0x46494D47; - - //-------------------------------------------------------------------------- - - private class FatbEntry { - public int startOffset; - public int endOffset; - } - - public class FimgEntry { - public String name; - public byte[] data; - - public FimgEntry() { - this.name = "Unnamed"; - this.data = null; - } - } - - //-------------------------------------------------------------------------- - - public List files; - - //-------------------------------------------------------------------------- - - public NARC() { - this.files = new ArrayList(); - } - - public NARC(ByteBuffer buf) { - this(); - - buf.setEndianness(ByteOrder.BIG_ENDIAN); - - - int fileMagic = buf.readInt(); - if (fileMagic != NARC_MAGIC) { - throw new IllegalArgumentException("NARC: No NARC data found."); - } - short endianMark = buf.readShort(); - if ((endianMark & 0xFFFF) == 0xFEFF) { - buf.setEndianness(ByteOrder.LITTLE_ENDIAN); - } - short unkConst = buf.readShort(); - int totalSize = buf.readInt(); - if (buf.size() != totalSize) { - System.out.println("NARC: Warning! Stored size does not equal actual buffer size!"); - } - int headerSize = buf.readShort(); - int numSections = buf.readShort(); - - - int fatbPos = buf.position(); - int fatbMagic = buf.readInt(); - int fatbSize = buf.readInt(); - int fatbFiles = buf.readInt(); - FatbEntry[] fatbEntries = new FatbEntry[fatbFiles]; - for (int i = 0 ; i < fatbEntries.length ; i++) { - FatbEntry e = new FatbEntry(); - e.startOffset = buf.readInt(); - e.endOffset = buf.readInt(); - fatbEntries[i] = e; - } - - - // this needs revision, really... - int fntbPos = buf.position(); - int fntbMagic = buf.readInt(); - int fntbSize = buf.readInt(); - buf.skip(fntbSize - 0x8); - - - int fimgPos = buf.position(); - int fimgMagic = buf.readInt(); - int fimgSize = buf.readInt(); - - for (int i = 0 ; i < fatbFiles ; i++) { - FimgEntry e = new FimgEntry(); - FatbEntry fatb = fatbEntries[i]; - - buf.seek(fimgPos + 0x8 + fatb.startOffset); - e.data = buf.readBytes(fatb.endOffset - fatb.startOffset); - - files.add(e); - } - } - - public byte[] pack() { - int headerSize = 0x10; - int fatbSize = 0xC + files.size() * 0x8; - int fntbSize = 0x10; - int fimgSize = 0x8; - - for (FimgEntry file : files) { - fimgSize += file.data.length; - } - - int totalsize = headerSize + fatbSize + fntbSize + fimgSize; - - - ByteBuffer buf = new ByteBuffer(totalsize, ByteOrder.BIG_ENDIAN); - - - buf.writeInt(NARC_MAGIC); - buf.writeShort((short)0xFEFF); - buf.setEndianness(ByteOrder.LITTLE_ENDIAN); - buf.writeShort((short)0x0100); - buf.writeInt(totalsize); - buf.writeShort((short)headerSize); - buf.writeShort((short)0x3); - - - int fatbPos = buf.position(); - buf.writeInt(FATB_MAGIC); - buf.writeInt(fatbSize); - buf.writeInt(files.size()); - buf.skip(files.size() * 0x8); - - - int fntbPos = buf.position(); - buf.writeInt(FNTB_MAGIC); - buf.writeInt(fntbSize); - buf.writeInt(0x4); - buf.writeInt(0x10000); - - - int fimgPos = buf.position(); - buf.writeInt(FIMG_MAGIC); - buf.writeInt(fimgSize); - - for (int i = 0 ; i < files.size() ; i++) { - FimgEntry file = files.get(i); - - int inFimgPos = buf.position(); - int startPos = inFimgPos - fimgPos - 0x8; - int endPos = startPos + file.data.length; - buf.seek(fatbPos + 0xC + i * 0x8); - buf.writeInt(startPos); - buf.writeInt(endPos); - buf.seek(inFimgPos); - buf.writeBytes(file.data); - } - - return buf.getBuffer(); - } - - public void addFile(byte[] data) { - FimgEntry file = new FimgEntry(); - - file.data = data; - files.add(file); - } -} \ No newline at end of file diff --git a/src/com/aurum/almia/game/Narc.java b/src/com/aurum/almia/game/Narc.java new file mode 100644 index 0000000..273d8e6 --- /dev/null +++ b/src/com/aurum/almia/game/Narc.java @@ -0,0 +1,181 @@ +/* + * Copyright (C) 2018 Aurum + * + * AlmiaE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AlmiaE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.aurum.almia.game; + +import com.aurum.almia.util.ByteBuffer; +import java.nio.ByteOrder; +import java.util.ArrayList; +import java.util.List; + +public class Narc { + public static final String NARC_MAGIC = "NARC"; + public static final String FATB_MAGIC = "BTAF"; + public static final String FNTB_MAGIC = "BTNF"; + public static final String FIMG_MAGIC = "GMIF"; + + private class FatbEntry { + int startOffset; + int endOffset; + } + + public static class NarcFile { + public String name; + public byte[] data; + + public NarcFile() { + this.name = "Unnamed"; + this.data = null; + } + } + + public List files; + + public Narc() { + this.files = new ArrayList(); + } + + public Narc(byte[] raw) { + this(); + + raw = Compression.decompress(raw, ByteOrder.LITTLE_ENDIAN); + ByteBuffer buf = new ByteBuffer(raw, ByteOrder.LITTLE_ENDIAN); + + int curSectionPos; + int curSectionSize; + + // NARC header + curSectionPos = buf.position(); + + if (!buf.readMagic().equals(NARC_MAGIC)) + throw new IllegalArgumentException("No valid NARC data found!"); + + buf.skip(0x8); // shitty bom, unk6, fileSize + curSectionSize = buf.readShort(); + buf.skip(0x2); // numSections + + buf.seek(curSectionPos + curSectionSize); + + // FATB section + curSectionPos = buf.position(); + buf.skip(0x4); // fatbMagic + curSectionSize = buf.readInt(); + int numFiles = buf.readInt(); + FatbEntry[] fileEntries = new FatbEntry[numFiles]; + + for (int i = 0 ; i < numFiles ; i++) { + FatbEntry e = new FatbEntry(); + e.startOffset = buf.readInt(); + e.endOffset = buf.readInt(); + + fileEntries[i] = e; + } + + buf.seek(curSectionPos + curSectionSize); + + // FNTB section + // needs to be revised... + curSectionPos = buf.position(); + buf.skip(0x4); // fntbMagic + curSectionSize = buf.readInt(); + buf.skip(0x8); + + buf.seek(curSectionPos + curSectionSize); + + // FIMG section + curSectionPos = buf.position(); + buf.skip(0x4); // fimgMagic + curSectionSize = buf.readInt(); + + for (int i = 0 ; i < numFiles ; i++) { + NarcFile file = new NarcFile(); + FatbEntry fatb = fileEntries[i]; + + buf.seek(curSectionPos + 0x8 + fatb.startOffset); + file.data = buf.readBytes(fatb.endOffset - fatb.startOffset); + + files.add(file); + } + } + + public byte[] pack() { + // Calculate (approximate) file size, and create the buffer + int headerSize = 0x10; + int fatbSize = 0xC + files.size() * 0x8; + int fntbSize = 0x10; + int fimgSize = 0x8; + + for (NarcFile file : files) + fimgSize += file.data.length; + + int totalSize = headerSize + fatbSize + fntbSize + fimgSize; + ByteBuffer buf = new ByteBuffer(totalSize, ByteOrder.LITTLE_ENDIAN); + + // NARC header + buf.writeMagic(NARC_MAGIC); + buf.writeByte((byte)0xFE); // BOM... that does not represent LE + buf.writeByte((byte)0xFF); + buf.writeShort((short)0x0100); // unknown constant + buf.writeInt(totalSize); + buf.writeShort((short)headerSize); + buf.writeShort((short)0x0003); // numSections + + // FATB section + buf.writeMagic(FATB_MAGIC); + buf.writeInt(fatbSize); + buf.writeInt(files.size()); + int fatbEntriesPos = buf.position(); + buf.skip(files.size() * 0x8); + + // FNTB section + // needs revision... + buf.writeMagic(FNTB_MAGIC); + buf.writeInt(fntbSize); + buf.writeInt(0x00000004); + buf.writeInt(0x00010000); + + // FIMG section + buf.writeMagic(FIMG_MAGIC); + buf.writeInt(fimgSize); + int fimgEntriesPos = buf.position(); + + for (int i = 0 ; i < files.size() ; i++) { + NarcFile file = files.get(i); + int inFimgPos = buf.position(); + int startPos = inFimgPos - fimgEntriesPos; + int endPos = startPos + file.data.length; + + // Write FATB entry + buf.seek(fatbEntriesPos + i * 0x8); + buf.writeInt(startPos); + buf.writeInt(endPos); + + // Write FIMG entry + buf.seek(inFimgPos); + buf.writeBytes(file.data); + } + + return buf.getBuffer(); + } + + public void addFile(byte[] data) { + NarcFile file = new NarcFile(); + + file.data = data; + files.add(file); + } +} \ No newline at end of file diff --git a/src/com/aurum/almia/game/map/AbstractData.java b/src/com/aurum/almia/game/map/AbstractData.java new file mode 100644 index 0000000..21c2a22 --- /dev/null +++ b/src/com/aurum/almia/game/map/AbstractData.java @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2018 Aurum + * + * AlmiaE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AlmiaE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.aurum.almia.game.map; + +import java.awt.Graphics; +import java.util.List; + +public abstract class AbstractData { + public final Layer layer; + public List entries; + + public AbstractData(Layer layer) { + this.layer = layer; + this.entries = null; + } + + public abstract byte[] pack(); + public abstract int getIdentifier(); + public abstract void render(Graphics g); +} \ No newline at end of file diff --git a/src/com/aurum/almia/game/map/AbstractEntry.java b/src/com/aurum/almia/game/map/AbstractEntry.java new file mode 100644 index 0000000..ebec4c9 --- /dev/null +++ b/src/com/aurum/almia/game/map/AbstractEntry.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2018 Aurum + * + * AlmiaE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AlmiaE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.aurum.almia.game.map; + +import java.awt.Graphics; + +public abstract class AbstractEntry implements Cloneable { + public final D parent; + + public AbstractEntry(D parent) { + this.parent = parent; + } + + public AbstractEntry clone() { + try { + return (AbstractEntry)super.clone(); + } + catch(CloneNotSupportedException ex) {} + + return null; + } + + public void render(Graphics g) {} +} \ No newline at end of file diff --git a/src/com/aurum/almia/game/map/CollOverlayData.java b/src/com/aurum/almia/game/map/CollOverlayData.java new file mode 100644 index 0000000..8f0ddce --- /dev/null +++ b/src/com/aurum/almia/game/map/CollOverlayData.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2018 Aurum + * + * AlmiaE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AlmiaE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.aurum.almia.game.map; + +import com.aurum.almia.util.ByteBuffer; + +public class CollOverlayData extends CollisionData { + public CollOverlayData(Layer layer) { + super(layer); + } + + public CollOverlayData(Layer layer, ByteBuffer buf) { + super(layer, buf); + } + + @Override + public String toString() { + return "Collision Overlay"; + } + + @Override + public int getIdentifier() { + return Layer.MDATA_COLL_OVERLAY; + } +} \ No newline at end of file diff --git a/src/com/aurum/almia/game/map/CollisionData.java b/src/com/aurum/almia/game/map/CollisionData.java new file mode 100644 index 0000000..71b281e --- /dev/null +++ b/src/com/aurum/almia/game/map/CollisionData.java @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2018 Aurum + * + * AlmiaE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AlmiaE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.aurum.almia.game.map; + +import com.aurum.almia.util.RenderHelper; +import com.aurum.almia.util.ByteBuffer; +import java.awt.Color; +import java.awt.Graphics; +import java.nio.ByteOrder; + +public class CollisionData extends AbstractData { + public static final int HEADER_SIZE = 0x14; + public static final int ENTRY_SIZE = 0x2; + + public int width; + public int height; + public int[][] entries; + + public CollisionData(Layer layer) { + super(layer); + + this.width = 0; + this.height = 0; + this.entries = null; + } + + public CollisionData(Layer layer, ByteBuffer buf) { + this(layer); + + buf.setEndianness(ByteOrder.LITTLE_ENDIAN); + + int headerSize = buf.readInt(); + int entriesCount = buf.readInt(); + this.width = buf.readInt(); + this.height = buf.readInt(); + this.entries = new int[height][width]; + + if (width * height != entriesCount) + System.out.println("CollisionData: Warning! Calculated entry count does not equal written count."); + + for (int y = 0; y < height ; y++) { + for (int x = 0; x < width ; x++) { + entries[y][x] = buf.readUnsignedShort(); + } + } + } + + @Override + public String toString() { + return "Collision"; + } + + @Override + public byte[] pack() { + int entriesCount = width * height; + int totalsize = HEADER_SIZE + entriesCount * ENTRY_SIZE; + + ByteBuffer buf = new ByteBuffer(totalsize, ByteOrder.LITTLE_ENDIAN); + + buf.writeInt(getIdentifier()); + buf.writeInt(HEADER_SIZE - 0x4); // header size without identifier + buf.writeInt(entriesCount); + buf.writeInt(width); + buf.writeInt(height); + + for (int y = 0; y < height ; y++) { + for (int x = 0; x < width ; x++) + buf.writeUnsignedShort(entries[y][x]); + } + + return buf.getBuffer(); + } + + @Override + public int getIdentifier() { + return Layer.MDATA_COLLISION; + } + + @Override + public void render(Graphics g) { + for (int y = 0 ; y < height ; y++) { + for (int x = 0 ; x < width ; x++) + RenderHelper.drawBox( + g, x * 16, + y * 16, 16, 16, + Color.GRAY, + new Color(Integer.rotateLeft(0x595A9556, entries[y][x])), + false + ); + } + } +} \ No newline at end of file diff --git a/src/com/aurum/almia/game/map/Layer.java b/src/com/aurum/almia/game/map/Layer.java index 920fb33..e4500ce 100644 --- a/src/com/aurum/almia/game/map/Layer.java +++ b/src/com/aurum/almia/game/map/Layer.java @@ -1,57 +1,80 @@ +/* + * Copyright (C) 2018 Aurum + * + * AlmiaE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AlmiaE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + package com.aurum.almia.game.map; -import com.aurum.almia.ByteBuffer; -import com.aurum.almia.ByteOrder; -import com.aurum.almia.game.NARC; -import com.aurum.almia.game.NARC.FimgEntry; +import com.aurum.almia.util.ByteBuffer; +import com.aurum.almia.game.Narc; +import com.aurum.almia.game.Narc.NarcFile; +import java.awt.Graphics; +import java.nio.ByteOrder; import java.util.ArrayList; import java.util.List; public class Layer { - public static final int MDATA_01 = 0x01; - public static final int MDATA_02 = 0x02; - public static final int MDATA_COLLISION = 0x03; - public static final int MDATA_TARGET = 0x04; - public static final int MDATA_UNKNOWN = 0x05; // unused - public static final int MDATA_06 = 0x06; - public static final int MDATA_WARP = 0x07; - public static final int MDATA_NPC = 0x08; - public static final int MDATA_MON = 0x09; - public static final int MDATA_0A = 0x0A; - public static final int MDATA_0B = 0x0B; - public static final int MDATA_0C = 0x0C; - public static final int MDATA_0D = 0x0D; - public static final int MDATA_0E = 0x0E; + public static final int MDATA_01 = 0x01; + public static final int MDATA_TILES = 0x02; + public static final int MDATA_COLLISION = 0x03; + public static final int MDATA_TARGET = 0x04; + public static final int MDATA_UNKNOWN = 0x05; // unused + public static final int MDATA_COLL_OVERLAY = 0x06; + public static final int MDATA_LOCATION = 0x07; + public static final int MDATA_NPC = 0x08; + public static final int MDATA_MON = 0x09; + public static final int MDATA_0A = 0x0A; + public static final int MDATA_0B = 0x0B; + public static final int MDATA_0C = 0x0C; + public static final int MDATA_0D = 0x0D; + public static final int MDATA_0E = 0x0E; - public Map map; + public final Map map; public List lyrUnk; + public CollisionData collisionData; public TargetData targetData; - public WarpData warpData; + public CollOverlayData collOverlayData; + public LocationData locationData; public NpcData npcData; public MonData monData; public Layer(Map map) { this.map = map; this.lyrUnk = new ArrayList(); + this.collisionData = new CollisionData(this); this.targetData = new TargetData(this); - this.warpData = new WarpData(this); + this.collOverlayData = new CollOverlayData(this); + this.locationData = new LocationData(this); this.npcData = new NpcData(this); this.monData = new MonData(this); } - public Layer(Map map, NARC narc) { + public Layer(Map map, Narc narc) { this(map); ByteBuffer buf; - for (FimgEntry file : narc.files) { + for (NarcFile file : narc.files) { buf = new ByteBuffer(file.data, ByteOrder.LITTLE_ENDIAN); - int identifier = buf.readInt(); switch(identifier) { + case MDATA_COLLISION: collisionData = new CollisionData(this, buf); break; case MDATA_TARGET: targetData = new TargetData(this, buf); break; - case MDATA_WARP: warpData = new WarpData(this, buf); break; + case MDATA_COLL_OVERLAY: collOverlayData = new CollOverlayData(this, buf); break; + case MDATA_LOCATION: locationData = new LocationData(this, buf); break; case MDATA_NPC: npcData = new NpcData(this, buf); break; case MDATA_MON: monData = new MonData(this, buf); break; default: System.out.println(String.format("Unknown map format %02X, %d", identifier, buf.size())); lyrUnk.add(buf.getBuffer()); @@ -59,18 +82,33 @@ public class Layer { } } + @Override + public String toString() { + return "Layer"; + } + public byte[] pack() { - NARC narc = new NARC(); + Narc narc = new Narc(); - for (byte[] unk : lyrUnk) { + for (byte[] unk : lyrUnk) narc.addFile(unk); - } + narc.addFile(collisionData.pack()); narc.addFile(targetData.pack()); - narc.addFile(warpData.pack()); + narc.addFile(collOverlayData.pack()); + narc.addFile(locationData.pack()); narc.addFile(npcData.pack()); narc.addFile(monData.pack()); return narc.pack(); } + + public void render(Graphics g) { + //collisionData.render(g); + //collOverlayData.render(g); + locationData.render(g); + targetData.render(g); + npcData.render(g); + monData.render(g); + } } \ No newline at end of file diff --git a/src/com/aurum/almia/game/map/WarpData.java b/src/com/aurum/almia/game/map/LocationData.java similarity index 58% rename from src/com/aurum/almia/game/map/WarpData.java rename to src/com/aurum/almia/game/map/LocationData.java index bec9779..4352d00 100644 --- a/src/com/aurum/almia/game/map/WarpData.java +++ b/src/com/aurum/almia/game/map/LocationData.java @@ -17,52 +17,56 @@ package com.aurum.almia.game.map; -import com.aurum.almia.ByteBuffer; -import com.aurum.almia.ByteOrder; -import static com.aurum.almia.game.map.Layer.*; +import com.aurum.almia.util.ByteBuffer; +import java.nio.ByteOrder; +import com.aurum.almia.util.RenderHelper; +import java.awt.Color; +import java.awt.Graphics; import java.util.ArrayList; -import java.util.List; -public class WarpData { +public class LocationData extends AbstractData { public static final int HEADER_SIZE = 0x8; public static final int ENTRY_SIZE = 0xA; - //-------------------------------------------------------------------------- - - public class Entry implements Cloneable { + public class Entry extends AbstractEntry { public short posX; public short posY; - public short unk4; - public short unk6; + public int width; + public int height; public short unk8; public Entry() { + super(LocationData.this); + this.posX = 0; this.posY = 0; - this.unk4 = 0; - this.unk6 = 0; + this.width = 16; + this.height = 16; this.unk8 = 0; } @Override public String toString() { - return String.format("%d, %d", posX, posY); + return String.format("(%d, %d)", posX, posY); + } + + @Override + public void render(Graphics g) { + RenderHelper.drawBox( + g, posX, posY, width, height, + Color.BLACK, new Color(0f, 0f, 1f, 0.5f), + false + ); } } - //-------------------------------------------------------------------------- - - public Layer layer; - public List entries; - - //-------------------------------------------------------------------------- - - public WarpData(Layer layer) { - this.layer = layer; + public LocationData(Layer layer) { + super(layer); + this.entries = new ArrayList(); } - public WarpData(Layer layer, ByteBuffer buf) { + public LocationData(Layer layer, ByteBuffer buf) { this(layer); buf.setEndianness(ByteOrder.LITTLE_ENDIAN); @@ -74,30 +78,47 @@ public class WarpData { e.posX = buf.readShort(); e.posY = buf.readShort(); - e.unk4 = buf.readShort(); - e.unk6 = buf.readShort(); + e.width = buf.readUnsignedShort(); + e.height = buf.readUnsignedShort(); e.unk8 = buf.readShort(); entries.add(e); } } + @Override + public String toString() { + return "Locations"; + } + + @Override public byte[] pack() { int totalsize = HEADER_SIZE + entries.size() * ENTRY_SIZE; ByteBuffer buf = new ByteBuffer(totalsize, ByteOrder.LITTLE_ENDIAN); - buf.writeInt(MDATA_WARP); + buf.writeInt(getIdentifier()); buf.writeInt(entries.size()); for (Entry e : entries) { buf.writeShort(e.posX); buf.writeShort(e.posY); - buf.writeShort(e.unk4); - buf.writeShort(e.unk6); + buf.writeUnsignedShort(e.width); + buf.writeUnsignedShort(e.height); buf.writeShort(e.unk8); } return buf.getBuffer(); } + + @Override + public int getIdentifier() { + return Layer.MDATA_LOCATION; + } + + @Override + public void render(Graphics g) { + for (Entry entry : entries) + entry.render(g); + } } \ No newline at end of file diff --git a/src/com/aurum/almia/game/map/Map.java b/src/com/aurum/almia/game/map/Map.java index c80f1f4..83ce560 100644 --- a/src/com/aurum/almia/game/map/Map.java +++ b/src/com/aurum/almia/game/map/Map.java @@ -17,25 +17,24 @@ package com.aurum.almia.game.map; -import com.aurum.almia.ByteBuffer; -import com.aurum.almia.ByteOrder; -import com.aurum.almia.Utils; +import com.aurum.almia.util.ByteBuffer; +import java.nio.ByteOrder; import com.aurum.almia.game.Game; -import com.aurum.almia.game.NARC; -import com.aurum.almia.game.NARC.FimgEntry; -import java.io.File; +import com.aurum.almia.game.Narc; +import com.aurum.almia.game.Narc.NarcFile; +import com.aurum.almia.util.IOHelper; +import java.awt.Color; +import java.awt.Graphics; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class Map { - public static final int MAP_MPIF = 0x4D504946; - public static final int MAP_TXIF = 0x54584946; - public static final int MAP_LYR = 0x4C595200; - public static final int MAP_CTA = 0x43544100; - public static final int MAP_PLA = 0x504C4100; - - //-------------------------------------------------------------------------- + public static final String MAP_MPIF = "MPIF"; + public static final String MAP_TXIF = "TXIF"; + public static final String MAP_LYR = "LYR\0"; + public static final String MAP_CTA = "CTA\0"; + public static final String MAP_PLA = "PLA\0"; public Game game; public String name; @@ -51,81 +50,82 @@ public class Map { this.mapInfo = new MapInfo(this); this.texInfo = new TextureInfo(this); this.layers = new ArrayList(); + this.cta = null; + this.pla = null; - ByteBuffer buf = Utils.loadFileIntoBuffer(game.getFullPath(String.format("field/map/%s.map.dat.lz", name))); - NARC root = new NARC(buf); - buf.clear(); + Narc root = new Narc(IOHelper.read(game.getFile(String.format("field/map/%s.map.dat.lz", name)))); - for (FimgEntry file : root.files) { - buf = new ByteBuffer(file.data, ByteOrder.BIG_ENDIAN); - - int dataMagic = buf.readInt(); - - buf.setEndianness(ByteOrder.LITTLE_ENDIAN); + for (NarcFile file : root.files) { + ByteBuffer buf = new ByteBuffer(file.data, ByteOrder.LITTLE_ENDIAN); + String dataMagic = buf.readMagic(); switch(dataMagic) { case MAP_MPIF: mapInfo = new MapInfo(this, buf); break; case MAP_TXIF: texInfo = new TextureInfo(this, buf); break; - case MAP_CTA: cta = buf.readRemaining(); break; - case MAP_PLA: pla = buf.readRemaining(); break; + case MAP_CTA: cta = file.data; break; + case MAP_PLA: pla = file.data; break; case MAP_LYR: { - NARC lyr = new NARC(new ByteBuffer(buf.readRemaining())); + Narc lyr = new Narc(buf.readRemaining()); - for (FimgEntry lyrfile : lyr.files) { - layers.add(new Layer(this, new NARC(new ByteBuffer(lyrfile.data)))); - } + for (NarcFile lyrfile : lyr.files) + layers.add(new Layer(this, new Narc(lyrfile.data))); } break; } } } public byte[] pack() { - NARC root = new NARC(); + Narc root = new Narc(); root.addFile(mapInfo.pack()); root.addFile(texInfo.pack()); - NARC lyr = new NARC(); + Narc lyr = new Narc(); - for (Layer layer : layers) { + for (Layer layer : layers) lyr.addFile(layer.pack()); - } byte[] lyrData = lyr.pack(); ByteBuffer lyrBuf = new ByteBuffer(0x4 + lyrData.length); - lyrBuf.writeInt(MAP_LYR); + lyrBuf.writeMagic(MAP_LYR); lyrBuf.writeBytes(lyrData); root.addFile(lyrBuf.getBuffer()); - lyrBuf.clear(); + if (cta != null) + root.addFile(cta); - if (cta != null) { - ByteBuffer ctaBuf = new ByteBuffer(0x4 + cta.length); - - ctaBuf.writeInt(MAP_CTA); - ctaBuf.writeBytes(cta); - - root.addFile(ctaBuf.getBuffer()); - } - - - if (pla != null) { - ByteBuffer plaBuf = new ByteBuffer(0x4 + pla.length); - - plaBuf.writeInt(MAP_PLA); - plaBuf.writeBytes(pla); - - root.addFile(plaBuf.getBuffer()); - } + if (pla != null) + root.addFile(pla); return root.pack(); } public void save() throws IOException { - Utils.saveBytesToFile(pack(), new File(game.getFullPath(String.format("field/map/%s.map.dat.lz", name)))); + IOHelper.write(pack(), game.getFile(String.format("field/map/%s.map.dat.lz", name))); + } + + public void render(Graphics g) throws IOException { + g.setColor(Color.white); + g.fillRect(0, 0, mapInfo.width, mapInfo.height); + + // Draw grid + int gridlX = (mapInfo.width + 16) / 16; + int gridlY = (mapInfo.height + 16) / 16; + + g.setColor(Color.lightGray); + + for (int i = 0 ; i < gridlX ; i++) + g.drawLine(i * 16, 0, i * 16, mapInfo.height - 1); + + for (int i = 0 ; i < gridlY ; i++) + g.drawLine(0, i * 16, mapInfo.width - 1, i * 16); + + // Draw layers + for (Layer layer : layers) + layer.render(g); } } \ No newline at end of file diff --git a/src/com/aurum/almia/game/map/MapInfo.java b/src/com/aurum/almia/game/map/MapInfo.java index 3657cc5..db4cc0b 100644 --- a/src/com/aurum/almia/game/map/MapInfo.java +++ b/src/com/aurum/almia/game/map/MapInfo.java @@ -1,21 +1,16 @@ package com.aurum.almia.game.map; -import com.aurum.almia.ByteBuffer; -import com.aurum.almia.ByteOrder; -import static com.aurum.almia.game.map.Map.*; +import com.aurum.almia.util.ByteBuffer; +import java.nio.ByteOrder; public class MapInfo { public static final int FILE_SIZE = 0x14; - //-------------------------------------------------------------------------- - - public Map map; + public final Map map; public int width; public int height; public int unk8; public int unkC; - - //-------------------------------------------------------------------------- public MapInfo(Map map) { this.map = map; @@ -34,10 +29,15 @@ public class MapInfo { this.unkC = buf.readInt(); } + @Override + public String toString() { + return "Map Info"; + } + public byte[] pack() { ByteBuffer buf = new ByteBuffer(FILE_SIZE); - buf.writeInt(MAP_MPIF); + buf.writeMagic(Map.MAP_MPIF); buf.setEndianness(ByteOrder.LITTLE_ENDIAN); buf.writeInt(width); buf.writeInt(height); diff --git a/src/com/aurum/almia/game/map/MonData.java b/src/com/aurum/almia/game/map/MonData.java index 71e28eb..d23e4f9 100644 --- a/src/com/aurum/almia/game/map/MonData.java +++ b/src/com/aurum/almia/game/map/MonData.java @@ -17,32 +17,36 @@ package com.aurum.almia.game.map; -import com.aurum.almia.ByteBuffer; -import com.aurum.almia.ByteOrder; -import static com.aurum.almia.game.map.Layer.*; +import com.aurum.almia.util.ByteBuffer; +import java.nio.ByteOrder; +import com.aurum.almia.util.RenderHelper; +import com.aurum.almia.Resources; +import com.aurum.almia.game.param.PokeID; +import java.awt.Color; +import java.awt.Graphics; +import java.awt.image.BufferedImage; import java.util.ArrayList; -import java.util.List; -public class MonData { +public class MonData extends AbstractData { public static final int HEADER_SIZE = 0x8; public static final int ENTRY_SIZE = 0xA; - //-------------------------------------------------------------------------- - - public class Entry implements Cloneable { + public class Entry extends AbstractEntry { public short posX; public short posY; - public short behavior; // unsigned byte - public byte enabled; // possibly boolean - public int monID; // unsigned short + public short behavior; // unsigned byte + public short appearance; // unsigned byte + public int monID; // unsigned short public byte unk8; public byte unk9; public Entry() { + super(MonData.this); + this.posX = 0; this.posY = 0; this.behavior = 0; - this.enabled = 1; + this.appearance = 1; this.monID = 0; this.unk8 = 0; this.unk9 = 0; @@ -50,19 +54,30 @@ public class MonData { @Override public String toString() { - return String.format("%03X: %s", monID, layer.map.game.monDataBase.entries.get(monID).toShortString()); + return layer.map.game.getPokemonList().get(monID); + } + + @Override + public void render(Graphics g) { + PokeID.Entry monid = layer.map.game.monDataBase.entries.get(monID); + BufferedImage img = Resources.getMonImg(monid.nameID, monid.formID); + int x = posX - 48; + int y = posY - 48; + + if (img == null) + RenderHelper.drawBox( + g, posX, posY, 16, 16, + Color.BLACK, new Color(1f, 0f, 0f, 0.5f), + true + ); + else + g.drawImage(img, x, y, null); } } - //-------------------------------------------------------------------------- - - public Layer layer; - public List entries; - - //-------------------------------------------------------------------------- - public MonData(Layer layer) { - this.layer = layer; + super(layer); + this.entries = new ArrayList(); } @@ -79,7 +94,7 @@ public class MonData { e.posX = buf.readShort(); e.posY = buf.readShort(); e.behavior = buf.readUnsignedByte(); - e.enabled = buf.readByte(); + e.appearance = buf.readUnsignedByte(); e.monID = buf.readUnsignedShort(); e.unk8 = buf.readByte(); e.unk9 = buf.readByte(); @@ -88,19 +103,25 @@ public class MonData { } } + @Override + public String toString() { + return "Pokémon"; + } + + @Override public byte[] pack() { int totalsize = HEADER_SIZE + entries.size() * ENTRY_SIZE; ByteBuffer buf = new ByteBuffer(totalsize, ByteOrder.LITTLE_ENDIAN); - buf.writeInt(MDATA_MON); + buf.writeInt(getIdentifier()); buf.writeInt(entries.size()); for (Entry e : entries) { buf.writeShort(e.posX); buf.writeShort(e.posY); buf.writeUnsignedByte(e.behavior); - buf.writeByte(e.enabled); + buf.writeUnsignedByte(e.appearance); buf.writeUnsignedShort(e.monID); buf.writeByte(e.unk8); buf.writeByte(e.unk9); @@ -108,4 +129,15 @@ public class MonData { return buf.getBuffer(); } + + @Override + public int getIdentifier() { + return Layer.MDATA_MON; + } + + @Override + public void render(Graphics g) { + for (Entry entry : entries) + entry.render(g); + } } \ No newline at end of file diff --git a/src/com/aurum/almia/game/map/NpcData.java b/src/com/aurum/almia/game/map/NpcData.java index 983ceee..1737bc3 100644 --- a/src/com/aurum/almia/game/map/NpcData.java +++ b/src/com/aurum/almia/game/map/NpcData.java @@ -17,19 +17,20 @@ package com.aurum.almia.game.map; -import com.aurum.almia.ByteBuffer; -import com.aurum.almia.ByteOrder; -import static com.aurum.almia.game.map.Layer.*; +import com.aurum.almia.util.ByteBuffer; +import java.nio.ByteOrder; +import com.aurum.almia.util.RenderHelper; +import com.aurum.almia.Resources; +import java.awt.Color; +import java.awt.Graphics; +import java.awt.image.BufferedImage; import java.util.ArrayList; -import java.util.List; -public class NpcData { +public class NpcData extends AbstractData { public static final int HEADER_SIZE = 0x8; public static final int ENTRY_SIZE = 0xB; - //-------------------------------------------------------------------------- - - public class Entry implements Cloneable { + public class Entry extends AbstractEntry { public short posX; public short posY; public short direction; // unsigned byte @@ -40,6 +41,8 @@ public class NpcData { public boolean unkA; public Entry() { + super(NpcData.this); + this.posX = 0; this.posY = 0; this.direction = 0; @@ -52,19 +55,30 @@ public class NpcData { @Override public String toString() { - return String.format("%03X", npcID); + return layer.map.game.getNpcList().get(npcID); + } + + @Override + public void render(Graphics g) { + BufferedImage img = Resources.getNpcImg(npcID); + + if (img == null) + RenderHelper.drawBox( + g, posX, posY, 16, 16, + Color.BLACK, new Color(1f, 1f, 0f, 0.5f), + true + ); + else { + img = img.getSubimage((img.getWidth() / 4) * (direction % 0x3), 0, img.getWidth() / 4, img.getHeight()); + + g.drawImage(img, posX - (img.getWidth() / 2), posY - (img.getHeight() / 2), null); + } } } - //-------------------------------------------------------------------------- - - public Layer layer; - public List entries; - - //-------------------------------------------------------------------------- - public NpcData(Layer layer) { - this.layer = layer; + super(layer); + this.entries = new ArrayList(); } @@ -91,12 +105,18 @@ public class NpcData { } } + @Override + public String toString() { + return "NPCs"; + } + + @Override public byte[] pack() { int totalsize = HEADER_SIZE + entries.size() * ENTRY_SIZE; ByteBuffer buf = new ByteBuffer(totalsize, ByteOrder.LITTLE_ENDIAN); - buf.writeInt(MDATA_NPC); + buf.writeInt(getIdentifier()); buf.writeInt(entries.size()); for (Entry e : entries) { @@ -112,4 +132,15 @@ public class NpcData { return buf.getBuffer(); } + + @Override + public int getIdentifier() { + return Layer.MDATA_NPC; + } + + @Override + public void render(Graphics g) { + for (Entry entry : entries) + entry.render(g); + } } \ No newline at end of file diff --git a/src/com/aurum/almia/game/map/TargetData.java b/src/com/aurum/almia/game/map/TargetData.java index 5585486..76d0cbb 100644 --- a/src/com/aurum/almia/game/map/TargetData.java +++ b/src/com/aurum/almia/game/map/TargetData.java @@ -17,20 +17,20 @@ package com.aurum.almia.game.map; -import com.aurum.almia.ByteBuffer; -import com.aurum.almia.ByteOrder; -import com.aurum.almia.Lists; -import static com.aurum.almia.game.map.Layer.MDATA_TARGET; +import com.aurum.almia.util.ByteBuffer; +import java.nio.ByteOrder; +import com.aurum.almia.util.RenderHelper; +import com.aurum.almia.Resources; +import java.awt.Color; +import java.awt.Graphics; +import java.awt.image.BufferedImage; import java.util.ArrayList; -import java.util.List; -public class TargetData { +public class TargetData extends AbstractData { public static final int HEADER_SIZE = 0x8; public static final int ENTRY_SIZE = 0xC; - //-------------------------------------------------------------------------- - - public class Entry implements Cloneable { + public class Entry extends AbstractEntry { public short posX; public short posY; public byte unk4; @@ -42,6 +42,8 @@ public class TargetData { public byte unkB; public Entry() { + super(TargetData.this); + this.posX = 0; this.posY = 0; this.unk4 = 0; @@ -55,19 +57,27 @@ public class TargetData { @Override public String toString() { - return String.format("%03X: %s", obstacleID, Lists.obstacles.get(obstacleID)); + return layer.map.game.getTargetList().get(obstacleID); + } + + @Override + public void render(Graphics g) { + BufferedImage img = Resources.getTargetImg(obstacleID); + + if (img == null) + RenderHelper.drawBox( + g, posX, posY, 16, 16, + Color.BLACK, new Color(0f, 1f, 0f, 0.5f), + true + ); + else + g.drawImage(img, posX - (img.getWidth() / 2), posY - (img.getHeight() / 2), null); } } - //-------------------------------------------------------------------------- - - public Layer layer; - public List entries; - - //-------------------------------------------------------------------------- - public TargetData(Layer layer) { - this.layer = layer; + super(layer); + this.entries = new ArrayList(); } @@ -95,12 +105,18 @@ public class TargetData { } } + @Override + public String toString() { + return "Targets"; + } + + @Override public byte[] pack() { int totalsize = HEADER_SIZE + entries.size() * ENTRY_SIZE; ByteBuffer buf = new ByteBuffer(totalsize, ByteOrder.LITTLE_ENDIAN); - buf.writeInt(MDATA_TARGET); + buf.writeInt(getIdentifier()); buf.writeInt(entries.size()); for (Entry e : entries) { @@ -117,4 +133,15 @@ public class TargetData { return buf.getBuffer(); } + + @Override + public int getIdentifier() { + return Layer.MDATA_TARGET; + } + + @Override + public void render(Graphics g) { + for (Entry entry : entries) + entry.render(g); + } } \ No newline at end of file diff --git a/src/com/aurum/almia/game/map/TextureInfo.java b/src/com/aurum/almia/game/map/TextureInfo.java index cbc0384..f39da84 100644 --- a/src/com/aurum/almia/game/map/TextureInfo.java +++ b/src/com/aurum/almia/game/map/TextureInfo.java @@ -1,24 +1,40 @@ +/* + * Copyright (C) 2018 Aurum + * + * AlmiaE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AlmiaE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + package com.aurum.almia.game.map; -import com.aurum.almia.ByteBuffer; -import com.aurum.almia.ByteOrder; -import static com.aurum.almia.game.map.Map.*; +import com.aurum.almia.util.ByteBuffer; +import java.awt.Graphics; +import java.nio.ByteOrder; import java.util.ArrayList; -import java.util.List; -public class TextureInfo { +public class TextureInfo extends AbstractData { public static final int HEADER_SIZE = 0x8; public static final int ENTRY_SIZE = 0x8; - //-------------------------------------------------------------------------- - - public class Entry { + public class Entry extends AbstractEntry { public short unk0; public int textureID; // unsigned short public short unk4; public short unk6; public Entry() { + super(TextureInfo.this); + this.unk0 = 1; this.textureID = 0; this.unk4 = 0; @@ -31,15 +47,12 @@ public class TextureInfo { } } - //-------------------------------------------------------------------------- - - public Map map; - public List entries; + public final Map map; public short unk2; - //-------------------------------------------------------------------------- - public TextureInfo(Map map) { + super(null); + this.map = map; this.entries = new ArrayList(); this.unk2 = 0; @@ -49,7 +62,7 @@ public class TextureInfo { this(map); int numEntries = buf.readUnsignedShort(); - unk2 = buf.readShort(); + this.unk2 = buf.readShort(); for (int i = 0 ; i < numEntries ; i++) { Entry e = new Entry(); @@ -58,15 +71,21 @@ public class TextureInfo { e.textureID = buf.readUnsignedShort(); e.unk4 = buf.readShort(); e.unk6 = buf.readShort(); - + entries.add(e); } } + @Override + public String toString() { + return "Texture Info"; + } + + @Override public byte[] pack() { ByteBuffer buf = new ByteBuffer(HEADER_SIZE + entries.size() * ENTRY_SIZE); - buf.writeInt(MAP_TXIF); + buf.writeMagic(Map.MAP_TXIF); buf.setEndianness(ByteOrder.LITTLE_ENDIAN); buf.writeUnsignedShort(entries.size()); buf.writeShort(unk2); @@ -80,4 +99,12 @@ public class TextureInfo { return buf.getBuffer(); } + + @Override + public int getIdentifier() { + return -1; + } + + @Override + public void render(Graphics g) {} } \ No newline at end of file diff --git a/src/com/aurum/almia/game/param/BattlePokemon.java b/src/com/aurum/almia/game/param/BattlePokemon.java index feab309..b8db814 100644 --- a/src/com/aurum/almia/game/param/BattlePokemon.java +++ b/src/com/aurum/almia/game/param/BattlePokemon.java @@ -17,20 +17,26 @@ package com.aurum.almia.game.param; -import com.aurum.almia.ByteBuffer; -import com.aurum.almia.ByteOrder; -import com.aurum.almia.Utils; +import com.aurum.almia.util.ByteBuffer; import com.aurum.almia.game.Game; -import java.io.File; +import com.aurum.almia.util.IOHelper; import java.io.IOException; +import java.nio.ByteOrder; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; public class BattlePokemon { public static final int HEADER_SIZE = 0x10; public static final int ENTRY_SIZE = 0x18; - - //-------------------------------------------------------------------------- + private static final byte[] UNIQUE = { + (byte)0x07, (byte)0x01, (byte)0x03, (byte)0x03, + (byte)0x01, (byte)0x02, (byte)0x02, (byte)0x01, + (byte)0x01, (byte)0x01, (byte)0x01, (byte)0x03, + (byte)0x01, (byte)0x02, (byte)0x02, (byte)0x02, + (byte)0x02, (byte)0x02, (byte)0x02, (byte)0x02, + (byte)0x01, (byte)0x01 + }; public static class Entry implements Cloneable { public byte[] unk0; @@ -41,41 +47,34 @@ public class BattlePokemon { @Override public String toString() { - return super.toString(); + return Arrays.toString(unk0); } } - //-------------------------------------------------------------------------- - public Game game; public List entries; - public byte[] unique; public int unkC; - //-------------------------------------------------------------------------- - - public BattlePokemon(Game game) { + public BattlePokemon(Game game) throws IOException { this.game = game; this.entries = new ArrayList(); - this.unique = new byte[0x0]; - this.unkC = 0x0; - } - - public BattlePokemon(Game game, ByteBuffer buf) { - this(game); + ByteBuffer buf = ByteBuffer.read(game.getFile("param/BattlePokemon.bin")); buf.setEndianness(ByteOrder.LITTLE_ENDIAN); - int totalsize = buf.readInt(); - if (buf.size() != totalsize) { + int totalSize = buf.readInt(); + if (buf.size() != totalSize) System.out.println("BattlePokemon: Warning! Stored size does not equal actual buffer size!"); - } - int uniquesize = buf.readInt(); - int datasize = buf.readInt(); - unkC = buf.readInt(); - unique = buf.readBytes(uniquesize); - int entriesCount = datasize / ENTRY_SIZE; + int uniqueSize = buf.readInt(); + int dataSize = buf.readInt(); + this.unkC = buf.readInt(); + + byte[] unique = buf.readBytes(uniqueSize); + if (!Arrays.equals(unique, UNIQUE)) + System.out.println("PokeID: Warning! Are you sure this is PokeID data?"); + + int entriesCount = dataSize / ENTRY_SIZE; for (int i = 0 ; i < entriesCount ; i++) { Entry e = new Entry(); @@ -87,24 +86,23 @@ public class BattlePokemon { } public byte[] pack() { - int datasize = entries.size() * ENTRY_SIZE; - int totalsize = HEADER_SIZE + unique.length + datasize; + int dataSize = entries.size() * ENTRY_SIZE; + int totalSize = HEADER_SIZE + UNIQUE.length + dataSize; - ByteBuffer buf = new ByteBuffer(totalsize, ByteOrder.LITTLE_ENDIAN); - buf.writeInt(totalsize); - buf.writeInt(unique.length); - buf.writeInt(datasize); + ByteBuffer buf = new ByteBuffer(totalSize, ByteOrder.LITTLE_ENDIAN); + buf.writeInt(totalSize); + buf.writeInt(UNIQUE.length); + buf.writeInt(dataSize); buf.writeInt(unkC); - buf.writeBytes(unique); + buf.writeBytes(UNIQUE); - for (Entry e : entries) { + for (Entry e : entries) buf.writeBytes(e.unk0); - } return buf.getBuffer(); } public void save() throws IOException { - Utils.saveBytesToFile(pack(), new File(game.getFullPath("param/BattlePokemon.bin"))); + IOHelper.write(pack(), game.getFile("param/BattlePokemon.bin")); } } \ No newline at end of file diff --git a/src/com/aurum/almia/game/param/PokeID.java b/src/com/aurum/almia/game/param/PokeID.java index 87da3d2..110b3de 100644 --- a/src/com/aurum/almia/game/param/PokeID.java +++ b/src/com/aurum/almia/game/param/PokeID.java @@ -17,21 +17,27 @@ package com.aurum.almia.game.param; -import com.aurum.almia.ByteBuffer; -import com.aurum.almia.ByteOrder; +import com.aurum.almia.util.ByteBuffer; import com.aurum.almia.Lists; -import com.aurum.almia.Utils; import com.aurum.almia.game.Game; -import java.io.File; +import com.aurum.almia.util.IOHelper; import java.io.IOException; +import java.nio.ByteOrder; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; public class PokeID { public static final int HEADER_SIZE = 0x10; public static final int ENTRY_SIZE = 0x1C; - - //-------------------------------------------------------------------------- + private static final byte[] UNIQUE = { + (byte)0x07, (byte)0x03, (byte)0x01, (byte)0x07, + (byte)0x01, (byte)0x01, (byte)0x01, (byte)0x01, + (byte)0x02, (byte)0x02, (byte)0x01, (byte)0x02, + (byte)0x02, (byte)0x01, (byte)0x01, (byte)0x02, + (byte)0x02, (byte)0x01, (byte)0x01, (byte)0x02, + (byte)0x02, (byte)0x03, (byte)0x03, (byte)0x05 + }; public class Entry implements Cloneable { public int nameID; // unsigned short @@ -40,17 +46,17 @@ public class PokeID { public short assistID; // unsigned byte public short fieldID; // unsigned byte public short fieldLevel; // unsigned byte - public byte unk7; + public byte unk7; // always 0 public int unk8; // unsigned short public int unkA; // unsigned short public short shadowWidth; // unsigned byte public short shadowHeight; // unsigned byte public byte unkE; public byte unkF; - public int unk10; + public int unk10; // always 0 public int unk14; // unsigned short public int unk16; // unsigned short - public int unk18; + public int unk18; // 0, 1 or 100 public Entry() { this.nameID = 0; @@ -74,7 +80,13 @@ public class PokeID { @Override public String toString() { - return String.format("%s (%s, %s x%d)", Lists.pokemon_name.get(nameID), Lists.assist_mes.get(assistID), Lists.fieldwaza_name.get(fieldID), fieldLevel); + return String.format( + "%s (%s, %s x%d)", + Lists.pokemon_name.get(nameID), + Lists.assist_mes.get(assistID), + Lists.fieldwaza_name.get(fieldID), + fieldLevel + ); } public String toShortString() { @@ -82,37 +94,30 @@ public class PokeID { } } - //-------------------------------------------------------------------------- - public Game game; public List entries; - public byte[] unique; public int unkC; - //-------------------------------------------------------------------------- - - public PokeID(Game game) { + public PokeID(Game game) throws IOException { this.game = game; this.entries = new ArrayList(); - this.unique = new byte[0x0]; - this.unkC = 0x0; - } - - public PokeID(Game game, ByteBuffer buf) { - this(game); + ByteBuffer buf = ByteBuffer.read(game.getFile("param/PokeID.bin")); buf.setEndianness(ByteOrder.LITTLE_ENDIAN); - int totalsize = buf.readInt(); - if (buf.size() != totalsize) { + int totalSize = buf.readInt(); + if (buf.size() != totalSize) System.out.println("PokeID: Warning! Stored size does not equal actual buffer size!"); - } - int uniquesize = buf.readInt(); - int datasize = buf.readInt(); - unkC = buf.readInt(); - unique = buf.readBytes(uniquesize); - int entriesCount = datasize / ENTRY_SIZE; + int uniqueSize = buf.readInt(); + int dataSize = buf.readInt(); + this.unkC = buf.readInt(); + + byte[] unique = buf.readBytes(uniqueSize); + if (!Arrays.equals(unique, UNIQUE)) + System.out.println("PokeID: Warning! Are you sure this is PokeID data?"); + + int entriesCount = dataSize / ENTRY_SIZE; for (int i = 0 ; i < entriesCount ; i++) { Entry e = new Entry(); @@ -140,15 +145,16 @@ public class PokeID { } public byte[] pack() { - int datasize = entries.size() * ENTRY_SIZE; - int totalsize = HEADER_SIZE + unique.length + datasize; + int dataSize = entries.size() * ENTRY_SIZE; + int totalSize = HEADER_SIZE + UNIQUE.length + dataSize; - ByteBuffer buf = new ByteBuffer(totalsize, ByteOrder.LITTLE_ENDIAN); - buf.writeInt(totalsize); - buf.writeInt(unique.length); - buf.writeInt(datasize); + ByteBuffer buf = new ByteBuffer(totalSize, ByteOrder.LITTLE_ENDIAN); + + buf.writeInt(totalSize); + buf.writeInt(UNIQUE.length); + buf.writeInt(dataSize); buf.writeInt(unkC); - buf.writeBytes(unique); + buf.writeBytes(UNIQUE); for (Entry e : entries) { buf.writeUnsignedShort(e.nameID); @@ -174,6 +180,6 @@ public class PokeID { } public void save() throws IOException { - Utils.saveBytesToFile(pack(), new File(game.getFullPath("param/PokeID.bin"))); + IOHelper.write(pack(), game.getFile("param/PokeID.bin")); } } \ No newline at end of file diff --git a/src/com/aurum/almia/swing/MapEditor.form b/src/com/aurum/almia/swing/MapEditor.form deleted file mode 100644 index 2fe5ce5..0000000 --- a/src/com/aurum/almia/swing/MapEditor.form +++ /dev/null @@ -1,1694 +0,0 @@ - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/src/com/aurum/almia/swing/MapEditor.java b/src/com/aurum/almia/swing/MapEditor.java deleted file mode 100644 index beb1375..0000000 --- a/src/com/aurum/almia/swing/MapEditor.java +++ /dev/null @@ -1,1968 +0,0 @@ -/* - * Copyright (C) 2018 Aurum - * - * AlmiaE is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * AlmiaE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.aurum.almia.swing; - -import com.aurum.almia.Lists; -import com.aurum.almia.Main; -import com.aurum.almia.game.map.Layer; -import com.aurum.almia.game.map.Map; -import com.aurum.almia.game.map.MapInfo; -import com.aurum.almia.game.map.MonData; -import com.aurum.almia.game.map.NpcData; -import com.aurum.almia.game.map.TargetData; -import com.aurum.almia.game.map.TextureInfo; -import com.aurum.almia.game.map.WarpData; -import java.io.IOException; -import javax.swing.DefaultListModel; -import javax.swing.JFrame; -import javax.swing.SpinnerNumberModel; - -public class MapEditor extends JFrame { - public Map map; - - protected DefaultListModel modelTexInfo; - protected DefaultListModel modelWarps; - protected DefaultListModel modelMons; - protected DefaultListModel modelTargets; - protected DefaultListModel modelNpcs; - - public MapEditor(Map map) { - initComponents(); - - this.map = map; - - initGUI(); - initData(); - } - - protected void initGUI() { - modelTexInfo = new DefaultListModel(); - modelWarps = new DefaultListModel(); - modelMons = new DefaultListModel(); - modelTargets = new DefaultListModel(); - modelNpcs = new DefaultListModel(); - - setTitle(String.format("Map Editor: Editing %s", map.name)); - updateLayers(); - - listTexInfo.setModel(modelTexInfo); - listWarps.setModel(modelWarps); - listMons.setModel(modelMons); - listTargets.setModel(modelTargets); - listNpcs.setModel(modelNpcs); - - for (int i = 0 ; i < map.game.monDataBase.entries.size() ; i++) { - cmoMonDataMon.addItem(String.format("%03X: %s", i, map.game.monDataBase.entries.get(i).toShortString())); - } - - for (int i = 0 ; i < Lists.yakumono_name.size() ; i++) { - cmoTargetID.addItem(String.format("%03X: %s", i, Lists.obstacles.get(i))); - } - } - - protected void initData() { - spnMapInfoWidth.setValue(map.mapInfo.width); - spnMapInfoHeight.setValue(map.mapInfo.height); - spnMapInfoUnk8.setValue(map.mapInfo.unk8); - spnMapInfoUnkC.setValue(map.mapInfo.unkC); - spnTexInfoUnk2.setValue(map.texInfo.unk2); - - reloadTexInfoUI(); - reloadLayer(); - } - - protected void reloadLayer() { - modelWarps.clear(); - - for (WarpData.Entry warp : getCurLayer().warpData.entries) { - modelWarps.addElement(warp.toString()); - } - - reloadWarpUI(); - - - modelMons.clear(); - - for (MonData.Entry mon : getCurLayer().monData.entries) { - modelMons.addElement(mon.toString()); - } - - reloadMonUI(); - - - modelTargets.clear(); - - for (TargetData.Entry target : getCurLayer().targetData.entries) { - modelTargets.addElement(target.toString()); - } - - reloadTargetUI(); - - - modelNpcs.clear(); - - for (NpcData.Entry npc : getCurLayer().npcData.entries) { - modelNpcs.addElement(npc.toString()); - } - - reloadNpcUI(); - } - - protected void reloadTexInfoUI() { - modelTexInfo.clear(); - - for (int i = 0 ; i < map.texInfo.entries.size() ; i++) { - modelTexInfo.addElement(String.format("Texture Info No. %d", i)); - } - - boolean b = map.texInfo.entries.size() > 0; - listTexInfo.setEnabled(b); - spnTexInfoUnk0.setEnabled(b); - spnTexInfoTextureID.setEnabled(b); - spnTexInfoUnk4.setEnabled(b); - spnTexInfoUnk6.setEnabled(b); - } - - protected void reloadWarpUI() { - boolean b = getCurLayer().warpData.entries.size() > 0; - listWarps.setEnabled(b); - spnWarpPosX.setEnabled(b); - spnWarpPosY.setEnabled(b); - spnWarpUnk4.setEnabled(b); - spnWarpUnk6.setEnabled(b); - spnWarpUnk8.setEnabled(b); - } - - protected void reloadMonUI() { - boolean b = getCurLayer().monData.entries.size() > 0; - listMons.setEnabled(b); - spnMonDataPosX.setEnabled(b); - spnMonDataPosY.setEnabled(b); - spnMonDataBehavior.setEnabled(b); - spnMonDataUnk5.setEnabled(b); - cmoMonDataMon.setEnabled(b); - spnMonDataUnk8.setEnabled(b); - spnMonDataUnk9a.setEnabled(b); - } - - protected void reloadTargetUI() { - boolean b = getCurLayer().targetData.entries.size() > 0; - listTargets.setEnabled(b); - spnTargetPosX.setEnabled(b); - spnTargetPosY.setEnabled(b); - spnTargetUnk4.setEnabled(b); - spnTargetUnk5.setEnabled(b); - cmoTargetID.setEnabled(b); - spnTargetUnk8.setEnabled(b); - spnTargetUnk9.setEnabled(b); - spnTargetUnkA.setEnabled(b); - spnTargetUnkB.setEnabled(b); - } - - protected void reloadNpcUI() { - boolean b = getCurLayer().npcData.entries.size() > 0; - listNpcs.setEnabled(b); - spnNpcPosX.setEnabled(b); - spnNpcPosY.setEnabled(b); - cmoNpcDirection.setEnabled(b); - chkNpcIsVisible.setEnabled(b); - spnNpcID.setEnabled(b); - spnNpcUnk8.setEnabled(b); - spnNpcUnk9.setEnabled(b); - chkNpcUnkA.setEnabled(b); - } - - public void saveAll() { - MapInfo mapinfo = map.mapInfo; - mapinfo.width = (int)spnMapInfoWidth.getValue(); - mapinfo.height = (int)spnMapInfoHeight.getValue(); - mapinfo.unk8 = (int)spnMapInfoUnk8.getValue(); - mapinfo.unkC = (int)spnMapInfoUnkC.getValue(); - - map.texInfo.unk2 = (short)spnTexInfoUnk2.getValue(); - - try { - map.save(); - } - catch (IOException ex) { - System.out.println(ex); - } - } - - protected Layer getCurLayer() { - return map.layers.get((int)spnSelectedLayer.getValue()); - } - - protected void updateLayers() { - int numLayers = map.layers.size(); - - if (numLayers > 0) { - spnSelectedLayer.setValue(0); - ((SpinnerNumberModel)spnSelectedLayer.getModel()).setMaximum(numLayers - 1); - } - else { - spnSelectedLayer.setValue(-1); - ((SpinnerNumberModel)spnSelectedLayer.getModel()).setMinimum(-1); - ((SpinnerNumberModel)spnSelectedLayer.getModel()).setMaximum(-1); - } - - } - - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - java.awt.GridBagConstraints gridBagConstraints; - - toolbar = new javax.swing.JToolBar(); - saveAllButton = new javax.swing.JButton(); - jSeparator2 = new javax.swing.JToolBar.Separator(); - lblSelectedLayer = new javax.swing.JLabel(); - spnSelectedLayer = new javax.swing.JSpinner(); - jSeparator3 = new javax.swing.JToolBar.Separator(); - btnLayerAdd = new javax.swing.JButton(); - jSeparator4 = new javax.swing.JToolBar.Separator(); - btnLayerDelete = new javax.swing.JButton(); - filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(32767, 0)); - tabPane = new javax.swing.JTabbedPane(); - pneMapInfo = new javax.swing.JPanel(); - lblMapInfoWidth = new javax.swing.JLabel(); - lblMapInfoHeight = new javax.swing.JLabel(); - lblMapInfoUnk8 = new javax.swing.JLabel(); - lblMapInfoUnkC = new javax.swing.JLabel(); - spnMapInfoWidth = new javax.swing.JSpinner(); - spnMapInfoHeight = new javax.swing.JSpinner(); - spnMapInfoUnk8 = new javax.swing.JSpinner(); - spnMapInfoUnkC = new javax.swing.JSpinner(); - jSeparator1 = new javax.swing.JSeparator(); - lblTexInfoUnk2 = new javax.swing.JLabel(); - spnTexInfoUnk2 = new javax.swing.JSpinner(); - pneTexInfo = new javax.swing.JPanel(); - scrTexInfo = new javax.swing.JScrollPane(); - listTexInfo = new javax.swing.JList<>(); - pneTexInfoSettings = new javax.swing.JPanel(); - lblTexInfoUnk0 = new javax.swing.JLabel(); - lblTexInfoID = new javax.swing.JLabel(); - lblTexInfoUnk4 = new javax.swing.JLabel(); - lblTexInfoUnk6 = new javax.swing.JLabel(); - spnTexInfoUnk0 = new javax.swing.JSpinner(); - spnTexInfoTextureID = new javax.swing.JSpinner(); - spnTexInfoUnk4 = new javax.swing.JSpinner(); - spnTexInfoUnk6 = new javax.swing.JSpinner(); - filler3 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767)); - btnTexInfoSave = new javax.swing.JButton(); - btnTexInfoAdd = new javax.swing.JButton(); - btnTexInfoRemove = new javax.swing.JButton(); - pneWarps = new javax.swing.JPanel(); - scrWarps = new javax.swing.JScrollPane(); - listWarps = new javax.swing.JList<>(); - pneWarpSettings = new javax.swing.JPanel(); - lblWarpPosX = new javax.swing.JLabel(); - lblWarpPosY = new javax.swing.JLabel(); - lblWarpUnk4 = new javax.swing.JLabel(); - lblWarpUnk6 = new javax.swing.JLabel(); - lblWarpUnk8 = new javax.swing.JLabel(); - spnWarpPosX = new javax.swing.JSpinner(); - spnWarpPosY = new javax.swing.JSpinner(); - spnWarpUnk4 = new javax.swing.JSpinner(); - spnWarpUnk6 = new javax.swing.JSpinner(); - spnWarpUnk8 = new javax.swing.JSpinner(); - fillerWarp = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767)); - btnWarpSave = new javax.swing.JButton(); - btnWarpAdd = new javax.swing.JButton(); - btnWarpRemove = new javax.swing.JButton(); - pneTargets = new javax.swing.JPanel(); - scrTargets = new javax.swing.JScrollPane(); - listTargets = new javax.swing.JList<>(); - pneTargetSettings = new javax.swing.JPanel(); - lblTargetPosX = new javax.swing.JLabel(); - lblTargetPosY = new javax.swing.JLabel(); - lblTargetUnk4 = new javax.swing.JLabel(); - lblTargetUnk5 = new javax.swing.JLabel(); - lblTargetID = new javax.swing.JLabel(); - lblTargetUnk8 = new javax.swing.JLabel(); - lblTargetUnk9 = new javax.swing.JLabel(); - lblTargetUnkA = new javax.swing.JLabel(); - lblTargetUnkB = new javax.swing.JLabel(); - spnTargetPosX = new javax.swing.JSpinner(); - spnTargetPosY = new javax.swing.JSpinner(); - spnTargetUnk4 = new javax.swing.JSpinner(); - spnTargetUnk5 = new javax.swing.JSpinner(); - cmoTargetID = new javax.swing.JComboBox<>(); - spnTargetUnk8 = new javax.swing.JSpinner(); - spnTargetUnk9 = new javax.swing.JSpinner(); - spnTargetUnkA = new javax.swing.JSpinner(); - spnTargetUnkB = new javax.swing.JSpinner(); - fillerTarget = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767)); - btnTargetSave = new javax.swing.JButton(); - btnTargetAdd = new javax.swing.JButton(); - btnTargetRemove = new javax.swing.JButton(); - pneMons = new javax.swing.JPanel(); - scrMons = new javax.swing.JScrollPane(); - listMons = new javax.swing.JList<>(); - pneMonSettings = new javax.swing.JPanel(); - lblMonDataPosX = new javax.swing.JLabel(); - lblMonDataPosY = new javax.swing.JLabel(); - lblMonDataBehavior = new javax.swing.JLabel(); - lblMonDataUnk5 = new javax.swing.JLabel(); - lblMonDataMon = new javax.swing.JLabel(); - lblMonDataUnk8 = new javax.swing.JLabel(); - lblMonDataUnk9a = new javax.swing.JLabel(); - spnMonDataPosX = new javax.swing.JSpinner(); - spnMonDataPosY = new javax.swing.JSpinner(); - spnMonDataBehavior = new javax.swing.JSpinner(); - spnMonDataUnk5 = new javax.swing.JSpinner(); - cmoMonDataMon = new javax.swing.JComboBox<>(); - spnMonDataUnk8 = new javax.swing.JSpinner(); - spnMonDataUnk9a = new javax.swing.JSpinner(); - filler2 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767)); - btnMonSave = new javax.swing.JButton(); - btnMonAdd = new javax.swing.JButton(); - btnMonRemove = new javax.swing.JButton(); - pneNpcs = new javax.swing.JPanel(); - scrNpcs = new javax.swing.JScrollPane(); - listNpcs = new javax.swing.JList<>(); - pneNpcSettings = new javax.swing.JPanel(); - lblNpcPosX = new javax.swing.JLabel(); - lblNpcPosY = new javax.swing.JLabel(); - lblNpcDirection = new javax.swing.JLabel(); - lblNpcNpc = new javax.swing.JLabel(); - lblNpcUnk8 = new javax.swing.JLabel(); - lblNpcUnk9 = new javax.swing.JLabel(); - spnNpcPosX = new javax.swing.JSpinner(); - spnNpcPosY = new javax.swing.JSpinner(); - cmoNpcDirection = new javax.swing.JComboBox<>(); - chkNpcIsVisible = new javax.swing.JCheckBox(); - spnNpcID = new javax.swing.JSpinner(); - spnNpcUnk8 = new javax.swing.JSpinner(); - spnNpcUnk9 = new javax.swing.JSpinner(); - chkNpcUnkA = new javax.swing.JCheckBox(); - fillerNpc = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767)); - btnNpcSave = new javax.swing.JButton(); - btnNpcAdd = new javax.swing.JButton(); - btnNpcRemove = new javax.swing.JButton(); - warningLabel = new javax.swing.JLabel(); - - setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); - setTitle("Map Editor: Editing "); - setIconImage(Main.icon); - setResizable(false); - - toolbar.setFloatable(false); - toolbar.setRollover(true); - - saveAllButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/res/tl_save.png"))); // NOI18N - saveAllButton.setText("Save all data"); - saveAllButton.setFocusable(false); - saveAllButton.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); - saveAllButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - saveAllButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - saveAllButtonActionPerformed(evt); - } - }); - toolbar.add(saveAllButton); - toolbar.add(jSeparator2); - - lblSelectedLayer.setText("Selected layer: "); - toolbar.add(lblSelectedLayer); - - spnSelectedLayer.setModel(new javax.swing.SpinnerNumberModel(0, 0, 0, 1)); - spnSelectedLayer.addChangeListener(new javax.swing.event.ChangeListener() { - public void stateChanged(javax.swing.event.ChangeEvent evt) { - spnSelectedLayerStateChanged(evt); - } - }); - toolbar.add(spnSelectedLayer); - toolbar.add(jSeparator3); - - btnLayerAdd.setText("Add"); - btnLayerAdd.setFocusable(false); - btnLayerAdd.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); - btnLayerAdd.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - btnLayerAdd.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - btnLayerAddActionPerformed(evt); - } - }); - toolbar.add(btnLayerAdd); - toolbar.add(jSeparator4); - - btnLayerDelete.setText("Delete"); - btnLayerDelete.setFocusable(false); - btnLayerDelete.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); - btnLayerDelete.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - btnLayerDelete.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - btnLayerDeleteActionPerformed(evt); - } - }); - toolbar.add(btnLayerDelete); - toolbar.add(filler1); - - lblMapInfoWidth.setText("Map width"); - - lblMapInfoHeight.setText("Map height"); - - lblMapInfoUnk8.setText("int (0x8)"); - - lblMapInfoUnkC.setText("int (0xC)"); - - spnMapInfoWidth.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); - - spnMapInfoHeight.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); - - spnMapInfoUnk8.setModel(new javax.swing.SpinnerNumberModel()); - - spnMapInfoUnkC.setModel(new javax.swing.SpinnerNumberModel()); - - lblTexInfoUnk2.setText("short (TXIF 0x2)"); - - spnTexInfoUnk2.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); - - javax.swing.GroupLayout pneMapInfoLayout = new javax.swing.GroupLayout(pneMapInfo); - pneMapInfo.setLayout(pneMapInfoLayout); - pneMapInfoLayout.setHorizontalGroup( - pneMapInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jSeparator1) - .addGroup(pneMapInfoLayout.createSequentialGroup() - .addContainerGap() - .addGroup(pneMapInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pneMapInfoLayout.createSequentialGroup() - .addComponent(lblMapInfoWidth) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(spnMapInfoWidth, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(pneMapInfoLayout.createSequentialGroup() - .addComponent(lblMapInfoUnkC) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(spnMapInfoUnkC, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(pneMapInfoLayout.createSequentialGroup() - .addComponent(lblMapInfoHeight) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(spnMapInfoHeight, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(pneMapInfoLayout.createSequentialGroup() - .addComponent(lblMapInfoUnk8) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(spnMapInfoUnk8, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(pneMapInfoLayout.createSequentialGroup() - .addComponent(lblTexInfoUnk2) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 357, Short.MAX_VALUE) - .addComponent(spnTexInfoUnk2, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addContainerGap()) - ); - pneMapInfoLayout.setVerticalGroup( - pneMapInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pneMapInfoLayout.createSequentialGroup() - .addContainerGap() - .addGroup(pneMapInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(lblMapInfoWidth) - .addComponent(spnMapInfoWidth, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(pneMapInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(lblMapInfoHeight) - .addComponent(spnMapInfoHeight, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(pneMapInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(lblMapInfoUnk8) - .addComponent(spnMapInfoUnk8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(pneMapInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(lblMapInfoUnkC) - .addComponent(spnMapInfoUnkC, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(pneMapInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(lblTexInfoUnk2) - .addComponent(spnTexInfoUnk2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(255, Short.MAX_VALUE)) - ); - - tabPane.addTab("Map Info", pneMapInfo); - - listTexInfo.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); - listTexInfo.addListSelectionListener(new javax.swing.event.ListSelectionListener() { - public void valueChanged(javax.swing.event.ListSelectionEvent evt) { - listTexInfoValueChanged(evt); - } - }); - scrTexInfo.setViewportView(listTexInfo); - - pneTexInfoSettings.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1)); - pneTexInfoSettings.setLayout(new java.awt.GridBagLayout()); - - lblTexInfoUnk0.setText("unk0"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 0; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTexInfoSettings.add(lblTexInfoUnk0, gridBagConstraints); - - lblTexInfoID.setText("Texture ID"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 1; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTexInfoSettings.add(lblTexInfoID, gridBagConstraints); - - lblTexInfoUnk4.setText("unk4"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 2; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTexInfoSettings.add(lblTexInfoUnk4, gridBagConstraints); - - lblTexInfoUnk6.setText("unk6"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 3; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTexInfoSettings.add(lblTexInfoUnk6, gridBagConstraints); - - spnTexInfoUnk0.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 0; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTexInfoSettings.add(spnTexInfoUnk0, gridBagConstraints); - - spnTexInfoTextureID.setModel(new javax.swing.SpinnerNumberModel(0, 0, 65535, 1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 1; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTexInfoSettings.add(spnTexInfoTextureID, gridBagConstraints); - - spnTexInfoUnk4.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 2; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTexInfoSettings.add(spnTexInfoUnk4, gridBagConstraints); - - spnTexInfoUnk6.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 3; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTexInfoSettings.add(spnTexInfoUnk6, gridBagConstraints); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 4; - gridBagConstraints.gridwidth = 2; - gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.weighty = 1.0; - pneTexInfoSettings.add(filler3, gridBagConstraints); - - btnTexInfoSave.setText("Save"); - btnTexInfoSave.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - btnTexInfoSaveActionPerformed(evt); - } - }); - - btnTexInfoAdd.setText("Add"); - btnTexInfoAdd.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - btnTexInfoAddActionPerformed(evt); - } - }); - - btnTexInfoRemove.setText("Remove"); - btnTexInfoRemove.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - btnTexInfoRemoveActionPerformed(evt); - } - }); - - javax.swing.GroupLayout pneTexInfoLayout = new javax.swing.GroupLayout(pneTexInfo); - pneTexInfo.setLayout(pneTexInfoLayout); - pneTexInfoLayout.setHorizontalGroup( - pneTexInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pneTexInfoLayout.createSequentialGroup() - .addContainerGap() - .addComponent(scrTexInfo, javax.swing.GroupLayout.PREFERRED_SIZE, 300, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(pneTexInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(pneTexInfoSettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(pneTexInfoLayout.createSequentialGroup() - .addComponent(btnTexInfoSave) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btnTexInfoAdd) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btnTexInfoRemove) - .addGap(0, 0, Short.MAX_VALUE))) - .addContainerGap()) - ); - pneTexInfoLayout.setVerticalGroup( - pneTexInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pneTexInfoLayout.createSequentialGroup() - .addContainerGap() - .addGroup(pneTexInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(scrTexInfo) - .addGroup(pneTexInfoLayout.createSequentialGroup() - .addComponent(pneTexInfoSettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(pneTexInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(btnTexInfoSave) - .addComponent(btnTexInfoAdd) - .addComponent(btnTexInfoRemove)))) - .addContainerGap()) - ); - - tabPane.addTab("Texture Info", pneTexInfo); - - listWarps.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); - listWarps.addListSelectionListener(new javax.swing.event.ListSelectionListener() { - public void valueChanged(javax.swing.event.ListSelectionEvent evt) { - listWarpsValueChanged(evt); - } - }); - scrWarps.setViewportView(listWarps); - - pneWarpSettings.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1)); - pneWarpSettings.setLayout(new java.awt.GridBagLayout()); - - lblWarpPosX.setText("X Position"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 0; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneWarpSettings.add(lblWarpPosX, gridBagConstraints); - - lblWarpPosY.setText("Y Position"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 1; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneWarpSettings.add(lblWarpPosY, gridBagConstraints); - - lblWarpUnk4.setText("short (0x4)"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 2; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneWarpSettings.add(lblWarpUnk4, gridBagConstraints); - - lblWarpUnk6.setText("short (0x6)"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 3; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneWarpSettings.add(lblWarpUnk6, gridBagConstraints); - - lblWarpUnk8.setText("short (0x8)"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 4; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneWarpSettings.add(lblWarpUnk8, gridBagConstraints); - - spnWarpPosX.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 0; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneWarpSettings.add(spnWarpPosX, gridBagConstraints); - - spnWarpPosY.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 1; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneWarpSettings.add(spnWarpPosY, gridBagConstraints); - - spnWarpUnk4.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 2; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneWarpSettings.add(spnWarpUnk4, gridBagConstraints); - - spnWarpUnk6.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 3; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneWarpSettings.add(spnWarpUnk6, gridBagConstraints); - - spnWarpUnk8.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 4; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneWarpSettings.add(spnWarpUnk8, gridBagConstraints); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 5; - gridBagConstraints.gridwidth = 2; - gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.weighty = 1.0; - pneWarpSettings.add(fillerWarp, gridBagConstraints); - - btnWarpSave.setText("Save"); - btnWarpSave.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - btnWarpSaveActionPerformed(evt); - } - }); - - btnWarpAdd.setText("Add"); - btnWarpAdd.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - btnWarpAddActionPerformed(evt); - } - }); - - btnWarpRemove.setText("Remove"); - btnWarpRemove.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - btnWarpRemoveActionPerformed(evt); - } - }); - - javax.swing.GroupLayout pneWarpsLayout = new javax.swing.GroupLayout(pneWarps); - pneWarps.setLayout(pneWarpsLayout); - pneWarpsLayout.setHorizontalGroup( - pneWarpsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pneWarpsLayout.createSequentialGroup() - .addContainerGap() - .addComponent(scrWarps, javax.swing.GroupLayout.PREFERRED_SIZE, 300, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(pneWarpsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(pneWarpSettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(pneWarpsLayout.createSequentialGroup() - .addComponent(btnWarpSave) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btnWarpAdd) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btnWarpRemove) - .addGap(0, 112, Short.MAX_VALUE))) - .addContainerGap()) - ); - pneWarpsLayout.setVerticalGroup( - pneWarpsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pneWarpsLayout.createSequentialGroup() - .addContainerGap() - .addGroup(pneWarpsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pneWarpsLayout.createSequentialGroup() - .addComponent(pneWarpSettings, javax.swing.GroupLayout.DEFAULT_SIZE, 381, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(pneWarpsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(btnWarpSave) - .addComponent(btnWarpAdd) - .addComponent(btnWarpRemove))) - .addComponent(scrWarps)) - .addContainerGap()) - ); - - tabPane.addTab("Warps", new javax.swing.ImageIcon(getClass().getResource("/res/tp_warp.png")), pneWarps); // NOI18N - - listTargets.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); - listTargets.addListSelectionListener(new javax.swing.event.ListSelectionListener() { - public void valueChanged(javax.swing.event.ListSelectionEvent evt) { - listTargetsValueChanged(evt); - } - }); - scrTargets.setViewportView(listTargets); - - pneTargetSettings.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1)); - pneTargetSettings.setLayout(new java.awt.GridBagLayout()); - - lblTargetPosX.setText("X Position"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 0; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTargetSettings.add(lblTargetPosX, gridBagConstraints); - - lblTargetPosY.setText("Y Position"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 1; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTargetSettings.add(lblTargetPosY, gridBagConstraints); - - lblTargetUnk4.setText("byte (0x4)"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 2; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTargetSettings.add(lblTargetUnk4, gridBagConstraints); - - lblTargetUnk5.setText("byte (0x5)"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 3; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTargetSettings.add(lblTargetUnk5, gridBagConstraints); - - lblTargetID.setText("Obstacle"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 4; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTargetSettings.add(lblTargetID, gridBagConstraints); - - lblTargetUnk8.setText("byte (0x8)"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 5; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTargetSettings.add(lblTargetUnk8, gridBagConstraints); - - lblTargetUnk9.setText("byte (0x9)"); - lblTargetUnk9.setToolTipText(""); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 6; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTargetSettings.add(lblTargetUnk9, gridBagConstraints); - - lblTargetUnkA.setText("byte (0xA)"); - lblTargetUnkA.setToolTipText(""); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 7; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTargetSettings.add(lblTargetUnkA, gridBagConstraints); - - lblTargetUnkB.setText("byte (0xB)"); - lblTargetUnkB.setToolTipText(""); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 8; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTargetSettings.add(lblTargetUnkB, gridBagConstraints); - - spnTargetPosX.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 0; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTargetSettings.add(spnTargetPosX, gridBagConstraints); - - spnTargetPosY.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 1; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTargetSettings.add(spnTargetPosY, gridBagConstraints); - - spnTargetUnk4.setModel(new javax.swing.SpinnerNumberModel((byte)0, null, null, (byte)1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 2; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTargetSettings.add(spnTargetUnk4, gridBagConstraints); - - spnTargetUnk5.setModel(new javax.swing.SpinnerNumberModel((byte)0, null, null, (byte)1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 3; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTargetSettings.add(spnTargetUnk5, gridBagConstraints); - - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 4; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTargetSettings.add(cmoTargetID, gridBagConstraints); - - spnTargetUnk8.setModel(new javax.swing.SpinnerNumberModel((byte)0, null, null, (byte)1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 5; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTargetSettings.add(spnTargetUnk8, gridBagConstraints); - - spnTargetUnk9.setModel(new javax.swing.SpinnerNumberModel((byte)0, null, null, (byte)1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 6; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTargetSettings.add(spnTargetUnk9, gridBagConstraints); - - spnTargetUnkA.setModel(new javax.swing.SpinnerNumberModel((byte)0, null, null, (byte)1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 7; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTargetSettings.add(spnTargetUnkA, gridBagConstraints); - - spnTargetUnkB.setModel(new javax.swing.SpinnerNumberModel((byte)0, null, null, (byte)1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 8; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneTargetSettings.add(spnTargetUnkB, gridBagConstraints); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 9; - gridBagConstraints.gridwidth = 2; - gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.weighty = 1.0; - pneTargetSettings.add(fillerTarget, gridBagConstraints); - - btnTargetSave.setText("Save"); - btnTargetSave.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - btnTargetSaveActionPerformed(evt); - } - }); - - btnTargetAdd.setText("Add"); - btnTargetAdd.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - btnTargetAddActionPerformed(evt); - } - }); - - btnTargetRemove.setText("Remove"); - btnTargetRemove.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - btnTargetRemoveActionPerformed(evt); - } - }); - - javax.swing.GroupLayout pneTargetsLayout = new javax.swing.GroupLayout(pneTargets); - pneTargets.setLayout(pneTargetsLayout); - pneTargetsLayout.setHorizontalGroup( - pneTargetsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pneTargetsLayout.createSequentialGroup() - .addContainerGap() - .addComponent(scrTargets, javax.swing.GroupLayout.PREFERRED_SIZE, 300, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(pneTargetsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(pneTargetSettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(pneTargetsLayout.createSequentialGroup() - .addComponent(btnTargetSave) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btnTargetAdd) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btnTargetRemove) - .addGap(0, 112, Short.MAX_VALUE))) - .addContainerGap()) - ); - pneTargetsLayout.setVerticalGroup( - pneTargetsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pneTargetsLayout.createSequentialGroup() - .addContainerGap() - .addGroup(pneTargetsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pneTargetsLayout.createSequentialGroup() - .addComponent(pneTargetSettings, javax.swing.GroupLayout.DEFAULT_SIZE, 381, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(pneTargetsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(btnTargetSave) - .addComponent(btnTargetAdd) - .addComponent(btnTargetRemove))) - .addComponent(scrTargets)) - .addContainerGap()) - ); - - tabPane.addTab("Targets", new javax.swing.ImageIcon(getClass().getResource("/res/tp_target.png")), pneTargets); // NOI18N - - listMons.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); - listMons.addListSelectionListener(new javax.swing.event.ListSelectionListener() { - public void valueChanged(javax.swing.event.ListSelectionEvent evt) { - listMonsValueChanged(evt); - } - }); - scrMons.setViewportView(listMons); - - pneMonSettings.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1)); - pneMonSettings.setLayout(new java.awt.GridBagLayout()); - - lblMonDataPosX.setText("X Position"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 0; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneMonSettings.add(lblMonDataPosX, gridBagConstraints); - - lblMonDataPosY.setText("Y Position"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 1; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneMonSettings.add(lblMonDataPosY, gridBagConstraints); - - lblMonDataBehavior.setText("Behavior"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 2; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneMonSettings.add(lblMonDataBehavior, gridBagConstraints); - - lblMonDataUnk5.setText("byte (0x5)"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 3; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneMonSettings.add(lblMonDataUnk5, gridBagConstraints); - - lblMonDataMon.setText("Pokémon"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 4; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneMonSettings.add(lblMonDataMon, gridBagConstraints); - - lblMonDataUnk8.setText("byte (0x8)"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 5; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneMonSettings.add(lblMonDataUnk8, gridBagConstraints); - - lblMonDataUnk9a.setText("byte (0x9)"); - lblMonDataUnk9a.setToolTipText(""); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 6; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneMonSettings.add(lblMonDataUnk9a, gridBagConstraints); - - spnMonDataPosX.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 0; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneMonSettings.add(spnMonDataPosX, gridBagConstraints); - - spnMonDataPosY.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 1; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneMonSettings.add(spnMonDataPosY, gridBagConstraints); - - spnMonDataBehavior.setModel(new javax.swing.SpinnerNumberModel(Short.valueOf((short)0), Short.valueOf((short)0), Short.valueOf((short)255), Short.valueOf((short)1))); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 2; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneMonSettings.add(spnMonDataBehavior, gridBagConstraints); - - spnMonDataUnk5.setModel(new javax.swing.SpinnerNumberModel((byte)0, null, null, (byte)1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 3; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneMonSettings.add(spnMonDataUnk5, gridBagConstraints); - - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 4; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneMonSettings.add(cmoMonDataMon, gridBagConstraints); - - spnMonDataUnk8.setModel(new javax.swing.SpinnerNumberModel((byte)0, null, null, (byte)1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 5; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneMonSettings.add(spnMonDataUnk8, gridBagConstraints); - - spnMonDataUnk9a.setModel(new javax.swing.SpinnerNumberModel((byte)0, null, null, (byte)1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 6; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneMonSettings.add(spnMonDataUnk9a, gridBagConstraints); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 7; - gridBagConstraints.gridwidth = 2; - gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.weighty = 1.0; - pneMonSettings.add(filler2, gridBagConstraints); - - btnMonSave.setText("Save"); - btnMonSave.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - btnMonSaveActionPerformed(evt); - } - }); - - btnMonAdd.setText("Add"); - btnMonAdd.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - btnMonAddActionPerformed(evt); - } - }); - - btnMonRemove.setText("Remove"); - btnMonRemove.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - btnMonRemoveActionPerformed(evt); - } - }); - - javax.swing.GroupLayout pneMonsLayout = new javax.swing.GroupLayout(pneMons); - pneMons.setLayout(pneMonsLayout); - pneMonsLayout.setHorizontalGroup( - pneMonsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pneMonsLayout.createSequentialGroup() - .addContainerGap() - .addComponent(scrMons, javax.swing.GroupLayout.PREFERRED_SIZE, 300, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(pneMonsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(pneMonSettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(pneMonsLayout.createSequentialGroup() - .addComponent(btnMonSave) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btnMonAdd) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btnMonRemove) - .addGap(0, 112, Short.MAX_VALUE))) - .addContainerGap()) - ); - pneMonsLayout.setVerticalGroup( - pneMonsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pneMonsLayout.createSequentialGroup() - .addContainerGap() - .addGroup(pneMonsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pneMonsLayout.createSequentialGroup() - .addComponent(pneMonSettings, javax.swing.GroupLayout.DEFAULT_SIZE, 381, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(pneMonsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(btnMonSave) - .addComponent(btnMonAdd) - .addComponent(btnMonRemove))) - .addComponent(scrMons)) - .addContainerGap()) - ); - - tabPane.addTab("Pokémon", new javax.swing.ImageIcon(getClass().getResource("/res/tp_pokemon.png")), pneMons); // NOI18N - - listNpcs.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); - listNpcs.addListSelectionListener(new javax.swing.event.ListSelectionListener() { - public void valueChanged(javax.swing.event.ListSelectionEvent evt) { - listNpcsValueChanged(evt); - } - }); - scrNpcs.setViewportView(listNpcs); - - pneNpcSettings.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1)); - pneNpcSettings.setLayout(new java.awt.GridBagLayout()); - - lblNpcPosX.setText("X Position"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 0; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneNpcSettings.add(lblNpcPosX, gridBagConstraints); - - lblNpcPosY.setText("Y Position"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 1; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneNpcSettings.add(lblNpcPosY, gridBagConstraints); - - lblNpcDirection.setText("Direction"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 2; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneNpcSettings.add(lblNpcDirection, gridBagConstraints); - - lblNpcNpc.setText("Sprite"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 4; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneNpcSettings.add(lblNpcNpc, gridBagConstraints); - - lblNpcUnk8.setText("byte (0x8)"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 5; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneNpcSettings.add(lblNpcUnk8, gridBagConstraints); - - lblNpcUnk9.setText("byte (0x9)"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 6; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneNpcSettings.add(lblNpcUnk9, gridBagConstraints); - - spnNpcPosX.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 0; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneNpcSettings.add(spnNpcPosX, gridBagConstraints); - - spnNpcPosY.setModel(new javax.swing.SpinnerNumberModel((short)0, null, null, (short)1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 1; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneNpcSettings.add(spnNpcPosY, gridBagConstraints); - - cmoNpcDirection.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "0x00: Down", "0x01: Left", "0x02: Up", "0x03: Right", "0x04: Down(?)", "0x05: Left(?)", "0x06: Up(?)", "0x07: Right(?)", "0x08: Down(?)", "0x09: Left(?)", "0x0A: Up(?)", "0x0B: Right(?)" })); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 2; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneNpcSettings.add(cmoNpcDirection, gridBagConstraints); - - chkNpcIsVisible.setText("Is visible?"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 3; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneNpcSettings.add(chkNpcIsVisible, gridBagConstraints); - - spnNpcID.setModel(new javax.swing.SpinnerNumberModel(0, 0, 255, 1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 4; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneNpcSettings.add(spnNpcID, gridBagConstraints); - - spnNpcUnk8.setModel(new javax.swing.SpinnerNumberModel((byte)0, null, null, (byte)1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 5; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneNpcSettings.add(spnNpcUnk8, gridBagConstraints); - - spnNpcUnk9.setModel(new javax.swing.SpinnerNumberModel((byte)0, null, null, (byte)1)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 6; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneNpcSettings.add(spnNpcUnk9, gridBagConstraints); - - chkNpcUnkA.setText("bool (0xA)"); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 7; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1); - pneNpcSettings.add(chkNpcUnkA, gridBagConstraints); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 8; - gridBagConstraints.gridwidth = 2; - gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.weighty = 1.0; - pneNpcSettings.add(fillerNpc, gridBagConstraints); - - btnNpcSave.setText("Save"); - btnNpcSave.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - btnNpcSaveActionPerformed(evt); - } - }); - - btnNpcAdd.setText("Add"); - btnNpcAdd.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - btnNpcAddActionPerformed(evt); - } - }); - - btnNpcRemove.setText("Remove"); - btnNpcRemove.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - btnNpcRemoveActionPerformed(evt); - } - }); - - javax.swing.GroupLayout pneNpcsLayout = new javax.swing.GroupLayout(pneNpcs); - pneNpcs.setLayout(pneNpcsLayout); - pneNpcsLayout.setHorizontalGroup( - pneNpcsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pneNpcsLayout.createSequentialGroup() - .addContainerGap() - .addComponent(scrNpcs, javax.swing.GroupLayout.PREFERRED_SIZE, 300, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(pneNpcsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(pneNpcSettings, javax.swing.GroupLayout.DEFAULT_SIZE, 310, Short.MAX_VALUE) - .addGroup(pneNpcsLayout.createSequentialGroup() - .addComponent(btnNpcSave) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btnNpcAdd) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btnNpcRemove) - .addGap(0, 0, Short.MAX_VALUE))) - .addContainerGap()) - ); - pneNpcsLayout.setVerticalGroup( - pneNpcsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pneNpcsLayout.createSequentialGroup() - .addContainerGap() - .addGroup(pneNpcsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(scrNpcs, javax.swing.GroupLayout.DEFAULT_SIZE, 419, Short.MAX_VALUE) - .addGroup(pneNpcsLayout.createSequentialGroup() - .addComponent(pneNpcSettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(pneNpcsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(btnNpcSave) - .addComponent(btnNpcAdd) - .addComponent(btnNpcRemove)))) - .addContainerGap()) - ); - - tabPane.addTab("NPCs", new javax.swing.ImageIcon(getClass().getResource("/res/tp_npc.png")), pneNpcs); // NOI18N - - warningLabel.setForeground(new java.awt.Color(255, 0, 0)); - warningLabel.setText(" "); - warningLabel.setToolTipText(""); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); - getContentPane().setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(toolbar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(tabPane) - .addGroup(layout.createSequentialGroup() - .addComponent(warningLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(0, 0, Short.MAX_VALUE))) - .addContainerGap()) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addComponent(toolbar, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(tabPane) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(warningLabel) - .addContainerGap()) - ); - - pack(); - setLocationRelativeTo(null); - }// //GEN-END:initComponents - - private void saveAllButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveAllButtonActionPerformed - saveAll(); - }//GEN-LAST:event_saveAllButtonActionPerformed - - private void listTexInfoValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_listTexInfoValueChanged - int index = listTexInfo.getSelectedIndex(); - - if (index < 0) { - return; - } - - TextureInfo.Entry tex = map.texInfo.entries.get(index); - - spnTexInfoUnk0.setValue(tex.unk0); - spnTexInfoTextureID.setValue(tex.textureID); - spnTexInfoUnk4.setValue(tex.unk4); - spnTexInfoUnk6.setValue(tex.unk6); - }//GEN-LAST:event_listTexInfoValueChanged - - private void btnTexInfoSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnTexInfoSaveActionPerformed - int index = listTexInfo.getSelectedIndex(); - - if (index < 0) { - return; - } - - TextureInfo.Entry tex = map.texInfo.entries.get(index); - - tex.unk0 = (short)spnTexInfoUnk0.getValue(); - tex.textureID = (int)spnTexInfoTextureID.getValue(); - tex.unk4 = (short)spnTexInfoUnk4.getValue(); - tex.unk6 = (short)spnTexInfoUnk6.getValue(); - }//GEN-LAST:event_btnTexInfoSaveActionPerformed - - private void btnTexInfoAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnTexInfoAddActionPerformed - TextureInfo.Entry tex = map.texInfo.new Entry(); - - map.texInfo.entries.add(tex); - - reloadTexInfoUI(); - }//GEN-LAST:event_btnTexInfoAddActionPerformed - - private void btnTexInfoRemoveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnTexInfoRemoveActionPerformed - int index = listTexInfo.getSelectedIndex(); - - if (index < 0) { - return; - } - - map.texInfo.entries.remove(index); - - reloadTexInfoUI(); - }//GEN-LAST:event_btnTexInfoRemoveActionPerformed - - private void listMonsValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_listMonsValueChanged - int index = listMons.getSelectedIndex(); - - if (index < 0) { - return; - } - - MonData.Entry mon = getCurLayer().monData.entries.get(index); - - spnMonDataPosX.setValue(mon.posX); - spnMonDataPosY.setValue(mon.posY); - spnMonDataBehavior.setValue(mon.behavior); - spnMonDataUnk5.setValue(mon.enabled); - cmoMonDataMon.setSelectedIndex(mon.monID); - spnMonDataUnk8.setValue(mon.unk8); - spnMonDataUnk9a.setValue(mon.unk9); - }//GEN-LAST:event_listMonsValueChanged - - private void btnMonSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnMonSaveActionPerformed - int index = listMons.getSelectedIndex(); - - if (index < 0) { - return; - } - - MonData.Entry mon = getCurLayer().monData.entries.get(index); - - mon.posX = (short)spnMonDataPosX.getValue(); - mon.posY = (short)spnMonDataPosY.getValue(); - mon.behavior = (short)spnMonDataBehavior.getValue(); - mon.enabled = (byte)spnMonDataUnk5.getValue(); - mon.monID = cmoMonDataMon.getSelectedIndex(); - mon.unk8 = (byte)spnMonDataUnk8.getValue(); - mon.unk9 = (byte)spnMonDataUnk9a.getValue(); - - modelMons.setElementAt(mon.toString(), index); - }//GEN-LAST:event_btnMonSaveActionPerformed - - private void btnMonAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnMonAddActionPerformed - MonData mons = getCurLayer().monData; - MonData.Entry mon = mons.new Entry(); - - mons.entries.add(mon); - modelMons.addElement(mon.toString()); - - reloadMonUI(); - }//GEN-LAST:event_btnMonAddActionPerformed - - private void btnMonRemoveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnMonRemoveActionPerformed - int index = listMons.getSelectedIndex(); - - if (index < 0) { - return; - } - - getCurLayer().monData.entries.remove(index); - modelMons.remove(index); - - reloadMonUI(); - }//GEN-LAST:event_btnMonRemoveActionPerformed - - private void listNpcsValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_listNpcsValueChanged - int index = listNpcs.getSelectedIndex(); - - if (index < 0) { - return; - } - - NpcData.Entry npc = getCurLayer().npcData.entries.get(index); - - spnNpcPosX.setValue(npc.posX); - spnNpcPosY.setValue(npc.posY); - cmoNpcDirection.setSelectedIndex(npc.direction); - chkNpcIsVisible.setSelected(npc.isVisible); - spnNpcID.setValue(npc.npcID); - spnNpcUnk8.setValue(npc.unk8); - spnNpcUnk9.setValue(npc.unk9); - chkNpcUnkA.setSelected(npc.unkA); - }//GEN-LAST:event_listNpcsValueChanged - - private void btnNpcSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNpcSaveActionPerformed - int index = listNpcs.getSelectedIndex(); - - if (index < 0) { - return; - } - - NpcData.Entry npc = getCurLayer().npcData.entries.get(index); - - npc.posX = (short)spnNpcPosX.getValue(); - npc.posY = (short)spnNpcPosY.getValue(); - npc.direction = (byte)cmoNpcDirection.getSelectedIndex(); - npc.isVisible = chkNpcIsVisible.isSelected(); - npc.npcID = (int)spnNpcID.getValue(); - npc.unk8 = (byte)spnNpcUnk8.getValue(); - npc.unk9 = (byte)spnNpcUnk9.getValue(); - npc.unkA = chkNpcUnkA.isSelected(); - - modelNpcs.setElementAt(npc.toString(), index); - }//GEN-LAST:event_btnNpcSaveActionPerformed - - private void btnNpcAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNpcAddActionPerformed - NpcData npcs = getCurLayer().npcData; - NpcData.Entry npc = npcs.new Entry(); - - npcs.entries.add(npc); - modelNpcs.addElement(npc.toString()); - - reloadNpcUI(); - }//GEN-LAST:event_btnNpcAddActionPerformed - - private void btnNpcRemoveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNpcRemoveActionPerformed - int index = listNpcs.getSelectedIndex(); - - if (index < 0) { - return; - } - - getCurLayer().npcData.entries.remove(index); - modelNpcs.remove(index); - - reloadNpcUI(); - }//GEN-LAST:event_btnNpcRemoveActionPerformed - - private void listTargetsValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_listTargetsValueChanged - int index = listTargets.getSelectedIndex(); - - if (index < 0) { - return; - } - - TargetData.Entry target = getCurLayer().targetData.entries.get(index); - - spnTargetPosX.setValue(target.posX); - spnTargetPosY.setValue(target.posY); - spnTargetUnk4.setValue(target.unk4); - spnTargetUnk5.setValue(target.unk5); - cmoTargetID.setSelectedIndex(target.obstacleID); - spnTargetUnk8.setValue(target.unk8); - spnTargetUnk9.setValue(target.unk9); - spnTargetUnkA.setValue(target.unkA); - spnTargetUnkB.setValue(target.unkB); - }//GEN-LAST:event_listTargetsValueChanged - - private void btnTargetSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnTargetSaveActionPerformed - int index = listTargets.getSelectedIndex(); - - if (index < 0) { - return; - } - - TargetData.Entry target = getCurLayer().targetData.entries.get(index); - - target.posX = (short)spnTargetPosX.getValue(); - target.posY = (short)spnTargetPosY.getValue(); - target.unk4 = (byte)spnTargetUnk4.getValue(); - target.unk5 = (byte)spnTargetUnk5.getValue(); - target.obstacleID = cmoTargetID.getSelectedIndex(); - target.unk8 = (byte)spnTargetUnk8.getValue(); - target.unk9 = (byte)spnTargetUnk9.getValue(); - target.unkA = (byte)spnTargetUnkA.getValue(); - target.unkB = (byte)spnTargetUnkB.getValue(); - - modelTargets.setElementAt(target.toString(), index); - }//GEN-LAST:event_btnTargetSaveActionPerformed - - private void btnTargetAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnTargetAddActionPerformed - TargetData targets = getCurLayer().targetData; - TargetData.Entry target = targets.new Entry(); - - targets.entries.add(target); - modelTargets.addElement(target.toString()); - - reloadTargetUI(); - }//GEN-LAST:event_btnTargetAddActionPerformed - - private void btnTargetRemoveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnTargetRemoveActionPerformed - int index = listTargets.getSelectedIndex(); - - if (index < 0) { - return; - } - - getCurLayer().targetData.entries.remove(index); - modelTargets.remove(index); - - reloadTargetUI(); - }//GEN-LAST:event_btnTargetRemoveActionPerformed - - private void listWarpsValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_listWarpsValueChanged - int index = listWarps.getSelectedIndex(); - - if (index < 0) { - return; - } - - WarpData.Entry warp = getCurLayer().warpData.entries.get(index); - - spnWarpPosX.setValue(warp.posX); - spnWarpPosY.setValue(warp.posY); - spnWarpUnk4.setValue(warp.unk4); - spnWarpUnk6.setValue(warp.unk6); - spnWarpUnk8.setValue(warp.unk8); - }//GEN-LAST:event_listWarpsValueChanged - - private void btnWarpSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnWarpSaveActionPerformed - int index = listWarps.getSelectedIndex(); - - if (index < 0) { - return; - } - - WarpData.Entry warp = getCurLayer().warpData.entries.get(index); - - warp.posX = (short)spnWarpPosX.getValue(); - warp.posY = (short)spnWarpPosY.getValue(); - warp.unk4 = (short)spnWarpUnk4.getValue(); - warp.unk6 = (short)spnWarpUnk6.getValue(); - warp.unk8 = (short)spnWarpUnk8.getValue(); - - modelWarps.setElementAt(warp.toString(), index); - }//GEN-LAST:event_btnWarpSaveActionPerformed - - private void btnWarpAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnWarpAddActionPerformed - WarpData warps = getCurLayer().warpData; - WarpData.Entry warp = warps.new Entry(); - - warps.entries.add(warp); - modelWarps.addElement(warp.toString()); - - reloadWarpUI(); - }//GEN-LAST:event_btnWarpAddActionPerformed - - private void btnWarpRemoveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnWarpRemoveActionPerformed - int index = listWarps.getSelectedIndex(); - - if (index < 0) { - return; - } - - getCurLayer().warpData.entries.remove(index); - modelWarps.remove(index); - - reloadWarpUI(); - }//GEN-LAST:event_btnWarpRemoveActionPerformed - - private void spnSelectedLayerStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spnSelectedLayerStateChanged - reloadLayer(); - }//GEN-LAST:event_spnSelectedLayerStateChanged - - private void btnLayerAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnLayerAddActionPerformed - map.layers.add(new Layer(map)); - updateLayers(); - }//GEN-LAST:event_btnLayerAddActionPerformed - - private void btnLayerDeleteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnLayerDeleteActionPerformed - if (map.layers.size() > 1) { - map.layers.remove((int)spnSelectedLayer.getValue()); - updateLayers(); - } - }//GEN-LAST:event_btnLayerDeleteActionPerformed - - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton btnLayerAdd; - private javax.swing.JButton btnLayerDelete; - private javax.swing.JButton btnMonAdd; - private javax.swing.JButton btnMonRemove; - private javax.swing.JButton btnMonSave; - private javax.swing.JButton btnNpcAdd; - private javax.swing.JButton btnNpcRemove; - private javax.swing.JButton btnNpcSave; - private javax.swing.JButton btnTargetAdd; - private javax.swing.JButton btnTargetRemove; - private javax.swing.JButton btnTargetSave; - private javax.swing.JButton btnTexInfoAdd; - private javax.swing.JButton btnTexInfoRemove; - private javax.swing.JButton btnTexInfoSave; - private javax.swing.JButton btnWarpAdd; - private javax.swing.JButton btnWarpRemove; - private javax.swing.JButton btnWarpSave; - private javax.swing.JCheckBox chkNpcIsVisible; - private javax.swing.JCheckBox chkNpcUnkA; - private javax.swing.JComboBox cmoMonDataMon; - private javax.swing.JComboBox cmoNpcDirection; - private javax.swing.JComboBox cmoTargetID; - private javax.swing.Box.Filler filler1; - private javax.swing.Box.Filler filler2; - private javax.swing.Box.Filler filler3; - private javax.swing.Box.Filler fillerNpc; - private javax.swing.Box.Filler fillerTarget; - private javax.swing.Box.Filler fillerWarp; - private javax.swing.JSeparator jSeparator1; - private javax.swing.JToolBar.Separator jSeparator2; - private javax.swing.JToolBar.Separator jSeparator3; - private javax.swing.JToolBar.Separator jSeparator4; - private javax.swing.JLabel lblMapInfoHeight; - private javax.swing.JLabel lblMapInfoUnk8; - private javax.swing.JLabel lblMapInfoUnkC; - private javax.swing.JLabel lblMapInfoWidth; - private javax.swing.JLabel lblMonDataBehavior; - private javax.swing.JLabel lblMonDataMon; - private javax.swing.JLabel lblMonDataPosX; - private javax.swing.JLabel lblMonDataPosY; - private javax.swing.JLabel lblMonDataUnk5; - private javax.swing.JLabel lblMonDataUnk8; - private javax.swing.JLabel lblMonDataUnk9a; - private javax.swing.JLabel lblNpcDirection; - private javax.swing.JLabel lblNpcNpc; - private javax.swing.JLabel lblNpcPosX; - private javax.swing.JLabel lblNpcPosY; - private javax.swing.JLabel lblNpcUnk8; - private javax.swing.JLabel lblNpcUnk9; - private javax.swing.JLabel lblSelectedLayer; - private javax.swing.JLabel lblTargetID; - private javax.swing.JLabel lblTargetPosX; - private javax.swing.JLabel lblTargetPosY; - private javax.swing.JLabel lblTargetUnk4; - private javax.swing.JLabel lblTargetUnk5; - private javax.swing.JLabel lblTargetUnk8; - private javax.swing.JLabel lblTargetUnk9; - private javax.swing.JLabel lblTargetUnkA; - private javax.swing.JLabel lblTargetUnkB; - private javax.swing.JLabel lblTexInfoID; - private javax.swing.JLabel lblTexInfoUnk0; - private javax.swing.JLabel lblTexInfoUnk2; - private javax.swing.JLabel lblTexInfoUnk4; - private javax.swing.JLabel lblTexInfoUnk6; - private javax.swing.JLabel lblWarpPosX; - private javax.swing.JLabel lblWarpPosY; - private javax.swing.JLabel lblWarpUnk4; - private javax.swing.JLabel lblWarpUnk6; - private javax.swing.JLabel lblWarpUnk8; - private javax.swing.JList listMons; - private javax.swing.JList listNpcs; - private javax.swing.JList listTargets; - private javax.swing.JList listTexInfo; - private javax.swing.JList listWarps; - private javax.swing.JPanel pneMapInfo; - private javax.swing.JPanel pneMonSettings; - private javax.swing.JPanel pneMons; - private javax.swing.JPanel pneNpcSettings; - private javax.swing.JPanel pneNpcs; - private javax.swing.JPanel pneTargetSettings; - private javax.swing.JPanel pneTargets; - private javax.swing.JPanel pneTexInfo; - private javax.swing.JPanel pneTexInfoSettings; - private javax.swing.JPanel pneWarpSettings; - private javax.swing.JPanel pneWarps; - private javax.swing.JButton saveAllButton; - private javax.swing.JScrollPane scrMons; - private javax.swing.JScrollPane scrNpcs; - private javax.swing.JScrollPane scrTargets; - private javax.swing.JScrollPane scrTexInfo; - private javax.swing.JScrollPane scrWarps; - private javax.swing.JSpinner spnMapInfoHeight; - private javax.swing.JSpinner spnMapInfoUnk8; - private javax.swing.JSpinner spnMapInfoUnkC; - private javax.swing.JSpinner spnMapInfoWidth; - private javax.swing.JSpinner spnMonDataBehavior; - private javax.swing.JSpinner spnMonDataPosX; - private javax.swing.JSpinner spnMonDataPosY; - private javax.swing.JSpinner spnMonDataUnk5; - private javax.swing.JSpinner spnMonDataUnk8; - private javax.swing.JSpinner spnMonDataUnk9a; - private javax.swing.JSpinner spnNpcID; - private javax.swing.JSpinner spnNpcPosX; - private javax.swing.JSpinner spnNpcPosY; - private javax.swing.JSpinner spnNpcUnk8; - private javax.swing.JSpinner spnNpcUnk9; - private javax.swing.JSpinner spnSelectedLayer; - private javax.swing.JSpinner spnTargetPosX; - private javax.swing.JSpinner spnTargetPosY; - private javax.swing.JSpinner spnTargetUnk4; - private javax.swing.JSpinner spnTargetUnk5; - private javax.swing.JSpinner spnTargetUnk8; - private javax.swing.JSpinner spnTargetUnk9; - private javax.swing.JSpinner spnTargetUnkA; - private javax.swing.JSpinner spnTargetUnkB; - private javax.swing.JSpinner spnTexInfoTextureID; - private javax.swing.JSpinner spnTexInfoUnk0; - private javax.swing.JSpinner spnTexInfoUnk2; - private javax.swing.JSpinner spnTexInfoUnk4; - private javax.swing.JSpinner spnTexInfoUnk6; - private javax.swing.JSpinner spnWarpPosX; - private javax.swing.JSpinner spnWarpPosY; - private javax.swing.JSpinner spnWarpUnk4; - private javax.swing.JSpinner spnWarpUnk6; - private javax.swing.JSpinner spnWarpUnk8; - private javax.swing.JTabbedPane tabPane; - protected javax.swing.JToolBar toolbar; - protected javax.swing.JLabel warningLabel; - // End of variables declaration//GEN-END:variables -} \ No newline at end of file diff --git a/src/com/aurum/almia/util/ArrayUtils.java b/src/com/aurum/almia/util/ArrayUtils.java new file mode 100644 index 0000000..5811b24 --- /dev/null +++ b/src/com/aurum/almia/util/ArrayUtils.java @@ -0,0 +1,545 @@ +/* + * Copyright (C) 2018 Aurum + * + * AlmiaE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AlmiaE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.aurum.almia.util; + +public final class ArrayUtils { + private ArrayUtils() {} + + /** + * Returns the next index of the specified value, starting from the given offset. + * @param arr the array + * @param val the value to be found + * @param off the starting offset + * @return the next index of the specified value. -1 if the value was not found. + */ + public static int indexOf(byte[] arr, byte val, int off) { + while(off < arr.length) { + if (arr[off] == val) + return off; + off++; + } + + return -1; + } + + /** + * Returns the next index of the specified value, starting from the given offset. + * @param arr the array + * @param val the value to be found + * @param off the starting offset + * @return the next index of the specified value. -1 if the value was not found. + */ + public static int indexOf(short[] arr, short val, int off) { + while(off < arr.length) { + if (arr[off] == val) + return off; + off++; + } + + return -1; + } + + /** + * Returns the next index of the specified value, starting from the given offset. + * @param arr the array + * @param val the value to be found + * @param off the starting offset + * @return the next index of the specified value. -1 if the value was not found. + */ + public static int indexOf(int[] arr, int val, int off) { + while(off < arr.length) { + if (arr[off] == val) + return off; + off++; + } + + return -1; + } + + /** + * Returns the next index of the specified value, starting from the given offset. + * @param arr the array + * @param val the value to be found + * @param off the starting offset + * @return the next index of the specified value. -1 if the value was not found. + */ + public static int indexOf(long[] arr, long val, int off) { + while(off < arr.length) { + if (arr[off] == val) + return off; + off++; + } + + return -1; + } + + /** + * Returns the next index of the specified value, starting from the given offset. + * @param arr the array + * @param val the value to be found + * @param off the starting offset + * @return the next index of the specified value. -1 if the value was not found. + */ + public static int indexOf(float[] arr, float val, int off) { + while(off < arr.length) { + if (arr[off] == val) + return off; + off++; + } + + return -1; + } + + /** + * Returns the next index of the specified value, starting from the given offset. + * @param arr the array + * @param val the value to be found + * @param off the starting offset + * @return the next index of the specified value. -1 if the value was not found. + */ + public static int indexOf(double[] arr, double val, int off) { + while(off < arr.length) { + if (arr[off] == val) + return off; + off++; + } + + return -1; + } + + /** + * Returns the next index of the specified value, starting from the given offset. + * @param arr the array + * @param val the value to be found + * @param off the starting offset + * @return the next index of the specified value. -1 if the value was not found. + */ + public static int indexOf(boolean[] arr, boolean val, int off) { + while(off < arr.length) { + if (arr[off] == val) + return off; + off++; + } + + return -1; + } + + /** + * Returns the next index of the specified value, starting from the given offset. + * @param arr the array + * @param val the value to be found + * @param off the starting offset + * @return the next index of the specified value. -1 if the value was not found. + */ + public static int indexOf(char[] arr, char val, int off) { + while(off < arr.length) { + if (arr[off] == val) + return off; + off++; + } + + return -1; + } + + /** + * Returns the next index of the specified value, starting from the given offset. + * @param arr the array + * @param val the value to be found + * @param off the starting offset + * @return the next index of the specified value. -1 if the value was not found. + */ + public static int indexOf(Object[] arr, Object val, int off) { + while(off < arr.length) { + if (arr[off] == val) + return off; + off++; + } + + return -1; + } + + /** + * Creates a sequence of the specified value with a length of {@code len} elements. + * @param len the length of the sequence + * @param val the value + * @return the sequence as an array. + */ + public static byte[] sequence(int len, byte val) { + byte[] sequence = new byte[len]; + for (int i = 0 ; i < len ; i++) + sequence[i] = val; + + return sequence; + } + + /** + * Creates a sequence of the specified value with a length of {@code len} elements. + * @param len the length of the sequence + * @param val the value + * @return the sequence as an array. + */ + public static short[] sequence(int len, short val) { + short[] sequence = new short[len]; + for (int i = 0 ; i < len ; i++) + sequence[i] = val; + + return sequence; + } + + /** + * Creates a sequence of the specified value with a length of {@code len} elements. + * @param len the length of the sequence + * @param val the value + * @return the sequence as an array. + */ + public static int[] sequence(int len, int val) { + int[] sequence = new int[len]; + for (int i = 0 ; i < len ; i++) + sequence[i] = val; + + return sequence; + } + + /** + * Creates a sequence of the specified value with a length of {@code len} elements. + * @param len the length of the sequence + * @param val the value + * @return the sequence as an array. + */ + public static long[] sequence(int len, long val) { + long[] sequence = new long[len]; + for (int i = 0 ; i < len ; i++) + sequence[i] = val; + + return sequence; + } + + /** + * Creates a sequence of the specified value with a length of {@code len} elements. + * @param len the length of the sequence + * @param val the value + * @return the sequence as an array. + */ + public static float[] sequence(int len, float val) { + float[] sequence = new float[len]; + for (int i = 0 ; i < len ; i++) + sequence[i] = val; + + return sequence; + } + + /** + * Creates a sequence of the specified value with a length of {@code len} elements. + * @param len the length of the sequence + * @param val the value + * @return the sequence as an array. + */ + public static double[] sequence(int len, double val) { + double[] sequence = new double[len]; + for (int i = 0 ; i < len ; i++) + sequence[i] = val; + + return sequence; + } + + /** + * Creates a sequence of the specified value with a length of {@code len} elements. + * @param len the length of the sequence + * @param val the value + * @return the sequence as an array. + */ + public static boolean[] sequence(int len, boolean val) { + boolean[] sequence = new boolean[len]; + for (int i = 0 ; i < len ; i++) + sequence[i] = val; + + return sequence; + } + + /** + * Creates a sequence of the specified value with a length of {@code len} elements. + * @param len the length of the sequence + * @param val the value + * @return the sequence as an array. + */ + public static char[] sequence(int len, char val) { + char[] sequence = new char[len]; + for (int i = 0 ; i < len ; i++) + sequence[i] = val; + + return sequence; + } + + /** + * Creates a sequence of the specified value with a length of {@code len} elements. + * @param len the length of the sequence + * @param val the value + * @return the sequence as an array. + */ + public static Object[] sequence(int len, Object val) { + Object[] sequence = new Object[len]; + for (int i = 0 ; i < len ; i++) + sequence[i] = val; + + return sequence; + } + + /** + * Reverses the order of the elements in the given array. + * @param arr the array + * @return the array with the order of its elements reversed. + */ + public static byte[] reverse(byte[] arr) { + byte[] reversed = new byte[arr.length]; + for (int l = 0, r = arr.length - 1 ; l <= arr.length && r >= 0 ; l++, r--) + reversed[l] = arr[r]; + + return reversed; + } + + /** + * Reverses the order of the elements in the given array. + * @param arr the array + * @return the array with the order of its elements reversed. + */ + public static short[] reverse(short[] arr) { + short[] reversed = new short[arr.length]; + for (int l = 0, r = arr.length - 1 ; l <= arr.length && r >= 0 ; l++, r--) + reversed[l] = arr[r]; + + return reversed; + } + + /** + * Reverses the order of the elements in the given array. + * @param arr the array + * @return the array with the order of its elements reversed. + */ + public static int[] reverse(int[] arr) { + int[] reversed = new int[arr.length]; + for (int l = 0, r = arr.length - 1 ; l <= arr.length && r >= 0 ; l++, r--) + reversed[l] = arr[r]; + + return reversed; + } + + /** + * Reverses the order of the elements in the given array. + * @param arr the array + * @return the array with the order of its elements reversed. + */ + public static long[] reverse(long[] arr) { + long[] reversed = new long[arr.length]; + + for (int l = 0, r = arr.length - 1 ; l <= arr.length && r >= 0 ; l++, r--) + reversed[l] = arr[r]; + + return reversed; + } + + /** + * Reverses the order of the elements in the given array. + * @param arr the array + * @return the array with the order of its elements reversed. + */ + public static float[] reverse(float[] arr) { + float[] reversed = new float[arr.length]; + for (int l = 0, r = arr.length - 1 ; l <= arr.length && r >= 0 ; l++, r--) + reversed[l] = arr[r]; + + return reversed; + } + + /** + * Reverses the order of the elements in the given array. + * @param arr the array + * @return the array with the order of its elements reversed. + */ + public static double[] reverse(double[] arr) { + double[] reversed = new double[arr.length]; + for (int l = 0, r = arr.length - 1 ; l <= arr.length && r >= 0 ; l++, r--) + reversed[l] = arr[r]; + + return reversed; + } + + /** + * Reverses the order of the elements in the given array. + * @param arr the array + * @return the array with the order of its elements reversed. + */ + public static boolean[] reverse(boolean[] arr) { + boolean[] reversed = new boolean[arr.length]; + for (int l = 0, r = arr.length - 1 ; l <= arr.length && r >= 0 ; l++, r--) + reversed[l] = arr[r]; + + return reversed; + } + + /** + * Reverses the order of the elements in the given array. + * @param arr the array + * @return the array with the order of its elements reversed. + */ + public static char[] reverse(char[] arr) { + char[] reversed = new char[arr.length]; + for (int l = 0, r = arr.length - 1 ; l <= arr.length && r >= 0 ; l++, r--) + reversed[l] = arr[r]; + + return reversed; + } + + /** + * Reverses the order of the elements in the given array. + * @param arr the array + * @return the array with the order of its elements reversed. + */ + public static Object[] reverse(Object[] arr) { + Object[] reversed = new Object[arr.length]; + for (int l = 0, r = arr.length - 1 ; l <= arr.length && r >= 0 ; l++, r--) + reversed[l] = arr[r]; + + return reversed; + } + + /** + * Checks if the array contains the specified element. + * @param arr the array + * @param val the checked element + * @return true if the array contains the element. + */ + public static boolean arrayContains(byte[] arr, byte val) { + for (byte i : arr) + if (i == val) + return true; + + return false; + } + + /** + * Checks if the array contains the specified element. + * @param arr the array + * @param val the checked element + * @return true if the array contains the element. + */ + public static boolean arrayContains(short[] arr, short val) { + for (int i : arr) + if (i == val) + return true; + + return false; + } + + /** + * Checks if the array contains the specified element. + * @param arr the array + * @param val the checked element + * @return true if the array contains the element. + */ + public static boolean arrayContains(int[] arr, int val) { + for (int i : arr) + if (i == val) + return true; + + return false; + } + + /** + * Checks if the array contains the specified element. + * @param arr the array + * @param val the checked element + * @return true if the array contains the element. + */ + public static boolean arrayContains(long[] arr, long val) { + for (long i : arr) + if (i == val) + return true; + + return false; + } + + /** + * Checks if the array contains the specified element. + * @param arr the array + * @param val the checked element + * @return true if the array contains the element. + */ + public static boolean arrayContains(float[] arr, float val) { + for (float i : arr) + if (i == val) + return true; + + return false; + } + + /** + * Checks if the array contains the specified element. + * @param arr the array + * @param val the checked element + * @return true if the array contains the element. + */ + public static boolean arrayContains(double[] arr, double val) { + for (double i : arr) + if (i == val) + return true; + + return false; + } + + /** + * Checks if the array contains the specified element. + * @param arr the array + * @param val the checked element + * @return true if the array contains the element. + */ + public static boolean arrayContains(boolean[] arr, boolean val) { + for (boolean i : arr) + if (i == val) + return true; + + return false; + } + + /** + * Checks if the array contains the specified element. + * @param arr the array + * @param val the checked element + * @return true if the array contains the element. + */ + public static boolean arrayContains(char[] arr, char val) { + for (char i : arr) + if (i == val) + return true; + + return false; + } + + /** + * Checks if the array contains the specified element. + * @param arr the array + * @param val the checked element + * @return true if the array contains the element. + */ + public static boolean arrayContains(Object[] arr, Object val) { + for (Object i : arr) + if (i == val) + return true; + + return false; + } +} \ No newline at end of file diff --git a/src/com/aurum/almia/util/BitConverter.java b/src/com/aurum/almia/util/BitConverter.java new file mode 100644 index 0000000..fa0de15 --- /dev/null +++ b/src/com/aurum/almia/util/BitConverter.java @@ -0,0 +1,162 @@ +/* + * Copyright (C) 2018 Aurum + * + * AlmiaE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AlmiaE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.aurum.almia.util; + +import java.math.BigInteger; +import java.nio.ByteOrder; + +public final class BitConverter { + private BitConverter() {} + + private static byte[] createBuffer(byte[] data, ByteOrder endian, int offset, int size) { + byte[] bytes = new byte[size]; + + for (int i = 0 ; i < size ; i++) + bytes[i] = data[i + offset]; + + return endian == ByteOrder.LITTLE_ENDIAN ? ArrayUtils.reverse(bytes) : bytes; + } + + public static short toShort(byte[] data, ByteOrder endian, int offset) { + byte[] bs = createBuffer(data, endian, offset, Short.BYTES); + + return (short)( + ((bs[0] & 0xFF) << 8) | + (bs[1] & 0xFF) + ); + } + + public static int toUnsignedShort(byte[] data, ByteOrder endian, int offset) { + return (int)(toShort(data, endian, offset) & 0xFFFF); + } + + public static int toInt(byte[] data, ByteOrder endian, int offset) { + byte[] bs = createBuffer(data, endian, offset, Integer.BYTES); + + return ( + ((bs[0] & 0xFF) << 24) | + ((bs[1] & 0xFF) << 16) | + ((bs[2] & 0xFF) << 8) | + (bs[3] & 0xFF) + ); + } + + public static long toUnsignedInt(byte[] data, ByteOrder endian, int offset) { + return (long)(toInt(data, endian, offset) & 0xFFFFFFFF); + } + + public static int toInt24(byte[] data, ByteOrder endian, int offset) { + byte[] bs = createBuffer(data, endian, offset, 3); + + return ( + ((bs[0] & 0xFF) << 16) | + ((bs[1] & 0xFF) << 8) | + (bs[2] & 0xFF) + ); + } + + public static int toUnsignedInt24(byte[] data, ByteOrder endian, int offset) { + return toInt24(data, endian, offset) & 0xFFFFFF; + } + + public static long toLong(byte[] data, ByteOrder endian, int offset) { + byte[] bs = createBuffer(data, endian, offset, Long.BYTES); + + return ( + ((long) (bs[0] & 0xFF) << 56) | + ((long) (bs[1] & 0xFF) << 48) | + ((long) (bs[2] & 0xFF) << 40) | + ((long) (bs[3] & 0xFF) << 32) | + ((long) (bs[4] & 0xFF) << 24) | + ((long) (bs[5] & 0xFF) << 16) | + ((long) (bs[6] & 0xFF) << 8) | + (long) (bs[7] & 0xFF) + ); + } + + public static BigInteger toUnsignedLong(byte[] data, ByteOrder endian, int offset) { + return new BigInteger(createBuffer(data, endian, offset, Long.BYTES)); + } + + public static float toFloat(byte[] data, ByteOrder endian, int offset) { + return Float.intBitsToFloat(toInt(data, endian, offset)); + } + + public static double toDouble(byte[] data, ByteOrder endian, int offset) { + return Double.longBitsToDouble(toLong(data, endian, offset)); + } + + public static char toChar(byte[] data, ByteOrder endian, int offset) { + return (char)toShort(data, endian, offset); + } + + public static boolean toBoolean(byte[] data, int offset) { + return data[offset] != 0; + } + + public static byte[] getBytes(short val, ByteOrder endian) { + byte[] bs = new byte[Short.BYTES]; + + bs[0] = (byte)((val >> 8) & 0xFF); + bs[1] = (byte) (val & 0xFF); + + return endian == ByteOrder.LITTLE_ENDIAN ? ArrayUtils.reverse(bs) : bs; + } + + public static byte[] getBytes(int val, ByteOrder endian) { + byte[] bs = new byte[Integer.BYTES]; + + bs[0] = (byte)((val >> 24) & 0xFF); + bs[1] = (byte)((val >> 16) & 0xFF); + bs[2] = (byte)((val >> 8) & 0xFF); + bs[3] = (byte) (val & 0xFF); + + return endian == ByteOrder.LITTLE_ENDIAN ? ArrayUtils.reverse(bs) : bs; + } + + public static byte[] getBytes(long val, ByteOrder endian) { + byte[] bs = new byte[Long.BYTES]; + + bs[0] = (byte)((val >> 56) & 0xFF); + bs[1] = (byte)((val >> 48) & 0xFF); + bs[2] = (byte)((val >> 40) & 0xFF); + bs[3] = (byte)((val >> 32) & 0xFF); + bs[4] = (byte)((val >> 24) & 0xFF); + bs[5] = (byte)((val >> 16) & 0xFF); + bs[6] = (byte)((val >> 8) & 0xFF); + bs[7] = (byte) (val & 0xFF); + + return endian == ByteOrder.LITTLE_ENDIAN ? ArrayUtils.reverse(bs) : bs; + } + + public static byte[] getBytes(float val, ByteOrder endian) { + return getBytes(Float.floatToIntBits(val), endian); + } + + public static byte[] getBytes(double val, ByteOrder endian) { + return getBytes(Double.doubleToLongBits(val), endian); + } + + public static byte[] getBytes(char val, ByteOrder endian) { + return getBytes((short)val, endian); + } + + public static byte[] getBytes(boolean val) { + return new byte[] { (byte)(val ? 1 : 0) }; + } +} \ No newline at end of file diff --git a/src/com/aurum/almia/ByteBuffer.java b/src/com/aurum/almia/util/ByteBuffer.java similarity index 89% rename from src/com/aurum/almia/ByteBuffer.java rename to src/com/aurum/almia/util/ByteBuffer.java index 80566d6..ca61431 100644 --- a/src/com/aurum/almia/ByteBuffer.java +++ b/src/com/aurum/almia/util/ByteBuffer.java @@ -15,49 +15,73 @@ * along with this program. If not, see . */ -package com.aurum.almia; +package com.aurum.almia.util; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.ByteOrder; import java.nio.charset.Charset; import java.util.Arrays; import java.util.HashMap; public class ByteBuffer { - public static final Charset CHARSET = Charset.forName("UTF-8"); + public static final String STANDARD_CHARSET = "UTF-8"; - //-------------------------------------------------------------------------- + public static ByteBuffer read(String filepath) throws IOException { + return read(new File(filepath)); + } + + public static ByteBuffer read(File file) throws IOException { + return read(new FileInputStream(file)); + } + + public static ByteBuffer read(InputStream in) throws IOException { + byte[] raw = new byte[in.available()]; + in.read(raw); + in.close(); + return new ByteBuffer(raw); + } + + public static void write(ByteBuffer buffer, String filepath) throws IOException { + write(buffer, new File(filepath)); + } + + public static void write(ByteBuffer buffer, File file) throws IOException { + write(buffer, new FileOutputStream(file)); + } + + public static void write(ByteBuffer buffer, OutputStream out) throws IOException { + out.write(buffer.getBuffer()); + out.flush(); + out.close(); + } protected byte[] buffer; protected int position; protected ByteOrder endianness; protected HashMap marks; - public ByteBuffer() { - this.buffer = new byte[0]; - this.position = 0; - this.endianness = ByteOrder.BIG_ENDIAN; - this.marks = new HashMap(); - } - public ByteBuffer(int length) { - this(); - this.buffer = new byte[length]; + this(new byte[length], ByteOrder.nativeOrder()); } public ByteBuffer(int length, ByteOrder endian) { - this(); - this.buffer = new byte[length]; - this.endianness = endian; + this(new byte[length], endian); } public ByteBuffer(byte[] bytes) { - this(); - this.buffer = bytes; + this(bytes, ByteOrder.nativeOrder()); } public ByteBuffer(byte[] bytes, ByteOrder endian) { - this(); this.buffer = bytes; + this.position = 0; this.endianness = endian; + this.marks = new HashMap(); } /** @@ -75,7 +99,7 @@ public class ByteBuffer { */ @Override public int hashCode() { - return Arrays.hashCode(buffer); + return Arrays.hashCode(buffer) ^ position; } /** @@ -190,9 +214,6 @@ public class ByteBuffer { * @return the index. */ public int indexOf(byte val, int off) { - if (off < 0) - throw new IllegalArgumentException("offset " + off + " is < than 0"); - while(off < buffer.length) { if (buffer[off] == val) return off; @@ -227,9 +248,6 @@ public class ByteBuffer { * @return the same value as {@code pos}. */ public int addMark(String name, int pos) { - if (pos < 0) - throw new IllegalArgumentException("position " + pos + " < 0"); - return marks.containsKey(name) ? marks.replace(name, pos) : marks.put(name, pos); } @@ -255,8 +273,6 @@ public class ByteBuffer { * @param size the new size */ public void allocate(int size) { - if (size < 0) - throw new IllegalArgumentException("new size " + size + " < 0"); buffer = new byte[size]; position = 0; marks.clear(); @@ -282,7 +298,7 @@ public class ByteBuffer { throw new IllegalArgumentException("end index > start index"); for ( ; start <= end ; start++) - buffer[start] = (byte) 0x0; + buffer[start] = (byte)0x0; } /** @@ -290,8 +306,6 @@ public class ByteBuffer { * @param addsize the length that is added to the current length. */ public void extend(int addsize) { - if (addsize < 0) - throw new IllegalArgumentException("addsize " + addsize + " < 0"); if (addsize == 0) return; @@ -306,9 +320,6 @@ public class ByteBuffer { * @return an array of bytes. */ public byte[] readBytes(int len) { - if (len < 0) - throw new IllegalArgumentException("negative length " + len); - byte[] b = new byte[len]; if (remaining() >= len && len != 0) { for (int c = 0 ; c < len ; c++) @@ -405,7 +416,7 @@ public class ByteBuffer { * @return the unsigned 16-bit value. */ public int readUnsignedShort() { - return (remaining() >= Short.BYTES) ? BitConverter.toUShort(readBytes(Short.BYTES), endianness, 0) : 0; + return (remaining() >= Short.BYTES) ? BitConverter.toUnsignedShort(readBytes(Short.BYTES), endianness, 0) : 0; } /** @@ -441,7 +452,7 @@ public class ByteBuffer { * @return the unsigned 32-bit value. */ public long readUnsignedInt() { - return (remaining() >= Integer.BYTES) ? BitConverter.toUInt(readBytes(Integer.BYTES), endianness, 0) : 0; + return (remaining() >= Integer.BYTES) ? BitConverter.toUnsignedInt(readBytes(Integer.BYTES), endianness, 0) : 0; } /** @@ -513,7 +524,7 @@ public class ByteBuffer { * @return the Unicode char. */ public char readCharacter() { - return (remaining() >= Character.BYTES) ? BitConverter.toCharacter(readBytes(Character.BYTES), endianness, 0) : 0; + return (remaining() >= Character.BYTES) ? BitConverter.toChar(readBytes(Character.BYTES), endianness, 0) : 0; } /** @@ -550,8 +561,8 @@ public class ByteBuffer { * @param len the length of the String * @return the String. */ - public String readString(Charset charset, int len) { - return (len > 0) ? new String(readBytes(len), charset) : new String(); + public String readString(String charset, int len) { + return (len > 0) ? new String(readBytes(len), Charset.forName(charset)) : ""; } /** @@ -561,7 +572,7 @@ public class ByteBuffer { * @param len the length of the String * @return the String. */ - public String readStringAt(int pos, Charset charset, int len) { + public String readStringAt(int pos, String charset, int len) { seek(pos); return readString(charset, len); } @@ -572,7 +583,7 @@ public class ByteBuffer { * @return the String. */ public String readString(int len) { - return readString(CHARSET, len); + return readString(STANDARD_CHARSET, len); } /** @@ -591,7 +602,7 @@ public class ByteBuffer { * @param charset * @return A string. */ - public String readString(Charset charset) { + public String readString(String charset) { return readString(charset, indexOf((byte) 0, position) - position); } @@ -601,7 +612,7 @@ public class ByteBuffer { * @param charset * @return A string. */ - public String readStringAt(int pos, Charset charset) { + public String readStringAt(int pos, String charset) { seek(pos); return readString(charset); } @@ -611,7 +622,7 @@ public class ByteBuffer { * @return A string. */ public String readString() { - return readString(CHARSET); + return readString(STANDARD_CHARSET); } /** @@ -624,6 +635,15 @@ public class ByteBuffer { return readString(); } + public String readMagic() { + return readString("ASCII", 4); + } + + public String readMagicAt(int pos) { + seek(pos); + return readMagic(); + } + /** * Writes the content of the specified byte array to this buffer. * @param val the byte array @@ -851,9 +871,9 @@ public class ByteBuffer { * @param charset the charset * @return the offset to this String. */ - public int writeString(String val, Charset charset) { + public int writeString(String val, String charset) { int pos = position; - writeBytes(val.getBytes(charset)); + writeBytes(val.getBytes(Charset.forName(charset))); writeByte((byte) 0x0); return pos; } @@ -865,7 +885,7 @@ public class ByteBuffer { * @param charset the charset * @return the offset to this String. */ - public int writeStringAt(int pos, String val, Charset charset) { + public int writeStringAt(int pos, String val, String charset) { seek(pos); return writeString(val, charset); } @@ -876,7 +896,7 @@ public class ByteBuffer { * @return the offset to this String. */ public int writeString(String val) { - return writeString(val, CHARSET); + return writeString(val, STANDARD_CHARSET); } /** @@ -889,4 +909,15 @@ public class ByteBuffer { seek(pos); return writeString(val); } + + public int writeMagic(String val) { + int pos = position; + writeBytes(val.getBytes(Charset.forName("ASCII"))); + return pos; + } + + public int writeMagicAt(int pos, String val) { + seek(pos); + return writeMagic(val); + } } \ No newline at end of file diff --git a/src/com/aurum/almia/util/IOHelper.java b/src/com/aurum/almia/util/IOHelper.java new file mode 100644 index 0000000..3703777 --- /dev/null +++ b/src/com/aurum/almia/util/IOHelper.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2018 Aurum + * + * AlmiaE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AlmiaE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.aurum.almia.util; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +public final class IOHelper { + private IOHelper() {} + + public static byte[] read(String filename) throws IOException { + return read(new File(filename)); + } + + public static byte[] read(File file) throws IOException { + return read(new FileInputStream(file)); + } + + public static byte[] read(InputStream in) throws IOException { + byte[] data = new byte[in.available()]; + in.read(data); + in.close(); + return data; + } + + public static void write(byte[] data, String filename) throws IOException { + write(data, new File(filename)); + } + + public static void write(byte[] data, File file) throws IOException { + write(data, new FileOutputStream(file)); + } + + public static void write(byte[] data, OutputStream out) throws IOException { + out.write(data); + out.flush(); + out.close(); + } +} \ No newline at end of file diff --git a/src/com/aurum/almia/util/RenderHelper.java b/src/com/aurum/almia/util/RenderHelper.java new file mode 100644 index 0000000..d5a369e --- /dev/null +++ b/src/com/aurum/almia/util/RenderHelper.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2018 Aurum + * + * AlmiaE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AlmiaE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.aurum.almia.util; + +import java.awt.Color; +import java.awt.Graphics; + +public final class RenderHelper { + private RenderHelper() {} + + public static void drawBox(Graphics g, int x, int y, int w, int h, Color out, Color in, boolean aligned) { + if (aligned) { + x -= w / 2; + y -= h / 2; + } + + g.setColor(out); + g.drawRect(x, y, w, h); + g.setColor(in); + g.fillRect(x + 1, y + 1, w - 1, h - 1); + } +} \ No newline at end of file diff --git a/src/res/icon.png b/src/res/icon.png index 9b987faf963daa868f24e746ca7121e6ece059cb..bfcfaf36d33ecbeea2a71dcfa6ac6a21d4be08d5 100644 GIT binary patch delta 605 zcmV-j0;2t%2e1W@Bnkm@Qb$4nuFf3kks%uj!vFvd!vV){sAQ2wCw~GUNkl8Zv+jcw5L25T^S%3vh6rh6U?DqSS&% zbj_?lOvL|PiG7#Qj9}BR6OaKS+4~Wg~6eytvhp372R=^$60K$z=f+a3cYw;u8F|Mml&WJ-b<1fCb!H0E>%~^v`!G r3$TDc6!0I)0xTdCuvFyXau`&Y4#EKyC`y2lQzw4|8%ab#RCr$Pmoai0K@deb0!QEo z3LW|ggbp1lROpZ+D0HY$A)!JYgHXp%X4gQ!spfAl%pzDVJM*hvu)DL}|NjDHFPfT~ zn#R=j$Le3=akVVMUYn0*R{(*|1>^bd_rspgKkEapn*+Pu0lUvRooj2SBMhohh39u) z0ET}c2LOUe5CY_9`X0!8%5u5f!#ps1w^y|VBhPuyVqC6PfEEC1!0xk{AfF$9 zk06-BbKcWpj&>J-?=Kh83a~-?V+1Tv2m*h;gb2Ijaf%Pk;qeTF(`nZtj4 z-P^NA=PRv%OABCtEaSp#UwS?;OwVTKBX9h8BPr;LS($8Bmy~L}yFLdj*}( zf2J%}xfl>F_vGbsD}avcE%S52wH6cpal?6KjMAGa9;y6SMPswp8aNP zJo)g6>IzU{1cMq-3+Tg#^yqxOZ#KS9YOuNjkQ$9bM)*)3z5+JB^VPH4(-Fo95QUBK zp*?p~07jK4R0%rA)=XDw7@}|`=p0)!JzMd1_nxT&eBX#_16 Z{{csUOSiljW<3A^002ovPDHLkV1gnOc-H^` diff --git a/src/res/lists/npcs.txt b/src/res/lists/npcs.txt new file mode 100644 index 0000000..26f7831 --- /dev/null +++ b/src/res/lists/npcs.txt @@ -0,0 +1,256 @@ +Nothing +Father +Mother +Sister +Ms. April +Mr. Lamont +Kincaid (Teacher) +Kincaid (Dim Sun) +unknown +unknown +unknown +unknown +Keith (Student) +Keith (Ranger) +Isaac (Student) +Isaac (Scientist) +unknown +unknown +Barlow +Crawford +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +Regigigas +Palkia +Dialga +Tangrowth +Dusknoir +Rhyperior +Drapion +Abomasnow +Aggron +Spiritomb +Mismagius +Infernape +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown \ No newline at end of file diff --git a/src/res/lists/obstacles.txt b/src/res/lists/obstacles.txt index 07b18be..6f8a59e 100644 --- a/src/res/lists/obstacles.txt +++ b/src/res/lists/obstacles.txt @@ -1,4 +1,4 @@ -NONE +Nothing Oddish Weed Gloom Flower Vileplume Flower @@ -44,7 +44,7 @@ Steel Frame Large Cage Fallen Log Rope -NONE +Burning Tree Solid Ice Ice Block Burning Log @@ -52,11 +52,11 @@ Fiery Wall Hot Boulder Fallen Leaves Soft Soil -NONE +Metal Crate Torch Torch -NONE -NONE +unknown +unknown Trap Power Generator Power Generator @@ -73,9 +73,9 @@ Vine Forest Tree Forest Tree Snow Tree -NONE -NONE -NONE +unknown +unknown +unknown Electric Door Electric Door Electric Door @@ -90,30 +90,44 @@ Rock Statue Pledge Stone Pledge Stone Ice Statue -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE +unknown +unknown +unknown +unknown +unknown +Temple Platform +unknown +unknown +unknown +Trampline Plant +Icicle +unknown +unknown +unknown +unknown +unknown Ice Wall Rotten Log -NONE -NONE -NONE -NONE -NONE -NONE +Ice Platform +unknown +unknown +Quicksand Pit +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown Wire Fence Kingston Valve Yellow Switch @@ -125,244 +139,244 @@ Circuit Ball Circuit Ball Smoke Detector Gateway -Sand Cover +Sandshrew Cover Strange Machine -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE -NONE \ No newline at end of file +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +Regigigas Door +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +Blue Gem +Red Gem +Yellow Gem +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +Sand Cannon +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +Temple Pit +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +Regirock Podestal +Regice Podestal +Registeel Podestal +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +Temple Lift (right) +Temple Lift (left) +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +Sand Tornado +unknown +unknown +unknown +unknown +unknown +Sandslash Cover +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown +unknown \ No newline at end of file diff --git a/src/res/mapEditor/node_location.png b/src/res/mapEditor/node_location.png new file mode 100644 index 0000000000000000000000000000000000000000..f6d99b1b397016704a85ae908e39d98d8e58ff9f GIT binary patch literal 817 zcmV-11J3-3P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00N;&L_t(IPo0x%NRv?<#$UHJb*`}pbCV&| z3iHAU+gmGId;Ma9*Zl(7fan6)kU5vmt$r zzV<~Vg5c?#H<=3E=z$*`&hz~L{LlNI!~9AW9H%l@S0CRA$8nM^`}Z=q6#I(dGKy>ha*gy;fXKdkCW{55_}RaZzuD zt9J-3Za185ZJRV(QCS(s7h5>)SZ#Cjw>Jw5=olP?=hYO_4x4Z-sSDGcU*L6q#)bGg zq{o(HVsQmsUM~j5$6>9h*(Ar3GR38(7@3=cduRwVfdCZJSd=IGU_bi-(=A^y`fLOD zQ{TayG6}Izf{Ep2yq=jszt4xf{CqICOeVZtUk^4&Wesp-uH*bs8%lINDAcy24u$c!o#d85_g& z+S>L6s+btuX=sOcah0E7-0z32z8=Q>LP*2pP(-RwbmJx(Iy!it(lR=WyEV0tL_~mz zQYfG=wLwu(kDe$s22Pwo|LhWc{$+k#%IMMx+*9*-sXBt^YAv5FD7z1_SPVuclhsA* zvT)#vgEuHymKS)`(1^#4KdEvyA-=>J^!FPqP-|F-L?R3Qlai27X{TskG$M4ld?3eU z2f0+cNVs0hdy=Fq2xXCA_Jrk;S|M#f6-wC42!tEdWHWPNGMj_NMdU*(PoIMzl$=>0 z^z+#r#k(Yz%L6RSLaWt6r_=FhG#cp1wI(Ce;=d}2P^MO^KP9H-AR#3KN~Lm;?h(W^ v@UMy!gv&NV!es%nrcM7#QozQqY8~00000NkvXXu0mjf;9G3t literal 0 HcmV?d00001 diff --git a/src/res/mapEditor/node_misc.png b/src/res/mapEditor/node_misc.png new file mode 100644 index 0000000000000000000000000000000000000000..d25cdaec0c05af7b6f8784a142da8143f13262f1 GIT binary patch literal 803 zcmV+;1Kj+HP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00NUqL_t(IPo0xpNK;`P#t%*#`)F=gUCaV6 zLZl0mP{vp{V}@3k#Xy5DhRdPYP^g%d+l`1A*|yw`A5>!qdC^Eo3=E|jer#fFZgbQ0 zVzw4rTNB+f2%g^eU^AgFdf*3#_y0W4`JZz*%&%m%T8jv$er8}`fWJ5Xz078FH{ssM z$cV?~a$&*Lf`z*sn3|dbDR9skp?%N3FM3E=B*t$v=zaMJ3yyYpdN06pUya$v*YGaj z!OYAICMG5_)JrJ+5kBd3I={x_ak$-XBqBk)dZ5PQlN;Fn97ie|#@xduytdV2dn*O6 z*NfHFRSXRcWo$N^kTDnxh{a;?`FzM`vp8|Q2>$2Yh`ERHW$PodpVqNHZ9(uwF9bX; zQmGUokqE-!FmyT{7?a6_-QC?>LH(r~yq_P&{ICY0@lN=k-bCQp9c<1G;kTfRQ^IN0A+cn~hxtJmn$Ds{dl>=0A1f;>*xA|H-=Mg-7+qam z*x1-$H%KOva5x;$x3)kc7U9@YDQU3b*VhN3PzXjUl|rxAqoJVz zzN=>t>TJZ?+8Ppx1iLOJ8jZ4d47HxebYl(cH5!fJa=Bo{VzF5+mqV>qvja+7TN~_l zJ4Q!GS^E3?q0wk^^V-^4l$VzyKR^FA{gQkhkLMsoP$(3vfxZ`u#c}|xR?E&RDk>ln ziBM2baD`+!w1A3BILzU2whIdjQCC-oo}Qjum=-FPN_OSEyu7#6OUQ)}NFtF0WilBm zD=R@CjZ#)thN`M6x-t#_RYwTdOG-*MtE;P_QmH^*^f)~u9HNGQRjEKA$ng36Ai1Wc h|0N;e55FPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00Op2L_t(IPo0x{NKPH24lUYVX3H-G+z_*SxZ|bW=*A~MJb79 zWey91)4dm&3BBmR2Y&p{IbXhT?~nME+7lEGn&j(#KhtvJ25;5=y*d+R`5lS!;zt>` zbdwdmC>C`?F1ZJNVH^5VRn?T&nIu2G8ebE2Nt%yeNt?gFDb%1jI}dqLp-A$VAT3aW z+z2uBRT@lRXvO%MMkAGNO|EdK%bFC0&uCWNx25)%n9J>gp`j0{Vi(-b@WtYo5;NLj z6dm(^%yW;(vJm|4*h8=V{b}1pQwnGVyS5y^Q8k=xjzdx2R?f81MplCf|VE7 zu=Jz=L#06&xV#%Ya~6zUQ}|r>42z0kzK+Za70{ zrZ1||6ITvvt|bU(TL;t&qftlrAcMGrLMIItYIRudFwpDLE8iW*T(uTi79EfhN;=yZ zo(-;$ z3{JHp!9^@*D;;Rwl??LVSVx1Mg!T@bIYPj&fCa&fA-gPU03~x0OE$s$B4An|UAPbG zxH40@@<x|*kBQi5h_b!DzB5hm91VZ6d_RPfnaZM8sBZsh!%x`!(vnAzsjB@ z({GFW+j!St9CO(NS3AcR>W+j%1^!j;)=ZAknqj6V&(zTW5})J`&zK;70HeUEpQT?$ QhyVZp07*qoM6N<$g1dHN2mk;8 literal 0 HcmV?d00001 diff --git a/src/res/mapEditor/node_npc.png b/src/res/mapEditor/node_npc.png new file mode 100644 index 0000000000000000000000000000000000000000..0a0c4ab4f2c01fb7502989219c38c9768a9acfa8 GIT binary patch literal 820 zcmV-41Izr0P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00N{*L_t(IPo0x{NK;`L#y>r$t=&9l=B9#V zqTvMJi5M7|R?`(BEhz0YjhRt~m>^b?mmH#hbhRS2w0k*4M3RjD z6LqZ_1W)H|G84Md13&oqp7(ip;o~E}QWxhP(0!JP|Ct`6zjVp|y(}D4W#QP`r;Y5$ zSZ@Znh5%e@T947r7~C~8t%BFhF^8ANmnB^C=JV+;_WMj<2>PniP?H;r()1wcGecn7 z9tLY~5oRnZOtdj}VfGg19qtO7n3y*$>^Ix{Bbd9R#?*ZS^a;Ue%ZS5lXDdEkt%q3? zfr`Ws%v-B4-yep#p>*84z}VZ3DmgJ7Qo;VV5DO0@usCHxs8WsxJCiV~)4*|~0k)=d zc$T*bk9Vg)N>lhcZorq9dte*Xz_3pVQlsaCAL`r%`N=*QFVLbYITY<#v1mz;Mn_g0 ztU4{y;^poFA#+TphI<3YL?sp;MPazR2)p9fpguJc6NRaGw|_H=qXJR3O^xyXqp%Gm z!7+Jed4sS(8XZO-d>%RO+`v9&z`zw2CkvGDmeL4Pi%?g}V)7;n2k$RV)nNE~HZ0Xj zc*#6Lg8V7e9T4Nx4uazIelRvhVrHlUwo!v~U4hxx224LGN6E#tC^_xpoNcO5V715t zMCs*W&Pk+DnN6IAz~zGy3^uTM(d^=OEekG>a{J|(1ez!jL^L@eyrh(okXAp2AV0-5 z&{!q`|JExo?R6F8CJ?9;1hQ2mpU+Z4fgmxDf~JVgmoF;LlHi(gIczRtq0>^3i3w;= z@=BQHafeq(#ZuNS8x%-QV6b%~>m)JS3prW^Xxc*v|5d&``p96>$AUC5^0Z>C^QU`+ yJ06iR@UIG2%7~qn5-WceO8-l8oVTxv=il4_0000P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00OQ_L_t(IPo0wsNK;`P#rO1aS<^&K$#jaY zEln0u;WNt;pWC%f4SbNMBI(=>Gbt=bD5g#Vwb06pHgL=&u`rYw*+cMAOOs_p5DG

6X1 zmNuBCl3;k8g_1{gQ1nrH##0zI)M|W9%q4A3DMqPp`QxXNeZ3Yts3X{~Ny0u&Izr3y zQTya7R1Ygbj!-rxOZI4_KguSJOfjVS+V;K=s)^%hv>LHlrG%`r8|{l9P(Qx_@yQza zXRFY)bO!~~wK(yz6=WY}%QPJou;S~KIQLeM!Wk_LD`p79TM;>U7qOP7Xj)mpndN0f zkB%YQd>>qbz{RD0Xy>nhdeMTYs#LJ#&4*$9a?dd!Bqs&&vvUxYm1BEH2c$Y3!Y_9r ze#Q#X0hwa}(}}B=!?D4okGD|t>@2hsod{GWBD6t=xY=36OisbSuo$w6Otj1yQ2x9L z*FF!eZQvpHMWVg{ZEt$*8!%r;?=MG8jS@~C?hpq0B0-l2xmgW^%}i%TpdPD7T2C3A zg|1+^1$ZGyn+#T|4Ce7*3{S_R<#i7(EZ(#aV`zVO1C6f?cwpIv?qRV#8`GKxo(mr= zmyN`E_hczJ#WK6WAZ|#7d_WCykg}7~TMA)il*8v2$lx6n42~1;6!RwuuFzS}_9P%U z7;X=QH7h|H>GC?M1aHNGUdN&6HTRe*p`K$ z+(?MBcEL^LHNf1_I5B~Lm6Yq|YNN5zXJ+VsNkH?5XUt-K2Z#cQqTO9}y8r+H07*qo IM6N<$f)*`pNdN!< literal 0 HcmV?d00001 diff --git a/src/res/mons/0_0.png b/src/res/mons/0_0.png new file mode 100644 index 0000000000000000000000000000000000000000..d62280e7976687bef29c95f3e8a93aae304eaa11 GIT binary patch literal 367 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U^Me|aSW-r_4Zcus%8Tb)(bob zfA*Wy>x!@l3NQAww7b@HVCkWqZ|_}=%Ju?kLINT_m%nJPtD5Ir%r4qqr-s%3b)xmv_^7n&VAoKDnkUt{YX$ zx1C$_R?!Z~eVqN-y=I*S_bZFVk{|6A>(=i))N{Sr z?mrI*-I*p7(ImZ@$-5vsDTg!f9IxI(E@O!Q8|32upN?Ynn#alx67Y2Ob6Mw<&;$Sm Cos^mY literal 0 HcmV?d00001 diff --git a/src/res/mons/100_0.png b/src/res/mons/100_0.png new file mode 100644 index 0000000000000000000000000000000000000000..2622b9da5e7c5bb7429bb97ef64d6081f3f5320b GIT binary patch literal 722 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|484L_eR-P`7Ar*0NZ|L_tau7NGvAmw;k;_r8lvLFsRiRFobuLO1 z=Qt~c&v6I~3j=ZlM76ahp6K$f`g`_VPQ&geX6boqKkGb!hC-6+e8gdim|?ru)COFTcC2mm25%TIsdFA9#P;@@?<-2kc&leiklzm!GN?7O3uUQ2u;O zhoLu}|eS=lUet|w263J*?C+gQwb@x>1QfB!E0h`R&Sxg;v;dg-+7TkSt> zJ5)I@_s+Jtez8Sicb_i%r|s#w^LzD=^ux}f^((j6?mltPd~ILf*}&{Sbsl}UOM2H` z-I@6FW_aq$bG!9BW3DJCSn91gn{K`}Zt05ZIX5S;Y`?$vO^jyHNlW|plXibzT%T?< zU;o$HvRv1=9SQgCr)2U4JoxPSu%Bn?>VoyklPcv!Y*iJf%(lv0}#W+Xh!|484L_eTRdGHLn`9l-dI@t$U)-R!?!C>d8pJoseDQSBGpYsLY-?| zlqPySIq9JyBqYT)``VAB>J?UfuW(+F=cX+ubZ}TB<!T6 z8u8=T-g&bXEA3nAE_S-+D zUWx7>qgZDL<%j9bzZdjR+gSRt+38y~H+Nj!$^Rwr!1~y95!Z*-DOx{vNG^Y!@* zXRoMR_F;PB;eAt|rZbAIJ~V%R`M+A9HvMJunzs3V-cqf(d;Pk<$xk0n`uU;u!rg_} ztxDFauDbc=?z5`W=f&|lxsQYn_kaI5{R-#%<+Z=##MZ9+s?Q~RcUOJ+i`$#e{gTy< z-~RsZ!u^*o?w$Jbe@oZRYd+H#TTC{692`~TVr(C~?26*F>wl-bWXuZ7?!Eqa<&oM% zAE7-n_~X+IPb4ZTiMlL2eW$5E&Gbe@N67ZV_SKcOV#vwr!TiE^%<>KK-FVdQ&MBb@09-$et^fc4 literal 0 HcmV?d00001 diff --git a/src/res/mons/109_0.png b/src/res/mons/109_0.png new file mode 100644 index 0000000000000000000000000000000000000000..d08625cc2a15f846a43fb92e712d1f9c3c7ffead GIT binary patch literal 843 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|484L_en>}3|Ln`9l-q0<06d=;}@OJ2lsoKgDr+TEQ2uVhEx+qON z;gzDgNvLy8k4xCPp5&i=mQVerCEc27TmG#!&1k2?iwp1X>{np~+KU4`*w_9qX3Nit zvRAX8ExjxHxn4A$q4oZmSs|gJR&xE{?v-uVUB+=#G~veWRHJ!IK33$oPPm%p%D69B zZdd!;Tido?x7zJoy?`P9YvhZ2r|0@x`?YGUWU&8Ltie^kH6k+l;q})uS*>~E+upAX z_;qgWO07i&dygCrKOeRu)YxzF#TQ0L-|YUkYV|{of~7qz6Og=J%5=S zbaUekU3OM$_^s;E}!4KwSCs%7wg@HEo;NSGYNgIQ@Fzs z5Fj^8TJ?YVTz3)M7(S=wcrv4&{^#2AoZ#v^%eUtyuYVf%L-|Lt10 zw&Lgg4xJ=MxhvVF%G+k_Uw-jO)rOCP4{|>)5Us28Uy!L@^?v#Z`*U*gbIM&`X4bwv zdpB{e-1GI@_2C19d0X zYbw@gE@enkcC_7dKkU`shwsnNuM+#Xe`*MWrd|S4x@!0z=vB|qx+*p^yP5wHNW#U^mH literal 0 HcmV?d00001 diff --git a/src/res/mons/110_0.png b/src/res/mons/110_0.png new file mode 100644 index 0000000000000000000000000000000000000000..5eddacba1eb0966f952fd265fb05d32db2b12dde GIT binary patch literal 1098 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|484L`}n><|{Ln`9l&eSh>R3Ok=yxcELY2pbl6`@X-c`i!Y+S(IO zoC5QJ!c$B4*4TgAp~~zdJA3!{vnijZ`~AB2?ly~7a*yFL38ILXEcUZXpU>ny7JoJ^ z@#nsO>HoHWQK(yg{r9cC`=++O-KH4%vSg~qlaCo8U)%p??Y}$y@vXRgvsC+H^O9=} zN2Y(c9XI9|0oo3l8rI#2Md`f=9a9g$No|)^P??+#y zwWlm7W?L~y_1o`%>luZr)# zcXnP~xQ*h}$(|mjGeQ;?CTv?>_I2axXqydE{Qai1U@q!8)6^A2HUI6*+xRlzJJjFJjl5`#4Y}(a_z^<>5<> zc~wT;{N?5i;){PiUUKudoe}HDuPeG9LWi+wpXz#8^ikPt zqbaY;*;&#pE{hrofBY&`zIyjN-!6_tRh5NFA2w|%mQCT~c1ae9%Rer4t;0W^W7mQ` zZ%mh^Jbc%mTEh4!aOn(&k8j0|k6r%E;aJmG%sW53ymOc1RQdD5ku&S0JrWrzv-+ziHmPzSn>M{7Bk*_s#0%{q2)4RH=6eikwulTe5Rv z#-U|mlM;0vwlDsi_d~`meE+ud>1-Z%JbttKKhHfNn$omriLALqljPr{>#FLbr`~5@ z^dmPhd5fdkL)Tr>P9|+1-)xoKb#_+8M8RKq?Tu?6OCJ5prv0}#W+Xh!|484L`}vpiiKLn`9l&QL5?aujJX|IR(ZL&eBQsI#ZX#Z5`sUumL8 zN{Wh5rwfqr&#^E6=Cio7y5Xf==HY)sb9JqaZ{8}||MKSCV-m?dhQtx89;~zuKcDjH z+u6$f_f4LE{<;6>{#6Vg&1c{J{;}fMv+oH88E02C%HQ2tb?kBA=D7UX{r#1nf9}l8 zGF<4zyrRgJFWqH7yW5Kwvw{MB!@LS6Jjl<#{Oo6C)yhAq(SP;z7jKij_IiEV=19}e zKVMxt_ao=Ev#7B{Xy1i~2}1kV|0>`8Sas68-K({?q^c}s+;~e=Huc!ylux(jrEmVZ z_SE7FA^(eh-iv*zGM8~x+0$=(wT`nKNmaYh|DpTnrki>DZz((7f4JfOx}u3%{GmTX z%pL_D?6^7os%uIgE-%rn|%&mX_z1^NCVWREa zb!-aje$8P0Xg7nyu**ntLJ_Y+jg~0m)bEC20yFFORSC|vbDeOcKbx^Y{;u|A?MyD_ zq_4p@_Z;-lX-S#b8`}FpXiD~h7Q2sA|8AMOEJfjHhz_qpRSS!lk=xrYt-!7|TU~zg z&q|bBq!G%p@|W_e622DZBjMYQe-xU3Q^0useU5d%Pjv9u+-ZpT8?f&s$C*f-y8iC< zQw`%pTsd@wRcd6Wx0)C;B%XS;pFQal+Y)}=GY&uYl{Od#RvgP#OI7G)+_=a)TBCi^((CVBp;k~^mNap)q;mZ9vwa`-`2ZP!)629hP?~C-aBtxRJdT{ z(i698POI51sZd~fwK}cir@ypPmW_dQMe`+{QyQP{dwkyTRBR(lpRvQE&s{gSGpaY= z>h|*ZzG120(gk0PwbM4we_MLYe0Kf9UF>~qnTf4ZN7qaBXry;z$u~akm;W%emCU=d UT0z1Ln57v!UHx3vIVCg!08|+0@c;k- literal 0 HcmV?d00001 diff --git a/src/res/mons/112_0.png b/src/res/mons/112_0.png new file mode 100644 index 0000000000000000000000000000000000000000..cbbc4d34a92cb379c28ce8c8f3803dc9aec3dc6a GIT binary patch literal 1639 zcma)-Sya;p7RLVxB!qpP6bwtStYRSxO8{vI1ldH9iUN~jSR$yZph&s68)4gkuI3Jw57W0ngCMl*#FK>&b`Z*`RkkOQxs5fYmX00sje z1$s(tO+HxK(t=`WfmxIU+C}PD$TJtyDF6nA_VPhvd@xuf3iWYt$5gXxs{sHa4J8uJ z&6rCl(P4bjL5e*>{51H<|N)3>^~M&C9lAWlw$`L+K6t|MeT%)zwv<=wcwO zKq?c_TZo3e{eJbBfLg+|mt4R;Jbx4}np(Q|{11s=3V8li?dbb+36t?1ZF-MCY|v#u z_2_$<`RnBIQnvzdVIcdKQo(NGDO8I{0)ou=5e)@eTXwiOMWauMKJARpp z=B}P*kiHv{P)nI6Mr@pAuc6KEiWL8THdm;X%gCzLR`U=B4|9c2SkJLqgnHi$K7Vz+ zNUvB*X3%IKR#w?t^WNfL_vWIT&=#rgwX<&}zHE7XTV1{PkT^X1Sc7`kd9~N?$S`M^ zwzBe-qbd*6OB>xJTMZL8$bGcz8^wM(ch360Ib|J0kD+&lZ2WjXC#+;U^KPaMCHdB? z=yig*qRmy>nOc8EF)ZK@cH`=PsCk}_w_$krn!xyLX+$w}q3W>014M3|(8DXM}wDm);Qf39aQ$X$-00Tf8X2ye|WZf54r z#tpFVUY;a=lL|iONSz07k`hwHmZS;HQPybj;^m#A>ovU;UKlO4yMuJWK>0>;<jfbZF(sJQ+<}2=aYm>A0u=VYsd3zUY0MzgPH=(q!!1&wNx7aintjGPf zkvJCV0Vwn-P!MHx)ix?{+L#}ak?ur;O%=`-!BRqh@tXPh)XSMb6Ac0D0_upy&GAU0 zI^LCT-JG&tDYrW-Q*HZbYVN+Pxki0!7#PH;-+jTgE6uDQ+fyuDlrxn$$)%0GCJ!xJ zv%+U{`+012pRSY&dDXF$b7-ZdVSZ(8ZG0<55rJUh*($WlWjUoON7;1aHJU%@;K@W%+UUBqPLlL&QYfU2~$_-$mnHi~jb;eE}p(X16Uo ze4;{EPhe~6ZxL|(T66&RD8=7Nd=-uHd>D2~VUKk8Z>_B2ZkMoNEj<)y!7SIJor}|* zA$TQ=)Al~6tU@VJAU*OE#m(};dl>VA=)>E^<#O#T?lUiQVG(H_^2zl4myK{J^7C(+ zYC7|^^(L$PHZ6%cD)^03X-B0^;-cApZX|pGN?ffvC_T+{Q?!g@%j*w%FR1+eS95dovW;!W5NnoH zn|iMISpCTCy9KkMV2ojsdr@Z0ya{!7 z%5K+d+G650@blf2*7IRZk8FPUjU|hz5#jSa*^p&hYIw$C><0mR!X=SvNa~1fkuF*L zO$EfdK$(`K$#-`;Q06vP8>%&mU}s5* zge%FcO%foMehSI-DZE~{6nRN#-vq|57B!GH6RJj?C9j?S3KM_^4Hoe5VovkRF%P^r z17{-E6WnZ>GcQhfI7-~KpnZax!g|SEM`5GvkKP5 ze-@)27+GbeCz+VVoQJfj<=#oda1Td|F3Vq6V=+c(@89eVOf3fNnKe%C-0xp}e^oGC z>ov(&=vnUV z`tDtk&Xo;AM6*55p*OUfCzD^NG*?zUwx;1*>ND}rZ-C6Y3r=9ABKlH`I>Ec^ao_X% zRU|c8o7>8SszS;LSnIpF>I267(vndUIn7*CLf zu5ruVes~^mw~_OcW(%I_RLl1N}?9F!zowD|IV`@kgiEik+NlyAZ_^DaMLv>`TZDTg4YP0Q3-+Bx} z<2-Y$u{|Oq#q~Pbr5<}sF-nb&<^|uU<*THFR<=(P4F>BG z>Qw51DRUXrIb(h&4`9+1^>SnlElzgG*~jzRH%X_RwSnc{!T#g2%iB9d6H=4@WV}lP z5}j}{gA?gIrP7s@1}xWNUA=Kf=v7b<6+4K6Nj#IOkK~3wcyU-|i0}>6g0W9fiW%o^ zrH$5E_6Xr?e7C|Oi&4|1;=2myi`2xX=z{tKg{U{e(6?n(+R_&9g<9+iaDma+!?&sa zZ$n|r#wTXh7@2XtXx&UGnCc8bF8KUyX=wey@)bFSf3uPkZpPz(yV?;GK+g^7?StJ- zwS1k6acD$@_&eQ}@_z!KOX>8QeEM!Rs0Nqt5|?quPcG-BJ`U-Tkt)ex78deeW1{0a zJ&!W|I_6Z*k+Bup2D^14z4i9COXhKPOFw*~V4h4@rTv2xW;R%yhYh97;QGI6E(*(RjmmEY`Vot)8})q*?beddC^ zmZt*WjmyuPTdl^=ake?m3(64ddl5r!{(shnblu$Fgy$^}7<#3Q@?j318=^F+-Sb#E zo2mY9gTFpai80TP;se*AogUJQB#kvZEQK0l=y7I5)7g7cXks) r=BCHH9zrr=8`Qd^j{Q&ABOPslK3f$(i20lQ&lhk+VUcXRi)sG_d^Wwb literal 0 HcmV?d00001 diff --git a/src/res/mons/116_0.png b/src/res/mons/116_0.png new file mode 100644 index 0000000000000000000000000000000000000000..21b672e0b0c5091ac1e361b6d3ce73651381dd2f GIT binary patch literal 647 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|489>wDd%8G=RK&f#v3~QS0EuHCum9!laZ&o{ru@-u(MPw%7d=db zI^C2ndZ>V?k7nib4<}wP{Pz6JJHGdG-={z0kuiDkTh5|i3TQ7*P{S}gsr-7!WqGZ> z>G!MT|4rzMip{gvT^F~T=l%DuRldysT92z`thi9Taj#gtXusZy6Srd}(2f&+AvZ|JUV76?jjsuHSj= zrg^{biA$vxuWs$si#2%=Y@-)vwy%A0*X;M)r!O1uZuzy;=FQsm@wxwJt+5e_k1=uR zpZ}+z&v^5a*N<+x^vkWSc*}p*bn|07b=JSUT6>E2Ug~WVy72v(mz~zGzWrURyf?qF zPRKZ~`0&NXVDsFFr=MdUS3VA93KII1^6~sh%j@Yszr9}eYsaCfJubZ;#T-*VRyTC5 z`nY4I*vo|Fe@%H##>Y7|+Z0W1nzwZJc7wjzT4zetD}IaW=t&o>xD{Hu;_a=uYciKr zyqbENt>sGbtG8>t)_U`OT;=~xYQdxS|F!#gma5qPcg^hZ{b4`DJlgfr&zQoHvmZ{} z?YbztApYp*Q}h4xe%v0}#W+Xh!|484L`}Q$1ZALn`9l&eERz$U&sFI!tk*@IxH2cs%iV z;+2x3BGl=kG|}Tu&OX2UIVU#pZ{NQBT=>*i?|fz{J-@T>Z$guR6Nh38F~pA{G0m%70w|OqPoo&wf=ONjZ^Y!Pqxc#_VB|BgGpRW2HDF(5-VNt&p z+UiexShe>e&+fnfmO5TLZ@i9|p+)sl?=OqKrzxN0zU?+TleW1agU7(9f=8-PsejMX zOR9fY#O0sXsE|K$T!v?c&$5N9_zF!9Y};9H9lGxRdE1i>=ifiSt^W1vI|2PyE|%X< zzmmBf^SA6b=fA?aO|v-odLP8DV_ziGQS;7NYuf41o|uIJWdraQY-xwd4nOX*W0wKl*-2 zD&(JhbXt}~Z#5@)WQU?bNadv{hM8-r%MAoC37+e$O9aq!1j>#-h;P0cEiWTJ_+@37AR5&dfyYBRb#4XQ%$zf)jeL9MN7-Uk-ui8W{ Rt_S9322WQ%mvv4FO#r!l((3>K literal 0 HcmV?d00001 diff --git a/src/res/mons/120_0.png b/src/res/mons/120_0.png new file mode 100644 index 0000000000000000000000000000000000000000..fd35bfd1670b3431fae713cd51dbd058b44dfdd7 GIT binary patch literal 1001 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|484L`}fu1goAr*0NZ|RrZ3J_uYuzRi2BBe!4jU6jGW;pmLXbFgR zaH%9Q83slg3Z9e^GHi5lb5l}NQWFs6aB*=3LKhaLrs7>S@1Ja3bNgo5vU_j$-M4(d zM_|Q^z2E2JOQ-(t3+8l~V7_|gf`ymf zercMP>t-YyzJE={*~=4(l@&PLm$@&vn6`M{lb>E?XQw>Ay0G&9&qu2(rHZr|Z(P=Y z_BmMSAAA0-dy@Q1&-}g@*S7e3(A1r8zVECMn*CkxaPyk*@6Yaij4-+EcmGcRn>pLdqOz-JS@Uv(FDcXCr_`AnUhX%|aBCM|mpYqelV?>>^~|3*ki} z^X6Q){ro-3t!eVqq;lI8H6cG2tUCL5?)#G!K{FoYPrhAd;{r%(36_E!NJH?k>pTLstf9T}0to8fY@6W$` z^6m;tb(4edUa`p+1i4)vRaQezT zX@XjIaqe=}10h$QvOb-3yEtP7J2Yo|O7T-RoPX|?vt-}^E@M1%_QczJH0851k_ z^iNX$Irh|zQ#U)SJv}Ub`Ce@Ogr`L>zgRtZqtwIlK#-X)a>b8#9tZL`e%I?9xWUO- z=2$7_G41LmKknlG-3#hlSRORq$=hzaUhvAgybl|BMJ3InFV6Hl^u_P`^(p7pF`E5o z=sI>yShwp?@Q1=rM=Kc)#_MeQc6paYwC3Hp+*-Hx9aGMHGoirGK}euNX5Sl)gIlLL zORSJwB_@<8+~j_h!{S=kyN-)f7@lumc>d;rMccb|oBD0{|K)QOF6DgTBoy$r;W)q4 ze)oX63@_9ks{ZkD)m_8+`sWANKM~%#Eb|VkE1`fzZ70mDS58>#QuC_{m=hU1UHx3v IIVCg!03Nuz=l}o! literal 0 HcmV?d00001 diff --git a/src/res/mons/121_0.png b/src/res/mons/121_0.png new file mode 100644 index 0000000000000000000000000000000000000000..80fc057396dc64f3642fccf5834ddea53e91ba10 GIT binary patch literal 1059 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|484L`}-JULvAr*0NZzxW9fhC8xeR{m_by>0hzPfRvT{MP?*$oAW7%sg%9Tc_fLMn{hHmvnA2gw zsZC!z51hF#njA2(BRlBV>y*fLe|w+s7Bk&sv6-)$1U4*N_uja6YWTYwxp&e`zh7U! z;N9YD$4|sauR49E$m76T`E=W3)4$(Y&&PXRBlyOWQlWWMwY$$;buV$LbGvR{f45Y9 zdaAa$cX9pRvr_S06L>C2n@>`FyXxyZ_ZiWQ4ORLAHN2gUo|one-r!gHvC&4`$lUqf zw$1!36=JJS=4N~@722S*z%ur(QDx4lOO7X%xh&;3aQ|YQBG0m4ciqE2Y2m=$uQ8_t zJvf=}?n~;KE^}v%v8nZhhJCR+>&(v;d2DW-E$jDgZ(PgX2QS`>@7_5(o@@I_`Ob>8 z*fl=unTqXsJTnf>TxA)5x2~eH_I2JmzS$qEUi58y7r?W*cE#^aOqc$=PF!!ZDUV4ikB#KPJ5sZYZCkIDzFv zoPu;w=(_j)+E2c${?2e`{cmOA53yCE4JuAnN_ROMOPn=K*PF$!e$G_H{fEhb~M`c=mcB4{th)ic;+ScT1mzG9A+O-*-8Q)98EiKeomrJ@fLmSa81( z-f+}mf6}MO3)&oON{l(|(ySi{ZnNV(uCj{7=cURCu8yaQb2^L|BRF?mb`%Qu|F?KS z;^DdPl&86FWzV?WD|&sCdc>QuxK1<1^Dkz~Uv~3xK>`1jpZ{Zc=W>>1-r)mpfq9t0 M)78&qol`;+01_(E#{d8T literal 0 HcmV?d00001 diff --git a/src/res/mons/122_0.png b/src/res/mons/122_0.png new file mode 100644 index 0000000000000000000000000000000000000000..781be3015b1176298446b34e74807e8a759b2d3c GIT binary patch literal 1311 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 literal 0 HcmV?d00001 diff --git a/src/res/mons/126_0.png b/src/res/mons/126_0.png new file mode 100644 index 0000000000000000000000000000000000000000..23135c02d0686b8df47afdb4c09a2bfcd77baee8 GIT binary patch literal 1135 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|484L`}*F9YvLn`9l&eSe=?7-8uy`71do0*rFo0prL7ew=mv9U?9 z$?5RunDFrMn3%kNtM7gC*~Qn)U!Ls#Kl@@uc--<}PwmXN4jhUt0#3vbKizL``y4Ji z={?&q`LdYp1(RHyjyZeOx#O2X*>J$y$8Sq?s`+#dBAE(vpDPIZ??vnq*cWjl~ zd&M^Q?v=;v%MY18j^;fu>x$qfpEG}-pZnPGS|lW-GDG}zp%8y`nZWD!X-XdIPbai5 zyV1UH=4ny4eNp^M9;x?syqIm9D9C$QYIB8>S%7@O`wwy&Rx4{y9Xh;C{P>NX47)Qw z-Z;It>hA7e^JCvO>{{o4=~&vfssH5OS181WwN76pcG%gWQtaxCc!~QTyRFPGHe|d{ zy1irH+?CI6JUpYl>slpp`o_iu z35!-F<%PdEceKl3k<9zn2QD3Jr)zhW>pY8CTz^hfFX%$n)?Jyi)IxqcR+YYfDY&=e z*Y>VejbFZ8dXwVLu;zGv#4IKGBT5px9d89>TMK^7@SOajJ>qp{@@>Q8_aztKFKhoN z8NNg7(24UC7HNb`-qKfT8>f6WpfjO-fyesWadGDsrbWzsQNVOI939nu?1hO{*o$Ejed1^YsO>Kd@YX^m;+9kXu!wLaT?> zMU#+ekGaj3%zl%~VgEi$^MQrs>CQ;|3k{le>i=FV%v!s^N#Jb96KAVS9NSA;HoERv zI%nk)x$;&{w^+UDpVq1WeU-XalP~UA^~JM?e!D(sG19{+t4KZm3y@AcisED|p} iuZI&o<2~80)^fkV`*+|qy(gfeg~8L+&t;ucLK6Vv755nc literal 0 HcmV?d00001 diff --git a/src/res/mons/127_0.png b/src/res/mons/127_0.png new file mode 100644 index 0000000000000000000000000000000000000000..d3ac21aed1d51a57bec79046f0652b9d9a73d658 GIT binary patch literal 1323 zcmah}YdF&j9R8cdW>aK6?#yx?j&nLT)OyHej72VU+gUv$*BG)~*GV12tWk7QE-en( zqfDVihg{;=rK9GSq8k>%lFRH7ay#qu`EY)}=Y8Mb`+oR+eDjFD1WgSC4FCW%J&)r9 zlp6LO5H%%FmeG$YMI|MG;0iSK8_ARg9E0=00RaCRY%6?^(nHT3KbZmmdj;R2@{Cp+ zr3}qd-N~tL$+9DsGv}ab`ABM2Nbi; zKFqHCo#|BjQqk-8E=a0~$n!UI(E<;I>v2R8q^lj8LXLM)g`Nn#;g1A*2BP+xMiV7| z!_(~}vF<()&~kPpxt_G-!R5CvrnmPWd~TI(pklsd6ffC0HddbniFPjlsGPPPvNb>s zNvlR|=@CwD!gO&!#tC&g4EHx390&0v?RsUYE&wDIp<8r*agE8DHkw(rvkWr@`8$ z(kCoEJEtQ(Cz+b88lHg$LDr^m@w4q8j5R8 zA~vxGM*K*OIz{>Fx1qy~0p6#R&j`ETi!nHEskvWp}|+D4$%wJ!q3Z+S%$>?wiE^% z8Eu)4g+oiO)XZO+*6$8~kWi}wupyS17}@j1nX^17GJC=tyb-oW%gxY#)GTk93(ju& zbMF1Z;HS&7zU~4Twat$HqUK36ziZ@ONh2`XOOa$TZk()Jp#{rSK*v-Z;T_E^7DnaU zxKu3ODa>G1?B$+tKzP~KIRf1<*7n&Vk*|m3+N2?UpI9#KBXY-7U%`N7uj-=u{Pu0( zCPyxsb3#Zh{-7|>%u`)DiBpdKYK>Vh5h$F|45JcY5sa-dou`@ANy#y4+&5oS=u4_O zg7vY`_r@Ovr$X_sSf^CXzebh{YJuXxewe+#-2TFD!oxnDBUIfOHQD3pog+P2%B!jJie;#xiQRs%{(mAh*3yWacy0!dtA2QbOe7pgjg<53IU^nj z_GCZ>aZ4d-?8WuMLXzc%oba607^8N1YV%21PL7ZBZ0;B!VCokJOI^s%?ib&g76_(x zn6nX{u>V0)BgXjLUTOZtA+F)`sj2yID4RN86^KY}SXdAQ_6&L7)2tj#k{vwLQT2`A zfrYg0b1}(SUncldzjx4j*#g(>lU$-%KY5kVA=3LoGpc?~Bz-)e=IjZTX+F(T#NZCqjz@Eav7r_cXQvnJ$_-}YA5fcv z3!omH*}J2)0|G-+9q4%%Ay#(ISQzWYJC^%lOW$H&w7<=z^JJAu@&07I9IA+#7a@L$ zz7Y9Wy3wwT_7luL00jI2T$$O!`picMD2eSgAyy21c=%U^`|WGe7I^tXcxy|*?YAmB zq!|lr$8DKzTb3DLjS!~ImcS7vpvO5Dexj!!>>pRXn$^?k6!Pe39S3w)=5C9 zfDS+TN&f2vO@8$Wu!woA@nP*r7!8-?qs32>C81m`IvDU!tqbfg) zt)C8Yl1b^WAG6q6veoslFR=JHLSw2?-wnO#<{=;ef zE-FyPEaT(^UXcnH&a*Bv%-&nEI$!O-q5MMW!umdY)<~cPHFnk$)=6VDQpjQ;R5qhBXp2BbmMqe_UOHJ zpN67g7jw8*e(1eBzniT2_~8wSD5k+RCQP|uCZxrbjIe^? zY_U0Okm4N~V588Y$ug*P-rB1<>2USzyV^uuzaFZ=B1P4Q(IY}R-j*GX79U?ur>$ez z5Q=Lss?(hd&$+jxFz}K{)w?o}csKFU)Hn`svsN_#e56}B<}C@#mQR+}?%tM6sd8R1 iFg*UBDVRN+IISBI*;Q6%;*3>q6hQV4AXa)FVSNXfNIskZ literal 0 HcmV?d00001 diff --git a/src/res/mons/133_0.png b/src/res/mons/133_0.png new file mode 100644 index 0000000000000000000000000000000000000000..ea0f0b911280d262a799f93c9090d7b7ebad41b6 GIT binary patch literal 792 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|484L_e4W2HJAr*0NZzvYub`WTLSRA-u!NLU#6Bi~dsB21C0EA#R zh_!GbP%3iO`!&8I{`%HTJK~{*t%1YxZdU zUFW0pqi8DUgtOaxmT|4?O8al|MgMTM(4A0+>ixCb4C8;P-_t&r%Dt+dZ{d%)mQ{CZ zGzxrce}DRSd0(|HpL5OIiMv@s?7ywP8!NXhRC?B{Z_b`4@{bwxIPX~h{?SfVN4wRF z>}J1q{gFR;!Gl%bS7(`|?3nTOaHj44Pe)UkejV0a!R6wqVPo)tAb@Gp^Lrl50)w<=nzYlkM%-SBK?vQg#KeGOR z?1!!0o3cL0)Oac}TJ4+8qIw{0H*0)opjoYjT>rcO=7oE?jm%E>R_)914R~OBW!jO? zO~2)?b8e6i`@OB}d7-;;Z>p2Y>(wi*N@6<&w$9f%{clI<*F&|e8V9)6ovnH~>vLSZ z&I_+5)nm7UxbCPc%-=Ti)z>U@?<~`gzxJ4IDQ-%#o^`D;WJlbJD@|RRAF39l^^50B zTYYxL``2|g^Xu3%9&Wuh`IOR|f8MvO7C5Z`oV!Qu@rM5A{BNCaZ1q3M@@LX-u_X_V z={~=bwCPQ5cHoCn{Z!8!=dCNUR)}i8nDsZy($((m@8@sT|0#d{`gB`RuIKYACaaRK xv#VEnE@HZJf4c3x*Uek?pKmfkNg_T@KUj}Xb^Ei*PUsRy!qe5yWt~$(698asV`KmT literal 0 HcmV?d00001 diff --git a/src/res/mons/134_0.png b/src/res/mons/134_0.png new file mode 100644 index 0000000000000000000000000000000000000000..4d3d8a92caf919ab7e6af93783fb73ca6eaa1f43 GIT binary patch literal 1179 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|489)P>JzX3_D&pSGP~5WEO{6XTcGrmxjw4+iTq!9jDnc8XBzFpR zuIO-ab8}M?6g{D?Jh6kzg>{kAqD6X7_n-0AJe&9VTEXV$|If`dK0M)j+`aPmcO(m1 z1e`b&i6PD${8U`y{CRo`p9#l#mP1Y(>OTA}cdfGU_#LI7bK-wq;~nSl``@Mq-HO=8 z#`;~C<=`K#8*et{Pr9;gt-Pgp-uCj3yR43VfBvNTy)VvP$p&cuFmI)lsg z{GWfTS3Fr3y~AjA?8j@ncJ)5F_jAtfzjnp0g*Df|AG;s%X8OOZ2wt&G@@Muj1te`b z=Ug{$xsv=%{+|(yg>x*q&iUda%~?Tb6j_ayq53#Zj@q5t9Gy9}g{IPU9PtWh+(M#9`70 znG@|fQ`b2<+`M=|@%M7~KtiIE3=ezCQ-uJk|L#LjJt=GNtd`;o<;>S%7(!W1n zKJ^T9%Ac&O@%my)wO>Cj{t~uXe#VcWUkq(g`_Ft+3c9GnHsPi$x29=iSxN4f_q=7l zimyFoHm+u9k>mSoxN*ALCpA@;weRekmp@eCcyh8L_HXgN<9{_lY8Vd$8^|3|u#A1v z7S3j|{dje8+78U$yk?x_tKHjhW?zhz;96TFxm5P+sg^d4j{km4S*)G# zi))tZ3(pU2!oExU8*5k?Kdnx!p1yuX&52{H7%piy0XrIJM*+l(75^-Z|^1h2>r?HD(3@7LWKPyY;!;t})+S zqh2bv`mv~ibi;pVR_8wvb@B7^ZWr6-T&Qb}IQHfxgOcgz$6G&qU|jd(!#-7? zbq(p8et3Uke75zc=H?lHoBB6JFkg!(dWwZMIK6P9fG egz?;8-j!b?Z=C);`wp<|VDNPHb6Mw<&;$Sz_8u1i literal 0 HcmV?d00001 diff --git a/src/res/mons/135_0.png b/src/res/mons/135_0.png new file mode 100644 index 0000000000000000000000000000000000000000..88186a969a0a7d3d5a94eb58a24fb31279bc03a6 GIT binary patch literal 1011 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|484L`}(Vi}jAr*0NZz>i%au7N8@vUacQ_mEYO+t~KYh09+Cr&+a z;)I8aP^XKVo05OnBa3}!?b6iU`On?4nejhgZSsUPiC=r~ZjY7%+KU5JFm>PjF-33w zrT&t#mp2cKZ)Xko(S0<#>g%4kOE*Qi>+knD?fx(N>g>b*^OkdDug|Mwd6(AEv^MO1 z|DT9CUwUNw&*XCNGW#X^=gHf2p1n7F4yBaw+HMXtG#{u zx(}muQ`#%)up_G`Q;y2+mNF#Ae(YyRTH;d;jOU|)>U0GGCcPvHre3qru$E4`sR{QGtZ69~&&)B*! zk@1u1!3$0Q7TsPtum0WNwTG9y%|#k&UlxV7z-0PB0*n!;Fy z6Po(ps^vQ7o(<@}Xn1E=mU^g2>*}}53vV{1*v+56<^1{EXNrDGrZ@g&O#Ak`)`s7G zhtqXGFB9b%jQ<_1=OtdyY7%wHbwBue_k!rRN4G7N+nMKh>-PDy_aAS$Rc?J#?v!Qx zy(i=Lq^hTNyaE5i1Vzg1wd3~xJ*Alb);;>d{#wU&?JwIMcF&#DclXH@{dv3ASO2!?tU=W@amY-yPZb-=Q)3$MgTe~DWM4f_A=b( literal 0 HcmV?d00001 diff --git a/src/res/mons/136_0.png b/src/res/mons/136_0.png new file mode 100644 index 0000000000000000000000000000000000000000..42225f898e01beb067ce59451301694085b2b03c GIT binary patch literal 1064 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|484L`}6FglULn`9l-c&4kq*gFVgoPDl8~_|4t}w z*U@c%?YH=!f2r@ZVfHf>U*`3-7FqIp6XvGsv#zz~xK$8W+rwtav20q_#)9dGHH%+w z+Vgw&uEw6=b2Y`2_Suyh79Wp2Jmt$86;C}0mRQd1l7E-yrfT`JKPg)q%UWe?cm4Z; zzhX0INpk#Iw(joBwPg{Ut3T_-MDA4jUvM)=#klH{g}Ge2_r0HY%0ms(X>J?Y)k zfG5G_>)zy@*?;&Vi?1z5o|*Pi{)6o&mG*Mi?K>MYOZ^f9v)ZKsp8f5P&a*b{;_~5T z(3xzuph4!Hmc78ftD(BJ9Cl58Q=6*yuMxXbzqRP(6N$LnDR~Sfq6y2UA9rKwU$!|u z-KOcknXdDP;Fp&p@2Btc@?FO?xw3F)OzfwZ2jBK9?yUYiA=2c2Gt2*$z>8ZR-(AbV zU+s89{99#ep1y%O!-}S5?MFhb=U$!HZ&g&c$MNv*d+*o98O=PgQIE?~?WJz-%B1j_ zcY4k)U7&C9bh@4B-qu&goL_Y=baHY&#dKFcWcDGW$x|nsWLy#UozW+F{{Hgl?ep$@ zPma%sF3Y`Lxx1)DU{`Zu?@r0abjC9Up3ZX{FZ}5jS@M#d@%=iEnEAS1nvRU$OXjaz zYp|Uu;J-o3Ofg>OIn_Zmyc;3aEO@uH{lik>pV-p54Q{FKvn7m+076tz#Igd|bfeFCT;4 z)2|jU?%#FRcW^L#Z20?Po5AM)+8o=KO?@A9K7dz?wRO6WwhJowBK+KrQGU8<@*%s! R>wy`W!PC{xWt~$(699!w;miO4 literal 0 HcmV?d00001 diff --git a/src/res/mons/138_0.png b/src/res/mons/138_0.png new file mode 100644 index 0000000000000000000000000000000000000000..75185203ffdf0f1af51c6f7336a8d708d54ad95f GIT binary patch literal 891 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|484L_ek3C%+Ln`9l-q0_QauhlK@wypPql1E_=&B|inN8J^$2?^w!dY&zF3J^$J7nLBsZ&*rIo|Ms>j z$oV)y{kMfy*Uwc<*&8-J{IhG|?)}Tl_N1`UQ_S#9^Z1c4`-nZZLKYV*LYV9=nkGn4J*u1BB z-n(zh*Z<=d`nu6d{e8if@~ihw75TfZ|Nh|n>8Gc(kP)dao?=u zY+D}u+c1B*IQP-q-es%q9;$sQdOyc3XX`JyNmn-BeRuNw{P)(^@}_#8Z@P7c;p^{+ zx2wMVEqlzp;mAGx&qu#S{gj&iOUEN`;wd-h`%gu>m)38K_}lz2VEenb=hU~&mU#0t z>Ctw4u@v)@L0Rh)Lu z+rHO6NJ*q3k?qe?B^EPoNBJ+muTH)na?$Hp#ioxb9chjk-~H0R)^1hSJ)tP+Sug2r z#Mmy7s_LjV`ShYyn~!9l?JDKi(zGUW0c-eMueTnr+m_s`Q`yOq@x7SCF-$0iV+B*) z3BBL{qNSFpta#=6*8TY7H#2I!dT)|9$aCMSd?}}c^QG9*vuVcr-`V>)pXYz8(KGY> z^J}(we|ENAQ~WWhgh}Lv#dW_~@2@}KZ2IoqpPLVV-t_yue98ZxW!g7$S44T_D06K)!|uHPlgIh1O;2{E zJ-8pF&Goy|ewF*boLzT+JbZ7mEXw%9{5xu(e1QNB2i}MuTG*6#V1cIsNYvBS&t;uc GLK6V-p_97+ literal 0 HcmV?d00001 diff --git a/src/res/mons/139_0.png b/src/res/mons/139_0.png new file mode 100644 index 0000000000000000000000000000000000000000..196d3ffff6960df87abd9930828e5da48137c258 GIT binary patch literal 1220 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|489)PdJY5_^D&pSGR4lmdAmF-QSCd0PM8g1xfP{&N2@r^s%v`u& z;X;ST1&$3192y*fbfZI~V}oPbo!_sc!@sJy`tE-9$9(b5IcrkX{@?$5ce1Qvi+~dc zQN)D$gGqw(3tLxK-fR1~pW)E?^vD^!&E|xo$CIy-dgc8UA7--!o;rzqkZGInMv@rMmgQ89V-7 z53BqB@ZrbJe-e5QN-WTpf8?C8e*K%K-@8hy>i4(b@K0h|_xPiR+LZXH{n|NF1|1xi zl2)^RD_3X}aNJ(H@aw%RTlY#x^)PnGiEiO<*=OqN`=a@7(nSX0=M5Ex_OC_r{xXH> zAMiStW-KUczxczczqy&@^l>M!AM}_haj1pSbN6RUyYkgG;>L$^75g3+KRX|$ z^=jYBrJpssoT_Tq{M#qU#nbd+$B{KBpGs!WFkrYC@Z4BG?{hb&!2Sq-mz*_K9XoWj z%ir)NwY=k5;I<<02ahT9{>$~}q|)MC544m`?&iF~D>i;`uCGr-#a$4S13$CAX_a}3hns!{}O72T{uAgJyssF6y#l@XRopRo#&gpo6 zvTJKcya>Bs;ocoH7OviNKKBm~XE2+>@69GtIi#}795?UryobHtUc;{V%;R<0b3%5JhtqwHb;PzPmelh!@?hOZ76r)cC z6Hf8w4U7x;Aj&IQFb=6*^|XEBl)TSa>YqCB@5#iMDpe=VN~+*yY}x$ z&P|qLwuY=q!N3ou4C?V`Yp*cWh<2`?|N4?;=J%Feg0DO}?-=#mj5)H(_tR4EM?bPS zUNwk?zG0HNwWZ>F=3e7Vm)M$hp6`EoXvxKeOmT}*;t8L}Vwr?Tf}o@{0+O>{N{Mq^m8YhCw~zz$UWeFfTgl}*T2dP?dK~+Vi=SI z8jfmw+NChH;Mas9m9-CEk$<=)RKbLh*2~7a7VI9N( literal 0 HcmV?d00001 diff --git a/src/res/mons/13_0.png b/src/res/mons/13_0.png new file mode 100644 index 0000000000000000000000000000000000000000..0f0ef5467ec414fca5fce7acf3af4884ff255a8e GIT binary patch literal 625 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 Tl9^k6fP_6={an^LB{Ts5-|?c_ literal 0 HcmV?d00001 diff --git a/src/res/mons/148_0.png b/src/res/mons/148_0.png new file mode 100644 index 0000000000000000000000000000000000000000..903ffc14638f583ebdc6edcaa5ff5bd029bc54bf GIT binary patch literal 1215 zcmV;w1VHPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D03mcmSad^jWnpw_ zZ*Cw|X>DZyGB7bWIx#XjGBY4BFgh_ZIy5qvf0~#800bvVL_t(|UhUg0l%h}=2H?A! zj6|YwqR~h+8jTZ)Mx)V4G#ZIUBauiX5{*Wi>wCSQdu0%3c4p*CIzC;0jyLInu zx0&1Ox84?jIwHeQ+Z@oR`JtCRpsMyJiXyl7(R?1eE&5T?`pdGq+XLhn_JIFjTOLgq zhGsk-nKWIyPw6SbXnvY*ic^vwuFGhVp76Ol0R(2b~F7kuj76^ZQC~WX{--V9} zI*w;7z)wICvh~~)MQK*WZ2=%(PS0mOOWWen3vdR6Iie5YLoX)bC{Av|$B=^sa7B#p z^SrQY^ngC;MFGO`*lk@}JjCJbvOW(r>veh!zAt0HP(KHZ-{0*v#(S8!dqC@bYKHOJ z?DO0li;evZ`V>B>{jmstvARsIAZI<<{Bi}1@IeaDx8Q}EAqeN~ZRhTC3K}JuU7+vb zgNgzmcnQ^qRxd4I*z^AL@(STY=RaOrJqm!~#SavJCPNL>$9rG_z5xNp+sc$#X|iO} z7-oG~8jLQJGQ2_$=zIu5_(j(KbZao2m|(Q9YlM!|(pLx{Ixm22`NidS!##swWM<3r z74CHIK6xFT6+nicXuh-iZLRruIA7&1&sV$K#O`A*pl?C}rpx>^j8?6upK@zi7F-{+ z9Zz2%p}O5hC;*;-;XZ$w?(8#ww!b6a=`Ze&RO);V@Xu=Q84g3Y)yxljxvNZl(Oihm z3xG44&xVs8Zwn#8;u=E2Zi3HojK(5#UI4fk4u&89VGGCv><2HmDdftzeg!St8jH|r z0dVGH@9mf6HJp0^?GAxm%ayPMFJW)CyX$QVEZ`RbMKDFSXiG!?=R6UQNN z2|eFzt`BLj$oE0L2$*v;^#T=Fk_ZIBU_KbWz1h#g91mIk-j1H7u63USmgfK_3!SQngR$3_0jvC^>G~gO+#5dd~MH+)fM0ogo}`|Nazwg<_3)WP2p>$ za_q$UzuyBe1mSF^El>#^nvPqH0{aGqrq&N?djMX<5|iNL3t4ptT^1h-gYdHl&m6j< zdI&-hWSI^2H?90La6JAV!q@t~kjfzlFs|c;t0uT7bZ6h=_=Yh=_=Y di0G+|`2%eu$|sWAw+#RQ002ovPDHLkV1h|%DZBsx literal 0 HcmV?d00001 diff --git a/src/res/mons/15_0.png b/src/res/mons/15_0.png new file mode 100644 index 0000000000000000000000000000000000000000..74d261e92901d91e370af2a52584b085552f7fb0 GIT binary patch literal 1049 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|484L`}jh-%!Ar*0NZ|E0DIf}4-xNgQIDOjkaBqZ3l!a>PDL_teQ z%g-&uMM-Odhl*~|8 zKA-OW+bya@5G)eUnkODDa^EH+zc$w^_WGsQ-%SPoEpARVVocpS;jzn;H*3CYO-i_w zGbw-eGRq$;PdwpZ=wY(>vhqdm`m>G~Hj2f>@TG3O<56|-@U0Io_KPc@i2qk)dFsr+ z{b?zY+k7XvaIZ7uZ8e+JbjyC1I8*=gu+ZZ5Z@fMvaVWS&^K{ZI;% z!BZW!^q{`j{Bqm4UC#B#SufO1TWZT|HEEGD)A@>sHS$d_wa*s^FTQt2q@^?=#C($P zoj>>E|BBVDd^U-{%(h~ZOg68FSA9(OBZW2MxnjZzc`Pjo&lbnLmT2lf@@4Wm1<$Lw z{@!sqU#lbb1fFs&%~y%wvD@=`E9Z;9=GX75{I1fy9)HL0#TLQHa3%G;yz;&KgG-*M z?4LM!v6q#-Sy4%y`s}ZB&s@*5I;D2WWcSfszyF2U)&9|G=6}9vU$p1WKY2z!60%rY z?(tvU@+G{F`=9>iiTAX#r%Uh$`$?ah#L(%u@t0Yy8sm$x|^qiW5kw6ZM{Gn^Y(Sa(-`*vJ4Yl-8p(A%WBEB(TZ$F_ zZ@lzmhq&IA-(EHR!DosBvt`dsD3IUZ{iuFY5{FPz|F4A#iXH!g=JS_Y8~&*CaQNXX z@>l8YcYVh!`|j6Q*KE%fTX`)*`A4G40$KI`f0y^MvFgysWtE`z75pUXO@geCxQ C&c5IP literal 0 HcmV?d00001 diff --git a/src/res/mons/167_0.png b/src/res/mons/167_0.png new file mode 100644 index 0000000000000000000000000000000000000000..d87d264ecc786be1369b3ded099fac39b328e6bd GIT binary patch literal 874 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs4ODh9oD-(ltSqg#-3{00iT^vIy;@)1@FSwN;ar|R?G;0!5pkQOi3X_~-Y$AaCFX^S&jO+i9HCxb;SF{+2x&{Lji|LzqN(Jxa<+Lbc|IJmuLT_H* zeCU!+;na0E?fqA`pUS^n?OvEO`Ptu~X^CZrPv5n)SXDQ7`Q*QDug`8;%DurXQPoZQ z)BCP$T=^ii`m zLo-Y)=Bsys?1G=`Uxj}7JGq;GoyLzv54P`i{@+sj;j3l+i+d+Cc1yNvoDkfy;|AN! zx2%Ovn{L-}UD~?KY4*l*TvbW3((_HG-cvc>FB>T2Bx^4eBm8sarJGaE2Ku|t{#G^nTIrAff|M k&+|a>B4*U&RUwzQpW%U4Y{=p0qF|7er>mdKI;Vst07&wRA^-pY literal 0 HcmV?d00001 diff --git a/src/res/mons/168_0.png b/src/res/mons/168_0.png new file mode 100644 index 0000000000000000000000000000000000000000..e7e4a7c5083e00cd9ed390b355eff014d3c2f475 GIT binary patch literal 1248 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs4ODh9oD^r8*g@OS<13f%l978JN-p*1iS?nOt_TA6b%}q&pqDP8~k&%&5=NcC! zWo6}wCp=Ps0z#74Z`W@+EO^T#TzJ~O|9g)!n_bxV&-nNGH_O@toH!I)h#@}B4_I>X zchbg+^6gKiI{bN^YW$MnPucU6j2E}xykt`P+HKiM{qlJ-90v-;XRf+4a}U?qr$v=N zwkIsx;jO5fmH+SENwx%O*?ZGZ-l;>MC=d>lyG_@P?E;S93OeND!^t$^bvCZ*cE3-j(!dhm*cy0rid^2v#_v?%= z&k0l7b1V2lp3fD(-4XkH_T5#u+D1-dvmF3slwdtMc*Xzbv<&H zZ2OkDmhI8=_G528ZI0mFBj)#9CV_}%a{F+f?j)1V^0iT8s zUehm{1vptuH%zhBVLvd*ghT7!$7>>$?dG|XTpBhuzG1PaZ(L=}*5~NpT65rjyI8YW z$iXuV8G(ko^_KT)t`A?w+~$z+_VvWC0@WOA*uK1V*(?>eUg2}9U>Y;~k!>3kHXARs znUWU1elJ&pxY&|f+ZBD=dHg0FF*$p-Dx^l?-}_B*;d^S&AD5_;OB3c}5nHe=!JFye zG)8|3Tj?WdcUFn&s&9&ao4)`4Y>PhM#Leclo1Ip@w^pbTj*iwmZN0nk#o@@7D5f3a zCJy1-8LG`{6?8bdFU>jCzb)kd+Otl1^6mz+pB3D0*=(A;gX!IWJ9!CHh7(0^Yf5fA zY!?1)FK*4;=Wd~|ZA-F>z0N3Hyyn6UkkykFUz^Cff{ZvC{;>Uz;MrSA1g*6`!M z-XEGIr+EIXu<-irc}Mu&xEYK-MY=aVTD{jUjj6>weMzo{OE=h&uoGK*BhR__brRR*{ARP{`btePGKhw#TEg4#F509 z)?A@0SzDiPcpbJnH0XVq)}&t(@BX?VZICC>-=ZA%5zptdBVGZT_G%|Y3d^9g^m5u{`zM& z2`06F1x`||7b;uA@`z(N>YyseSTV|{K`~P zD%l)Zf7SVgZocDT`)^ast(gTTX8c{jXydMC+pGR>hTW%!L1wal=d<0oGoRy*`=1># zN50RjblKOr-`{g{>B{78{zzZv`^=5Hmo$wH)&99V*0k8S{+KYA(ZznojeiRcw7937 zI|b(hIqT*I)_7Pk z>r_R*jjrFL`%6&1|@>y@9#U_}R)tu;h zY3cdysLrR(XFJv@Z@S<1zTs)g)2g)(pV>rMeloQ$eAt^}bYT6@mQ;4Oi`>_nXG!b4 zyPKRVdzHg~%K7WwR_jlA*8Gs!HZ|#xx%B-%hJk%2I3lkUU(fovRet*qtK!M>_hXk| zFI{}_^o#cSo8u!p`KRt*(J7zIR&eipl9QRv^rLl;4^CH~l`lE(v}etVEi6YLtxwl^ z&FG_k(>){2#N=94?cb-;-`Nh&JKcL~(Ndi{9zlPV+a;fD-&9tglTUGa>MQY4;G7#z zQc&2vuDspb)~Y;pNWGYJF?QYUIqA`M?wnfPF=lPAcYba3;!W7SKH`pl^1ZDxveHu~ zb54~i=_ofDE9yW literal 0 HcmV?d00001 diff --git a/src/res/mons/170_0.png b/src/res/mons/170_0.png new file mode 100644 index 0000000000000000000000000000000000000000..f403e2dedeff7d5eaf9a3ebd75ee14064897b9dc GIT binary patch literal 869 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs4ODh8tD-{>H{Cr=OU6))4j?||4(T8?`1HR zMRl!ic*Vih2gOdPf9F) z7;B}yM1sYb`P%7!+uhe^)qT&9bAS1k^TG@Nw4HNH^SAzyjK43MbM?o~l6SX~O}yTe z7Fym+f1{?9zkcS`cKL&UcdnO}-mYtwXZ88um!~i6ltq4AJi;{hN3zAX<;(8Qd1<{n zHuLFmA;CcXiq||F0@pt{o$)yB@RogfH#+7oGrP3>^YI7X-{VdOPMWf2Mw*kw>IJ9P zC)xDYv4$Po-eAZ1C;!tw7L5;9HMTpah)4U0wO6SwexN_8Svp=m-R=73NQLHu3SE&O zuCZu52s`mN@K?6%(YlMLyYJl7{;~SzA=P~>rS(0*PG8ntwO`KPxxq-JbGur?KD)2m zBHxwB@V7=kzrL%|%(uiMYFDl029+&SI#eWYZq5^O@w}k(;?gS3ZFdU=t}w4Estwk> zxbyE?_tPP^mp9JYFJ^FF-yv+Y-3*R5yQx}EK+F3Jq$KT`2 zDx-GKn^tyDZ0c0?i)%8hzK~r}pHrY1uE$ zzj5ox)>Fx^`mW#kmw0)aQta)22h^{~v8eU&dT*B8t-eU|W!Ap$EI+1B5!!U?y73{i z6rmr>boyAf%;F8(Z5-#jshTsWJWM$}dAk{H9(BlW%@QTSQYIDe m_U~7Ha}Kg2C%F&OmftxqO(|?sufM(kB;o1m=d#Wzp$Py;$Aszt literal 0 HcmV?d00001 diff --git a/src/res/mons/171_0.png b/src/res/mons/171_0.png new file mode 100644 index 0000000000000000000000000000000000000000..b04fa41ecef01b670133db47d9a9770d11939ca4 GIT binary patch literal 1027 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs4ODh8tD`S)DiC$$449wY{E{-7;ac^(xSIl;hVEb@7O-W5lOF;NU2Um(pl9G{; z(WXs8H!V|ARD}#1XE-P+t4$CT78LH_JmTUqUw!xYqUlVkcdZV)fB!e{`8=8H^|ycD zm3I;mBmgG5e7^lw@N8VyhjaV(RdUoxvSme!mbtVAiY+)3=5A8`(_Qb+8jZIdGK)12 zSlyGqDDWp|;)=+EfJmGAt7S=P^(sR zeLJuFbq+C%0#<3Z?;;kJEZ*?_e2xFvy&vXxDa>7w+VjCM`rgKz=fBSmDq_+=$tX*^E`j2JiH7u63d(0gF zuc@E;@bzl`XIr@+A3QF7S!O%e9{Knye=f&Vw!i;=^xenJk}@-9h+ep(b*|*cjl*}( zuwT#b`+D$wF|X2pzn{kOcg##G7(ZkvuDGVQKumhy^Vc(1-(I@m_p#U)78}Z6KKir! z?Cy+2HrNUT^rD#{F>jgN>~&nYqUT_xzc##mRmD&c8PjH?rMt`Vhc- z(ER(;&;)BKz885vetvlwSYloy;r+wlk7NO3S3??K=I*CCT`NEBxg6VnbC(Xw`$Nay ztUr9>%W;Q0ItRtJM7*3(Xz_aU!js%wQ?G3OwE6On+EL3PGx2(JVLGblClfSK;lfJfobK%yw zZG`tRN+xqc}`Qxv9QTcG`y>~~aizihrvypRJF>j&V-)W~BZ_jdIow0&r@>|7g|3$L6s_yzW zUiUlk{m;L=6W1GRj3*Q*FEBB#cbvZZ!4?O1ABP!EJ|YipJAePft6|sScJ#e6Git2X a@NAyHJV7}B{J!{OAQ?|rKbLh*2~7Z~8ZZX{ literal 0 HcmV?d00001 diff --git a/src/res/mons/179_0.png b/src/res/mons/179_0.png new file mode 100644 index 0000000000000000000000000000000000000000..0b15f6e972a6a303531613d34550a9cd07400297 GIT binary patch literal 896 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs4ODh8tD^sH*D?E-eFfhIFba4!+hZ+kdPrEk&z)0 zA(0UQWC58O5(Wtp0SOra2?hcZ(|*R*OnbU?u36~i;;;3So?2V4y!HLvy}MU|PQV2o zn`( zKHB69dHxXKTp@LyZNIO1q)CbE3pY80!lmuRs4?WYQ(ll%4+pI@?H_uR5fso!Vn zR;Zqzc6upiTI&CO)l2(cv3LYL{(7onU;1y~t21)qCBFOo`nu7i@YWx(l<5LOAEw9L zys;*&c0qg0g~JxFeoqp4nAUnm=%?k^g>w~GrvLuN%(XI#StTRLN~K`ieb)VFilj3P z{W>PNoZQOcG@HfzSE{YWJm;&~jk{bedW$wk#AWZ}-qlkk`E*i;>xRv$$0xS%Onx*; z;n3Ny>t@~(GV%YGmM-+$=hUfvyfu4I`-*INyZp|yX}-I*y_cPC@bJ{6HH=QLtrq05 zc`WdIX!@aFZELusY|s7=Xa7w3ZtUW9dYkX13p;FbCmqXkHw~`jn=ySQ?~dJFDyBD2 zZQgvyQiiW~rQ~GSTb`dhzUq0TGr1{8yZy7dcXQkSE!(V@=zPrCyZ`7~=AdONfwNZ1 zNN&!kj$FI`_L+sN*1g%Kz_@R#wA4Dr^>g{R1V%Th+;Bep;Jy*hzKXZSw^qo?9^SiK z=hV@n`|Mw@y%2w_(o$Gmm%#SNdgbR-v6)%He+_>mA8w5>-pV;)qW154aSzTv(Ff)G z>wdlysd@KK>#xOe|NHxFW>wK7J#t;^%Kf1RRmnlZN`s7yWX=AlzJ7uN8oPh|M2!kOndZTFYO zd-naf{YdF{Xr)=qhNpXDV#VM4Hd*u3eV6!uxgZQB0XFCz`@?khS*F5`O?#GrWISE{ KT-G@yGywp5MUc$^ literal 0 HcmV?d00001 diff --git a/src/res/mons/180_0.png b/src/res/mons/180_0.png new file mode 100644 index 0000000000000000000000000000000000000000..3f17404d67d721cc63c0fa460de2a4e780de0f55 GIT binary patch literal 962 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs4ODh9YD+7b~xw}p>FfeO*x;TbZ#J#cH0?15EIM8^Yq4B_h0}afq>|BSf{`bYYUd_DZx%}kJfBu{1>|lIb-S;;}QHd~E zv_E=Aofu#HpESMqeaB0}_CLI+v(JX<{qKD&jI+|+TyJd)Upx7)-KYwwqIJhwEevYxTU(voQjcKQ&r^r9Kwe8aPxgrPaWc2$kE$^)O z8F`<1QrkVYyZ75BwJCYt^O%@B_s`mM`xvh!ZWRiA`do`cr6Y;cf99;e><9lfEZMU( zTT1rNx;&Soarbwh`pGioU(ucbPX}iwud9Bm9XGfr3PzS);#Gb9V*}SNu6@2ur|o9n z^SlwVf6Dns_4ilA{(Nn*?Wfv5f6*Jurqz9R4t3cXRTcL&eYUTHzrS;s{r@N%-M?#o z-#zjAboZ92yO*b?@0V!mUwZ7b&0n#EpBry&nouLUqIQAA`?H-At6u4(M!ve=%Eh_& zuJjAp4L|Ls&6e2QzCP14YyNCK#|p93HNH)&=iFh=c`AH-qg}z*+V!);w@*^Bwrz{d z_gyc)Fl1@@CSy6{Tj$EG4_~~U{o8Co{hYs-w;$uNKKXO2Afry1b#3pd^!iw@n9xnV z+rMjZNCjsl9eZqSlYTtr9`hVMXTchl%{PAST01G?dqXkflIvmWY|^Ha9=2xxl{|Lf zEANe;#SMI0ESWP_xd#<6xm~c$m)Tx>h4*{#XBi7y>o?K`{!BB9icih!cw6u8!6RhY z{;623`hYDb8`Hmv{O0_#OTU#@aXN`MUlKmeIZa09fWVtwE6xfpep%Ff;JoUO2VcZp zna(Wbd-LVqy8j&iVy4ah&owFWJp1J%7wlUO82@lV2mCJo7(xOWX5A8V?f_;n22WQ% Jmvv4FO#nT!uC)LF literal 0 HcmV?d00001 diff --git a/src/res/mons/181_0.png b/src/res/mons/181_0.png new file mode 100644 index 0000000000000000000000000000000000000000..a032381362f30f6b770419bfc73fe8b11ca9710e GIT binary patch literal 982 zcmV;{11bE8P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D03mcmSad^jWnpw_ zZ*Cw|X>DZyGB7bWIx#XjGBF@AIXW;kIx#Tzc8iDr00TZrL_t(|UhUZ}b0R?yhw;fN zBywdW^5n|MNF*{6xia!(@;ksz(K0+uHl|v)z-2vq*C28 zJud_R000000000000000000000000000000z_p5^*y*T;yGpmPL-ACw|-bn z+A%@iUpFV;{fdHKKDOgYwTwN;SrYsW!nxcSO-l!HAYR4bX>e9T)KjjR1t|dwb)r1D zd*UVm)olBqnT`UTl8_HwtM)7KkE6B+=)Fs=V&D~gOMs_F)&shqzeuUMdLv$Pm zSi#qtA#G>GvU&cNun^acRL$q4%b`pI@&$L!h54pY)S4cxI; zXi(Nbtuo{>0j_(14ZsSZT6tAfVX^qUTPkTL)D3=z=irO`9-zQmX|Z66dV^U{U)tZ1 zEeWypci;6IeD{<9ExK&0LD%_Fde%MkPFj@Zt%>ftp1E%s7RcYVV!fx{Vmz0fyR+{B zdCTHfTL0Zpz^zmf{C`A&C-?vW000000000006#+b0L_Z|vEBUI5&!@I07*qoM6N<$ Ef^@~h+W-In literal 0 HcmV?d00001 diff --git a/src/res/mons/182_0.png b/src/res/mons/182_0.png new file mode 100644 index 0000000000000000000000000000000000000000..351e1adc8862294d2c60c77d4d66c0f100b7c0e6 GIT binary patch literal 882 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs4ODh9YDtgm~MHxIEGZjy}hA0;gNyJv5&_!Q&fc_BRgG`CZ6yDGIwqg z>U0TP=c1%Naq0;#nd$nu5qahBuH22;^!fkU6d|vfiTAwYE=d8c#RdN57<~)Oe*R6O zJ**`2&-47n_irhm-qilfKyLppvAUkxDIy;}XC>zD-dJTOy}oX%dG(6g?N9!MYguz; zT+fyF-CXgac!$`nU1w?^9Db!BSU<7pZS$`Aw#@QOYYv1je^eR!y>;WSDU$@gwk=bb zxA|WG>~m9>1V20;^e$@l`ZK%AufJ*)b$#eHb$3|opYNybHt&1C`2L2)_n24h``*ZZ z@cieQ`SUe@xE6le%k=)ezrqipQl=QqnHnE<|NiU!pg+I$YJ1|c>}T1F!`6##p2xpB zeUE8Ypt{4Z@4L^|6*C1b*zNoNbYGZ*hP`H|9pfSe_SAbf3SVcP;eN}i74E3@HGY!E zfx4d?e`cBLTt6JQz-WnY#L^Y#+HTDc`k>lrzp83o=z@g!SyOZQ@*ZdyY6TYM<$1E& zd8jeII^C@OYrY2KO1Ah#`i@-ty!xURELhz-dE&mywN)9P#f5;*6bU(7b+%xuKt*r( z)eTZ6^VTm53k@z8nsqzN(pQV~qME{)w7C_ZV)IX@^M z>Zz)DizUPC_vJqBe>oouxpwVKwUgZa^y$nw;a*N&i+mc=_A^!P<2U{z{_c#vSJSL3 zUkik|f}&Uh)f_h0N6Q`ePuuRD{oMI^`hV?M{=VbKzE{akoTMRqVcXoj^WRVYcg25Q zZd#V(?`v+~)zy@$BBe=^BAQhCvS@@JXdze|*M z&9VQ+rdllHrryhLsCtm~Tg92b&zbP0l+XkKNJ)g` literal 0 HcmV?d00001 diff --git a/src/res/mons/185_0.png b/src/res/mons/185_0.png new file mode 100644 index 0000000000000000000000000000000000000000..c937d13d7b81fb7e5ed99be02d8619ef166faa9e GIT binary patch literal 990 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs4ODh9YD`S(xy1K#)49sqxE{-7;ac^%ZPPyeE!1f?B+s|!I#|j4}Ev1PaTq!QD zDJqK|sR&hq2+2;MxWAi{^2CXy*Z;D&d23$Zx9Z%7fA9D1@hvX5vD&=bSXxnu09Yh# znAas9v%LP^obu%tRe5VB=0#1cyM8+H>dWtI({Fkk$~_E|n-_KcfBXKz-%oXad|ffA z^!l916MT&=&sb-gPyKfupkXCVNf#gKI-{%dEcD&bi6|Zhy|S z)LmN>itMj1XHoGuu;%qrt>sdGP9KPVcrSckcFS#Dj?MDo?+j0GU;Nms;pDE%526+K z-Kjix)H?Q?WZcdds?IUW>z zOVW9seK$|xeEfFB($cFkDXmPsvnJ^Ev);@VZ)u3nlf9d#d3o2xoB8UA4vqU_On+F0 z9osoiB|`GrwW^0^jQNqeYMY|NXR+*Q+n|@RBkRJpN9nIlo%(Pjw{X|7I7gTQ=Qm;!hN6u&XzG z{dC=o`SbRuIYeK%qS|;|;lJk!sS9_fF5i8>xqfYiyMPuW$2QiwsGK^^eRez=G2$gW ze;jvRd2(Z>!lnXFhX;nA+iwS^0F7G5wq9vlY@x96{T5G#T?##iA7t~caDV5w{lC&3 zv6cn5J5nCR2v~A1+@`Q6_JCQ-gJhG5+m{${9^g5ycwoo(`*7rWDF+u6u&?6}%K_89PuW&`F$1$7gQu&X%Q~loCIEWhwG;pV literal 0 HcmV?d00001 diff --git a/src/res/mons/190_0.png b/src/res/mons/190_0.png new file mode 100644 index 0000000000000000000000000000000000000000..a5630a22a14f0fa272fdff17bd9a1024d1236575 GIT binary patch literal 863 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs4ODh9YD-)wsez}JX3{1y8T^vIy;@;lSo$$y&;@HPGnkqt_F6-8~C{3K|0b(jm zoCu<0fUNLqg|%^$g6y8n*g12yZ{ENCGjlF&F}VHxta~>z&|X~NgZZ()FI7!?`{aLr z=-0Rq-@S^n;?MFw*uc%U9b|mYOHk9Fl}mw%@*c)$qZp?t3p% zHx+#le6>Vl!seehYvse#wL_tVR4qfJ-mBpck*7<5-Zv4 zEav?+=Gr(;V{ei~6Z6zf@iE&2UcM-JRCu-A6ax zOX+|2z&pCA>hRgelRi)B`SwY<+3|Rms@qY%5ANTjC%ihoh2TW}{X0K8tnBi_QZ2=*$l3D8%3`wL9Ty6iUp#-i{QIO0kJbKMJ~%x`Xo3A# zp(J*p$p+tQL;b%C3J0jGzpVDD6&722bz!Cczku%=(;s;Aab{$k6|-eM8t?4-p84Zk zh2;;PtJrP4Bl@-V>mJU!yXU<87P}nG{lC9z%@()i$^NF1eLv<*Q*rm&vR!b@$Cd;-0R4F6*2UngH^Jf*1e* literal 0 HcmV?d00001 diff --git a/src/res/mons/193_0.png b/src/res/mons/193_0.png new file mode 100644 index 0000000000000000000000000000000000000000..a0ccda6bf67536ef3bda85b981c94ebcb3e75c3c GIT binary patch literal 924 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs4ODh9YD^sHy5&Z=W49qN^E{-7;ac^(v7d&zhIsWnO%2OUHLXw?5JuXTUPk5xL z2z9#5b8%CeIC0{MQzv$r?e~@2?mpw*m%Mdv?$p{F^LTrwU;1AC`_pkopv^eJhtOAN z_TJ3?F;V-}+fv!t%OC!I$alOdWXV;fzh6GC{II$5+4ZwOpZKjU?*6-nRSio&NIH+*QZc+uss2D_Zm7_p6fHaEWi$ny)I#{yFox9Obu;JGAb<-Tj}b zx3(4q?ftbiLg3d<(aT+{HwugG-NUn=W6q_2{a?0kZ29nkVO^{IipNXO&aVwLwR^QL zYSE$7IrrI@Y{=Quve@lt{_V0a`&B(3m3vy|{(sNlqS&H*oGV|4p>%WF_S$)GvcGS7 z*Bo%Lm#aQ9=daZ^;kWK`bqm(dK2yH5ckTqMdrktS+q%{Zq2wZ#pb`-B^7qpv+Q#3_5<_dZvE2@WKB3K&bmNbrdNS;ea

BdvXz=hE-LO?+sYx9({8!>^bAx?X<2Y=(P)jQYqs;Ynz`fUr{@fBcJ`GW zT*Bjb>fi~^<9)3Hhks0bQPwbJcenk|S294C_b$w|`+F!q@(zs}gb6&Up^MxOFxlgG6Y`5&3`9+x%w%^{U$yjq`M8v(U p{yy*T9lOHbw`x2nskEWKxA;BRv+l!}-75S+GM=t}F6*2UngBYXtX}{C literal 0 HcmV?d00001 diff --git a/src/res/mons/196_0.png b/src/res/mons/196_0.png new file mode 100644 index 0000000000000000000000000000000000000000..95d7c2c2058f9809ec79b9f434302a5f24cf0c66 GIT binary patch literal 1048 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs4ODh92D+7bSH$>GL7?>M8T^vIy;@-~EEqD|l(t3ZL)4DY-VM-IHPW4dPBox`{ zqBQY@hl)^VkBeJa*rQ#4nU;T^#X0xy>u+ks`)2xm`V`bQ@AJLCp0j!kk4YpGBxd-1 zd|UK}ck;)>r=M;~tBz>@CtaP&@aX)p{^=KIo=uFDUo3S|npx%FLaoamGsEL|@7?MD z_~DDYrh-Q&+><=eHGKz{d-u=E@R0Uj0h8~4pZet(gTsfIkYgSFAGll>%oRM^64&%2 zHE?gv^Q+xuO$mQ2Zf-mGH-BGz-`=IUQ;qYUwX9caVO(?Qd_-sE8FP6937%I4AJ_Zt z_*NOC{zstA?(mQMiY`ot8V)~;n6Do;f3igJ!mHXY9)}WnH01g+E$sU1kG4EJwYO~l zyVKGpUs>aI?OF^N1iZdl#TYv_t=bdwMt!Bu>D7+$mmO|GH%Z2+U_&C%^sm@enoc-vqX<(|umo)7;jGuoi`7U2v zVk{N2ZrPWRdH1}$ocOk^t!q_x_~WthpH$*LiARbWY-grFF1fYl^5?qwd1kJ*`oabZ z;`=ps2~`G8$=o`7TibGvmLEkO9u*TaLL-+hziE;i|6DGP*P+I-$nDSXi)-Yx&v{q8 zm8ok#e>=2$wWk$RB2T~`y>F|(#Ms8CopaJFJHAC*tuxNia-n98aO;|vzs$bqaeUVC z=qxjc*}t};@A1uCt!w2kza&R?d&Q)0FR0hED;A19t|xGaVbT(zr)5=sn~WGA8n(VZ z8x`kK@NBn=T}zcz7w0X`MKQkjI^*Z^Z9VaZ>D0xTf=9OBInQ~%T72~)#Wg8s#Z zjZZi`PFqgpfAm=?wQ&2|<7cPFNtf7M^PKbf4#zro)tsVBtCl`-saRks{EFRxWuu^6 z#K)gIJEC}7O%>c_i=;y=7kIg!jk(NnOmOwW0>u@)S#_->tGzvAsu6owr|AFr)j!qrb{l8<}q{;5Px# literal 0 HcmV?d00001 diff --git a/src/res/mons/197_0.png b/src/res/mons/197_0.png new file mode 100644 index 0000000000000000000000000000000000000000..c9e2fe7b20f53774d9b49ab7ee1c00ce798a42a2 GIT binary patch literal 897 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs4ODh92Ae-x~s}}G+w>NbsKXMRg|9JB^i-(F(XOD}U(!>*!PfR^A zb>fMs>Jv|#0ExOhviRpbi);PtTaQ;&ZJQS#sx@Kzs<-c6&fLHVv=;|hu-0#Ru|(R< zh5vpDRoz=X|7X_zS9`hd=9#mt{rAiNi;OM5ZYE2Q`{Kj!|La6C*Sp19@;rX$C41BpEkE0G#cWlW`DdNeR%!cOSFU|c zs~_l}HkuOpHEe#@r|&vvp8wwP>vN>MWA?Q!IaP<_-8Xf%&2WF~b^V6%p6v^|Pkme@ zxy5n6{P$HwtR+*PFN|7ysBAZ{{NvaY%U*ZyUs&1e)*cmIdrGxj*Msp)`{50-`;Y%y zYqt38q@>2!wb#uL<_9$eJy>TorQvCk$n&Q2FO|-mjjYm&;YB6%*RQYNY4hzeQ?NWFX5{)yzHy-z~S&n;Xj(UVnY` zZ`x+g?x#kbfe-TdCMo!+wBq)Qd=AId}@otpGvX#V?hs!SXP|x zUS)fK&c4<2&2M`de^~VSxr(fM;YDi}{iOQ^`Wakl#*9*|*UCgHqJQ2f&2n5FYX4;O z+Si>ozH&M0NPct6@eF8CKl(zZX6|;Cj#z!Gccz@{)Dtt=&fV(yTA>?0+fh7r{o7wV z!ruui#It_cW$UTs>7m4E{>t;3#)ba6MFB~(-g4YuveQ97;nwZ?bMw{~ys@fI{H)a} zxFEr7bwub|&L7&d^v`(*FQ4Smu(n{!%i{I#zJHJEyJ)%hM(qFXXJ)GiEl`Nskh|$? z+|687bI#k`Grph7)1JwaA$P%F_*?RA|A{`Lrs|L82mM7#jt};8KGaWRB)UMindgd_tSU6hoyCJ2ghxVWV6sHv_rd3*Ql+#N69l>OU3vqX4-@x#5f`Q{Qp zC*T5h3j^oLZ`QHiHr@00t-iq5Y|#hjpG`BH>34t6yj3rR7c|_rv1v)D{$M}(g>XRb z_QWea-yh_gORxU+yI|ffm8c0!?{+=EnK9*0l|U+!NPzvV=}i3l((30uU#P?;F8*+9 zNNwiv42>6A=8GKO&t820ee^Y%JQKP7o^CtiqC-P3)=sY%Ol8$LuxNqy4=<zAH>h z{_C%GbsJ1`CT-RBem!??WLce@miyxZi!IN0?OQ!>-n-lVZmOqdZrmX&v;FBkx8{AB zd-k1rlQpsR`>yk>u~~st{-KZ8x@UX75f!-GtNG(`;d!>5@4v4_v6+7ZOs#( z&ONupWli|%0=d^_rl(j$e0Sf>d3B-giT_%U+!M@e9;`n-*VI&KUF@6l?1A^@Ou8`l z<|>ZR1COdxS8p@^DfNIq^}V)|sOOzElLU_W^@ktW-M#iqe*R={2O;}orOmG#ujhPk zHx6yE->_7zlcl8cLMZQDl?+{v+;84O<~6ow`#wKiaX)f(S>Cu#^vAAwf`9tIN&UIL>Hz!aZ literal 0 HcmV?d00001 diff --git a/src/res/mons/19_0.png b/src/res/mons/19_0.png new file mode 100644 index 0000000000000000000000000000000000000000..4d96ff95e583ee65e7c25baed726190c549203b4 GIT binary patch literal 682 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|484L_eLY^*;Ar*0NZ!8RMaS%EFarwy%6`{Yv9pb%iiza5MNa;&; zx;%1KnwViC)aiDsa=-00%hGd&I`4}2&7UcqV442G_S<$DkaKZ@=do*|udiBkXZ`ML zJ#$z8KUvGXN$2+U*|*G&s>$#_PSC&nVwvFd*Vjx%_rKh>@JHpe+rDu%Gek9ii}TJ{ zb~3N~(ze6ber@FT{cz~0N$8m~pKHEFmBvNax|i=uYnZhlts+`@(&9(&q5akkZ|pEjV2TBX?2|ME1&%Qb=1r?F*UL++4XY84BgV&j)kT1 z&-a{Zc%pA)_OL|lh|~UW>mUB@U-95q-W~pCz8yO*MBMP$x&B4qHSIhb(L1)L$&q4b oxu&m|`^PFe?-4Uf#7&UfY`!#))yAFYa{)-g)78&qol`;+0AXk(W&i*H literal 0 HcmV?d00001 diff --git a/src/res/mons/200_0.png b/src/res/mons/200_0.png new file mode 100644 index 0000000000000000000000000000000000000000..43fea2b61218c358bc02fe4398ee5a2536ae0453 GIT binary patch literal 856 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs4ODh92D`O*z-|8nA7?=)tx;TbZ#J#w7M-E)6b&mLD0qSJR%G-8|cFKlj|-9J{ab zOK;wpyRB87pW2-tuP5&leJULOG-@h31x>mQP4R25J8$5MH;)iK+%*04&cgiLzV%mQ`HyxyNRxSTX2XZs%RV-moxRzw zedFa8?)dpL*Sz8S>=hgOE=WF-vEJ)p^l8KM4_DuP5o({T75Ab^_khKd!qY!R{ykRH zuKZZV+M;)Z>BgI@XTqf`U3V+K{_JV?dHu1d@Dp#{n{*nSHt*BVay%a*B6|EB!#3wG z-woOis;qV=?f&}yxUR>+=pSXyVS@K2EsGZ9H~dm3{N|I-q$Be4_)Z?VntJ`Y=$jo9 zi#A?Pe9xb>Ehy(}%e^|47ffp=eKTC0zV1x;-;CqGc87JQoHqZjW%%Xq#s&LVbS)?_ zeSNiW+S{|S-B)&gf7dqKuiw6P{nQKFa!nq3e|XNYS$o<(Sy}(J`|J4bi>xlaz<+-p zt9|qqt~YiGYu)FSyUqHm#i9Fx`v&jNt3BZ#7Cm>oC3^F5_pe&#1Fh{q5f~&{T^@!wm)ewXj9N6TD=ZXe`EPGkrE apWDfwvp-4ty`V}fNW#H$|*~2F~?#aSW-5dpk>a!fg+MR_p1^Y>Z5dOzb>-94s6x5>hN2 zQc_$}Qc}NWELgY@h!#F@YGeRIW;S-7ZKurFue~|@^S>wSva~ZT->;q}<+*rm(cXFg zW?th`Y!PtcAWXzH7a7|pf7$+|dQ+6o`Q?{A+1LF(Zhlh#Z%)^)cTXHWR?`QD~IN;huSwOH@nr~T#ME$uwUV7UvjuG4OMUOPSU z%(9hs&4QCkUd~H>CD^|ES+CxN>+19U&)=} zpRPUfIO5TZPb+SO>Hqtey*ToVT(CXI!?bznO%s^QZpS>&x#Km(;_74Xh)L_hlJ}@+ z9Qp296YG;QXUe2Lf+Y6`7d>@a&hW>Yn`(D`D6PstA-y|+vnzdo4BTIal5JZ3=#l0Z?LHGG_>qm*TtTw zXq8mED?{~u3}3op<=-ughgiD1*xfkVO+PlSlo#Q8v0BDPJG}Pc{mJ6)nwNdTjz>B3 z+`Iby&gPQ+!5;%zr~W>+|+q$b4P;D~@he#3;yTQ+A_yu7V-)o}iDqq#?fT$OF@m#oWaop@+M z+SKiTbA+bM60ok5e;KJTX=2T4y z=Kd-Dzxv2~x7Ygd|Nl6P^BQUJ2Pp4g{Mdhd^0|ca3YokIy!$fKB|oz{NI#OwJ!jcy z7|)!XaKOR&0MN%->MU^$0nL&Rq?i}|zWCFwrO;=3W}(dd!)&v}?+9;GXYf07{Q%#; zH5crST7L?(+`2E!)%Uu9_a{SA_FwrMN2}yE$Tr<^rN3rc4%^$86H&*gH z%$9U>kbJdTp+WDZz^$|Q57jJX(0`#XdgTX)t3lV(C%@ti-!t0vR4m-6C2bO9Kp00i_>zopr08?5}$p8QV literal 0 HcmV?d00001 diff --git a/src/res/mons/204_0.png b/src/res/mons/204_0.png new file mode 100644 index 0000000000000000000000000000000000000000..0efe891dbc56904a97a67dea3a7cadfa411a2742 GIT binary patch literal 836 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs4ODh92D^rv9L#ovb3`}c0T^vIy;@;lWoh;=j(D2Z+j!{T*r%=!C0yPQr!0%+H=TO+2c6 z#d?F-EkL@${lWI-#kpz^y9It6S8#WlXMX$i?S}#DH`*Ujsd>LmQ}DvmPdjD&_GeW` z?!8hRQ$5T7)W*Bh4}UCsyT$%`x`9-$-j;U;Teom3TsT`3b?fdr>(7}svR8GldmcLf zE#TboWLx(K>94n4Xfsf{r1oG-{PhR#;+}7htIM7JbXm`=WoObiSDjz-GjMxjI!BFy z<4yNN+w*4gHAa{0{lAy{N5!wI_g`70S#0`#A7tlzbo2AiIp6-zEMpPKStb@`T)+Og z(vK@llMYw9aV%zfQ!L9eKk)GW$&t6_F+MA3+P#~t=F^`te+QO1PCQkWJ$%d5yNoW2 zE>E*~!P+bJh;cwgLN+MuxQy5*eAXJ+^PvjcvgRQREyS)jjofu7^~@1JA7sVwnj zIQYI>RoyeeYLQw%kEPm&K>kN|Zp^GU)j~n%CVmtYdtKX=Rg)w5#a-mi@y{DeQn^mY z@CWS^u{8@bU0{B^MEE{i?MAMst*5K@MCHDoc0jq<(C>HBL>8```gQ7zlRrKeH(0#* z|3Wd=N{)j-k0eXI62CFSt8P2bQ=8W5{2K+1t3BX98Z_lz|M7Wu#Siv9*&rn4^kL#J z*5t23pY7~*7yQ3m{KrUY|L+w2UCklxhfO8_d~CHpvcW%je(@HI<9qKW|GKRt_*aF; z_C>SIGSe4#Yu=Z9?ss|ro=+7yO=)%p*)crPTg;+xf$=pkku!L@`njxgN@xNA{|IrS literal 0 HcmV?d00001 diff --git a/src/res/mons/205_0.png b/src/res/mons/205_0.png new file mode 100644 index 0000000000000000000000000000000000000000..829bcdbb14de7adc1760af3a4ff56b58605a951a GIT binary patch literal 1123 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs4ODh9&D+9AN?AOZ~7?@9cx;TbZ#J#C@A?U2&h{*SI)NiHL=Za`P?`&T_q81>fIh+H&pA zm#+%*8I;V#WIX9V;@C#xH;c9;^4BK z@F0)x=>9k2M_mE~1H|NSzxn&(=e8Sv%tI@}T4WC0-o)EgdtlR#zYiZQIU&K>kj%ll zm`T3nn7=fO_<^1CdS0@*x}JZ&=lr4h&96WHzv`R0kVA_>WYxOoi@x7}{LRvVgF}1K zD`SO{gS`!}LYiy0-Pv|D{o&g!M_+OZ$Sm6!;O;o#Jj1!CIy+MP7yj7xA=IoRz?mbh z^niTCocpi4@El-qU-ToE#Xg-CZHUt6|aIFUNcH(etf5 z4VQTgJVfT@Fo+$>&}u19{k`hg+>EjrJ$KV4%iDiQ4d3$l@R!dYK0Mf$w{Pe7`}#3k zKDXC?G;DRbc%pRPyx8}T+3Ra&+y8E`TQByn=GC^mt<|4y&%WFJI=19b>9^lMUVc@Y zzV6z)kE;Kl=vSro_BKRs|8{%M%)W<~?vCB>lERR~$ht~f%1J?Fe(Sop>`c)THl_o6c*}1-im2gU z%w%B{QQ*YSe*3hg(y_^hvtF2mF+9JKnqjXmw`!aEZNWfu+t6^!1MJpeAu*G*8tyxA z%(xz&`RVkRB<2mbQ^Kte7;HG?I3XhN=;_RWdVLmghB(Ot%g!p z^ZGP9FAEezo=*43*el<(Td^&nKBJUR5(HC7Y gGS`#+h40u^W~fPTdDvD2ECU!kUHx3vIVCg!0FYYx_5c6? literal 0 HcmV?d00001 diff --git a/src/res/mons/207_0.png b/src/res/mons/207_0.png new file mode 100644 index 0000000000000000000000000000000000000000..efe71a68469ec1808d8f9cfb5cdd2fb1bd533683 GIT binary patch literal 1080 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs4ODh8)+ia`MGcyJT<^`TEjv*CsZ*S=rEDjK0`!GFt>ckVLPMq*i`J`fGBqZ7C zqNF|XgjY%mh}YS3`lD{n?^7n%!(ukS|MfS`>f!k<#dm9W=P!KTK?rC#L`KCfKP;bY zSbI;lNq+sccLiBb_pI5T_AmGUrS&f_w_HtoT6X)2qTu#b57om?Zuflr_v@9IC$BB@ z*IUfb<7AQl{_MJQ+9IZsQ1iEw=eYMLoBm-b_iy-Cx8_xD(5bEObmR|j4O!QpzCJIO zf1~YPTgKS(N&YONodL@qSHvprxFMf+@%O^5%Xh0UuoLP272uzq{NVY)|0mo}Zai~D zZh_|qVMYnh{H@XlO8?&r7fx^NWMP`SZ*-a?puKa`v7P6BcsjDBk%AYph>|&I`w6L3w=S*)%1WxtyZeYpao*h0pb(z+I zb_KQ9b7jk&P{Zck$UjPOo2`IE1H z-#ha@w~T9+_O3)eS%nW$H4YyHW46p+buwk?@2iICnm-bDF)@S+=*utpo?NPY;B&9& zh0F4ve9UrNYY*qUHxzqMp74{UNB_<-UQ_*|OvTTY@(15f{*ik5-(K(7$)fLy*4^vb zutF&8fcVRZRkd=CUosm^IU8I`uAZ~a`?fCoH0v_0nC)UUp9TJ$e)={4h?GYN>p8>M zk7xZif3hUw$!Z<%pK*V9ekQujyw~!2SKNa{?tGW$Z<+VX%+`C+@lt!$W}6j};xV2{ zQ(qsRp~f0ou*TYxB`VOEW#9VE3U%8Pjs-Y;_}DJNQorv}snnsm2_bP0l+XkKO9Sg1 literal 0 HcmV?d00001 diff --git a/src/res/mons/20_0.png b/src/res/mons/20_0.png new file mode 100644 index 0000000000000000000000000000000000000000..2057216951e75af81d043f485bb25201c2f89668 GIT binary patch literal 962 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|484L`}TAnVBAr*0NZz%RWau7N8ac8i4xY9)Ji5@Acn>K9{>RhuX zCbDylOIVoF#HmxKo+ypkzmPwTbN1~gX44;j`mf5nG}ZjWzM1CCd_aqF0soB6|4Qfi z$^W`s`=|A0PT9LzU;ac+EZw_ylK*@A+4CMqPUJ;?mQTkq_kq6RPeS@LWH?`L`NFx(T_RIgFa^xMF@5UmT}8Vd-BI%WtEjc> zT5D+7?oIo8N_s1{u6$UK?U@zJbunJz?6gjPJ-3Tz8AKx#SG?eIdVYA}N7gNi)IA?< zdzo9d;>GDd5BNp@&--T=7O3m<>VKA_)(p3`qJGa8J&y|Lt@{1ZZ*Bjt}Ny!(Ums&-?4Xs2gGma2=w0C zvO{Ov=bv}%+g>-nTYci!Ie~X2hawmL{%ctHHQJpaUhrJQV~bZ;@0)U~oYz0tqA1ZS z*tUQ*TG!*~{byUNZ|`^i9;v#@HR9;|@2#iBXXe{)`+afIYUR1}q_>LgU3Wt7V9OT1 zjxzWDZJRfC zIF)uSrW44v8%h$PpJQ{-}D(d^y9dnzvz(x8HHM zjX!iPdGmvrUHXCh9cQy9?eCJ(J;$}eUN+`(`Sp4EN4I~N!FXRK$1|#8YlQdxp503d z&vJ-IajUInXZn%%a7_Tm=dY?9qIYe)KR$iQ#1ScRKI+f^wx$fT?&9z#&kNcf$Ok>t fv_nqL21W18g^%A&-rq4t79{TJ>gTe~DWM4ftDU%C literal 0 HcmV?d00001 diff --git a/src/res/mons/211_0.png b/src/res/mons/211_0.png new file mode 100644 index 0000000000000000000000000000000000000000..ddd99458caaf0ee2b85134690f178fe3072b4147 GIT binary patch literal 825 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs4ODh9&Dwo+vvv-Ed z&%7)1{OA5X^L%4vpHlHFtLpoYi&ND6@1ME+q&s$=kGY}m*UNLxKbQZ;)?XRV{H4r1 z_xAVQ&7PNzgrue(|M=y6&V@4pAMWOGqK7H4F??l2f|7<%c9DFYB?T-nf z;pZ9pW@|p;+Bi-5ez{BBIR^1R-&V+;zZ7>nH~V&+G2gz$Omc_HuIz4?W{+RCx&D6D zUtRr8iC@h3{^hFEc+Q|NALJ>qOD#H%FJiii#*59aS?6+-*Y9RIX(6fd;Mf!%)rB{< zr$w*HWjc1SUOzT$y0J_AmZ?1V_w#?MlGfV2sWRY$>%so#)wk=<-<_-)9IgL_^I`UD zg=H%j>n>$_laZDYc`NO&-^vxgR7}2J$~kprP1??zvgXUymO0iKOUdZ^zb*V*y?%Yz ze#Ml^-1V#1p8B$`&hhiP9SPcuT-%!7O}<)8l6uUO&*;xT?X^FbX(j*w literal 0 HcmV?d00001 diff --git a/src/res/mons/212_0.png b/src/res/mons/212_0.png new file mode 100644 index 0000000000000000000000000000000000000000..df3a228a87694bcb751f6f366c700228c5751114 GIT binary patch literal 1660 zcma)7eLT~NAO8x|@-W7g=clD2&4#lF3A1^ahsY}3$wRl1jD^X=u_a=YuSnN>NEU^f+3gB`Gd}0yrX&C@j(u>xi^OVz3Al*2$&7F0UH^)L;4GJxS>i z63z*_wV%Pw`14k<($ZmH@?l3P8*i<2hm${Bs&b0(V#oJxYaa~EreD^$6~N23zYkTF zYxZo*Nhr6$BvZk^#Ot!BQkme>3h)2d|Ga93*A=U!jiak=d`O4_+fq zW~D{c=`wkun={l|_Ce(ZAGse-CFm@Mod`NYw(-qY0nru%vUaXh{Gf`A2M^@%MNl}G zeW|iOAgl4BUK_5c7Z)XoF*!36g%3i`^(SyxpeYp2$_Uk%sHi`A7&&ZLCbUdf#bNpkUA)?-)5E?;$d-FwJY;l`yOwr_M z;$<4@bS2n_)beJUZ~-^8;$+sKF>K#DrOt`*vq{==5DHThZSS7*f->*lqb51u+9(I_ zud1>Q=*(Wa_H`ooJEUdkuvVsu$lr-uemt7L@w_p;MuwSqcvb-0-<)H+n@wq47Kg?d zwg~=P37~sUk$u2!@ylh;qIB8Zvgjeg zAjOoD|Md&4k%>2kCYbf5&W!H{oc|QY^0Xyo9Fv9`KXW!Ku$;t}kr-XcXQy_9`|JbL zjgd=IsSrgsX$*v;>z}MtUK)BH8p3=;yk+g`KxmMRXlZq>mVm-<%&SQHxhby>#br%e zefZDQw{q$N{80vIQ)7kc97@b5mOhl`9$2>Q?*d69BUhqNn*X1gak8~&HS@aM;H9H+ z8^s$;Ut@6MjdE{bkCb%Rm8xEDZM~gt0OuH5}l;}92s~JkB0nNkU#%GMi_+Uo+P(u z{OlZdq{}F7s-?q0enTVeqlMGsWSwG)$v5b%&g||}X0t|wMe^SfY0lZhE=OpiXwoDQi4g@rCowO;hp7-JVNf3aL zS@r3)I8Bxe0>;DKG}h>9P0jD#E}@J6LDo^64BRtgGW=un$PMLl0Q?9+_%>YBjlTiO Cy9J{F literal 0 HcmV?d00001 diff --git a/src/res/mons/215_0.png b/src/res/mons/215_0.png new file mode 100644 index 0000000000000000000000000000000000000000..6fb6d6eafc737a0de8e5ff31ee34eee0b123d465 GIT binary patch literal 843 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs4ODh9&D-*L5*+M{_Oq)Gj978JN-riK4aLYmD*vDK^BcaY77dIv4i5@8_DxXw@ zBr8E8U?JtgDeqOQCugr0UHd}s^Z&CcW;#1(-l@L1efCjCpv5@AgY)}*-=5C+^k?Ey zZR_|stET_{-}H6b8oBSAD(>8VU14*6`T7s*FX`0&NPhL}$@2%bmVI$u-3&W7}~fy5vEA*W9nKZI)Fk%#xlP>{N5$==9~4Lcjigt_k09 z;dx`mJ?4K$rmL@=Fr{bT`&dhrZHCXwJ>E7kxK3x-EBV^%|}2O`PfG zaAL8-Di)0&zc+0$Pnaq*b=LZOZBscq6D6g1eb24>d)qnj?UlbDe>eOp?VYx;PO0Bf zMA?Dy>ZOpav0IovdCpj0u_fgyzwz>v4Y%w|*>z_rzM7xK8d>vTD#!nM55k=db)6Td zr#`Q%H+g>SR%K<^L2n)Bqwi%O+JAVex$LAkQo4FD)$%)YMONa(_DA2tK;oXRelF{r G5}E+5`+Tba literal 0 HcmV?d00001 diff --git a/src/res/mons/218_0.png b/src/res/mons/218_0.png new file mode 100644 index 0000000000000000000000000000000000000000..344000355be7a45e987440790be7d9a2b3aac86d GIT binary patch literal 809 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs4ODh9&D^m-z6MUu&3``R}T^vIy;@;j`pQmgnaJ=yQyo84bTWecvoDvce6B801 z96EI1z=7t*%9aBMS{u2=+rIvpU7@r*=;Ggt5x?q|Ts`I&5^6keKL5^g{bi?e*_$UhJBGE_`-&=nWQ+{jp0+ zWG+|Uv{iMn`SJSiu9sRIa~o!@a`61%^5wlZ_rI?No4!YjS~FIDjX!Rv>sKtb%W`e; z1=oZAS+-06Zn@Xy6coMFw>tXc_QcHTd+pZBC)c_a>&~Cx6xP6W`~9|`Z+_03)_w2U zx1Cp4FkLAM5%pW^dG+F|4Z0b|F+sEVQ>VP^j95QOXz{egDlgXY?n+G*{;=`Ja+BVb z^|f0Qs$DbuL~2xBzn?YTdn2X!kXnM(-RSMVD7qYg4552-R~%N z-{c#fe81uJ@!6ukBvyTU{B3ot6;Gw~3F$)H`@1ge4c5MM{-5dGjy?acN8RCe3U@f$ zKTob^`Sm)@#IK=tLQyY77u&tR-{k6eEyCU3UiN3^i;L4fWlw%SRi`sXGEv(>`-Yrl z3fG33w|}Kx+p0RA+@KX0t+m$k?P=}9YD`?S8EOx&mEUqx`K8R6%*`9L3@YF7KYgMp z=ymJWybbI7H!E|_Zm66W|EerGcLmE0jRURfuT}=De3mO`G(8%_4Ytnu z`>~m6?ayC%tN%qzn)3I~T+ajZKm2>U`gY`o{gWpb{I!T$-6d1QS znaWp-a0l*#(?9HAu-e~fRhzp|(f{w)O#W7FF4R7lKW)-N`$IoMm%WV-kNWqR2RY4r c2w(C=`o2K?+h;2?=Yb?VUHx3vIVCg!0L!gv=>Px# literal 0 HcmV?d00001 diff --git a/src/res/mons/219_0.png b/src/res/mons/219_0.png new file mode 100644 index 0000000000000000000000000000000000000000..72f181f161cb63ccd2033bfcbc257f4bdd065dad GIT binary patch literal 1040 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs4ODh8lD+9AHDaREV7?>+OT^vIy;@;lS&$%5S!1m#Gn1De-fIz^90}cs5l#s9> zap6HAt6}>fEjGlXd?0PPub;_xB`4 zCBk6Q|0{~T>)$TSmcR8k;q3Fzn;qGuSdl^2dF9Jr7*gMH zKIG%R>wzCO-re0|*Qd*WY3ocC&t1tZauYaImaNj++a}n!ia&DcLH+Mj?VeA(&9b1r z{cDhRg&}v7Nnt9J-g#>E0$Vzio@hU5*9W>sq%aOb6&N8LhPG(;;bzFA4VOMZHMEx#_i==|l}yx+2-UztYFJ5*DW)n8L&&a`ij zNqKzo)ziL8m-OV;J*0;)kp5Pn(+{Y!qg?BX70zUh(O3rgi)?jJjMm z@kPp8OU68RhNd1~#v}h3R2W11vlpDc!V!A!@5io#?hgvjH`Px!SvP&*JE4TD^Y7}J zJox4GmTBGMtqM0br`->=Rruh$^KH|8c~7~WvWyv)915%KZ>QX~Wa?6QEFsO*>yjXn z;q=Jzf#dpAcBJ@BCl!qe4Q$uOfw_{svxHUw3}}e0|v0}#W+Xh!|484L_eJ)SO(Ar*0NZ|W923J_^~cv?$ENK#U=)5T3mS$m?#6E78^ zNFYy1d*Z~29w{<=?<-C}`KHAB_T0qp8-Cjv&z!xaMD6dnzude)i*bT|S#x{W|JD3w z(ptar)a(C2E%~*tk0sgc+kdS+cm) za-Y~wm5|$;SEv7vedpHD^ZCv#k-B^F*&-p`Gw0T~K7V;8m2r|to!Qw#RgtYlakqB5 z9bWI}$@TyE%QM2^tUIP~zy2C~x#jHB3V!>{^J`_LShWtNw>3U@y*U5p<5dj1V{LDh z7q07nsQpBwj%(k&{WrJX+BLIH=kz+OH_r}ixW3vqc$T}KxY6sqhQ^``I~N~ZHb>&e zzfxK8wp(_Km0~uv&XwoOUzmG4@YPqY*u8O!SFTu9u^||6N&pdSf%d?5M1wYj8?yNq4ZQbQr z3*J7jb-&{89BOg@zHHEk%u^TNXNv4O_uOpnP2coCVh>U)=Ua(uXcX`o{wTziulSKAZ@WknUP3j3g0bN6~RgPe=?qW*hj zsXN!asb~M1_x1Am2aF%%>I}eN*<^VBPiA0X%^}7AaL~ zYb~3b8Y%X-PT;H1)i>WAM9Zq@{>(Dwx*vK~t>vBiq76cAYZY6~rd-kV&`p!s7uJ01 zf<;XrcU8>adsC9d-oBAI|IaX<^Sj7Cu7&S^sQvw9`cG8g?ctxNr`_sQ`%!Ut@A3_M zBe>#cZ}D@E;=KLK{fcYHE{4bV-kDtfAI3BPr%{}(;eK(Kp8-{~zsk)sjkQ15ZE))F z<%6%z*6ettSs{9$``Pu4+ZUD}mYDk4{P&e@&$A3?-neKLEn;lFf8Ls{^RF*{dL-=h zoq6`xxBa*w?&?@SL-d>7X{QfTUw;PGr}O_1&vL%{sp{0svukeUuif${O;w{J@WrgJ zM?XwjwoiX!yZ%M{1zj6X{l4)1?8{}_yYqKgecmn7RDRNC1(%`E4~44-7*QkgpY-N< Xz5fi$o^mP`fMh&f{an^LB{Ts5>tip- literal 0 HcmV?d00001 diff --git a/src/res/mons/221_0.png b/src/res/mons/221_0.png new file mode 100644 index 0000000000000000000000000000000000000000..43218e96dcd96f17899a8b63e1f5862fec834923 GIT binary patch literal 1010 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs4ODh8lDXZYYZnM;uhxP65^tyB_KRiP`HEBg>@0r#o~y4)9<{S+av!lq~N~g{qvTVij8GA zzwaxLcajw(2rgEdf3?%Nsd6_leqC5m%(U$3`iKAQXDPiXRddVtsl>HV!LZe<7>)+@ zIcvKZhvVZ6)ob*>tn}%kP@=*_OF2AuN-{ zSG;{D!@_&^{Hvb=T_0B7oBi;6)&BePul`EeFn!-XVTRU$3W5LIFJvi}EWG;IY?4aZ z-z%Qln@`>0u~;Tqb6Y7QeHnwq-(5FeWqi-qpZ)yL_dZW1jY%sd19ZOe2R~r1_5AUx zWX+oGiovW0!nvkjV7>rX7|c@_R`h9-ks-v08N%;D14t}_a= z9$@OJ{oJ^UcmLA_vjrW$j?R(#_WsN|=Crf}?zdR3HGN;dtbdEj>f949j0Roli=Qm2 z{vGVUhvT+>%Tu$IMGPD~Z_^|1w!LD$zH_~ZNy449MNczM+*tgyrO3SGE0as$mcuWu zn>AI}h&VBSo6qaO-Ll}LWPQnesh1jD|JMGx(6d@RVe`#9J!wl1vuU*0FEX4|=+}Im zDe>3~jr?sg8Q=Z{AKj@Yth-`%PD;zU&u{JitXj*^bbYrJ%luUSBDuuJw!D$`V$U}| zG(D%eSNo99W;1TP>%UhYe5>g6Psnv$#J(N(zGs<)EARgE_xR4+=HEBn+%eyOyPog6 zJN-Gjzn7=JeAd5S$f%AlTD@-SgZioY?;k$4QMtd*OYnp7jKZQz9KzzwN-B3(&h~Lz zCvh*_SYhJl)W}_HZW$<-ge3D<+|ALhlfLv_V2|B{g=aT1u=gCl96RgY?zr{ZtP)SM zx7SJRy!!d`zrQxq%N8$GezDCqHd-ixTi$04qryXRZch8x@2@wM?3xg%@R0wwP|EBN zhObJ^UZm@`@u%sn+G&v`7$DHn|BaLw%FfbkQba4!+helV{$=$@Q5A~pT;rnT@1~?Z z@q~wpkx-|L(!_}#DniHK=I6)ny0G)wov(2--lwYxZ@S?3>~C4T7!%N5TtM!?x74z$ z6ZPd!_1Bc;8?8T7WKgj~pi0<5g7cgX5>&;T$XXeNpKezKnSk2nLT|cVx6L;*C6kU^}`s)2MZpC^@>$PSt z@30CV4}DT8b6rcIb@2ofweO6T4_~E;G(~mQmHqfKJD+FeWc%%_#kM;>Rd8(;&p#?& zZmz=RWE^p7=6^@Q7SY>bN7u!*M%H+A|C@aMdBf@1o1QyHaV|CLC=yK(bGo(c*rVz> zAHUzpb5`G7TK6^XMo5YEzXkq4Qy5FE=Rf?NBY*All_0xh#kcXlzaE}Dn<1p)@3qDH z;jbQVyDZqcFu-ocv)BNe_-B_*e&62q_Us#RbMvgtQ$>n+f=Nw=AVev%`x$_HGX+>SQzbQgzz1FG~7xZsC-*C c*w^xbdtvmFNiR=ty9W~VboFyt=akR{0Ht?`Q2+n{ literal 0 HcmV?d00001 diff --git a/src/res/mons/225_0.png b/src/res/mons/225_0.png new file mode 100644 index 0000000000000000000000000000000000000000..9d2a61d8135adc3cc3f20265ef569288da9056ee GIT binary patch literal 765 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs4ODh8lD-(E{-7;ac^%Z_B?VBIrg!9`GgZw)wQ)JPSu|1p;DBp zDpV;H85!B>qNF`hed38-ar+nMuRooqxAV@XnV$dlrx*oqQ#oC2y#BHw&}LjfC2#lL zZ;u7yeGlf}-u8dG%8PqbCVi`Yvv^C4p6=;QA7AawTwwblHL`F1gZ-KdVz2LwWVJ7T zef3YiTt)9+s~XAqhnu6X`*PGo-?^2wwaVA;)WQB;EIU8{w3)IvUHe&Dq}}$rmrw1v zQqh?;%Xx=?C#U>_&p)&R3YHtk`D!QslH{yt$lQ7HhOi;;9wEmM@-AENGq1UqZgud# z(%qFW{CBT8|JlZ-L$svVmT{ky$06pDyX(T4mU#wz{1Fx6gFb|dQ_*Y!nfS4QiIEtC&)xw8Ld+?M}u z+z-y5b?(pS&pKart>0v`QpIII)3L;WX}1+W*gJg)t=q!%tvj;9QF!l?xwluZU7x9{ zSmo7HW`B9@@;>D+AHFW;v|sij?%Bfq{&8z2S#(V}YjF0ox9qXkU#-4Ozx&DTwRvx@ zU#x~>6yu^#Q=Nn+MJ#(ikNxq?3#;#@%KWL6==KV`d?oC9>6ZP*Ges91Se>~n``B+E zar=(o{oA4!)vT7<{X%%b&H7vCb2sZB+S;@x^6gVM-P`(acbs$f^zt=Q&5&WUJ8i!x zcZFB~k+?dQlWS+GyL3jZF*@D7{KK+6E7SAu@h9=ueVW2CS8(dBI=;Vuy*wR18K+2< g#O*^)2n~%l^I00M-Tv@TU^__M)78&qol`;+0K8yOSO5S3 literal 0 HcmV?d00001 diff --git a/src/res/mons/226_0.png b/src/res/mons/226_0.png new file mode 100644 index 0000000000000000000000000000000000000000..928c489f42a26599f7c2769c9986297eab93af0d GIT binary patch literal 1411 zcmah}eK^wz9RH1(w>egld0pmqC^0k==cR4T+aoW_OUJy7Z5%>`Vi;|#w^SQIoey15Wk|^a6n2E^2SasVTi?hHqpR0DSZ4D?q~Z z8;Q!{zHD4X_R&moTsAd54G~8DkqkK4qn%yR4z3Pp1p2V6y^HH1mo%PPg7V=K0qYfZ zI_7xbN+z_P2u_IJA_1>piKZ;gEnz5k_o{#v!-{P?M@=bIt7 z=D3G;`0Z3drT1o^%(_ihCmIoKKH_}zmsFKgu7Ie!>Q^sQaGWC-J}>qZZWD}Q>NbI) ztz6Waue9{uZIIRM*r(`R+6ex$pOPr~@Jm@y3P$w_K5;G*Wui}G#IfJ%;u z58>VfiT>jK!ttmZPaiv>kFu@m z5YL0!67uOXy4yYf=B*xuJ;}|?c)XNr=D7chO0RF{C_@N)M7y#ll4)IHaQ;^Tcs1g1 zE8y!akJ@?N^E>;GXLLcTd|F;kdzYJ1*%JGCdnQj=8wIZ6F}HbzI~zE)W2sNpp8hl8 zA-W7lsubm&4)*xIi0BdK<6gMK-`<$3?^A@Ai9|^+bGpZiQYThlO*qkIBnc*PqIBF* zk#T<}ZO6&{Aa*d;)-2qxyo;%8vt`jz{Wh`vWen<)eVuK9T}N~i;;N`xRzSOztT;Gx zlWfRa&!j#E;JN`T`bqsKguHd!hcb$3VA8_0VzGXUJ9ZX`Npxtqk#|Wmt(1~+zmGag zonP8hbpav_Wf_=3zwj~S_L4T1k?y%K)n$-Wx%zfO&2lGU88I?fOFzH?k3d<)FTfG@5&bOU+Ma>XJgdcHhs}YZLG* zy^>-Q8AaM10TvkO4Cvw=%O)+m%Igu5W}uQH~1G&6Bo*~a~~Am z>9Cf2At4&Iy`8q(*1@~M9J&*OSv6(nSaf}Fl%6@RTe)wB0KINwBZ*Gyv8Fu+EESM{ zv@r)Em3136pHu|`9zdWE7}4hq-^_IDGyyk*KDlq8h;HQ00bn0{U~@4aIS)Ug6?_S% z7RgWN&(?@5iWu}0rfRPRYcElOHSG;SM6z@J%IuJ;E!!e%R((3&lV<@m1?&w)#=uz2 z_%O~!-me$w>0a`TQT@Y?t^;ex7h61V? z3t>6Xv>i`N6au%WsDW2WGzJF2M~oN_NbH$llXRpw7>u8wdN1kd1;OKxQhz^J%qj=O z9i{XbtAbx>khD`Pb%!5o2(rWQrs9lTh=#1@a^@Wy6g{Q6(Qo(iBt5Gdo_(N<1tP<| zR3-2ioUC%dC>Sk-vc?+LZ{1yVA2{dC^+liRdi{j?-{4VHgzSKPV;B4%@{*~_j06a{ KAS~aTRPrw~=w_(^ literal 0 HcmV?d00001 diff --git a/src/res/mons/227_0.png b/src/res/mons/227_0.png new file mode 100644 index 0000000000000000000000000000000000000000..fe7a483f556f79a0d8dc88df5d76a0a4d790028a GIT binary patch literal 1138 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs4ODh8)vRIwa>&(Ewe9P0tF{C2y?acMXw+%#&UwtcYz++;WhrgA+__yS53}_PS;+p%Hd}|o!#)k9|NARF(R&3!U=}Q8h(dPP;Fum%u!4b z@BVq!-TuR7u3Oy!M>_k;ETY>KmS*r+r!N zZ_0u6sY_R_`ucrp>dycF(sOIq?wFJAu>Bje1>;xwv*PD(r|r3R{-3(h!w1)|U%%Iw zUSQGk{cX(y8|Dq4Sua(no=R<M<#wl(p{0Q%@|v5*FGigRop)PVfADo&EVYuU=K5s0N4`xsU#TMVP=TGy zeev3eRm&U~dr#suQaUYnHg+~=fs#x{fAGZbA7z8)ol#zHA^u>>mg#?)7RmQYewoXA zlh564LCDskd{h(7VtI@~eyW~l(jc4Vd-|smMRRs4*S!aBk zy`+89pPARbuCL|1x$14%>gV4Ny|0(G8)S$pW7nGwzSMlv%x#;KGL%Z(!H$*PD zv?!4O*)?tPiHuA}jAE)M+1e`(%sW13&73FkW-I>}y))TTRAT7BQGG(DY@zopr0I8?%?f?J) literal 0 HcmV?d00001 diff --git a/src/res/mons/228_0.png b/src/res/mons/228_0.png new file mode 100644 index 0000000000000000000000000000000000000000..adc0ff77c75454163ad613641b8d888a463baaaa GIT binary patch literal 938 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs4ODh9QD*#~+hqua{e|{tUX8WRY*Mt0Le?_KkK6zx* z!wb_^Pqn?8Rc15yk@57?NBt6+oc^owgJf zq6^D^{{7#2x;|mr)^(NIo3~s&p^@W$t7($^Oonn(hlA&T#lF6AE$wrqOz?+L_J1lO zFS4_=uB?1%ymr}@M~BbtIHmCRuhmDHYmY1H`ECc8*&oT7{##VRN_Oh&qg9(bA3tB@ zu>A6*>!OceacgFaAKvzLQ{A5HEGP2nx4cxl{`_N{sl&0wfp0<=gvy7Qn{e(5e_+b_ za>8ESmGFVHj=SJ9nnRES&e@xxR zE%n}&w|B-fUV8sEM`lypa#h>aYr;Pqo+t0`bL*0gf5T~ULsp%wTdq%^8s5B3`l9sa zjMo=gG=GE!blz`Dv8;;aJe9N6gp+H>Hkq%@*IrKxUKaZBD~rn1nG7>|vyNU}{mIk) zpnuXw-qjAi!b|6y?D1p z%a=^9-L%|5vR$C!Z|}GNw@!Q4%)c<>_@A!vXqcf`{dL;v zzls0d*9{S?Z3;at7pHr+jKW?_0ufTSLLNnHJUBUeU+3#zFMo5Tuy(IogJ?> zIcxLH77_V%RC-v1HGuP$Pr*=#oooUf9~~*?ICJM3;9N9)7521A8M!VuSH~zqM~mtmIox9SWcPWzM#huQ$8x;M}tF^rZ_~d->9x zI_`M9bBhRK`=R6EHseA6-+gzd?^#k3YJOI~zW$7_T1-s(KNH0?2IZ+qo)1;zs`ttt zkzexd;lF!P3vSGt&HCJ8>a$x4AzVc@YCW@#T@q?jka9CD+G%g5ZP$G9{@&fIJzN8U zj#$pxqOLK67FDcEKVQbXZ=HUkn$7jE`cDhZ zC5<&t?A%=%WzLW|&3FB)ukvSGT+^d%`JRU{%d|Y+Tazu*_2PUc|NW=)&UZ}tJvWTk zVB;mXmu8~j2U_kf2*0{_eHp*rtl0%VF-aB@H@;dd)%mpNyRcr}mW%vrr5Y}LuF~JP zIVN}2y^Org4-1YcJz2PeqwmL?MLYd6SI*KG`?hcIY@TPur_RQyMEN^j{+YcsR!{fX z*^2lAcTHK}Z`z6)y&j8ZZ|LA%)3!ob$KQW#k3hXMi;ZyB)rN;9xlMPjb9bk0+^li5 zoX^+b;bg&bO|OTMj#IUlB)i%Otv%1+laMm)q4J!Y1v9J+ns{d&-p%1>pH^_5t5a;T z!mAhU*LW@1e^yU9;^NVh(D`b%K@|Hz#*3$~olJ|_lKt;?i;U=jp8{{QSMl}~n5FP# zwhGqwEZ<%GKj&`ce8z@K!E~n#W)IUfSq~!g^nDXtT~94)vzXWR$5z)_e@W%5J@2Pj zuF-a^aI@2hOe|w@l6JVq=2P*)|IMx=!CVt}^Oz;YRTwh;k+7CZB;{bWu;Nquk0RE`i|?N+w-cQ5JoU-DfEE*mkD80t#N24v+jIPV((*ES_OFhA z6b0`8f2*=ofm?swmfd&X<(kcm*#GyyRN=g+T{l$iepPNew_5sKQ;lSnZ1}0GHI+w} zYy9@q$n<3U<7}|N=JrqdBkik=6yl}+H~+xMy&uC@uF79`w9oZT%DDt!$-?02>gTe~ HDWM4fw`LT% literal 0 HcmV?d00001 diff --git a/src/res/mons/22_0.png b/src/res/mons/22_0.png new file mode 100644 index 0000000000000000000000000000000000000000..1a7e8367c9b8db95c9970bbf82b9f085c45d14b5 GIT binary patch literal 1426 zcmaKsYd8}M9LC2e7M-zGI_0n_Qev*F@oeTgl8iA+Vsgo?%_S`~a|@eWqGu6fZk=38 zjy7^TF72F7g)})2+0z^cNyug#qqDxB=Y06R@BjUOct5^*UY@R+pdUd106^0X=j5&M z;P0sIQK*=Gf64aFyJRgi(;(g_iJBy@K56 zAzzh#$*fgjN7U&;cDnIsvnVhS%C}&gV4F?gSLdQSgQU~%m!ycp&m220_MC)FI|KZo zfN+z8EFCQ;N27p7uf@Z1yQ_k%VQz<1&1rkfThO{{@2`WFa+!O!= z&mbTnD0e*dk-mXlOVf4l#kO54iKfC#%i?;5y=x}I$j(A1f|Oi5fe`*zX{az8##9~aKtzd-7>)m zYIHx%ZVR4lu3WoZGUA3+8`(`S2%L7EjvYUO;af2zPuXSz@#q;AC3I`G89MaIl{V$; zgRv9aDEoh`9dj)2X%Ol@@W2YVSM2_*H=xj3mCQlmN2UaMau@J8OOGU?3zjBwZ zo3q(0;TxBhRIaAH_Ordc%H4eC+xMNelA2P`eMt>2owk_mG2j*|uz9B8oNisLb z(?^swOyT{0w>r;XYDh?X>&7Fgr`o)-ezmmbK$t1gORjmp6d#m`W)Yh(t@3wHWY7r4 zbRwb>cFTCv^~ptHM$>K7_VoAuzI1EaIjIGjPf9g`Rv&fpG37KgOmjyPC# z@50B1cnC7IPbA6`^kK4HX3cQSVopu*AM<%Sz;AI0B{zi!rzwwu_6hpvaQCDC|$w2|lI zjqAVmnqyP)Hp4b`qm=H5NvYJk879g)_XDOPn{>e(E|YK1JPXxB zhj}bU&j2u>$8fjJQkTAQI(JW02Jef2I(8dQPq}%Bk2{hh2FmPCaTX_c%zZS@`Cg7A z0|p|BDvRfCc4MG@`OBdxwSh06j)7LqXKayO$4tAb{TZwflwOe|CZ>o<8BQ*-<}T#F z+l#77@K}90tQkB^WJ0xNO4*x@@zyT*IxP|N*?~xS=03aNo$3~|*Dv8;)tLO7tZ6$WW`M$8pYzn*b`7yZU_Q7_+As5q>7b4Pp%g$BVhNW07 zx6o^zNh!_dwV9v|(tN~ynd)T?-;QJ%o_yuiBDb_}roej1hNS|D`_b6|CWXDA9rPa) cqzaSoCC7kjL{w>=Vln}4&Yn)K4#64!0$d!BYXATM literal 0 HcmV?d00001 diff --git a/src/res/mons/230_0.png b/src/res/mons/230_0.png new file mode 100644 index 0000000000000000000000000000000000000000..1a184f624eb4c76c2010ffd29969f2c7a57b3339 GIT binary patch literal 1321 zcmV+^1=jkBP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D03mcmSad^jWnpw_ zZ*Cw|X>DZyGB7bWIx#XjGBF@AIXW;oIy5-X3`j=+00faqL_t(|UhSG8aN0`vKx|2=DmOa ze>bfYLI@#*5JCtcgb+dqA%qY@2qAAsXGq>Fx+cW87+5ia7)}Hc|+f6U>KQKQ7nC}_= zhl3yXhGbF@#Ygn-%Ayz14@?_y+`Y9ucO(8+sVPOw&w$w(8sw=b-mXrNzH(8d_3&^HP6G5dmg{I z$uRR{@_ML!@wOiANf;2Oku-?@leHeh>eiGq$ zE{;~rF}(_+;Njeos;f6`P2hZ$sHY8yHghbRs{Oo1uCe0;^!$_ytoDt2o^hbatDS_B=>-mBkzZpdZ9S-AA!O%;<+;( zH`l)<5Q_$wDZ=;CPT0N!c^$$d&-<0mZ0uepmsQkavGC0*oks+Ohj|K_Rj5;GXzR)A)D9mr(!X8JI!v4QMhM zd67ek`rSVRb-=3lpp%z^_(&IsT8NH<`knX$CU7PIT<4Ex6ZZSp8)HCN3uHh9BYIU{ zHdI`_kXU>`<6>Y0O*jkfs{kvO+SSqsja0#vR{pqdx{IC|os#(1>=}IY}8X-MFXvytc1am22w8<<0HVlhGX) zV9S_^ghx4)*=djsd>;A`v00000NkvXXu0mjf!{1;7 literal 0 HcmV?d00001 diff --git a/src/res/mons/236_0.png b/src/res/mons/236_0.png new file mode 100644 index 0000000000000000000000000000000000000000..c9aaa693eadabe91b2eb4b4e7689c4605fdc6696 GIT binary patch literal 770 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs4ODh9QD^rVW;*~&Kn6f-w978JN-ri80aLYmD*vGxw9=W)(C?Cj}Tv-qdk?#m{{b6357;`@L9%rl4XaXx#yuQvZN(0*Lt z-l2sx`|>|uwXHe2f60URZPTlZe-!#pI-=il>_d9-z1G4{A{Dl!rF_PFzdk!Ucb?z5 zS4uM?7+Cj3Oz}G(@b}J+&nu%F9^0L{@!76t^0%9{ch031Pd^j%{psyX{TKfPzk6;M zv;N(knEmaU#%l8!tsaY?R^NX*zf?4>+Vh_MqQxhY63q%(biZ-SKiGfr)1f;+vm2IW z#%%MuYr}ne@8X;rYrU?wEeX(-xX!_Sro_=XiYN8xvrFkm4SxK-eX>8yXFpp=d;8t% z_sh2#DM?*xE$rQJz=bU%eD!sCwjZhY+WceHP0rVfX=vZtR?Bf&ZN|@y9~Uh>u>5rQ z{BDtojbb&%S8l$zsLi2!R#^xVsP6JC_9t`V%eH+5fH zOQx_|Jaba`;?Mgvy4Jn5*-`U(wd~X%btfLBo;i|t(Qxs`oapUZ#?#YQdhcGObC^%_ z-VEK;#!fwtqopwkt4rTCua8~tey~2qu5JIV#8-Q!y!*0W{2_~0erLYFYiUC5oeP|M zMOowetrmLE{5pSk;T^%&dh^3a@&Y$JzIp%3U)_qrH^(2g`bZ|~GW+c14*D>A)whHF zrH+o*kDf{TaP$nnoSeSlg;PAer}#R#AMck)%scK?V9Qx$)g~%khgbzXa@NF1{@A<)X@TyH{tYKA)xZ!N~HQI)h`c@Wg$$PweVjnti5M zn4``}?~M9>i}?&Jd+y4e+wNO#VHtQvNcPXVd7jcoo~^Q<<9}d_oZf_%xTE`aM0yFc zJUhqCQopmR?k;=W8AdUtz4zwvfAJQ5WTh{(A(uZ_XU_2%|#pj-Sg5fy?A=tnJ+W^*^9%MXqi7dqkm5&L1cT=NwZU2oR4Do=S1tT?W=k4 zPi4)mGmFls`V|*HHPi`IoZX@GC~lL^_gAq8Ua~0ss5Fwfefol3p7D>KBMGf7%9AFr zZQc2r{kb-Sf5p0Ab+>I)4)UE2bC+1Tq?djDsslG!6gnz?35LAPTaqOow<$od?8cEF zr*^U^d|0h>W4+qcoHLt*Uf25^68qL_@N$vSygbK*owv6AJ99$(*^hSuKeAVaRs1ovD{qoX z(EWE$j-QX&7yI_f^|#_bS5*bb{F~@ex*(3#eAoWzzrCj}S^eJX#o_yN<;;Gp;MubF zbjFq)yKnzB``@y8&Z>s9Mi(6Ku2|P3>bs9ewJ+3DNH+Q1UUZW z;XIMLZ^aTxqm{3FFHe1NM5f`v@=P7aFu7(cUH9V;&R=%^AowD+xWjJSvX8PnEb;<1 zD*OlSYrV^628$;6nf`u~be_HQz>=PX=xs_2p^ZltFs)l1XJyKsP%cvKyzV@!-~Z=2 zvs*l`y;?3S+Sqw(n;bW%!)vB^wPbxEh7|%j`nl0osnh4KF08*Z%VXKzHP2R_=~`=E zzj$*1qX$FXydyhzuDMxl!FPDU{^t1_AH8p0e!uI)&*jXHcg|Gr-IBBFcrI(TtEbdU zvlcCh)#lGH-)E_*5HG0G=QwzL-~PJ=)hn0xU){s-*|TC!$=eI&GSB~{$$YCa_~2Kd zw_?VeT%{NG&Z2W(KizRJ{BdnG+pmgu)nD2SZYuql!GA_|eZ@uf_~KtzeqZ|DiJD(t dobCL>oG7umSNdDA3@}eKc)I$ztaD0e0ssl7`Aq-- literal 0 HcmV?d00001 diff --git a/src/res/mons/240_0.png b/src/res/mons/240_0.png new file mode 100644 index 0000000000000000000000000000000000000000..196104a557b4b257251a58dfce007cb378bf958e GIT binary patch literal 794 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 literal 0 HcmV?d00001 diff --git a/src/res/mons/248_0.png b/src/res/mons/248_0.png new file mode 100644 index 0000000000000000000000000000000000000000..d41565f86c0baff9a0cc538270cb3693e0a05f4e GIT binary patch literal 2572 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 O8ogD>$I-v;4C6 zCNI5L?F%3LmHCygd^XrzQ|)l(xf=}y1eo4Z<14&Mz{nv>2QkGY_^-4XRCcDdVBF)Yu?4-z880_d;PDj z=+OR)Z}ewhUHfK5{JLxVjznz!wD^0HroGTp&5YQ0ch{}E^X!Tf?q*`;;RsQ zo?knjlzhImR&3_%)Xx3&*-_zde}xJc2rY_WjGX)P@v^jiUK5$tsYE=Oe*Dn)s<5f= z?LO@LI@?710q48Z6Q?Tu)swg^xADf5i*K0&1C2_~Z7<%x?&`7mnpa-$b^q;=(KKI` zYfaVct6ZzRF5Re*53sz%ZgsJ1#`4t*!ks^G1{_#>EL(WngZuNp>z?@b@4d?IsVhuQ zYI^?nX1uDk!6^CrtFJd5eXk#WJ@4Jyow5A=O~OalNU(p{$8*!G!sPJV_Zp7=%MQF! pQJGT_=i(``o(DDge5g8C%TQN2W8d$2_b-B^JYD@<);T3K0RS{Hb4dUI literal 0 HcmV?d00001 diff --git a/src/res/mons/252_0.png b/src/res/mons/252_0.png new file mode 100644 index 0000000000000000000000000000000000000000..cb7dde4df1f510cc8b82228f0618402bba9836c1 GIT binary patch literal 687 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoEa{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C|TkfQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QBXK3bN;MCH&%KCa@T|GOHqgYx9}LIOD3H&Ix;7)@;78US z-R-`8-X4n{&FA;N{r}&+_5%ioY~JkOI=%FM`-0Dv5|0IMa7|saDRvjz!$gAyhR@RL z7oVQK%UrH`?FWW5Q=X?e&Wz{SA6&YAICy^=gS656|7Ee)|9#tU`+p~pyJ*q#{&j5& zAN}U4xNF$3_9MfeZ`ll&o>p5+^&j5)QS8b4hIOTNH|~D?wmjfu*wOXfGUr7nf$U{-}vl{J_7$V(R+E zp)ap}58XH4n)ktqdo`(#uOC#MBfcU#*IBBe>$+H}*8TjyH~wq>_sYl)oLLkn`1#u7 zGkx-{{f{Pv?%6Ia?(>i_WL?{X{cX<-H)wVLKwwv?6DHS7m9> z?FkO8w*~*&hx|V;0g412=QELQGd5$!4ha&Px6fK{I(SUt+x*``pa}JJ^>bP0l+XkK D>N+ow literal 0 HcmV?d00001 diff --git a/src/res/mons/253_0.png b/src/res/mons/253_0.png new file mode 100644 index 0000000000000000000000000000000000000000..7a5f8ad0dec6abaae1eda7a323479ca9ba683d9b GIT binary patch literal 754 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoEa{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C|TkfQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QBXK3b`I zi(^Pd+}qiPes=;yTqB*PInJC^bZScQrWT##Q&V&ly**9_1#RN7dVW9O{(0g$#k4o- zN^_NEZ|>W+vE=^u4xb~uK&#L|O;KCo0p53g)g0?~TfbA>@$TJ@_6NImKbC8HjS$p> zX*#g{`RSjxAI$MP9O!cK`TYL%dv@CxbSMXI)Uup@_t8xa`_;c6a23testw$8m@nCe zb#_3Z{XDt0-|_c%2TzPXmBJza^j*=br|sQ}IjxF02dA#r+4go)zt~BIdxxj4KeXtN zHakQ9!bQbDwSNEnzEgbN+o#{MUbQUOF9WwN*LYiD(hklS$I{B`GKy6o9prD1MY#0S|M&9wW5wOq?|M5Y1<$i zShMDXhDF$}Q~A@+GM~70t@S<}e={^RyN zALI7~F8DU}dFcK#)4scW%-)v$kay97xST0^p%r@3saoCJ6;^+KXP@_};Mnm7)l=th zi+z6-l6LRe=hKhGThH4s&Q0vq@X_8adrsSitAEmRrFdSCXyrfL$p;_jyS&{XF7-@w z?b>t4-6wx5wU0R;@}YbEg2i|0{GwNWdRoF`Z8ZH(f1J^NMZ+Z~A{IiTvhtQ%cJH@e z=6R6tY}03jh`*&S7h|W+?^`(I|Ne^a#}7v==iTThoix|%h*fS!=`DfRTNJNlI7j-Sj940lVG-jkgPihNI3KbLh*2~7Yy1yNc6 literal 0 HcmV?d00001 diff --git a/src/res/mons/254_0.png b/src/res/mons/254_0.png new file mode 100644 index 0000000000000000000000000000000000000000..0c61b4927088db0524c74967d9f7f20ebebddb44 GIT binary patch literal 1513 zcmb7Ec|6k%82@4RIwm8$E!Rv~C)=bfZ;s|#ZXa^cxT(9E&$ZSi|17Ka}=JCZMdXz?q-~A z5gW8H#;%^`hR#wN^IcD`i>&^^tO9se+|OS5v#ZaiYeqxFU|roTKC zfjLKz)-+ot;);4N!_2`5Hd8JF_sD~ZIz&iUNCsUnZMKk(o#NxA+u<8c^_uA>k>FjO zSUXJc50mq16S>=t^iH^MWf>qxbDTW#8B2FQiZ$Jr>>5j|>GgpiQ{=P#f^veVqPGf6 z0a`?>D0*0T(cD-9%U^Vpl18%p2Y$GAYjO)ohlizLPSC>Q>=X2M6XEcRkBvtb`GuM8 zS3(1~T?op9d?B14I?NwT5&ATsgcD$kCd7_cr@kj|xk+~?KX^&3&IaxC57DN z#p(5>>>A4g39Hb(&C4ZkP@77$f*QnX`#g){#OlwJz1Q7dFvyP4OZSgb^IqS7h;;NJ zO~^{BfLxC@$&*KO6+ z%+SK9!HhoBKFGuvS8;8an|6l zwsGR#^^&*(y$|tuQ>pJOz(xp@F{nZY+YZ*5Z_Y|MP+w42%Altqrx^29(gU73yq_uK zYlP-jkFZu;2%hOiK*64{w_;Vj=sJe@V;Pt9!F(T<2y!|3M$;wd2xbY~>RQ~Cdg#Fs zY?TJ3rKD4ILu;qfTA_hz=<}lCc8oi*^qVI5?3?hjWQ76-)%^25I5W@V+k$$nxuantd}4lPyuLdldEjD%L{<;oJmYiDEs?s_F}&eG{9xkWlID8qYhMgtw0Ri-1qbnn#|Q?5E| zN+LB^d`iY7rCv|?Q6XC4paNY%{CjnpyYk55vXREZTt$I|A#k<|Jh8ewz>~(E71~8W zW^AI95~e$IoO+?-b;I}*pNVYJCMTQrpQTqLDa*kod0~FSzCy>oMfDAKlD@jQ$!I~& zy`s`7YcVB_-oq>_FEK<80(kZJ+$-% zCl9Cf1_C4J$DaS$F8QH;yKZkHX0oY4Oc5>df3eO5_~#`(fZF6JFW!`#HbIUu=Ljw- zI`(=3qCB~~$O_s!ftD_sP)*&$SUzOv%4gdfE literal 0 HcmV?d00001 diff --git a/src/res/mons/255_0.png b/src/res/mons/255_0.png new file mode 100644 index 0000000000000000000000000000000000000000..59ac614ebcfa2ae6f290ca488a1e03981e76d54e GIT binary patch literal 608 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 literal 0 HcmV?d00001 diff --git a/src/res/mons/259_0.png b/src/res/mons/259_0.png new file mode 100644 index 0000000000000000000000000000000000000000..99ec5e93d4efb1fb29f7cf80dfc45c864e1fa011 GIT binary patch literal 774 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoEa{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C|TkfQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QBXK3bl7 zi(^Pd+}qiPdAA)zTxxk_72Q2vCNC*jX_V?Ee{kvPDOOG1(=|hXacISEN-n!*eWdMY ztM07%20!FJIK1pu>6odi%6@_uXdO0iK-#J8B6tL|E` zcc*0*PUJM}X1nIKyC%s>3lpl<)(xjD%Z((Lu+-;4L`uU`}G$?3VGq4GnWKd0vz z=j*TQZkIK0ees@&^&1K018ojwm=Z!H!4 zwMLfh`XT|@C5P?pY_Cp`-Ez9%$KUiR8w70qM3x=8p53bdUuOSb;j;DLCyH!fXpLjm z)vo;UcX8XgfcC_S-+VwPr+@nzuDM!f`K4PgA1t;=nYv)=nhDt(HXnH2njtT`OqW$> ziN0f^R>;(c@0ngZ$?W64@bPU(f$rZ|VVwHnb!{vy#?$3iS4U@ z>tXx)_k^wUuU6moW52$D;Wd}O?^*N znZU_+w_iASDff&08L=+=?boz0eU~-RZ}=b_aH7s8^R;#J2jQQa7P|k>X8z36J|o@Y zh|OWeXOet|=Lv0}#W+Xh!|484L_e$(}BbAr*0NZ!Dbj$U&s_;qKK+$`enVn0mtF$*D>f6`@X< z&N=Q9oi0ifl|kYbX3Hnb8TllH`MkZi?BDuT+Kfsoig)LmO91V~0S=VU5-q#-BHpfL z{@<&6-MQ_&mN5jG{XNTD*lLrt@t-tn)t$8Gzf9!b8T{CI-qt&bHRIXy&BtCjU)z5< z@W$$ubK~c4{(iM^#T)nX_WXqtOn;Ym_iv6lcs;)|LUenW8`qulVywIM&URI%{oE4G z_;usUcj{YjYHt4-TwDHZb;RGbw(^mR^}Y{}-?KOSa&zy@^$$$H%sI9}Aa2J!W|PlX zf9GFJuX<*6L*h@;g9G&}I`*3;?mtE0bCXokw=05!XVrJ1jQJ?D@ zA8bvZ(`VQHa2LbbU&X&qetH%(rHonb*85!>l<$UDZ_c`Yqb&ILy+qzS|M_n0eHOM= zS*yNO)2#cWiRiYb>nC4iUcK>Y>9*2nmbrB{|J({<8@79zH*=q@IQy+^g~IJeLi-L~ zI}^TR*2B%Na<_WxX1v^M@$2~A!e|Co3G*Ay*4?2Tv8Evsynp#FcxvSAYMvaR5usF* zf9Timg{zzu)h?^WBnPIwF5q1KD7EtCZ>zp00i_>zopr0Hys?0ssI2 literal 0 HcmV?d00001 diff --git a/src/res/mons/260_0.png b/src/res/mons/260_0.png new file mode 100644 index 0000000000000000000000000000000000000000..0d62dab0efa4b086d9bc0708f4b714d8382c08a7 GIT binary patch literal 1126 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoEa{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C|TkfQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QBXK3bVI%)?xf`fE&NB+ zi&ZagX*|Qsraf^A&z_6t^BQD&439}9V<+a$Sa$N~ktNONb`XneB=^P6U1pVfszzl} z?Y`=mqT*e%9}C$@uqa!3so&2(clz5rp^#PFISmRY`!7BIC)auWapBI{H}noKb6b@4 zQb>OLX+_O5$4x)(spk5Vzk=Ign%9HPrQ!uP#a40Q)i(OiFYNGK;l1KL)3=`~u_BWF z$#K~x<^MnInWHb4uC?fdM(n2>`>pK#?BCCSz9H^-hTSRlZLtT~R6hWX?R{Bz4GR%K5AMKWC}m6g{_t`$nUegT$fipBrV~u`Lxlv+te8 zx#?3=wDSC~U%veFxDHoipxvZUAKm!kzzy6tIEv!x)pZ>>Uosi00?fJRKRN`4T++&U5SR|lX$?-VVOR)5j)YJu&LK?2^XyCqZ zbq$k>kE7B>Zd0+thHJtZH?r(IwTdO^-<(c`3F+mvU#Gv6oT~6Maz?VRj>E=3q5{o7 zH0-NmHmpxF`q|~xv42tQ0cnMhNdkMyz8-H9kiE~ok>M`mMuu;(4u^EM*(_Gge*0?v z{+Cls1M7Tr8cMskE0~`MO$|8Ber!gt(a)CS{Mi%bm75><*-)nvJP?h%h$oWLF{GC>LAXZoh@@;{I-3>d0S=LfwDcnN}s-- zuNrf}Z$ewikyRY6mh;}aObVUk^&t3h&h8do4?Cu>FBE&cRpyH<__>Q^Zgb^+ZZn0# z&&o?D#ZS{Qa0_YiO7MAl_GdIlze>IGE(Xu3K6W?tFKb%4xo%kdD5OEo`>DWXryx(s ztVLf%7BYn_df(6((DZIW#Gz?MXRS}XV|v8ICiI@^9x*Vl)~5S3`$V0e!8UWtJVRciOxt9sluK2| mOinEMN{qs1uL~^xFwX4^zcpLZ&k0y2FnGH9xvXv0}#W+Xh!|484L`}ik>cxAr*0NZz}dY3J^H<@!rZ)r@T})ZQ3N%>7o>_G|@vv zXeSVMx`eHB2@8Al?U(QUX1(pwdedVhivGu6+OnsWCGFms>bGh@i?M@-{aa_G$v+h8 zpYZ%AyJy9Q|Eiq!hi@*mk^LWN9ki)rP5M$*UAc$n=jX(0g?s)LJf{~a8nQU0*g|#l zCmFZ(Wyh}^o4O)t&dnS9>~2+DHrfBzjP?KCm6Oj#zkXJ}+rNQn&zw1vbMEwSegC&| zum5Dvz;F6iTzl??ui2#EtS=}0U>B?AkJqjo|1#3r*CiXdH0pnH-gNIC|G$(=E#Y-# zQF+1(ZmyTi75SqPv-)j^YQ`;I@%!xdr%q3vYrB?to%REx%l^9yE^=Of_48|W_Vu9k zxAM#VxPH_G-`uK|8o}BB%!rZeQQD-^$$R4?dYSA!Tta2v)L4Xg{=TNFvPJ&u_v*K) zpKtAmWRFpE*gfOro_ulVX%jwKy?!2=`!{}yL1;rPe^d76`cj_te+q9mZMkjvcHO}~ zx5X3ZKF-rvwd>!%t6^7DPA|Fn{pw|z-{-3znlZNP1#o@Zz^kcfWis#V^!a7ZL1{mi za;dzlaa;U0mGRq^x+AGfS5AxnuKRYo_r|sj3yyCtvwfz<7$55RvuLeS{^t9(XP@1z z`BUf>eEY7+?Jq@hW?%W2cD?=ej$>`13cuFetIsd2W7)3j;TYrlTXWxRv1@T{TRu;` zZ6>l>LCw)o{(0-|oA1pSFK*1u*}nJyUuJJda+Y_MiQru|@7E36@5%4{?c`i2HviSS z{&H){%j@25sqqv(`zEt+OUelY&t3WfsxNH48m=`}m!Il?u!~8Lar1+AEN1^?|D`)&OQHay?5m_AYa{~?dk`gMs}1m{72aH6ZazXDYBb1 RjzxfEJYD@<);T3K0RSN`t3?0+ literal 0 HcmV?d00001 diff --git a/src/res/mons/273_0.png b/src/res/mons/273_0.png new file mode 100644 index 0000000000000000000000000000000000000000..249b84faed12f3477c768f9b5d98901ef863428c GIT binary patch literal 647 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs43oAoYAiFvL!~&q{?>$`{Ln`9l-c&4k@0RP*}9p0;6Kfi3S zW!qcT{ioMI)YD#i*x-_i{DE!Je9FF)Ql;0X8?8R|`tUmK@}p)drVk^2Jo8WfU7LRS zr6t4m$h=drx-2tK{(AJguYRui)6(nZsw~e%A1t)schY3(?7XM<&uVUY70W}Vo(xw% z)t2`8OZ4lu$cS^xJ04k7?Qn6@lvNH&4Ogo|k8RI=zKA{(cqSZGR-vf%{jaYQvOiWjE9|@7sR#UGk3?tM~kz$4Fc)7rm&-FWy(YTUZ&+mF9b{n!!0 zR3UZVZ0G*x&gR<}JT{!F_2G2+f8C|u9zT&g_BObl^Ps-?Tld`W)-#O{RPXyVC?jCaSW-r_4dZb+(Ql`YzfB_ zM7+Gb+!pwFdYs`ly$KmWX0$cjzASe|eF!yVd; z$2aOFuHsNVBT~omzjpVO&huYu-ty{AcoyU{;q8hC8)d?(S^(7JYwS@PRW* z7heDUBUTj2+Mhl1+bkg~(Ez6PP3xEIIx-rI3q+p{d9l&-=~kZmwF%GM&uwequsb*P z_o2TZrTh*@G<-zN3Lwwrm@f>moebQI2|G9H>= z`9A-7$<6-8>j$5&nhZ+lsa1-#2$o z!{GI5cUr9NC#7*ly4(CZ(w6}Hc*a((hm#GO^=i-*=9RgTe~DWM4fzU;#y literal 0 HcmV?d00001 diff --git a/src/res/mons/275_0.png b/src/res/mons/275_0.png new file mode 100644 index 0000000000000000000000000000000000000000..8e4fc57b7f9afac39414b720b3137b72cd9c7e64 GIT binary patch literal 1350 zcmai!Ydq5n9LE0^YiKqdml@XFZ-vc-8FRNODpcrfs5z{YOAO0pt>tW55+5Arh#@rH z$T%N~%B5rZWaLOb)rm|c#Eui@?##ALzxw2GpuCXvEZ06?Q>M@r(vdYWQ1 zV)%wJypv<18T7;ibSOPO2Ef{5obVVd9*aR^obeb(yaO%_57SjVY#{r1hBB#hWp+u@ z!-(EiVL?d=$rLNvd&S4trjSH46YZQQj0;JoqP?Rp5{oQa1E)(|iX@V6H{Oubocbm5 zj_u|5tS-cvJWTKZ+jcjDuvH&FpE;*?q}|I>9$%4qiW2;0Nla+LrcCUckoIrp(EQ;OR@vA@D3L zk|&#3cwkJ2&SX z|G~`D_=Y%O)Ne%9|>nO|EWVwU47=BC3^+v!v9P>cb>_A=C)lDs)c^ViX2uhj5(D-DdI zTZT8QEX||s5zo5DHkQohvr9!Q(3-@G^A=G6q3owU*Udn!DI_5r2%QvW0 z*<#8r2yr}A>fn#lGvZU!2E*>_3;|!s%rT6B%d+rZ>;fvd=2Dq(WPSAktbJB{=yRx>%vZkS~08y~De=W_FAAs<2+gvuUijQ-S19;>PuiC!q>$^U&7Y-f(Pw9u#6 z6r;AS#!cK)FSnz?QioVKH^)z7Fk0%K61j;xr6Iv}m{ZRA;==}~l;NI~%3VPX_Tl+R z*?9ka4=bduGGl#M`!dodf#})m@dXD$;K@ou-DZ?|22$y2(!KF5Ch=mP5+!h-Q{%~N zove1W$-x8B;hrhxt8-~`mQizSv#)|S4Vm|qPzr5kOL!T-$E+%(2~`7%Ui_i zMBAc6&USZ&q#AZar$JZ9#8TjB;Xn5w6fZaQ=Fzz0>Tl2SO4zV7w&U;?zBS@2IP&bJ zI6gC8OF$76;~SMm(b`7te(2U#6VQSt%h25k-XDIXrW)!O{Soa>iv>C&H9el3G*ys6 zs@rUgimnvPht^|n-1+^?0Dk>Q<0Mlr9qQ|;K`Y@fw6y1lk4PK5so-Z=Sy37dSW}h! zF{t`;``U0wZTHlN%>s%tX)!b_xFG)q`g~&-ejPOA2u!4C?i29=wA##QZZJIclEx!y zemx-6toGVZ{ai8uH-w{-+XT-C04s#IaPiY}-aMv)8mBg8U2@S5ZE@l2il8_RaAEAJ-H61XO*1mgCNc xg$t`r8OemYY1z`J_CTss7!mzFP==vK8{liGrn4)Nos|mA0c77Gp9Zfe&VSfJWC;KO literal 0 HcmV?d00001 diff --git a/src/res/mons/276_0.png b/src/res/mons/276_0.png new file mode 100644 index 0000000000000000000000000000000000000000..b168ac1cc9dfb0c82fc1d68299f014b1b676b712 GIT binary patch literal 756 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs43oAoYD-#p(>X{c97?@%_T^vIy;@)0YEO_J~arEO;5ur#)An5FIQBu~P=%FGM z+37M5#F;p8>WLjP`Lpw9#XQ~|{cr!wGiixd#oyz~HiMjr11L>MyPapTZ+7>ux8vnE)viB3Nu|*D@{Z$=Kf8Mxay^q@KVj=v zp2!nne$#5Fe~I?ucqXz$;Omj@rmLynzHj~=an-J5cU|{`c`~BL_Uh>E@r~-0 z&t^rx?aO@mTENTfAu=P>HmIwwb4m=vG>f~yzS9*{FeJA|Nr==DW388>C}bUH@7VQ z@cDMh1+61}o6Y8(ueR6vQ?vKm;{OT^2gMV@Zoi+tt~LJtxyk-}WD`r*g#Ot6`l@C{ z>@NOHR+qw(>{W}jziHR6cWBp7IQgk)i|9&`v+e4tton+r`hg-BUe9y25H-|U_-^~s zO*X$Sc5V3J%zN)hNW+i4x4Q&x-xn?UdZ)MRqqXIY2aA`iU9n$uEyr2w>Xl-*gT-IJ zZ;bfK)OPTAn1jjk1)8_I=D9`p++#GHDp1Pk8Tj+VYVO}P0TuixNnl2Q@qdOjUQ*f9 SU(H_vlJRu)b6Mw<&;$TbC{4Bi literal 0 HcmV?d00001 diff --git a/src/res/mons/277_0.png b/src/res/mons/277_0.png new file mode 100644 index 0000000000000000000000000000000000000000..1b20a8e8d043cda1baaa4693d1ecf5cdb9d82376 GIT binary patch literal 925 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs43oAoYD^sKA%)Cn&7?@c-T^vIy;@;j+EPmx6()RG_suNx+LXwi5Yh09+l_z?r zY!d2pQCjb!G;yj&9aG;YUCXzVw(*od+jevAp7TCxvxU-L{46rN334fR&?)(BaXdvT^H1!qUJ?Esa z9F);(d>O;-C;ODWv-6R=xwC;-o709z;q6QR=UA@z6X)n55#p8T^4WPm_rd$>dadza z`~ThG(!a*)c6UOQy35yO(Wb7ubDE~TyV^hf=$ZGk53P<5;!<2y+Q7AZ^^V936V_GK z%EkR$^!`@Ze@)Jdx<}S@Xl>f|@xspBvb`T~`IhgGuB}S(4ZRY6I>*TJe7s-Xo*j4O z(r#}(z3Ghas;&QLM`)~!{i$|KURLb?j=k@~^=IDx)@~kNZy}m%-u=X>V;}RYg{S$h z3!M6M@_qWdpL>6Bxg<0FP`qukKk_4A*PW@y_sN^jpP{n!rN*w=ACwP0YWMeva?iN@ zcunqC_wt*S{qz3Ys}?U^!TqfH`L7c@e?D9vFRsz>?3SVko64)cw1r=5@1Drj-+$Hh zB#VL6`I?I%6~S-H*3F5N4}ae(aB1hZN88jjm?{qJk(lqkJiE~4sJU3vA8&z6X&+T* zG8}Q@=+@^t(9-(#xBj6GeG|>P^)Iq7_<8Fd>)X?pLa!b_y<XNBGfNNDY_HURR$}#b>eEAW^@1n8JzMdmvQcbvij{-O)Ry43($>5)Q>AyU(z#Q# zb@xuj_0uP>_2+q^z8Ok8H|dEwEBYQ`8@_M;YD`O=5pQw346NwxvXIDUo64 zpMTyJ{kN>H;^{uEmUXWec}gF%;7PuvXI@!d7Qs>W?Zz(A_}khJ ztzn_x!>i4{I3=!FIpgJ`Rpqx=)mhAwn|&>`B6smuJ(l|=kFU*`b}Mh<{68{@2P)XP zosaS~Z!qLmklDVkHKDj9_)&a>pe~2@m+YhA!3-k*4jocBl(c%U%<>=d&m$imUbd*c zcDHBz~9xNZBgt$U06H#i%7k-f6@?tWEi+gW0+4?mqf zw|~c5{sX139O6M@#%n4ckv03_fXMDW) zRQ`i6R)~wdPt6F4ZUTJO7lmAxV^dsbl^8Y)6^?lE-{#D##{=)FupZ9;_+w?<< zOUm4zxZW=?oj$9tYA&nQCwVIv OBs^XHT-G@yGywqPIeI<- literal 0 HcmV?d00001 diff --git a/src/res/mons/279_0.png b/src/res/mons/279_0.png new file mode 100644 index 0000000000000000000000000000000000000000..507df76fe90738cd9820a3a383347ba66ae6ea4f GIT binary patch literal 952 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs43oAo2AbaAibUy|LW(7|d$B>G+w>K3F9yv&~J=`1Yp(51j;sydr6DOWH<&mNa zVLkcZ{b%>jCIKzR0UW;U+nHRn>3ZyS zx&C)|&sJVm`D(8!d7xzDt5;Po?|pU6ufOs5V~rV?>QaG8+zvB|Zzj)s?%DTmg;G-!r!D>c_uQMZ+bK>RubjU7UdwE0f5$B!#BpzS zn9K5syiST9T#hbVd1Sd}++OtiditS9ufNw6%;Gki-K*JkY2A!p{fp+!SS+omA9`=? zwReuI|L(Z@p(Ed2|911saOZcI?Pk@Nv;SYOu*uHJ^`@M3fPu|h+f+$JNhE-a=ufKJqY+ZFX zGN#x$hEZg5-3h+a0jwXV7F254F^K*vu&Cj1{IXN+<>en{H|>k>Ys_NEc^}WJtss76 zYPR#kC(@r*E66vv?NNLDn?bDo`&%FWy4`QTWhx%oExEj@UH^G`n8ziP?AyOh*((x1 zuFlDef0%a9*rk~L#8%$FZNIG@g*QfB+9ETL@k-XT)2HlIZyUsX{9Cs5#me71bV|Lr zC-LXL5dMDj`&;!n!d+8!xBUJ8#b&|0_xs&H>|Sn|6YC<{@JFk~{qO(PkJ|s7%lc4z z@bdrvFPH>c3-*hD>FAO#Y7JjF`KO!Ct?m#GD?2VFojq>*=P|2P%l_K`%ZBlfs$Iu# z)BW;qgWmgJzv|<4bb5;3750bj)$gm`?%SRnIys8rzfkLk7ur6^Y52kaq%;1l`dxtm Rp{2DT2~Sr)mvv4FO#qG+v@QSu literal 0 HcmV?d00001 diff --git a/src/res/mons/27_0.png b/src/res/mons/27_0.png new file mode 100644 index 0000000000000000000000000000000000000000..8eeb4deabae406accf3a7a29de28510ab7cc53ea GIT binary patch literal 880 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|484L_eH#}V&Ln`9l-q0<$?I6(h@GZZAhJc2Fh=~c0h=~Y~h5(O< zPRY!L3lkSCT@45Kj ztde%qS;L~L%x1f;C-P$CyysWVA^@y@J(mSd4 zVBMXYXOm{Ul>4*i#?6mAJa6s(!Fp=Wf=l|Ng znw6G)J2&}h&G!J9lb?e(^t zYyaNdQ-5dL?JvR;zxWH@itzStn6%;c-RRix#F*r}JLi8~o-CHdy0*zfv?#K4+4aeF z%RDOcJEoR;-Ha^oYEq z?ePBlkE+buW?#IVLZ{x-vVLnT=)58MfcQL#*yHnc#X@gYAJX{75GX593lXpW zzK#FS@0B;%*H4;#ScT=^$B!Q`e<(faRmaLRU2%c^z1J=#oA;joQ`eede6M1m%`)W| xD~>w#X#Hr_c(74R?T5Zgqxuh&BzGz48}Hv4ksA)nw(@`^JYD@<);T3K0RSOllFR@A literal 0 HcmV?d00001 diff --git a/src/res/mons/280_0.png b/src/res/mons/280_0.png new file mode 100644 index 0000000000000000000000000000000000000000..420bd33896f2ddf8fcb43d856a8275d5a8ef8c68 GIT binary patch literal 570 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs43oAo2DuZrl@%_!meVBITO(>MO`{w=flcKzJlhpF=Xc=#3yW3WCIoI54@}k`7bBgsp z+sxk0IU~*XjQ{?DJ3TkK z%#8ngn*6Z(y_HYfq5G+5f}cmzv{iX^S(84nDE>%%AFu8>KhmdZ=6eR-cLqM|YW*8j zK0f|GU!_ykH~FG;(B*Hl(~oEymsYH8mY!tT)8D^AslG-w+IoWTJ-KaZmgb76LHXf* aXASeK^y9phdlf-xg2B_(&t;ucLK6TM`P`iV literal 0 HcmV?d00001 diff --git a/src/res/mons/281_0.png b/src/res/mons/281_0.png new file mode 100644 index 0000000000000000000000000000000000000000..0165540c58c7d05bdfa6a0b2589aade342b7ea7f GIT binary patch literal 747 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs43oAo2D-#QziYieC2Bu(77srr_xVJYHC){!nIrgzUmsKdR(Iv!1Nl^5Jhs#k< z6(gaUyCzSZ=#i3=;&SxVWI<67=j?v|uP^FP zM=$bdDBHhg^2)Vgoo6TSEX{p>{m`DwDDT^y@zpCsB_yKpV|H%V_ti`JcQCF0 zS!DLPnAQGRkm)a$4D;1*GM;PSXg{`>#qP!CW9;@*R?cuKWD5Db_4NHkEhkF*7qIMI zd{nPiQ$6uJ`?~#K*rv`++Wlp5j?{j!?(>IBx1`R_1~SG z>1CR}?MC0#T~tqeZ+Tv~Fy&{vV22hXSKaMzVY}T=o2?Z6eQQqfvp1i(q+Z__3=9-C;S-K$t!-4F8bj#r-3VbK3k z#6_9KnkD8wr{V{%Q~Qekc?tbnyy3LypEc+Hn5wAG>6sxUaJ2n~>DBMoP2)=AudrWx zIqCX^exZLWE{hla@L0@Pub{f%#iMmUFHTkH>F{I7w?U5X1KMf-8TQ2)**>^*<`qc7 M)78&qol`;+038}nUjP6A literal 0 HcmV?d00001 diff --git a/src/res/mons/282_0.png b/src/res/mons/282_0.png new file mode 100644 index 0000000000000000000000000000000000000000..1513470e41fe141351a7ba3de9fe84b332cded7e GIT binary patch literal 1196 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs43oAo2D^m;6WbY85fg+wRjv*CsZ)fTEJa!W~c7H1?BO@DYV_PF5I}bB6Gan0^ z2#a3Ki)2RDw#LRrHg+B^CN3U62^kIz0}$lkSTW_?ccaCno63Vq_pW~CdEbB2v-5so zH@~0#{j5KnL$O7`i3sAKZGKH=*VDS%uc1q0-uwQOJ#asF{;d;KtXqg~qll@?Ud|E>aqO$W|@`;*JIUx$1Xh>ubUQBX8m@%%M~V;`|Vc~ zzVYimFIZ#xF1|6eoh-}*Sat@T;o>$Xn+d|!Fy{%ZBdflBgoHRS8EQ$Bsu zIa#5ST6*pLs|P1K>jlfoifrc9ygs%k;*^`!%GqJJb8mZY`cj(iIISa&p&>S4<8Ik) zOp^}>Zi>_jz3X9LTDsqF1@F|QGnpf=#EW!)(2HOFoH@lQLj2RuDDO8l25ie_(N|zJyVr#zq(bW(_@;xskJ~wg6@w4XQsDG%=mlv-GbaVHK*#9M=~a!x^#2$ z#s|#8*$hql3l8qzarj!Q@%0Dhlf9bzC$BfXFQ0U%NucIUl|$s3EiG>otY_sJZB>*x zH7hsOuO;I=BZnQ+?4J5b@%G=0CT-j^b#uteh*|#U>gp^#?tjnUb^m|G{a%&h5mPdL z$2;y5W7(h4{W|z-iEP}OOt&3nlT_C0-;S|A*1ksZf1|*Q#1Eer?U8#u+3xT^MMsOS z53&smzc=kGyZiLC(hr>mj{fz!$w!aqaU48;&%Qy}VB6vs`-Km^Z8@}+H7+(v;9v^_ z1N-{pLW^YPZ#P%8vCvLv7m2$!A)kS%W@pTmxCF-)?dlPi0$5U7rs98cp56S?Tg^gyQ;`}l)LBe@^YafCJd(ZFq4eXSmz2_hNe2J)q?L}lu|Eh4(V-c>ghU?%M|+w>}P@_WG literal 0 HcmV?d00001 diff --git a/src/res/mons/287_0.png b/src/res/mons/287_0.png new file mode 100644 index 0000000000000000000000000000000000000000..2ed69f2c8f07ffa7987881aab420ddf42a72cda0 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs43o8)Y;CMzNI|BoAwWo_?NJZS+n~D=|If$@5DA#3bbWjlBaA9RCGG@#@|A<(7&{#DJ>BZHFIjj9V{%TJ5hl$G^J$_I}5gtIRlDy#A|({N{VVKh+d& zyPX?wKKP^Cye&^WXMNrE#Y%VQyRAq6|8o80EB0mg+XsfH_fO5=cg!)^D)l41apFYS|i>ldrgzKD+kvW$EGFrB7}Z zs+=#Lc~(i5Q$lvN$y5zLRln=MVgk3V`E^d*m?^-o=Kkd6f6^cD{)$RtV|K5u^yNEm zTW=s?)6a4zzuc;7-^;B_?q_z&v4+V%PM*Ako(jBIYKU#em|A4jMc>`h>N?IqBZ+q6AuK2v%VABSGk8@^ayj!6b{ ze^s5IB7NDc@%(0=Yp;Ep3@&bay=zm1&YByN-hb8mi)E@G%-Ht6dNbLeNnS6gvg7^6 zZC4)D@=xD%`G36&T9eu@q&}~5>&+NOG_o@imcbamtJ!9N_lPPvn)i?Enr)n7{B~I(n zQ0FKqmdWsRQc9b=v8S!CPvFa!S6v+Ic~uVTy7iy++)&lpFkhx=;_sL&1EpJcFKZk~ z>Ail{w9Z8KrESc5z4+3@)7Gr{vo1`XVFJsXi5!~^nN=3=+IeV&;eNrHy|ZV|IBRtE zno11Ink<0_*WD|Bv&J0%{4uA-=kZHJ@59}{u7s-500=-^9v=O3o6dyjqkRhb2HPTo{nxZVH0W9%5^~$r=Cv z*oKk_ktU7*0tnc|Gn}lwCIO~Lh6DocJ$ITj8PHk$Av^%k#)htuEll2uMmnAj0Kj^` z04PaqI%6uj(TT_CL1_tO`nl8;WYoFj1OUbdy=Na9vk&8o^zr$U?80y^R&z`Psi6dX zRCe6LbvNoP$+6fdIuRdX*NS`<&|Oeq7F1{sv@|nEfHr{<2(T$UAU4M$9BIhmczpK{ z%mSu`sSN`~z14FyT_1y+>5s-jPtWC*CopiozFaZn_|8__1w!14{uj{;vW9*WEU$j9 zQjW4Dr&WepUUmA13Zixt!971UF!C%hVQd1w?+6;dc0w?I+kuZOJqh(!ugueM#oCcq ze=f7Au(s56uE(>kx}V?>+tRY`{Gs$gM;mbFUZ*EqcXNY9)CxUDGVo#TU1YAscx9*O&T+n#WO2`$umjJ>#>Ydp8S1WD+r5Wqt8gzZGdXj<= z$aeBZh8Oz=Eo<#Vt4f%XNdDD|*AQfWJZ9s>_pyiho!N_e1>%XwI!$BmJf%UI8{9Zd z4txpknPmS!zgF=={yoD&-B33tnNsO{VgKZ!Rc%y*m^}au>{3 zpn9^PwUk~wAgyXSusX5-QsF?CK0Y(+?>noqsaW~L$Ga0WTLf#f*g40ret=jNlRq%8 zRGwMn8Lel0&4gW^!CHAO#W%d;-l+$;n)|f*TFgKGyanuj>9ll&uV8C)xW&$x#D*Py zsHI59R%x=QAjhsos43fU$GuKe7P3B%bJv-T3I^|VKZ$Kf3XBA|0y}x4%cgb6`lZq+ zZidfvwayRgdpsyC7!_^LX;t*iXCVabo~{hH@RItk>)5a^c}l%-nT&mVb}RXVt9iCO zZszu>z)`SJ$AbPo`alM&;%#Zl-_yGS7uzL)Vt|^(#l_^9yMbc6?fRs%V{<{-apPQb z8@0@@gzvu~x#|4ZAHtCLLQRuK^t82f|6E!oDaD2K&Ip9eU+1ZMkvJcGr>^@Oq+ey3 zj>FUqZgC0#X}0$~RVy)8<;`Hfo(nFOY{io3(BP*UPXzSzEt^Yi{5+HnguC8fgZZ2n zawsN;K)&LxHshBcwu5AODx6y=wVhVn=v_?jCQiV?_NqqCupzIR7=ZyJljOW&MiCYI z28@lH?7qLD4GsG$_XR-C0ybMMqI@kY-UtztMJ&&=yzU@AG9!{end^ckaNut(_TYX=ju8#Zg(FTcrQu!mU=?@KAE!(R0s z#PW?m$j6^`vzonw_Nmc({0k?<4hymNuH~2O9*R$TsfJ|i8AgmA_1vFUw{vD2e8!c% zN{bp-7K?fkH^2#vaFssSwx~}=GEZDi{>(kG^-(nVP<+#fKXyM;a*^T!M}sURzv^* literal 0 HcmV?d00001 diff --git a/src/res/mons/291_0.png b/src/res/mons/291_0.png new file mode 100644 index 0000000000000000000000000000000000000000..1ca07f7fb7e98018345155bfd891733a5560406a GIT binary patch literal 998 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs43o9Vo$cV{1_yq$4v!ADnV@O5Z+nc(RA2|rHJ-BJz?4mSrqQ?==C#O#QY4K1g zQZ*8)G%_ku{iI@KBqS+0{q*fK2PT}7-4HOlZIA!e5W5@v+p3pUACgkS0~V=oyZv{i z;hU!ke>S*_HYKQaZkYaM?x~8H@KDuc56^(DOsi}*r5|3X#mMI!=pWE_D%N5}(2^on zp3YM&JS)Xl_#DvicxurScRs{P*IcP4!nTj)iy#Gus;`O~9vz0UAc(>KrO;-Bfg6ia6=FFDX zfAa8rT&?v~PKOVVD{>YYm>euo`W_=RLBw(=v;C_b44eo4vlis&{WoPf<^Ox;!&{B_ z6`QpmusHIICtH@gFXx=r^DMida#~09M$YXuXP%p~ol|c#{Jlr>{OpO5I!cq5FYNiK zV?5h8GhiOW$sendEiJe27hlBI891bKfbgouI8;ZbE|8ahOFb1lUxo0>lZ#uZr7W2@5;t` z$;;}Wwcq8>d34I>aLB7|_P-~#XjrK#^gKHrE1ba1eKyZ4^@HPC>Eg5Ej-?xf0;&`` za}B01XV@;>FjYu@@n#hUp@pWLT2&60GqTTAOp#@|`>sgkK*lZ(yI;(|TIMUrH}Su} zeE;~&_X>&?brna9k1Sq!lXY)<@#eeBo+)#uOn)r2F{?~7z|{Euu?Pjh8;X`c;=XXc znPPBz_oN3xiTNup{N8lrjr&cFu4QxerWc)`Iqo3(7Tf^)7gSYpym`3Eh<$BstWsV$=6kczhmHWapplZ^S4Z&5S{*xJOG#_`Y zP02p~T NgQu&X%Q~loCIGh4ufhNT literal 0 HcmV?d00001 diff --git a/src/res/mons/296_0.png b/src/res/mons/296_0.png new file mode 100644 index 0000000000000000000000000000000000000000..9f8f27341a9f4006238af3f898d99220c8f055d7 GIT binary patch literal 878 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs43o9Vo*yNM(@i`0(OxHYJ978JN-rm$LkO~xOd*~hAxWXYsK`AUmVd4o76(LDU z$<8Hwk%5gpJuXVh;YvzM;UNlI0-_z~F8n?BZt3k-KdnP&Y~TJqbLVEf;JKak>B2x4 z-~i$!D`r>czglel`>qfBch7>^3^&)cTkY^`y3ZnVe&O}==TsH_{5Pte&1EXPt#n2_ z+WSzB)g@i-9YUM#`#ch9j_BpOs(~PicJHZ=U#Z!tD%!UbbGY zn@_W?AC(@>e0JmV=hUmeOYQsE?ykP?8@Jr9YQcfFh0A{D1l-jWf8??F!ROlRZZ2n! z=6{~V5FKNBbcQjffa*exO$NJSUtR)=ZeWY}aCLXT$d9lOuAHYfDP=5~6652jC-yM; z{C{t+Ch?W(4<`7pd%MJNyL{$x;pphaW*)O{JFT&fY5lpTJ|}nb>&w-eMH3lx*FF8V zY2T`*`+KIHtw}#S`-<=d$+dF1>6c6Ne%#Ex+Le0#-C8;SB^YIMwN20GN1Z;f zb7#EN*M{X*>XBzpU0ZdxVr`ejwxW&O#O`a)=GOc!z`f|(ms??d&r3gs-g?6SH8Ry= z)~$_&_kGX%f91FJSzfNlUAbfT&1l(z%@%7}=XK{sOgleSVXyFV4Xuaam+pAoJ6|Un z&b4RV=co7f@g8;ZeI8X~8+ypo-?8vl8zc3kAF{hs%&b?>!G z?oTZ}@ICg$wCm4b{QK~D`-UHz_#c0qI=B9>A+Nvx&pkDNR#s{IuKYgXzSyG`wn|rC zyV~yOSZp8>az6aEjoz7)|ISUh&hWSRXw!Pvt4-13DO?qs|DIIv{$JeEEqGxWe{R%* z$14Jow*1JtcYT@(TU>YPE9C>)s?U}jt@qs)bt$H%$NF&9mSyU_Y`&pcy}7IB9iL|M v-uZG>#oqVjp$&htV|>gJDX!taCx<=blw--O literal 0 HcmV?d00001 diff --git a/src/res/mons/297_0.png b/src/res/mons/297_0.png new file mode 100644 index 0000000000000000000000000000000000000000..071d36fb2d3e3bf44944b99104e40ad9cfb0ac6f GIT binary patch literal 1695 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 Kb6Mw<&;$Uo<6~3+ literal 0 HcmV?d00001 diff --git a/src/res/mons/303_0.png b/src/res/mons/303_0.png new file mode 100644 index 0000000000000000000000000000000000000000..d7d528f67bd4a974321dbae0104a2df4d23226dc GIT binary patch literal 915 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs43o9TpGK$i0-p9be^xMgajy`t!{ihAsJjE%&4!72mtO zp=Qbyl^O=ES1CptWqvebww|2m{in)_JFB&|S~NZ{ep?a~my=(A zW!h&`$HX(Y7P1CjFXeLj6)2MB%OUCzmU1_o%k^!X$NVlk;ifg;qJQW7i(4YF$j7mH z-w!Pxt$pIY*X0`G(-T#-*1f3y{VVBu)C|$K`uO*y|J`T2)VL%yq3Y?k(k%ZiMe5~!8<|Mz=4_k!1duRqP1!n9&pukNy2H+`O`b1O`~U;pZ2|Dg{G zH6kU4{(jR~C&l_UF|j>%``Wo*=P~W7eKY^fX8*o`L$)0&zpt8Z{=2x;>hG3qX@BqD z+U4-(tNMy^duu1oQs*cMc^}bj8vgG3+wC`%1_xh$v+8fAM3(i>P{DeKe?AL-U;gsh z{p0l0m0K(GFK^rYL_z7Fu13AukJvx++?;Ide522LM4wvUai=)w<5saJiZ8b2yKmmm zB~r-p=jr2`=$_g@vDVuClP7O;>;HN)dDrj%f?8`9 fFd?VVLn~IrM;%^sOSYG(8YJ%N>gTe~DWM4fH^rBq literal 0 HcmV?d00001 diff --git a/src/res/mons/304_0.png b/src/res/mons/304_0.png new file mode 100644 index 0000000000000000000000000000000000000000..3cb7c31c3b632b4979f034954f52337b7c983491 GIT binary patch literal 675 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs43o9TpHdz&L{S*TO6St>}V@O5Z+Zzk>9~+1qFMJ=6n3(wR;Gu&D4jpQ4ZUlnX z=AXh$%pkzd%`Y~s^q*y!es5H!Ri=9M_rD&~=3ma5b#HV0B?+L-IDx~KxIZ#`b#BMk zzW7o*{mlP)CaU{1y0WjETtEHvQQM=dS*76uHO#92lO^&x!)4mK4D3a_rY~1vy(pLb z_QU6&Z^DnwId;*#{!4BCtaasu*SEg2u8dT@IEe@R+l_BNeDG*Wm%vlb03%oHUlT9BtLt6*wd!r#mE&5SN-p6HU%zb9`TJ^Kl)prO zOR!+xjbG6lyFam9DSi8_@;9gF`P=u^&VRoB>#OPPU;Aa*t99q_*zzt_*u`|?`QPai zt}OpnxBR!*(&HB$%%AVdjNz`@uCDY=J|}QqL;6~0>-#U4F_j#CkoH&XLf`clIe&^b z7arv_|2)GrvLSj=`j**OXT3Untmkoibheo7*C{_|cZcpdRJV-DW_Raf?kiS@ve}Ow zfBbRVy4*F{Ri`fgy7*i1=x5V^O+pfr?EGsy);#-Jtt9l1*XhvV57TAW9_EawYpZ_} gn1~it|GbaYFtOax=I0m7SPPQ#boFyt=akR{06MlPj{pDw literal 0 HcmV?d00001 diff --git a/src/res/mons/305_0.png b/src/res/mons/305_0.png new file mode 100644 index 0000000000000000000000000000000000000000..5d7f20f878c72d17e46a3914fb4dcdf50fee756b GIT binary patch literal 1135 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs43o9TpF?lNJ$jiXMeBIN55i2~$#@ zcw&yT(nJpxq0XM39+x>QT*6A0Z9hM$|Muw%GiU$K{FZkwJuQ9n&DLe_zt6tLsn{am z#6cvnN43(fGI5Ld$L*c0>G$%t>-+or8y$*nIMLDjB1XUKQTx`p6Ak| zxvKlY$5}Ud4td<g{_-&{=g_z}8Eh?SGwQpWNdwb^1O}lw{&vWjx-JhBzq9V>X&F$=UDkE6*;d zo#euzV0O<_(R5ws){noF-=7SVo*~}qA9;_X;%8a4naYN~hv@>m1-g%ZDRD9@*f`C) z9zFkl>T_ili*z@K0=w?QU2X?{cj~pIi|}uLVzuZVuS0m#f{wI9l1o%RSs5!VTe^CF z>y<5E1P`59emP)8@T-}>u-2=cZsw^L5sOg(2nz_f9+kx46bENi7onn z>V4t*jpfYptP-Z8%3uBobolSL`}nf?oLb#SBW8s~oIa}s~**$lKLkkQ>+k;IrA+ zmWyHq!tyB%@eIxZ4x4L5uU-CYCXz0^@Ao0MUkf{q7c9%1wd81fioAew#Bt_73;6`h zzGa;Y)W7zRwda~}@`cZrKmOr1Rmc?BZhdPlcUk@3n6~;|H|!JE&Gnu5|Cn>q!KXj5 fWwyVM?wGp;uH1R%$5v}#dBEW5>gTe~DWM4f8gcsC literal 0 HcmV?d00001 diff --git a/src/res/mons/306_0.png b/src/res/mons/306_0.png new file mode 100644 index 0000000000000000000000000000000000000000..52f66c1c48ed43f643b4d06ae082dfdfcf2e1663 GIT binary patch literal 2280 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 literal 0 HcmV?d00001 diff --git a/src/res/mons/311_0.png b/src/res/mons/311_0.png new file mode 100644 index 0000000000000000000000000000000000000000..66ae04dc8a25adfc4ab42b303ae0ce9fda7f834b GIT binary patch literal 781 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs43o8RND^m*%=A(?8@^ zouAiaKh4-WH!C}AeK3nTYed})(a;~ClVU_1bnCv_baYEip0TsO&z(_pnK|gk>VIjq_xB&|R%rb%vFBaw zKK<~U_6szg6z|@??)4hmxy$p#4|Z{3}1K-n8NAqHRT4Pijw8ZqI*g z@&8Qlk4awzmV7W@z0>rz;h*n|y4Jtmy8ZLctx3_o<+Ehpo0mWIzQ!7GI)1HL@`ul* z5nR2o33mE#>;4Mvx4&V_c3xq2~ni0C5 zuDkE6yluMrNxom%=4;Cv`5@O7(-LP&Zo0apT7H+s%VSgh&5tB% zW^rE%Jd!MU>B;Ov{>~GYS1P=oTd*k6{q?_ZSB{^ZelL{gYtQrga|WFM)%&eu=k|E* ty>s-y<@|ex%Do$_ZL3g{#)nsD>X=w}OR`l4t;+++c)I$ztaD0e0s!!wU=#oV literal 0 HcmV?d00001 diff --git a/src/res/mons/312_0.png b/src/res/mons/312_0.png new file mode 100644 index 0000000000000000000000000000000000000000..1b8c330a194b85721f961e767029d3a028ec4762 GIT binary patch literal 815 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs43o8RND^mlt8?UZ0FfdK`ba4!+hpz(m+Y9O;xf4*#bQ&+h3|V`3%W9y zJZ^7ZS)DhVJ^TC8>blNjyFN~wvZ^BNKz!PM?LfQ0ml=s#;f5-TT`VQWahw0E-u<`W z!11tUiy|3gKfJzsHf{fB9KlsLPqpm!yr#L|a;DskoU~`V{_N`T=k;=RHfEigKZHs+gFZZ;JWurV z9aekEly#=QxusjTT`hU-KI`r5(vpMx_iCoe-`@6V?Z>rN@63*V-0=U+JX5#MPxV4` z6TBxdt)5wb`**>s*m*hkBJDHRtm5AmRa?6H@#EP0`|d`6{JZey6LweS8$u>BD${)D zdG%~Ld(Cv}!iyH=2gRo@k6@kMP$rlIMI)ZB1Rz?7|Dj z1J*K4ofBI0Zo6;k#dF*5{@hfO?-gI|E4XXH`7?JrhdR-OG&2SKnM;w))?mIXh>r_l}sp;)akw3FoA$;5#q=_BXA2pv}p(?^o&0 z8lJi}P5uol-n_W8|K_x9GsNEodtNy8U~KVpaSW-r_4dZXAf`YG)&#l3 z#~%oG*fdSdFp=tYTQt$bM5xn6`C^93rE5RSEh^GKzmxj2Z>II`p0{(V|99(%0Zl>! z2U^T-m#Vkgb5(DRER(-~KGt@raWG>p=ht-&Gr21)bAJhK`u%z{Q(BPY@`jfAOhs0A zIECBh3me4bD*7GvC_7ymp1tF@|MTz3x1uqoXJhj_HgBa(l^}KmFTZ|NUa}-sfYn%dz0rIUkC-gzAc=BtENme#`SR5f06FOy&XqQ3ONr?_?&y<1|uxg bek`wJNXljZ|9Fa514zu%)z4*}Q$iB}Au+(c literal 0 HcmV?d00001 diff --git a/src/res/mons/319_0.png b/src/res/mons/319_0.png new file mode 100644 index 0000000000000000000000000000000000000000..f9146e064dbdd037a28521f09ef7f56bc801ea07 GIT binary patch literal 1196 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs43o8R4+e|q7Z4=Ny5lSIlQj{4)I~yH#kZ?^?$HPG6X>8ar^UKRnCOUrb_URM#qh$Hb4dkrvD$3okYJ z{Su65nSb2(*T)SU{T@5-E(qSfIXvBAM%}GH`N8~L8-Dk={&;`c)Bc)3c*E~kPES@C z9dP^k_(hsv9g}ll-qHMXQ|&J}e{t3B`8ECInrsIJ8@uB-_6vpvPFP%VA|R!5y8d&Q zl0DD&-^}pb_0o_fBXUyTzXky-k!zf}uIIzt%jbl7U$;)&AD!}d%>@JDM@9#@r{_x> z&-7XM{GG-8^K~UlO*M|3XW~_J`Iu1m*G}W#b{FwIor;FD1&%uJjJznJ4NC@(aJYzi-)WhZ>Qj=xl={UEa4|^jI-Zd)?|e`N*1Oo%Ww+x4%3d z{Kk9p#zVW`Gp)JNIhXajLxstjO&1D!O-{c^>&bGM7=QW5>a~jvoX$8nx0GKB7WgY5 zZ~51#+W2OY>d(E+!g8Ar-+LbAz?0S!*Rr`Jd)2Bh={+;g3K`GbyQA=}u}9|T%COsK zBN7;t_hVwoqeIrWXQNky?d$XZiDBm zGJP8rna-sif1SpANa^c=mMMr)_x@kv9T6P1^0uY>*ZMY> zuL-`FYm}}k$j-gDd$rUI1)iA;JZl8*@=P!Z-nabUnoQ;TnNOE_Twk^-d-F}+?)R@BHak{rDcP5Ce0g&1bXb3AS8y)|_#ntOi4T$oVw zuJd1_voXt>tT#WyYGynPxAL((&vZ=TZ_K&gY!ByeTULEx{_@vAn?ZBsK9hH`K|7Mw z{GHMmXW52`|8@AvBXH=E&%7S}OInNPqh{Ox%*XyP>4^lr_VatY0a%zYc)I$ztaD0e F0ssP)9aaDU literal 0 HcmV?d00001 diff --git a/src/res/mons/320_0.png b/src/res/mons/320_0.png new file mode 100644 index 0000000000000000000000000000000000000000..61f7b066f730f07ddb703f357dfeaa8f34079e39 GIT binary patch literal 995 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 literal 0 HcmV?d00001 diff --git a/src/res/mons/322_0.png b/src/res/mons/322_0.png new file mode 100644 index 0000000000000000000000000000000000000000..ec60ee4ca4419dd1b0d86e7f9e68bcbae65dbfb8 GIT binary patch literal 881 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs43o8S2D-(;(B_;$c;@HRS%ata2JUQu+qGGhkNT_qo z8W*LB6DOWHb>f7Ficn|I>5n>Zrk35BeJ` z!K$qK`Ln}Bd^glT?_ctv{n|gd(@B3!9PJ{x{!B1kcbC62bnDIcZ?An#wN&a#e${n3 ze);d^tKzO^{4|~4d?{|dUWKf)eDvp{%{qH$buHQ~FUVytnPhESD#oinO>M8O*w5JZ z-wQ-Js(1qy{NA&q$b-P2}U|H&`Q-aPtMROJ_LDAgpxxF~Rg z@Ahl+s;_^4SZ!Bx-L5BBws`;RYVXg-dfCbq6CA}H{Od#0!sajg&|R~~Y#nn^PL(-t zXH#8%WiGEPM;Y%9-mTW%{PBFhfB42X>i2KuT*r{dZqoKAL@n?6;>~Uc1X9E1#+N(Y z+%Pj*{`2>(7VSDaTwnba3z_FXQ*`(0=$g_MYgc--PMrS2%+!s2w%fsrN#QJOrK@sl z-!#QcXqIBs`*Zl7j@_<0nbLPUw|Jla%zWot^TF;*>W@u2J}a8;vi?-6$c;X?wsYC? zEpxZeSC-%R<7IlKeTXCP=|2e959`JD z)O>l;Ew8J{Rg}J9rN{pN6}9*6Ga9dnZ&>eVIs3`Q5TCW8RrmAii{~5P=X0CD`lEwu zfqq)*SDV-u$5X#ge&G7>_3xJYUz!KZGea~2&c2LVvG?rSqQ!^Aoxk7Z%ZxFewxxF| z!~F$JFT^iy^S!ULW|!JN2D^-S15VRFS34j7c*p-$bkqO!k=35>rmNK!=l{GFu=dx= v2)n03uj2m4huP~)_qVvrgPi&r{-1xtf9H93%(?SRgh3LXu6{1-oD!M<=&6Oo literal 0 HcmV?d00001 diff --git a/src/res/mons/323_0.png b/src/res/mons/323_0.png new file mode 100644 index 0000000000000000000000000000000000000000..fc1fc204c5a6f6f64795f167b96ad8cf6db8c539 GIT binary patch literal 1868 zcma)7XE+;*8cv8Y78#5flsM;e&6g97r)@&$;#IBWdtlBZkwL7V=iKHvMk-}8Py-ap^>JYR~nr7;%=lmh?&aG9E*Z5SQ0)#{5%176qVF8mF{TXQ4*Hl!~R8b9Ql}-Wxz^$feeLI5dZjor< zqRGu9N;nIc1qcKKfeejH0<*-%0$Cx zG`A|N{1o+Juz9hge*HK~S*ycQ7JqTI*XiOA7AV{w^#5Vrtkmv;yuPz@Vy5C86s#OD ze0JHe4VNT-`W#wIzMiqT`z^d`C$)3ty1q%tp-tnkH$;=u`9^S}-3F+@I2@L=KhdO<-+G=@!zsWn@ zh;+-IDQ1{XU*4KLbRJ0z6ga&|+g~x_|499zRoqpUxQ;7={dv9+9z%LyYWSFoaC!b; z`(LIM1uk&vns`1YcczNY2sI?l!xe0Tg_KuQi%Uz_=v@kswSps|$(ZOfd2`(u?oM*Y z{w(3$CyD=P`R^EC8w4Orb2&iZ2A0BA?ceN$;$^ zg2UUIv-Ju%RE2j4nD=kA>a|Ctj3-ESoeOd8h;Q1hj+8oc?03T|>(X50@wiZC&+==} zw?#`yGpICo%L-*4!JrEzlvEJ=0uH=XTo$R(QQB~UD)!n{7@}Uv7QSk1OmoQ?;h13? z*$Ra%k8gXpY5YQ;i3N@iS=@ilqP55(8XXqxOmw!Go(RbMSNa^$%tIOTqdCbWvQhRx zlpk(b_}3`qkNkemwdr?0#2R81+$C3RGO6GG$4f}o2_`Vb@62NU-`OQFy~-I+piqT$ zRdt4VV}_78;;8k@VOxQ*Gi+Itv>CcmcdkeJniG95cNhSAVV~^eMxIH9X5uh}6k)j2 zudH;V*AUXx7;6;DU;-k7=i5#77hF^8Q04SJ4lwg&nquc+L*ep9?xBvI$oSkO4{+1s zbJww+rZPVFqrO>o5N5z{{LPmRgh^z<8eL}F?>Ky6S_EjSj8#|gxri$1;}R*Xq2HC2ap3LwTzgR*{)yjS`qU5COheop?wiJbXQa$d_THe`{i*LU$T^od z!=Z5SW_Kyc9``r7gR;qIk=4~GtP(5X13=6bX0oH@IU8JjC8=UDlTa)f&U?Q0&F43_ z;UyX6!vU{lmwxicq(P8w5J;AqUM^ST93-FA6kJOl6_)K9U#gNDXG&+!IXr5YkWdCF z#v)7kP<@5^WQbdwio5NvQ!Pdx`V)*J;7!QT6?Z0w192zYq4pNT*8Vuuww2+0s?F7B zy@wUlhphMngzSzy-f8=b3a{(eQX7g{HncoZoj?EaM#>YR%F{8QyXNo3Iy2sm&ZY#2 zcfAqxeKQ?pk`3+d;q!?rq)~k06ZAvatyZZ8?Y$JsNTm{PsHm>QBj!1`db5aOXD{w#0bTB<8?7vX^I&7_c~2&zn&bBkF<5=;?FlI%{EFyw{Dw|jk9Ax!M@^Gr~# z5n&45plL#i)x198LW^-b@X*0bbZR`P(j_5a!wTFp6!;rv25(g7;!Hn!wP>M(rxE?6 z{o4=aT1+CtRDI*?w&LdITs#aWk`KStA+!zb#%>_d8$z#|9_aveNJ|pgBXW5#_OTp! zG3P*Jx)k6vl7E6h-)h!S73Z~6 zaqi?>%GhHLl59dhpe@eYyq9K{BU<%6Bzg~m1`^78IZ7Qv%*YUH_Uw~EVss2uM(X+y zDLo4D9Juq8H_WAka&%gFGL%pLD_z~do`O91y&Dq@k8YymK=gc7&}}O>cFz~GZcpw6 z#30#()4FiUQ)tFwe(siI3Xq(+Fwz z&8W|o*250HaOW}my4(13UE&w@jMe|)JT+loLB2+zGRw}VhVkqGrbd?NMgwfzKXa{Z A`2YX_ literal 0 HcmV?d00001 diff --git a/src/res/mons/324_0.png b/src/res/mons/324_0.png new file mode 100644 index 0000000000000000000000000000000000000000..3c35746643b00d8e35268b142fe21ca20bf29773 GIT binary patch literal 1287 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 literal 0 HcmV?d00001 diff --git a/src/res/mons/332_0.png b/src/res/mons/332_0.png new file mode 100644 index 0000000000000000000000000000000000000000..7cc7356c25273d33aedca4926dd81697b185f9af GIT binary patch literal 1121 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs43o8Q)D^r7G>~o(oFfgC=ba4!+h{Yg(#YvroR zbMCwjyR$X=a|z3n!)YQ49iP{IIQWBkVpkGN%Uk!aRWE(FD1ByZIqDyK(V2tsc@p2j z5{A3}c3k&br->AEsQq3pW~^gp_xC;Pf~2{^XJT`{2d^*r)EZp-?Y4>cpRi000dD~{ zeIwt?-uY$%I@W@25j7$^XS}^_JMm%FA2kk*@OBL+gX%^J&K<8q6Cb`#Qi!aZ^3P!M zr-0wd74Nsd%TLm@o3Z=E$Fic6tGv3BgClfI11m%-Ox~TY3;(sKU!D2o)9e2KvdSi0 zep%9fu{pQ;hE1@zRV<(W@nR+J@E4(hzw7#v&WD}#II-!qicS5UlSS5f-)H@u!L|NO zj6u}7lvh#R+C|q&g!9er{uT(x5veSmaUx~M$LJNWgSQ-I|IB!0ov^OB@B8bY8xD!* zO}eMoozcy&#>}zsLPJt=+zIyUB^TCp9liITKO??$y?SWmX@$&bD_{RSSYxnEFTj~W zL{3@9*0t z#$p`bQ=41dy@*LxciN0eV7k=2=x0*OyUL5t%d*An{;vLdVt@Uw$kU(y?zO4;`{=u3 z{SUR&(9_>uPJd(8%Hx(1JcC)NaKG05yZyC4l{{yiSTg_A>Gz)>?X3BE@z2-e-Or>A zCB6&I{Pw@@&4RbC?!42MEKp`jt9*8QqTh>YE`khPo%i;yzSHtb?YcnTEvJ0v9s6{Q z{?|6F>$>oJ+3?gFQ!GH3qUzoD!?#kP^YSXu#6L(fAEMaWXmh@SX$RU0Gd!c=U z`trMv+O)M^_`MNxxzyxWH@9Dj|6Ka^`|}Fi7T=j)-G7ezR~G+lp{puA%NNf6dXZg7 z&$7_DtvFG-%Qb|tL_V0|kOTK27Fp%Xj4!6^D*EhjFQ0z9rzx$-mHSt?^rmwq3@>i) zS`t$6D>5u}_jLz>3}-{5y<9)pSFmXAt~ay guplz1m6&LM^TF>0U3SMG14{q~Pgg&ebxsLQ05n+nP5=M^ literal 0 HcmV?d00001 diff --git a/src/res/mons/334_0.png b/src/res/mons/334_0.png new file mode 100644 index 0000000000000000000000000000000000000000..628b272f15b2a0f22b49a02ea188242bfafbc764 GIT binary patch literal 1121 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs43o8RlD+2@OGkixG7?@9bx;TbZ#J!!NSn$X}qILUnKc$HtDJn)noi1T+N)sn~ zsB8i<-ISD-Cr&(JHS7Ci_wAN#mv+y5_w3icnP>8tPV2mX`~Uy$LMINz76IajBm8P- z&C+Au=5DdsnydekD<)^t^5>z2c5>QZK5G2>f8Co|qiCA#?Y|Ezik7e1^zXFM)@=*L z|F11)bNKVJB&n8Tf4uG*|5b;#h5ug}KDqTr^T!)gf6rZg`p`Vy$*;S%i(DzIcFtFO z(>>oO{acQaRK#hKmMtzd#sS(%rs_YIY}HOj8ULr6kH_~YJjyUBGhsB~I*~H% z=JNyQD$h=Em>F`-H)-N+n?AK>mH)N8?a|qpM=Ff$m9HLXIGmT9$^NMPv+cg?Wp9n| z9gh)j^5J>J&(3Tv!?*sC@T>qcZHd6ZEBk#b*42Dr4EwGt%&>jAi4R-F9pU*GT5@Uy zWgh+hDW`CBOY}MZ|BR0oyBYW%jhj)w_3ic|{~Gx<1@Scp?B6}&ooIs`UfA%% zTQ-ID%KMqQ;;(=GD(CR$XU#jalfO^3bH03$%%yZzZ0p;-%*q9Czq1=Nv2S~~P?xRg z$#I+b`NusU1#oj*5^7}3oMjfC^r$G?GNR{BX6>FX{>Ird@5Ofi+V%ELp0DScR*M@; z5}aUU zmf&8-ZL(ke4mYsOfNU4zK3|g9)(x?d!m`WgL^@z|sCA4vu*fo=>5QcWH{^6{d-FBW!e3J4U) zWfAD$V3Ze>zrXg>si-dgKmT-{+#Ij4JrHG$53XTz+4kOioU8E;gUeq zvPIE94*ibyZK!%Uf1Ts^a*KT$T?)4^ui#bKC&-}WWRVkCyNjtP<~qlHmL)n0%yJD) zliXP!Thzbinz78OlfNqUzgr@&uW?!lo%cnBDa1-QE-G`CQI{r&OzsK;^$K#0d TgTe~DWM4fW24~j literal 0 HcmV?d00001 diff --git a/src/res/mons/344_0.png b/src/res/mons/344_0.png new file mode 100644 index 0000000000000000000000000000000000000000..25e6de6c498688ac3d4cb313c0d3f7e0e4cee1f2 GIT binary patch literal 1089 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs43o8RlD+3E&@wV>_49qJ%T^vIy;@;j;EV*qUz?M*|VPLSq-~teAFaS~pAYua$ zg4i2?Or5LsAD7OG-?WbPb>{p3_bz+yIa+sf?vlwU*|<#%iLz`E&iHa)yu`S z-!Di#cW;jsXP}xxue0^u?(h;$hxhSokG(v#Q^$Le9BW`-!&9yO``S)+1cq?V_+BUa zS)*b`oUe0%UJgC-eqz; zgh@byWxr1G%b&iVwch4WUa(jG`-1Pvo&RRmajib1cJRstmk9!EOk%x-R;?eq`ltHRmG?oG*l#%(HHF1Kl}_cdux2ao1Xxw&h~`4+2u zdBePhRr(dPt8T_}?bxa^V>Kg(L{qz9!?MPf=!5Jtx7BP6-LX8=EA!e+X~ypD zXTC0Pw$=&HoA~_Q&UjBn)*c?-b%&-jYq~u&mJqz1Qjnkfy6mw+=VOi^O*wx!G$t)H z`Qg#Gt=1?`c+q0@J?b^nT+@UKV&axf%PouixI};d`Wk^4UOTt8ZGSGl7q6L+?`!^x zr}o*t{cren3@0<#_u9<)mAC8D-oKjDHCeVyxYw+r@mJ^FQR4+~#f56R-9?ryQ#kXS zV_IKZwZNSv8cY9r{=QZ7Yt8($b?y%yyxpK3bGy{&Zic{WrNZ;aW4bbLJZ79Pc{yy^ ztWDpf4eV7P8fzS=oVDxjLbGaz^iSTc?x(9%HdgQYlEPcyA_Cg|T@*6fCnjh`kbh1|>3 zpilP$Y7Q&P_Q@M)U6{b3lEQb8e{$l)n=A~I6tpGePkiv z>KM&sXuT)P7CE``qF|rEfs$sWwf4_y!p!St-INk=vUM=zJ6|zDWG~V{bWiQ+Redh{ik(T2EY4wM-_Fb!wZkqQ|>d>3- z45Ie>r#GD0WYWX6E^*V2lf2R-L*2vWe0g=3f7O%$GsW z&b34IeocIzT=Rz~s#XVX#68I5FSyLO=+L`uvwwe=54@^ bKj%YX(}U+kldXE{-7;ac^(v7TW zBrZryOaO`iMS;Y^nX8KThHsu`Dl1-6HMMfSWa`tY4mI!UPIv(=#sz-d*;RAq+Vnea z=AuR0@9ukc`R6QWMw=I#IPT_s&r>h`d)DrDyX36XJQ~g0KHT2syZo|et@-s5BlYe( zZdacc1c!!-?TC8L8gM`Fd(!jBFYiq`;u-#GUjKD9tJL_HZO#7W8b@@x1nM|HNh)yd zUlq1-r)A*{AWYcv$uT@1SkG} zQC>Wgbs={^n-yQhpPSQ_CF8qwiWtSDe(pY7oOL~WHmB6jeT=VX-7*4}_4#;dTgNZaD*yiZWfg)SzSrD*5yE2setuWTgmsnwthT(;ekZ^A^-2tj|Z)^DdH0#gY5C&__ zX)6pCy=8PhP<3l2SA6ToM;aGu{+E{I2Yqr9$%RgBIzRTA>E&3~>B%aVEo~m(9`8Vr7+3J1o%@ecNvj1m&$c&s6 a^p@Ut|Ka4d>FI<{kg%t#pUXO@geCwVC{*bH literal 0 HcmV?d00001 diff --git a/src/res/mons/355_0.png b/src/res/mons/355_0.png new file mode 100644 index 0000000000000000000000000000000000000000..bdcfb7f1812843f5cf04515eb7f7c88d0ec2f81f GIT binary patch literal 781 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs43o8RlD-)B1v-~$07??^uT^vIy;@;j|JL$H8NL%944E==$1{Vwp5)&3AE=*jY ze-OxCxNzaaLkEB$?vT-XyU63EHn;r(wNvke#&wfA=|Te)2QNBXfMqs`d7FAzZu8-_q7}@6%%HroWB14`|-yM3vS=NcQ;?W zd~aNAwcNALaEEEPwiT{lfBb{h@@-Q}STjDot-O}vZuYdctmI!|KU z@FqT3VVa}C@~l%e+!0e;1t#${+&bOAsx`Mx#2<{nNC5U*EkXL{*Yue|P8lfAellY*UL%mYo3-ng39l zHF4|e!rbe}!-ePa_VA@h&8moI-}B@=^UAOTE53bNaA$Yb3#ZbW8lShW?8ebKZ+$jI z)okVVs#2el#oF>_n{5BvHj|IHn!N7&aDpK*su56YL5D*e@DO6bLYC`o(y-8*q$x^F84-OA+#>U15hX%(+hejXA%@KEhEcp zPW``iclXp*0VfW{7W{;bdZpR!e7=*#%pX^;+Vx-Fr{dBG?V|g52p+7>1jyXo74B_xHogy>aX?5P33H7^w-Z?%&zx*=9+2$W_?^V zb8mu7|GUS9N`WSmR#)boduV#%bL*7UmskHY@7b9kT3@@@XwhMo01;{9$A7A#tI~lc zG@M;#RJ=8Iw&a7oxq+v?7CoKH85gsnYyPpXbML=l3}~7D`fC2f2hm!emT|}*J)fTT zK;n5wMZ%@a22%`p_TCh?$Um_0!>S*fcl}5*QB#oB70XtxlWTYc2KepD2 zf)y#{6LR+7uQySbJ$5sR_2cr(otm3Yzh3%gRpS}GOYYqUuNYeNyASPY&-k!Z!n&~W z#OE37uS*x(Zu`OIa_wolbZlSNzy3C7cZ{5>z@Mc6Z54^`J@qC6k)EZhw0GeSQ3< z^WpPdj-PxG!2SE$9{D*+Pp1g+F$wc-KN@ywckEt)yWWMLeXAVbPZwcn{xGv{ZqbCM z33VT2^Un*t47K*0yg6s*u0kVT%iskQrUmo_I+)fz`I;wQZgW9ZZ4pz?tdAD=HF)Z7t6lS8cZ~VLonbB47&}-M zOt{v#F;%R(%V2DfpwPme)sk&-oBNV2wsA-Q-GX`ga#3e|wVHm+%F8)unsn%wajLAYfV6_@)@<&cVpUN~amEby3~#2S z#WxP|^fs8e?zHXVSFrQ>A^fXZPkhnAog4ud_?v!Y99nptS-9lsVq1Bc+Zo=>FZ5Nf z_;lRuW7_j>mw|OQgM(F-{cO2tp&N4)Wi@9l6Oi1S_~*27(u@>)`7q|37!S{LQVH%1 z0fk!)v<;5f7-pCHC3bnnh8eHRW#Vy=eQCrs$Be<)YOxe!*S(v!wq4`caB%XbJ$ero z*rkqX YW&EC%*ICac0E;pPPgg&ebxsLQ0Q2WPP5=M^ literal 0 HcmV?d00001 diff --git a/src/res/mons/359_0.png b/src/res/mons/359_0.png new file mode 100644 index 0000000000000000000000000000000000000000..9652a8980bbe7cb2ee076efe0f27aa2d458a5e2b GIT binary patch literal 1495 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 literal 0 HcmV?d00001 diff --git a/src/res/mons/363_0.png b/src/res/mons/363_0.png new file mode 100644 index 0000000000000000000000000000000000000000..5afa4692d2946fdcd270399c94c131428acd6bb0 GIT binary patch literal 885 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs43oAndD`T_9SMxX-7?|#Qx;TbZ#J#(;+D-L=SO<d9`7V!mG zR9>?$Z*qz_*Z%F#9~obDmYa-P|FV7psh(UU?91V}bye4Tr!1B2-SbmBW%<}|=kz_FRW?g)=g#|ozD9^W ze_-WsR9tjZDkyO;}o!V=N$2M9+igMuP)ls?t5PJe0l4SggwvlbGa_JFMBL-zwc0V%kkv! zKL;1&pT2pZ?d74;mir}j^TW-wzlEjjk5xDu@MZ0VYkayY_x*n>EP46$OPR^0I@?u~ zm%Lv0vZA1P!=rcS;=XB1U)`UrD{!~?_ve#&yXxOuf7ZVA?z+--XXRcyu6Oc< zzUPJeYzIpl?v>oC+WT*(cFo7xUv|H5d&ac(rS=#8%?!*p>ZO{NsfqrYq~aONF>l|b zklk=Qv{c}yB}*muqsP~_MD#Dx+Q;&J!CU)_Vw*dw zfB*FAIXeA;{5AF>O%B~#b$2f)z2j37I?Mc9L9Oy{sg1;r?4UdPi>1H%9$d>feZ`4= z7hbW{if62MND_N`;^OT~FAYv*vLmOuAM4NjW2(4SDleLNb|y%|)78&qol`;+0DL8o A_W%F@ literal 0 HcmV?d00001 diff --git a/src/res/mons/364_0.png b/src/res/mons/364_0.png new file mode 100644 index 0000000000000000000000000000000000000000..ba06fdf6037619bab7d06ab678bfe13043ce0213 GIT binary patch literal 1106 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 literal 0 HcmV?d00001 diff --git a/src/res/mons/367_0.png b/src/res/mons/367_0.png new file mode 100644 index 0000000000000000000000000000000000000000..ab5842328025242abee7ca342c1999fb85bf338d GIT binary patch literal 942 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs43oAoID+7zKhuc>$FffaGx;TbZ#J#EY*MCooVgN1hf_hXkfpbRGWYQQGD=^ z*N1<;+sYAt>+yoQ=bo2@2<{P0+Q52a>gV$dw#!#aoKJhXRf8*B_vKRCU6**zPuYD~ z{_g79@_Dj{K5gN9e|fusrv0H*bFS4F?XIM*>%aTw?mMmp45IU7&V3eHvUhsCsMGzk z;*&S5*H5&M-5Ney@_}K^%TVqh!+B@>*4-jxxcxSM+w)@~ z$E(*;Uw^F=i(TJnUu4a^%k{;!Me{Y?kC$BeKRazE*Q9fc#m^rth-^r&jdMMb6n$O0 zDo}ec0KCzN}kse&)Wf zx0T!fd!6~ZJfDZz^Z)t8hH9S3`;o*N@L}>ti`d;U>sK<|`g^0t^S{-TXUBB@Tz#wi zW^?{pmruo$A6cxwlyl);+^&VQ^M2g=-|wazyNqG~Vx}uUP50=PJq(-vau%22`uN}p zi{yi)F1~iY94EK3;;5$;2U!V6Db zDmVEgS`)u*VP4*bTRHDfmrABRRntB2?RDsvxHmCtj^0pa%XAk1eo#8xe3jCR9eZOg z@9gZ(m-@NQcv2qYt=6zA;XQ?4try%d@sul{9WY0KrS8kUC5Od(tF|sZr?)GLXZTFrgv1R1TH}5|#CUQ#R-=@8Gy$_=m z<-U|1vH$g+HQ>kY{>T;GsTY)VmP_n9ByKHL{mfY8|6Yb~cij0ed|KuAaQ62fujX~v zeO;CDHuL??49BV?3*33N4%x-G_?me>%y!G*-S98}_C>|QtL|U3BiyUymR#^Py;pDd z|Kq=!=lMJSD6bJ%bX?fz$cLkU<&*x}trLA|Bjxi0Iq^D+9twB(kSyRRH%A>L?&<31 Jvd$@?2>?nGtl$6u literal 0 HcmV?d00001 diff --git a/src/res/mons/368_0.png b/src/res/mons/368_0.png new file mode 100644 index 0000000000000000000000000000000000000000..4a500afeae03618527807c760c00523ac9cea23d GIT binary patch literal 855 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs43oAoID?^JnH?{#yWZLiP;uum9_x7e@!6OHWqaXJMpYTu->U2?>IMqYNXp>N6 zr;D4?#1mdAszQ>TM+z%X>TQ0~ptw+)ptU$aL*@QI$?9j1 zcX!vn+VpqVrqS@Ad3u(HJ-f;c-#kF79#nKMu|Icvau%GEGy02+ve(#mT+ZTP5|04Y8L-+H# z{G-z^dhGer61ZMc@#V5Vwrigz+XnU?`qaC@h|eXy{ zG<7BYv3_f4%KYeq`R`oGx_y6M2L~(`ayxml)<^y6N70(w+4TvF7+NK#$p-%D&V6?7 zd2ytZ4R@28s>)?Yi)l^ywl#*8g4fdj$E^>y(|6iu%^kOJQAozTkmFm9q%huJ8W~Vw z#eL|FRc+4Q1dB_0!pim;dmDazQkMD}RrfDc;-^(v-I>2}(NXfeTqpaVNbll1vG@C{ zMWuU}B)Y>kszHi{qng7rH+@eu(u)_P(OOj`#PzU!@=L%SAY&q<_A{R`7&?khoxI5cOCAxf2#4~f${z0+ZFUae>|jn?CS5=wN=4~l)v6g^j*#BQf~G5 z^NzTXP&W<7@5NjES>JqqWbI_6ldo>CeX#0B(yu36)2mfq9Gi7$dNpfAd|A?5tpo3O z|Gb`LwP){HnON>K?e{sOR&@!@yUTg?U&U*Y&+$hVy*{EW_3~re|FgTe~DWM4f_XmZ8 literal 0 HcmV?d00001 diff --git a/src/res/mons/371_0.png b/src/res/mons/371_0.png new file mode 100644 index 0000000000000000000000000000000000000000..4596195dffee29e73087bd613065ac39cb26d6c8 GIT binary patch literal 684 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBSQs43oAoID)GrxZ~s_CTGV5+n4W-G6Jo~ z1r9v-`*gKuS6puRlzmN&=2ud{ulqJ3LB+rvK0{(7tO{pGmE z=`Z6tH_T{}|G6uI>))R%+8;irM3l~2-(6by^7gAoN^Diq<@ztjll+izoTAM?MuGt~S@%9UqA8(zo-G`;_u_37fj83L6Rr?{KN?zh-qHmSe-a{AZ5 z0>>}g^{%*Fl-k(I(z3z2rfXYlZ+FCRSKEV+T(-PmS#j?A^W%bF=1TmjySy{acG{Bp z<-EQ>>bsSnzkasu+-~KmvYrR+w7=co~%3}5zL!ix5>Nso!qhdz>Y}^jh1Yhnx`{oCCeFK;YD(Rvo@ZZG?itB yrlWk|1n&i>r4uxN-0!-_=6zNiCBi1XfF;>@ZP)r%%!~Q zn)m*Tzb-rV?tjYH1BVYxU#%3Q_qToZw=1dFIp4{f@y0fqx9iCT?^0X-O{D+$W4+ma z1%DTC+4Jtrz3&w1_dEan!Rg&fXVM;;NpHKY29*3c!R(bicfEzM%67jWx8(0iaM!=M zS$ffD!r3&*Rat*Gq*Xjw#k}ST&(g*J7f)OtcHLLzZr+E?;P0BW#oJe|Ie-SA33l=A{XtX(FrM)r#$V zA!qt_(w=qf@2n2EtzGim?P0ytpRFl3djfyV+xePdp$*#9y?(*--}(_|Gil^Lv-WGlA=DwXwRV9 z@EcjX)~#JVt7-d(qo28FuAaDXfzFP<@1isMa&7MCg@3#eyX(WZ&ri*~?H1kbFAMr* zdsfElLVQ4imi_5fJgbNZJbhFbHO(U~QZ{yxS>^^Op&~s?Zvh!b`NF0`*eD8Uz zne2p1FYM3P>z~?rdKnAvQdQ0A7x|D<;D`Mj55;xOW{a=zx~vZp_jL7hS?83{1OP)+ Bkjel6 literal 0 HcmV?d00001 diff --git a/src/res/mons/373_0.png b/src/res/mons/373_0.png new file mode 100644 index 0000000000000000000000000000000000000000..07f78168675118f4b8780cfd91097699d18f2437 GIT binary patch literal 1465 zcmai!`9ISQ0LQ;G##}j<_xI{=92fwu)%V@FmFL^uTNiUokiT#2s%A_oqQar7nvfOOA~fCi$gf(}Lm$^Jaa z?pkmFDJ(h)el{#J7%(zKp)F8G7DgyI%FF_VvM@2Dvx#c}AcAnhVb4;0*NPB#Hq8{$ znra<#aGpq={DQ&!!BZM?w{V_0b-4WlBJrM{`*LUwb9*DbB`oCp@ArDz=FIQj@o=O@ z&r+QXQ)O($5dT|IZyH!?B70L`n=Jnf^nH(yEB$_=f?_CZ?X0=|Wa;!2cj8l#>{dXh z+^pzxGuq^p4jXR5di3>J#n`Ulb1^5ANqp-nD~;YRd&=mQ#7Aq1CPF)GhCv6p|E^ns z`H_|-idIUo%yZ!SG$ii>{(|uDt=Am*e@X3)Y&+GDsa zX}Zc&)d#-)H5sRNk+QJPN-&Gt!bd2f>Ya5iZr4_WMpuuTewwUXt|miFa1k5NdMrzW zckLNdkJNTo!UBF9s;z!Ew|#Ojw}DHzEjK$8AA5?E0`X(d?*$h+kc9c#dg5pSV-X?? z1TNA>?JUy;NQ-VY!s)S_e!Vu8mV3%c+Ecp`x#$PCiZrUT6|{2##rg8HiccE)9XCub z%{97GCj5#A!`1WKi!^kSfOo3ouj|ax# zO(V0yJ=Bqt_2&>!7|2x0FC+xWySrR!$AyGnq)O!b$AH>rS{ zO6shNt!zjk`%=9zZC*65&;QU8igGfBJjf+uz&wXKv6$)Aq#s{suZn!2`}1v=WltLX zmHT1lh^WlMR{6*!#S|riOdp_Uohs_xRGu~+wJ$m&yx?J394cge4BqKZVJCoj+EOv$ zpr?bxG|{)^k&QB7mMjY@Gg~j^X?4#y80f{!gqZzT+oV{GUJ zO43xjLFCB{f->OWT{&;D3Vw0ozEYVK@frEJO3-!%RL@$e0Hl>OjkI2D`ry(9)$h!I z58e{xIqP63G8bru;^5cbLsttVRe%pDY!XxuB3;I>&`*P@3-8(8KU9>N4)hO6B-m22 zZYaD~;-yqU24^r1#ttaY{!W5{z`=%ZX}}+Uo1nXp77F3#H;|nJy2+d0$(Z&DZSi$f zWkGeUZn-i%*^a)x6g~I&S`;5m^0WKi&a7^p^Rc0+600Ne8`i&3% zn6M!C@#V3qAbAa=n5=Bed-^DB##x|)KCf3%S|?f zpUCYW&P8L!S1ON#FtOI96&Y{}E51tip MvUkI=Z2gn}1<{a>_W%F@ literal 0 HcmV?d00001 diff --git a/src/res/mons/377_0.png b/src/res/mons/377_0.png new file mode 100644 index 0000000000000000000000000000000000000000..931e4d8263bf26369f8c966ff0e978fd67e1d52d GIT binary patch literal 1857 zcma)7_dDAO1OFx>N33wss?r2asBmblIwT=6-oCZ>io|HCwlstQnx{qVB2Q|)TC+w@ix{u|`u_Aj&u9MwpJW>=b1|4K3;+NzOADgiiF^N`5cEXn zpN8w77>H(PZUWQ{$}OK1$Th-M0sz!zh#XJ^Pr7ihg)0pJ#5;cw)O)+!_heKECAox} z-tnV^2Hd`datOHT2VB(D(lgMyXmC*rrKSHPXzG6nQ!xVoXoV$_;1J=pp0A#%=nU^A z8+XCF7(!hs(#mE;lwu}BhzOCAjAP)R;fW|cM@b7JL=l`!RJ1}Vnkh<3TAZhLr&Lb2 zklEV&uqUmYN(b&g=)=lL9c2GN=@EBh=J4Ek{q%+ZA1*%nONN>+uh8h8@>hdtG+ul8 zFSx&NBrfvyUY#{?J+<$dPuP8FpbIO>h|;5su{)#7PDdUF=*x+pKITNc;q-L`>u0Zy z2fCj7*sRR1+@-K`R=;j<&i{J+5w%2NMgGNN<%D>oA$1#DQ!hO~QhPC3YzaM%ncPjWh7?uh?d;ZTfncdphsl-k#xLX66@) zvmcJRQI}XD8~mD6*zF8I%HECLv>jVf^^ftp!YHbXqIb!af{SCseAno@S-j{LR=&f$ zlbp}Cb25^haj}@Qp49g;BKweY*jIJTf#I1y_udINNR?=&%I~k*U!M{6E#3)nf}S4~ zzpT1*V-jgSo@*2&h;r*apMuN3YIK`iCPRih;_xo&)iiR5)GuJVQ#HDw)Q*|vtq3q! z8C(gff)^|oxAgmWOlq1OnztZoVLLY(8)~o~oD!C_6zV3rl7N<#0J^i1al-9fe5}oo~%0|eY~+awRc7sPuCz&e5^Ly zClz!)3Jxz=W9)NBAk1+%9R8~-p^AXUHfgZ6oD++5pfE$7=YkK=EL4HlKxR4 zD}Da`E|Y-bPf=C2%i`Wq;c|>!Q>Rw82@7?BBW1UY#emrvRcedI zr=k=IL-s`6oh2jx-3!npaYi`vY{=f>SJxtT)OHx=rmCkD*>U1{;!6+l?7wssW8@(V zjkrk!*%9n1`o{Df=|BxCz?qYGGld_c_Y(?T;JtkjsQWMW%O(4(1XfU@o*8u>(o&E* zc_A4rne;tYhBsgdrU@U(cf!&ju>pV1#AmfeR&lJO*+@=%AR>_%Azf7UnNz>>rX@$J zNSZ%a_Gq7GCZfG^pJ7)3yNmlw3j#M>uWL71LUft$YI`Fh#LC;uZ$OfseRnAbr5$Z$ z#04*JB>dJ*zc8OQY;&4S!I}yblaO1v@>`#}U-=F)2-TBeX?mF3!Z?VvZfPObPsJ+oKI4D6d zuVkKw^LnJLBpGUWL7;R-`BjfM^pEC>)IEp52ZF~x)q{X|n*x}Ia1U(^HV_EGa1=b3 zK;L}c@uf#~fUFT)Zkxq{hkxqeQ$%aV?t~^ekt_mU&6~Z_(WS9)r0)8J>(%IPSI#>y zXpxxdiQF`oIXv(=XmB(}1iW^e%V}ig*CI7N1&jq(@YAcKXwQ!9-OVClfJx%y4gK$9 djLIk+2)vr^!#)hY(Q)!{fF;R_SYzTH|6lOEY?J^1 literal 0 HcmV?d00001 diff --git a/src/res/mons/378_0.png b/src/res/mons/378_0.png new file mode 100644 index 0000000000000000000000000000000000000000..a65ad87ef385e0d8e99a4ee1813234cec53c007d GIT binary patch literal 1575 zcmaJ>dpy$#0RK(Pj4+#GXq$~C5nE)6&9ZrSPIv#@U-!rN`T73+&GdA4R#(+i1pq+Z)rGcyO+$V_MR|>- z1;-;))jNoykGgrGB`=4(|DWp zux_h%ZL^9o3_W8Exf+BhxM7Cj1G2sWXFsW2k^3qwrRBTz$pa8s_yp6$elSM3n|wGd>uLgmBTnoZ=mIXIpklG7z@@SH zDqYzu==X8E>k5*MB&<{5@UAUlul~+fSwlz3}YHl(gwzVj{Nfb};H#WTE;QmQoGnwW)#AQzK=Vg5zM{ ztv67T?L2Of_o1 zS3p&wGc|R~MG`PF52tB^d8F_yX^*bes4F;~Ge1zzk{5oVQ9hv^2I{Syc4!eczv=E! z$E+B`AJ>>4?m8|-EZr3fDvo|mr$yuKUIBi^G!d#tKWYgpEBq20v)D5k*6yhOWZHFd zo9VENvOL;2Gzk9R(Yd1vYbB+5q(VkngWEP)vBJw z!D|2O|*1*DW9H*Kzy9VPF*sd9!kJS8;ims+K#-E>FGzFk%`axn~`pA z332%-b*#79f{?Z-%EQl-6%JQGm+?d3LojrWhzidCvPVz?oXUfYgF@K?o!^=;yd!^o+S$JL OivW#Kh+S literal 0 HcmV?d00001 diff --git a/src/res/mons/379_0.png b/src/res/mons/379_0.png new file mode 100644 index 0000000000000000000000000000000000000000..5e5a8fe3856026b4c0614e9c0b0591b73a6ce3b9 GIT binary patch literal 1908 zcma)7X*3%M7fn!0MH4$^N@5?Q6{41ENg7LRu}e_fFxC>0vDKiJR+LtY611pRsS2Z8 zY^kM4t+A92Ly=C<8Y0$oNqy$~&iQ`NdH25i?mPFK_w(hry4Xn_J$@7b07zl%(e8&D z^bf^F4?CNhWOgXP1a~_Wpm9|7-<`faZM3Z^1_ny#&D?p8xsyrNnfBj~1iJNoiNZcENaoxXR}s@&OT zb3jw^>_cywLb#txU!LZ7d-?Cnk5>9(-Z0V+`UCebc+*nY(#Ra!XL(>cdU-_yexaQdqH+tBPQ&H1#nF)eRA(CtT2JdWIK4z?E8TenHepg0B3@o7HsPeg126W*A-1^Tc%?A%>B@gfUrgmoNuvg8higa+) zs-+c!o;=+!cSCC;>EbxGOXT{rT0j3cSDzvHrpi~8pHsDpt1bJ0sJAlJz)rQnx$~XG zq75KrP|h8mx>kX4)$n}G8QY=}SCsLda*u^fVcVXUh;vpL7#SxJB`8g8zhu&lfX)dZ6pH0whL)F%9;>WE>-~jy}+^UJq=YBM(oZp z&uNGoWG@=8yHRLoQN|jL5{}gFf+VK`!%UKgsTag)5?fq$etb$?D{ng(cu|nOm{jM8 zrOZek1~}{-#hA&cTuZgfv1{^hA;YYl9UQ5_)nl-9{8jvlPoa}IOz!u@eBD_h#@x%& zsSCuHUV46#C6Oyr!Bl^Yqz3$szoy%BtE?()VebPJQW?+{A2@CS#|&nsAEZ7LyTv75 zbRHW}?l>Kkb-m4Gn=tz$qmg=pxwy|(k|%EMd5whYI`4n~Z8?>J-FTh-@{+HWIXyk` ziB852p(r7PyOp1GvR#)ZpR(kGZFMUtDcRuh#xI1fxHtLNWg{PSGV>%e21;O%`ApX| zT$9@TJ{P+&RB|6HdqA3LAEuAleRk?5Gr5v*AoNAiXFjj+QZn_DMo9>HS|#I$*0{jV z96sF73N485ZF*-s6Du`-o1SyF-;d{qa}iAJ5Gj8?}KZ~ItHKOSM?{H zMyg0gihgO7)1r0!7*m*KOmR75j7~Q_HSEbrSGTB)oY}t#f%xiLW-TBi77=YbWW_AJtm zeuZwJTfi3qzebk`nBo|%+?mH6^{akg(l(xH1o~XfFlZ7p0VfxaO17}Hu@1fPsy8SK zH%!CYSzS(=sa4zwwPbJobY14Un#^&za-8VhskJ{9V}MINHR9x-2XL2!s~O%X{;>rw zUg>&);NkQa=&X|K!)xgTn&b4uIw>@ZTqACR^s@}vpx$5mVgo!ksYpj9D?q_KOv+H) zOrLg+KTgLX6Yl@a!eKZ=|GnCkY3xv~&&T$fvQIbdKKI@nsFN>$6xF2n2K`bc8P%OId^t7rGhHDT&AGGVCmyWIyU>-Yuerd zl?;^(yK@)5K=HyP)T4MSa&gAw+CYlZqaI`lB#ZwwBjL;i>X`r?$H6IYZ?R&=fZ-Q~<49VeO z$o)BD2M2j#k2k#v(i;{?U&tj!JkEN5TV_CoAdYfN5fV*}TX45?xNm2U5nh$=O?UU| z0at67*_8r2o8Jb1Ln~=eP03fks^WS6P47;{3={6M6o}YY5#J8#pdWbliT!5v$j7(R s6n2coZNed^T%=wbg8q*WitM>gIek1wyAmC7_!I#c8y9pVD(K38076TA%K!iX literal 0 HcmV?d00001 diff --git a/src/res/mons/37_0.png b/src/res/mons/37_0.png new file mode 100644 index 0000000000000000000000000000000000000000..97e1d911f31b3ceec72745c0e28d6cef9ea47b5e GIT binary patch literal 1001 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|484L`}fu1goAr*0NZ|F{VbAI~i2_>95tE0AXM(YmEf^9F$ z|8BGGciyD?SdD8(Q_h#)cKf%@e-#<1ezaKVj>?0et4p7h$~TL<7f1Vv*l;fpTHd754Kw?2I_Q}WyXot_S*H;(UZ$}hd^)!R4yb!c&n`pWgI&OM9}Gn5po z`OABDQl6&P^UmEWJG30LmPl=^eY*6f_K!%buKA*8_TBJ)mD2I+KxiI^;@tO-HhN8X^*?dq zU123Fze^`=IcHhknzBMqJMeDkmGWX!=Dy=;x%qnS&NJll66cyRT8D4{FsWazDZg6P zG1c?yU9-Q-j^&(<+#IP z&sqBKqcXM?=cHAath)YFeyT*R`H=_Rr)R(Gd-1PFB5MJ=ujhs(D5?I36GuJ6gQ#tL TE(PVvf@C~h{an^LB{Ts5f(XX8 literal 0 HcmV?d00001 diff --git a/src/res/mons/387_0.png b/src/res/mons/387_0.png new file mode 100644 index 0000000000000000000000000000000000000000..a891b94fe136cfdb76c25e7f4cee8b57a26e43cc GIT binary patch literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>VC?dAaSW-r_4fKgzrz6{Y!7Ui z`VA~QU6i!dCwiy|bN*J<_sV$fh>h2HEW(2SB@ajk5ougssc^85CC-+X(R&iL_{;5UPxdzI99?3>m< zbldtMoTxYJRbKj9S%tIGtziZ=Pw zCr8Q!%h=+Y!Vmb*tN48Ho|r)5^{WBg8Ov=}XePYTTJihP!Vk(Xe)yhQnA|Cs&tV(x z+%orJ`Q4iZOP?Q(^7%cJNlioX|I3=v*_I`Ky55Y+-X}U&?~D04Kg?5j3-6EZT`T7A hy!1cK5FT#oU-@De1n=dK-4+cJ^K|udS?83{1OSnx!219I literal 0 HcmV?d00001 diff --git a/src/res/mons/388_0.png b/src/res/mons/388_0.png new file mode 100644 index 0000000000000000000000000000000000000000..31da006b08e96c5845c3865937f80ebba0ea8c6d GIT binary patch literal 767 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U^?dM;uunK>+P)Ffy|BqtelRC z0!=^|p6ktQX&Zcjn%~v%El~ z@PU{KPY=JnowU)S?~hzro#UUX{WIH|K3t!%Yf_Epx8nM@?me-J4W1v$zH0t2kvsl! z4uf8|SC7i`z*;xWT^s&nZTs$~&9GMG%sjz{^IswvP0Cz$MhYL(XTOm3q{YCvVdqly z)8EE#_vsmPl{6J$5bsan&S$ zhPez?pT0(hwnf!C@Bcov<@@At}u-FGT{X=rl!ul26BK9&od3ns}w+FTQ_ zt7p4^-7NEE>1+=^*)rs>sQmGJ=S=1Lh9{w)lAlDzw>~&~tK9y?{K)@Tb5#94MQ`4F zOY!Nk)oHy?9T~KY?S6kYyYzHhSi^ly|9RM>t3Ey28Z)W3V&=!t2aHE5 zW7r>e&bS$Oe{%^ZZ=<2gou|K7T`2u3`(KvPMDCDgi`O2nE)}nguj{+})=h6dRPk7I zMO%wJU%TflsdZ2KrLtLO&9?l`JeNV`TKc!V?X%})w7KZJu6lj-ThK#Imi-5n8(LIW zZ^`)fdS~zX2X|T??@_(#d_nN%+MD@`Ptt!}mD|5dT;i+vlld2!SIPRWUf0jmz}@B& q``=yhh~Urqn)?kk$Vsl@{~2rDiTcII9S?s3iF>;GxvX5QI4bA)!J-g$@Y`9XfQVP@zLYAHl~^$Z z1(68!g*yar0_XICDkL5&qJjN>KfL}p43!8@{L<{tBE;vd*K0(m1UQ{e?;jyt z_PkDpnzlkhK>SPrmXw`L{8-uYl>ys#2#{;K zmzt^f;)EtFXOs!In0d628>`p&IkuE0+_0O<+#sg%{H=)lCEAn-xS)pJ^quY!5#qj= z{qykiW%oe{-!1DJ@*8$DM5wY?gu0z{Hxm)}?YEoZ?eO&?f`phO9L@IJY$ZZfHohHS zFCns>^oYoOWq$||5kI?d?)xPSR@4NjhHD~Tk%h^m$F-h|M?L4F#qacM1UL&2(aQRY z{EB#yuGhRAMQPLT85{6*XGi6LB2zLyzA5FQ~hBtRuX9!+TVb+sx)hSz_O zY78OrMS5i|a|!a&B*F6}wOjJt0aX!Xc~fo?FA^hs739?-!Q;^_srp1$O;;shOn^DV zI3Kh*+41OQD4tWPlK@eIx+33wzeKo204Lpv_fTK(9-vhfe?xq3cjV`d*HlP=O!ye_ zIh=fDzsgg$Ry6+cDdO|4cr1eGN|fxbf_&egb?yIyfb4)oyvUy-z7itaS|`6-;@$Nq zL`G#rU5F)7S=x91zuoj*a)KO1o^DE%7Kuy4T~;1RbYF6+Q>sb~7i3Hnz3w|*xg6gI z_<*i!5j^|zoX3v{vlvrxwW|JZ$g(5qS^&@fAU+?KD5`HW__rGJz15MVZ^D%QUE9x0 zzGr_XTxCV2Bn#j}xGaDMaV-J5T?G=ri5H>TkvZe9fd}h$K0BV?*spa`m$|1wwy8c^fXdZK u6a;u+-@w%X00000000000002M|As&D-1W?)r0A{y0000CI1 literal 0 HcmV?d00001 diff --git a/src/res/mons/38_0.png b/src/res/mons/38_0.png new file mode 100644 index 0000000000000000000000000000000000000000..0fbe155af43d3276deff1d9c30d187c11d6796b1 GIT binary patch literal 1343 zcma)+eLT|%9LIk{Y{|^&4$Ik7re4)+HX$-&W;3PX#g&J%IZwwKLWtcwG|bIIvT718 zol=(yuUk!pUI_`)k*7RFv^ufwk-!_Q_#hiFBiLon%CEVlSlc1ir!&0p)tj0$F`x$(3q`}rKjh|UJaKo+m@gt zwzG-N%iFqR`*|=j81+A__3MqGe5PWSDJ6Ze+G`vaIpTvDQ7IMHw?_>pz~o2W>*pMr z!a##fNh4kCG5s_r4gy@zu{e9j$Yk=wilTPv$?Qv-yeC5`<4cL@Wf0P;jFs|70$2I) z;a`fCOG|en-Md$k#%pb5_Qbd6qM*8IZ86(fq?h-e>!m!6?MtoryKfHbSoI=G;!!fZ z6wWJALZxr7Vv(v%^XmD}@Fp+)7yx;t7-J^B?bR3^5uR1MoGg}YiR6x*l8>T^f>n18 znF2;%f)oi#e?&mrTRS8{J$-8{y%Br?DPW8M;>S~DquCGU){FRDa0r0LY$g&2b?;7u z42qm{STH}(=oCw+sMM;@Jo&rbzOe>T#>O~fl(Hm3+c|ml>~iyh?2qt2Rr2ne(7%D2OZ!2!9SZ z!in)+Wev?qzFE+ceU72mq?*aVPp`&jJl1+2La-eWDMySYn2?V?OqnhFm~Z7@^uG0_U$3Eo{-7T0EhgyX40JmF1v z@NoNKLhA`wi9rraD_4LhxTyX3J@lt6+7V_zFM^-AZbF<1XXID)4yie5zm5|eL&)+H@>D@P1rMI|F$6;0n_62g9ZE;@(%tZksZqm_E nig9FeJ5Eb=|GOZ~SA|@SU~KbraSW-r_4dZbz{3V2Yzh4i zGX;&9RF!x5oRpZNDXFZS!g6fE8Hsm1{!f0kyz@xCDRRGjdAH|^fA=S)@-hR>K?4_V z{!E>*bVKk5%Ox9~e{45@_&%;d$m~O%-PyOBgb&8Y*RMOim}ys={awA{8n+vQRrh|D za!z^`;~-rV-4uD@WM++C`TzKbvstA@J`~#8^VoBD{O?uVT6%VVdvau((U%?PQZ?P{ z#8WjBpGq3^Jr*jkHu`h=^1>bs1+U3>x>#KnNLHL_llU0Zv7vSUMPmhSjm?R(rX6^# z_=nd^WAnq^4QgLh|ICmTioRLfzhB4N@Lm4#{r6gmD) zd{^G_xsY)Eah?IS`XR|(8(YJ6e`&XR> z_oAk$F010~zF(wf!GFu)UCpNx3+G7+*8S64+4r95?7jUbax?cV(M&k3s@a{H&hlGy eF)ZX7>K}3!20z@Z-&man67zKRb6Mw<&;$TyrM|!b literal 0 HcmV?d00001 diff --git a/src/res/mons/391_0.png b/src/res/mons/391_0.png new file mode 100644 index 0000000000000000000000000000000000000000..727d8a99c0c5b071e096ad96201b846ab4ed5de1 GIT binary patch literal 586 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U=s9naSW-r_4ek*z{3tAEs0Yd zIa{VUzPO-jv4o{nuW^EqjMfqsC$9x8sfV%lVVT^M z4|@&bE%?2-O&*@#!Cx?;?rF*HAi+mgg3aIWTdtU``RB2YpK{(lnSIx}o#OTWY@W9C z!(k@x55;+h?wsd7xa`_w{Ub9Lay;CA|DaOKHD|_WdJZoaoXvOpm)oFpW{ctJb3b=q z@~b+vQo~Kg`^Vn>t4`@^$oU30$mgBdG}FfH%*yM@E;Eo~?~mpD$>*gTe~DWM4fw^ao# literal 0 HcmV?d00001 diff --git a/src/res/mons/392_0.png b/src/res/mons/392_0.png new file mode 100644 index 0000000000000000000000000000000000000000..9e0ccf15a643237d91db011a6a5e7164788452b7 GIT binary patch literal 691 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>V5;(TaSW-r^>)U>pu-L#uG$l) zdZ-9RMn-nJxG8}-^8-$*hkWAnuw#@IuPU!H?w^};vt*KFnnik=dM=yRxx2ORRl8Y% z2I2<|KVsHe>j)hBFS@px#bEJ=9c_mc8fHGNx6QwF>aYeYvoM>$Q~uV5rIOy~E}UDh zYuUd#b$RPWuTOK=U9G$GpJU;-?J9BqH|K}lE%M~J${4ZlNcBtXo!3MF=XI=|8)L4*Of~dWcteOKWRVp-oX6A*`oH^ zra!O01_x$|bQklu+Vf8>Io5{6`F*`#zn-DwYp3JC6P?FD zZPlq-vCRFao$j>v!3Tujao9LTrR^*JEP1aqp7F>e(bEE--2JS$92|daW{oPClNNOI zq*KRJ&Y$9K4;X5Cci&dr@$uW)?;F1}RpIeq6+I>4!efq5TRk45DrZA|z;C^|vIo?u)si1yB#dqE( z{vr+PODtr0|K`^8b@(4O2;_LKCjGvS-QnjU<~ziaSW-r_4bBhQL}>xTSDIz z1pDSx@YAo$11hSVQ^F1N)3{J8dLDCjzFKX7~{L$%}F{6-EN`=6UX zy#GHh;6U56<7bcV{9m%qN4g}2dw&?`bx%g|*EN6oCI>}2S#8o<=*PM7%aVrm50AIa zIo!uo#CfmjlFVdQ&MBb@05%e?^Z)<= literal 0 HcmV?d00001 diff --git a/src/res/mons/394_0.png b/src/res/mons/394_0.png new file mode 100644 index 0000000000000000000000000000000000000000..6607d69625e2ed4df5d793324df32da9d3246cfa GIT binary patch literal 562 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>VEpOn;uunK>+LQ5AQ?v))`Y$d zLY+@Iv@M-dRD>iuU6hn9omAXA&Il?^JaM9M!+y2?tYvA}-+Wo|e)X$WcfGDu|4pxI z@8$-YhYA{|+Wy;7`TOtdZN0x@oVBFe?DyK#NNPG+NuT{=_v5Emz!A62_KEM`&%gb` z`{%a(L5Da*a}L%2GTypzi&WX}xlC@N0gTss{D1rv+p_x}cl{DB^V=6{-tYhQ@AKk@ z!xOG3OgAsjx9kwES=$mN80zqMHxrxq1l#}LUdG?fTlR8sL(BSxiP0An@5mf7eXRXQ zYtj6_ToN%3x%Q%Et@9pyzAI*8@uy|Zhv{vh1{)gMpRa74 z`IHG$lSJ3leAvdsXMXS3o%8?p^^|Gb1vP{gq%n%t_1>wOey&OC>;L|{f+8E77)}4} z^P8`on8~V`J-jx)7(h9r|Zq?Ca3?cTf92!?|*w y?b-1559T^*`6oAp&eiI6RQ>Y2$psosc6*tPp1FL};@^4?B;x7n=d#Wzp$PzA^!-@? literal 0 HcmV?d00001 diff --git a/src/res/mons/395_0.png b/src/res/mons/395_0.png new file mode 100644 index 0000000000000000000000000000000000000000..36bb56fca9e6ba29a68f45184c8d9ed01f2cff1f GIT binary patch literal 826 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U}p4maSW-r^>+5&!b1)Mt(uKO z8iy4ZI=A!1GA(p=n(n|k<$;ilRfz{D-_*pnGnYrMeSe`*)ljbf{+Y8JjU4xO|J^xx zO9aq3+~AM?Jo#(KpB7cRbV_&Lm)Ry!(0x7dsXK=TK?JP(2j_A(;0p$0rk2%y{*avQRs(D(yHqZR``S-O8t}*1AinQ{p{jf@U9#En2b&kvQj`!_ql1XZB z?#-(D=5awJhDisQ)o#=WFzdaj@u?8L z6Vz|6Ak8|J?Z(y_0fxU9KloQ{#?@w}Bpy1$V8g54m+I*bnp|yJEP)0W{;mj~$mnH% zkwNs?jiRi!VD5D@{tCGrxBL5qC!p}0dTMQRBLrml#dIN?^; zgb#J~8s+{Dzdes?9B4Srdm%3^{m9O0CYOU>Unpwp?|a9bl3sI=!PRl4=+Ooz-3_}V zs|1y$CI)rgj?nIuUw^cL+xLUNU4`S{4@a%LFSxMKw_S*elF{r5}E+d*k@({ literal 0 HcmV?d00001 diff --git a/src/res/mons/396_0.png b/src/res/mons/396_0.png new file mode 100644 index 0000000000000000000000000000000000000000..63b2c52ff2aa365a11294b25838f09f006cc4443 GIT binary patch literal 574 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U}E)jaSW-r_4cN%-(d%VwudsU zlZ;f|7cB9aISI&6b$`Giqkh~oUE;`s&Qx{Ar1h%v!lNWVh1aZ4zqWgK6eG|ebnt=w z-MedZMWhO=t1su8@yl}dvQF3_z-Xy**`vWLL&HHks)Io&O>Dy2_7*dN4J@4gw{yS$ z`czZWt2k>Wi^~h=0X$pT>w=9}6K|5X3 zbWM|_iol)qO#%VuxYPs#>f?E*TrFe^{@%HWYn^P(&3Yw;6T9m&7U$(`);kiTw0z#a zuS>Z0x0#6ji%>mMUbZ{dTt#WSSyA1}{e>%c{5R#VY1w@LeZ9_u0*jh@{d?;dUbkE- zzURa5VuzN9!!lWphCxnYK6Q5Y?S-pkS1>94k&(>!BdfdY+lQ)EVh^uB_^rE4+~!zC zgnYOIi`c>E|3jVHYV<1BK4afwTNiTR^(*T)Qv|Nd{1r16*<<$k^ltk@{G5_iVGg|Z zw=d27*LVNRe-88TJzv-HbCwF7`;h!J#_s}4{o3UVg1a|V<;{6$?YwVO!!M7Sw}qUa zA5*PiTDMbCoXKzQq^pX5G@mt1+{{@1uSY28NaurA`>(SUPNoGv+G|R>b+(M67_WTb6Mw<&;$Td C#_v)9 literal 0 HcmV?d00001 diff --git a/src/res/mons/397_0.png b/src/res/mons/397_0.png new file mode 100644 index 0000000000000000000000000000000000000000..2f8eaeb59cad4b1cea391d95c064de9dde178c8c GIT binary patch literal 636 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U~=|!aSW-r^>(JU-(d$4*S$Sc zrf6yg2L&zj@tmnz!8rv8bQHad(|0JE+pt;BbV)gO;<<OdXC3 zmIW}pKF;nmBT0OP2w&9;rdL8S zv2w?&Szl{}%~LX;wk52zIwf&CarxAL>m%DH%;W6+lXPwVuiqN6*PRzzFHf_4>E0Mv zwMUNI@lw%J?{^&^B0k6bEs5PeJ>%x?yYJfnsI=IfldPJjefPW1hsJHW-x*i*CDzz^ zKRv$bkK)CZUs77m*KPU#sP^_3t@Z`GT>dq@V7n-OVQ(GlhRE9X1>qNF{P}UJ^L;_7 zug;mY2PdyFsotBv+^OTy*S$Av^_oub9C+@KeCYhtLla)?C@JmWW4fF^!R7Rq(!8Ua z7nkrW{*-xqc_BkFA_F-@Q>T%)|ef#c(z6YCY2R*1CiZd%;R$`Vm8211G literal 0 HcmV?d00001 diff --git a/src/res/mons/398_0.png b/src/res/mons/398_0.png new file mode 100644 index 0000000000000000000000000000000000000000..5f015cb5420721c011f9f45d5c0ee4c3e3f44030 GIT binary patch literal 771 zcmV+e1N{7nP)w8+kbR-g6WP`QImLMux0b z000000000000000000000L$QQx39OG*BTQ+^1t3cYC;H7Ch1Q0y?*@A)s;2O~btN;oz0T2L% zI5>bH`85FqU7o)FECPsnvgWA+us?205uPi6rDua&r7uL)p|8epO|mM;Gi zK-V@TQBwlY_t5>_c6S-b?_D&R#9Is(SCbF{(xFwVsZi4<3kFt0`RY{?vPIaX#lBwlcg@` zcsw@UOjj{)yOn%qe+yq#)hb^Bbj@6ePG832yDDaXhy3sDZvZCCpASx_Q++rbn(e6V zLRy!6iPyG<^-KUZOt8&%FW=tR?A7YK_%Vp`&FRB zS(|v|-=hXx<@aR_5E^=NhX0zG zF^Ke;u_eErrx?vi_&jtl%WOH#$B}<$`F1(Nz<%&Hk zV7^oGbyb*f-MVcEqE`n100000000000002M4L_$JXk#Qzf8ziE002ovPDHLkV1ml* BU}69O literal 0 HcmV?d00001 diff --git a/src/res/mons/399_0.png b/src/res/mons/399_0.png new file mode 100644 index 0000000000000000000000000000000000000000..0fd66f8ca1f73fff0334d8db1f538626b99b834a GIT binary patch literal 473 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U|ito;uunK>+Ow=zJ~(@*b>|l zSiHQZPwAO3NzjN%Ilzc1)osC&6dtz)KH??Q_+e#kzQH!8cuq!X+C$1c{`zWm3&Bu%Gu!F%`Pj(vC}@w)P}#qTM? z$78q(mI+RAU6H+xIZN@@yOZ~|9nu+ZeOPX_kk{(}wzpiYFJ$b$zy7+zZ1&mo4_lR& zx%urCf3mTxovCC;^xCrb;fGTc7cpmj*m?W)?4o(;KjIEpxd(_S96m2PU-#{wO{b4f zeJ^y6v9E@w_dvE{UfaXlyyoG-4f@GC|Js>kF0$T!TNWdj&~|@c%~kVfofER%FWhDo ztUL41V!gjn>2?1%HRt};UO3`+@2a5kpZGUI51C=%S$~yXQqb(U?{an^L HB{Ts5^;FUn literal 0 HcmV?d00001 diff --git a/src/res/mons/39_0.png b/src/res/mons/39_0.png new file mode 100644 index 0000000000000000000000000000000000000000..bcc9b45914b6bea0ff52b56d8360a1b3be3f58e7 GIT binary patch literal 776 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|484L_e1)eUBAr*0NZz@h+>>$wg@LuplkCZ2#DL|kiB-!aQ&qYaj z;>4evC#Ig5JkjIHt~)i%o4wz<#-EMZ>wi@wWl~7$?wRizO@Y?p1RfFbDd!EYY5K3< zoFjSvzW2%7RXt&~XXd|My7gu4hQuAwe+^!LOG}MhJKtdTvYTE1-kpD5+4nF1mX{Kv zmDuNY+5Ys?{OzrwUXv zO?tstTDo=R%4xFacAb9t>=^t1h>~kDF`lcU5Fz29KE_5SVicc#idFR-}%;+<%a$X~7ter~6hZNLBh zpt_Uqw@uk=bY7>%6lu4`$CsbX*1S}nTyG-ywx7GY!ZdFG@5+xHPMsXP7lrR$a6@{7 z%WftS3tror&#M(oZt$M{{oG#9agp`I4?9Jg^gT@y*D|o)ioZGAMZ+Oc9Du#M+U0~r;t~u*TLy2buX@cSD&k>xRUk%{smV*7QUX}zw6U~+34jT j^))}R$fKl+2Q&UMCS6qIa5%pZoMJp({an^LB{Ts5GVe<6 literal 0 HcmV?d00001 diff --git a/src/res/mons/400_0.png b/src/res/mons/400_0.png new file mode 100644 index 0000000000000000000000000000000000000000..a325fd05085856ea1c4fa6aee4d145d52a0e5570 GIT binary patch literal 673 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>V9M}xaSW-r^>&tG5VNC*i=~r_ zkfh{JA<533CmbFsMnWeAEtrlwC|SD2EZF{H$;?@ICnT8#O#Qy9E_E~KvioP|-{ce* z2bx9zT<8cb-x~U~RE*PC=HKbVMZ4p4e{J}>>bu^3_aiM#_u}VoJKz8Pev|%bC6An@ zYs!qPioRI?&{6TZP-QmzY@V1!M(pw#uYab-b7Zs}D!I`8vrg>Ft8dG0pLB9kPTL$Q zzl5cNZO5m*cKhFb)8%07O>bnn#u2{r?USAhwdck5D=k>a(3{u#XIsoWmkhRuo_&+K zjfAB1k4U|plpt99;_f0TD<-M-^$J_XGLEdjUcQ%S`e8p#O(srW`2#ABOe#*-`F5Lq z61>2{I>TC)b^WE%u-qrg3obg((30Pg^;EfQ7K4h3zy#yO6>WX00v}GZ{+PgUo{#&( z{a(%weXGJ$<^h!n49s-v;M%)1Kw#=H+wlznyO?+7)-aZ$Z7%f%5`< z_Um`(_`>;~W7`7tY(ZE4}(xWyX=| zOq+b4E}A>_x#!k-?@JxupSSuWbJA2Wb;G{r@A+%5^A|W<%h%U!dl>B?w}W@kW6OV8I=H3`8}&olP?>-?ynx^wB5N4~!;Kb||O^yj|dmifY5CzjvXx9=L4kk!L$ nrrX!I{BP$r%S1^Kf6VO|p3A?Q`Z4_IFOY<%tDnm{r-UW|Y0Vx$ literal 0 HcmV?d00001 diff --git a/src/res/mons/401_0.png b/src/res/mons/401_0.png new file mode 100644 index 0000000000000000000000000000000000000000..dbe3ea2a6e40ab67996d2330e151282fcb968189 GIT binary patch literal 463 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>V4UXZ;uunK>+KCgzrzL+tPlER zB_)el+}w`!$yWEsEL3(+c)}smm~2qgljmB$q}}Jr#XO09{+ptfZrGD<-C1r8GzkqX zn0)wQ!CJ-6-b3@BS4w)_IAG#?eaZ!~gwQ)18_HPs%=5qgb=8XONxKefttk9i7vFS# z>#sk5Ec8`1k{ZtZXo+8}yJX+HNR@=l*f+tD7F>E}E6MN;Gfx_w5g_zu&p8zopr089|lZvX%Q literal 0 HcmV?d00001 diff --git a/src/res/mons/402_0.png b/src/res/mons/402_0.png new file mode 100644 index 0000000000000000000000000000000000000000..a6614fe03ff48f552bac4f73cd3a0b5ef6e968af GIT binary patch literal 591 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U=s6maSW-r^>(Ih-XRB(7E7j7 zujx~!OwkJt+VzBEie@oO-^9mD&II1Elv8h>XZBji^M&WHiP*_v`Dkm7R~C;> zNL@-pcu!sD`f#s{PQm?0{lax@XKY9~>ABcG%~2#qtwNra+w^Ym=O0HIuK$fWlI(Qw z#dOZn+8-6XyxVhczk69DHMh=S;S|QbKZK&1;`{iW%{&S?*Lt3>j_ znS%TivS;?Ze{Q+rt_5S{mXMtEw%NsV`W_X}o73@!^GHVNP02;SFY!FmcAmre(PYj) zHZ>6~_r5RRzW%gg+$kCTCt{Pq!UD4s44vy!4<^SKoIlXgs;0!bV$$Qo)3f)TXS&$% z-seC=r>aNNZHDgmX)@+<_sEiqyru0K7pd!fbOicI_RL%p_&*Czyiar+or z7W8nDrhO_On}~+}ep9wE6E^057v>70#o&RdU_9pO;uunK>+KEeAZbSimVmwm z6DBANSe2{@P*ij;@ObgKfTh)r%e`QQ&$?-=S0;9yUloza{yx-~v+>4)=+8Iz?qUL( zg$B-j$^Bk%CgSrf`*-E;C-r##Km7PTb4{qzA$yy~YfTr(O|~syUp`IBg#5u4ntj z>!vT0 ziR-uU*yfg>PgH*)cH#Ty&Xa1p7qQ$dwNu`lwEzD8iu+7b|8{)zDp)G?OsVS08=aTw z_o9ABKD_AS{4V3dW3@Z^_42VBk{E42mYA9RDRe%U9_7@xXj1gXhRVrv55M1)&%Yyq z@$WSCJ0B}<9eBPw{^Z&S2YKZlf7jznmrIw`Z4-=tpmJryZuTt=BF1^U-ZAUd$jGL< uyz7bXYT37==i|j@mwz97;DP?*{vSro{O%hf$95k933|HvxvXV6yjgaSW-r^>&7B(IEqo7E3Nw z_XSHzJUw432Nd;8v2^n4J0hs@a*oZxNlz86TYD#;skz^CtZz-gn|<=0-K;=!2!I3s z7i4~mt+tpZ`2Jt+)>|bSCe1(E`->&>oI3g$_0x97h+h2u_FJBdjq{IXnT84LbS(D0 zm-FFxc>7y`kHbRAO$U4@{4i3OzGz1G*PZbPJcL#Do$B`~P(HQiE052N3k}(7HeB!7 zj!gJq_d;0MK;&mvU2dpya8km7BNO$RYkuT;9I8Hi?$Pi2wa1S9U-TzfI4?iFA^)N6 zA=7fpw{lgkx|82YexB-B%XZ}bf*K>oB=4HN?nmOK^KNS<|2lP}YOm&f=bF9GOFvd8 zHn2$+8b8S0`_}L5HXG*;0;^p9J}oj=XekX$o#fUb_gZD&{^P#{V$@bm5&ZWuWX+{u zrLSsrXS`!v%h#swcyKSiCeHuJdI^C?PjZ(XDR->BJArfO#q4=6{wIbn(M{)gHt}_B z!ikosxAL##0|ZaC_k0kV>aP1M(M9vr`IxG#)KkW6s_yf+ZC+)w{rI|dmJ!>Y1>#R) zC-6)NjOu0-mR`UdtmkZ`%KbK-(PzekBEO68q65x1-O6*HUM68Mkr4I7!=m;a8^*fxOU>3$O-#@-(*x(x9Pd+6{6>FkX-*k p*pTf{Q0Jm+|0fEyN})yeha>84N*U4$JsYb*GM=t}F6*2UngE`*3V#3q literal 0 HcmV?d00001 diff --git a/src/res/mons/405_0.png b/src/res/mons/405_0.png new file mode 100644 index 0000000000000000000000000000000000000000..12511b0b24e559d9878e2fafe1ef4bcd00f00df3 GIT binary patch literal 785 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>V7lSy;uunK>+KA~pvMjZu9i*C zPEPI8R(Ap(w(-@r@R~o7kV$lQ>N_lGrXqY*XZ|k}TjfYL=Y`)_?OHQQmG!@W`S~wL zS%Jpk0|&l8{PZcyrPV)a_ubyZ1rml2g~N6ox&M}p$KtzJ`N#Xp%#W(&H0~KFD0Q!| zo_#hg=GWUF)7aHSm^@3&55LznJaDxC^$8W97i;P`r|@=I9A)TSAJ@!y{*i}3{Kn|zfmr=I8W!(Z=0Jy&k)+*S5* z_1wU|IkLOj8MiqpbBDC8+H_fH|5f2t<5bj-sSepaiU)1OH23kGP`ktb-?d*zzqaIG{TbS=?^IwK&G~+}#Qm&i^AtZmzPs|Sfbw}i zv5c*+w+ro)3atM2M7T&VT*G#;_?DLZxm{a#O|=bm4(D`!s=R3-P(kpHA6DW|4$m^; zD)qlJZJUvUs)mzru8>j?#)9r%cfiaiF>;GxvXU^Me|aSW-r_4ejQUuHuI)(1Tf zo}MQ;dL~SoWTYIhY)MLwcCgW@sXY!ed7b86?B{U`xv}tv-OK6g>-6pBPdy7V2p#;p z@%8XkP32DR8+LcMe#oAB;>m~U(`&iwYol*zO+Cq~@?**b(`0dH$`Ub9_#<=R?Wa<{edn5HS xtUWpl@BRH-Qh$!4{*vF1wG#gV4dEWWyqDP^+Bwh4Wtj;`%+uA+Wt~$(697`4o^1dC literal 0 HcmV?d00001 diff --git a/src/res/mons/407_0.png b/src/res/mons/407_0.png new file mode 100644 index 0000000000000000000000000000000000000000..c91d67a344a75d37ad32c7e71d6d1f96c2c2a7c3 GIT binary patch literal 486 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U|j3z;uunK>+Ma&AZAAa)(bL< zLY*#36DNA4s0f`DoFK#4`9$J`4D(6BM`HiNN>^#CEZkDzh8cQTKTH+x!vb|x6hszHE?M1y}@Z2tQw;Db#sj9 zh7Dhp4n~Z zAHRPu|H-lHvF2{&^F{ADqINXAX}HC@m075QKmG%^_XE!TeG6iYMN4EoXKEe0Xq@pi z{72+l%eH5apI3j{b*@g8=f~>hP3KkKocZ>uiqHP~uJy_*?y*nVkihx%+3oOJe*55s zw^^I#M18HTV%#@PZi{f$kK?QNGo63`bXMS@2B9qRD_{O|eqnmk5`TmBtK@^PkKcay z>)#sB`Xk5Sh40UhA7A&Z3vIi?CVKI(z37&!|G8POEKhX&@5m^+=fnREESj+3{gWPl X{Zi~Q^Al^9fP_3<{an^LB{Ts5>xtki literal 0 HcmV?d00001 diff --git a/src/res/mons/408_0.png b/src/res/mons/408_0.png new file mode 100644 index 0000000000000000000000000000000000000000..f147137529405b74aec822835255364ff06f5745 GIT binary patch literal 550 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>V0`Q8;uunK>+Q{rxwiuZ*b@2| z2pTzgP1OsoVwtKLyX*>wrfrjZ!Azs2r+X#{UNN*_tuIjU5a*enq;Q|zrb8v>@9}c? zOXcN21JMBU9s4cfY?*0phW*aX!X@wi#H^nezu)qmvBGV4C3R;uunK>+LMVyh9EmF2yXT zrf6C^c>&4bA{H+%`PNBB$312mxqHl<)R!@#ttZUPEX~lP(*M_?W6@{d{QF=2ww)bl z8a}Y%#IDS5D+-)HmhZkRCv5PbepAdoS)L7?{`#wv7o2lp+f!d7%QNA{`LoXr4HB8e zx{n@Y=-z*;F8R#RR)PGFNRU1A z|JhGEr-W|G1}s}`!X&JfzASqFxCU$f4cbScmtW%Ga&$3KCFhOL>>V{bc3U4De*nE5=wChdXFP?<;1{=Pg zkIkFT`1I6=+WC={YkZ@!3>ExsJ}2mP7e==1O_ZLru1GXsL3PiCt^SsqWqldjyYhwa zo~rtOM)4l!r>`mDwHo0b(|?!=emoz;S$Qq~TKm46?~^(EKiWC%&ORa^DgNpD^?Sx! zT-S-*lkV|wocDF6*Qp67a^r(6?koRl{dqrs->GtDOTGQdXPvr#h%b}lezRWrR#*D9 zt~p;*y}89DE`DF@f17)D(N>40dk;=n+_Oev0}#W+Xh!|484L_ek3C%+Ln`9l-cl@iWgyY^@Xabu6`@WSzc8hVlc!Fd?4eR5 z6lrN08QJNgq^>=&ROkNvCEGXn-l;CzHs!P3^MYF`ZBI|nUvgIlXfJl~p#F{AoyhqY z_Egp%GS&R~?PwE+?;jQ3KPg6*+rM_lI&aUGpPpXJ@r?b8;v2KOq0R4^H}=2Zy;NXQ zOw*#5zi#F}SAX7h=ho9-7uN|nONDXn3zSKS{e4q@nnG-H>k%!)EO$Q zeY9@DgSPoCDzS{87IN8~eUNzjN_F_YQ1QR3Iu<@FeZFk4qmIbl|JdNJ2bA91+ zqn`6I{Cied*+nm^i~hv8CAWIs^HyuI)9aLVoL4cOOy6f;z2WyliKe&03$218zqe1~ zPxvmDp#VxDN3X8e7NrqgQaKilryJ|O>U z@#@#N-ikEH=e(S*et%#6%6CC>HJ(-t6)ifm%(J_7E#nNMcLaaUQhZV8p{~MPm!YQn zlPhD|Kg}PBPiI9&JpUWCIC6b$;-;9LuG6k<{1mTh>-|P1e%~&m-Q|^cqwYT}DCl;6 zT6Xik*M|A=b9;hpKGvj(FwUsCI`?y}fbZoUnW1HWh2++i9Lt}!FQ{g!zyb3e91pr$ zKU~Y*V_WZX^}um~psJ@IrY`x;aQ4S~pXHYeu6O2pz0KVIs_9~(N$E*8fq2J^W%VcX z&rSTsaJGUqQPe=_f21{P5hwxQ{O^_xzo`_%%S3~!1cd|Jo|dI8Zv%d*AH#~*L|oZ z_(B9*yqn~K39_M&Z(o?W=C`@KV#Z~;*Y{f)k<;NFq38D)`F54vy`{hK9!SE|)z4*} HQ$iB}20D%L literal 0 HcmV?d00001 diff --git a/src/res/mons/410_0.png b/src/res/mons/410_0.png new file mode 100644 index 0000000000000000000000000000000000000000..b4a85a38c0bcd6f0ff22c4f0408d5096a591be26 GIT binary patch literal 455 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>VC?gBaSW-r_4fMiLZ(0-)&MUh zm69C`y%p{VX&g)qXgXcs@giu>+KYWhPvl=?d2^iQ`I(Hi^KRi)RU2+I0!={!+Be>R zcb;Zq#<%bFu7?$Gj(1(3^}+w)^-C?iht`Km3%p;t<>Qm>^DSAW*U#O?dHuL)LZ;-0 zpEYvXS>Lk{bX}hRFzdjvU;Fm&u6pHvp@=j4K+wZ@z4?!i+|PE}EB}hM#%do=70* zsRw(_IRzk-dI z*Vg>A`Y5#_fjLWf(=E+@t<}%U@>7D3SZwAL%=j5zz1m*w@AX>6eXV+rJ00Gym3p{- pW7jgjw$RTt>dp0blCVIuY0cMoGpR`CK(JKG| literal 0 HcmV?d00001 diff --git a/src/res/mons/411_0.png b/src/res/mons/411_0.png new file mode 100644 index 0000000000000000000000000000000000000000..0d527c5965d43fe1a01249357190f9564a593cb3 GIT binary patch literal 819 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>VEX0h;uunK>+MWizb6g?t(JU> zitaNCoSmGU`W!rVD7q^=k&qTDV##|L>S2%=6^zy548>>{|BfUqwF8+4p(+-?{!>`OP5t;n(wRCJVg$Lub9@=@5M1r>K00 zrT*KEZQu869}wDXl%Q=}y83?j-e)&CY`;&N^~`jE){Z=fsqUhm%Q4eFQR`EJWR zHp{h-mguI0PqAeUUHyB4;Q6yt>b~`HY-!r9+_`T1_w;1Z|J^@~r8XETe*ZL=aVPVy z9!ATcq`Ixv^Rx9A%+VFL`lwp)u3-~n?5~yU+9P+#)hElbY3TX|wm5$gI9L5)B4f1d zg%b@rWiAVR3O+7>*;bMz+2l20PiIjh|I3D=?w7gCyVo|`$A4U9czKCJ{MS?aEqR|_ zKE22N1)I9+sk$$yr_}Oo^)e&H?bCMN z4$Qhx+r=jNaCO-C6ydH%yME0GUb0*iV^v&r-IyI8-U28nyR`njxgN@xNAZ_;sD literal 0 HcmV?d00001 diff --git a/src/res/mons/412_0.png b/src/res/mons/412_0.png new file mode 100644 index 0000000000000000000000000000000000000000..f792830a4dc418755d09f3f30e43df08e039c963 GIT binary patch literal 616 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoEa{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C|TkfQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QBXK3b3 zd-lwemy@%TuRP0V@GgPP-f#K*`Tcv+*d@v@aQ<+5ecQh5zwCjEl=Jp}&kYaH7d8mL zaBexn#A9kDzi&VPUGZss2Mt!?}NvDQ}C{oO9PJCEtu;#rLSrGI1c4^_SY zX6)YnafRIe+WkB=y#LSte*E-(&Vesx5A1jE-@l)y>h9m0#LT=By}Z;C1rt33 zJwr2>%=KS^riOXCIEGZjy}hd#bT~ku;h{%LYQI3|8kc7rC%pO^);!^uD#LtoW5L4N zmHNUPC*=s-H~-B4cH665;jW|^&m-BV@r8z4g~YxLC|&A&bt(}YMxeuxz?7NGGW%`? zuR8khexCeii@s?EEfzmsRMl>7P~O4BcWr$`#E~DrQaD2&ZCHLj(elp@rbl8T=g*&? zwqf_z59ap2leslE$dvv5Raq%Nt@*y*5uq|M_B-`I^TY-EADeRD2>d_g_`~Bub^GG4 zMPJx7V;hh6jgv1+qU>J2-ah~Aa{IbnyrL1)FYr}Ye+b+ow{`pH>yIwWvfq3E^Y1s| zudG|PZ<<~w`emB-gQB=;35>44)-L;ATK~uJTZB{f%&c0$x0+CY{NcZ8KLaTYuG;)z XvcDm5kpET$4@ilptDnm{r-UW|^7zQ` literal 0 HcmV?d00001 diff --git a/src/res/mons/412_2.png b/src/res/mons/412_2.png new file mode 100644 index 0000000000000000000000000000000000000000..9902576b086ab428d0ee076406a102ed4a0d9b36 GIT binary patch literal 602 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 literal 0 HcmV?d00001 diff --git a/src/res/mons/416_0.png b/src/res/mons/416_0.png new file mode 100644 index 0000000000000000000000000000000000000000..d2b86a6104a092b8826355466af4645cf7c8b413 GIT binary patch literal 621 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U^4M^aSW-r^>&tZ-XRAO*Vv#< zEmNjwYH9|98B-$pyc0MzH}gz$a4%|)`6N;K=Wv3im3vjw4Y8v;AAg)(xC&%Ce(;a| z_1SN44jpr0l<8j{!eS`cee}_qF2{tYou9&2Zx5;D;A8Xl=Q^OcCx2DQ@BUX+Ycx6L zDVH0}KR-F;q+RW~OUs|U-u=Jt;T2DNnSC?%y*qfQ|8%NWcX;I&>lUk*da}U_Byu0@ z*xU2sk6r-Br2W;gaqj!I`s!+5MRk^G^2in^?r{BA_t$*sk>?F=yPv$S*~6X3R5A1J z3AbMjKjXGWhh;vATGOZc(Ed~Dxlg5cf+zH8JJco>Em3&H@$I|D{kZ|FzN#|ZWtFIL zvM~Q-ulLCGSE!FQ|GSP?*VyL$|EqB93iIuYH|l;dzRf%t%fHP{?0suQa3Q-7Q0L?) zzxfW{oBU*X=%@EmhZvtk3tten&)9w9`xoKcS9bkXln`*3FHrQe#h|HXy7kBtsoo;U-0`{an^LB{Ts5^w|o5 literal 0 HcmV?d00001 diff --git a/src/res/mons/417_0.png b/src/res/mons/417_0.png new file mode 100644 index 0000000000000000000000000000000000000000..d19bcc23122e216f37d3d062e5eb4e0c6a656132 GIT binary patch literal 439 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>V65|WaSW-r_4bCLA5)+RYryma zMLL?gy1J2UOF_W9fOE<;y@RR&w=(5Us?MM9xcG4Uj5(A4FudKHfA35|DJ#$YxVgB~pcfW)`;M{BXTf2$TdjBE+ z8@Zg8UJ?-w)^Fcd-pwgHx;IXVzwK?_{8^vgbFFyL`rkeGLh$)7rA1S>sLuQ) z{O-Tmn>U~T9es76He|8v1Vt@$T{b|wf;f`!)){e2Al WSqe$plP0%<#5`U7T-G@yGywqP)y>oZ literal 0 HcmV?d00001 diff --git a/src/res/mons/418_0.png b/src/res/mons/418_0.png new file mode 100644 index 0000000000000000000000000000000000000000..2173a199d481cd6beb20e9a922165be721591ee0 GIT binary patch literal 467 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>V4UUY;uunK>+KC&zrzj^ECKS$ zs_qXsWSWgs-91hkY6J%XK~c*TP0iq4#^wx&V&oB*Z=N&|NY_f-*uOHZ-3n?bnfpL^&eUb(hlzH(dP;{!=m-)?z>F+y4(Yt z_Ky>9%HClQn&PCUwa{(ekM}L|p%GITHVAWh+z_qPwLWh4ux5VbK;p6b^C|vNE@Reb+35kV_cNUnsFTjK zer5hJ{)PR5Wa%v*(r3xu``VhHISCXqAaEf53*XTmp^tXI-v0sdJzf1=);T3K0RV1c B(R2U+ literal 0 HcmV?d00001 diff --git a/src/res/mons/419_0.png b/src/res/mons/419_0.png new file mode 100644 index 0000000000000000000000000000000000000000..ba21d37c8fe255aeaf4ba94b8c135681135848ee GIT binary patch literal 620 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U^4b}aSW-r^>(IV(4hbk*UcV9%G&hp zKSddKCmdq1+xE2oPpv?nJ6A)jK_d61=Q(DpSFg%?vfu9f>-F2)p9QzBocO+GR_ubX zE&8mAFR!LwY-?C6IN?Rn-kc|^A8loR!R`2e{rv+^98^M?VyDgLdXQPEb1PBs0E3FZ z=gA_J_og2CH;?Ps z!yi8t&h-?B|6iJT*M9XTy;I-K8Z_=R9=V#|c#p9#;XCKoRoBaBiZU~GeA2zZ_~qpG ziuXcK)Nf5-ez9%-ji#FCm$%Idtt>e{Ws=-c<^TNxD%TI2vkAO!in{sxfJ{Sv?B8c+ zn4^rDemb9TbYjqIzid;}I_;_K;@4L+vuw^d|C@PSz^*0Ro_}??;+F6K+Zld6`7NM- zb&*0N-<_n_8S9)G#9j*|?R;CZRQcZ_%Y=y^70;BeTKl8gWB(=RNUfIOy|!J)ABdJW zYOgD6d(HCc?%}4XHs+vjX;hH5C0o7bCfRK2V<=84}&khrI-pUXO@geCySau;U+ literal 0 HcmV?d00001 diff --git a/src/res/mons/41_0.png b/src/res/mons/41_0.png new file mode 100644 index 0000000000000000000000000000000000000000..fd20f6c1ec34e9e616b495576636d26c3650e0c5 GIT binary patch literal 840 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|484L_e8$4YcLn`9l-ds58k%LI$+#@`~43UMee*=@~&G@OeNJ*^uP*^PkgN&Sz6jTXPYj6yfMG6TbX`cK^r|E~1v?&10r`2PIoJ8Mr(y}w2x%6QEVLlLE2Oe?0pFO&bf zTAMrSt^50xb2Fx8Y`$icR?T@Q!f=g%nQ~lg%ZqCaff`5m{7c`#_3wJ!`>x1`pU(cd zcKxgE-sMU+?@l}<)|$V@;P$)A@1KTdJ5OO1Xk96|ON0CWuH4{OtSP zOfRg(cBRyQ$cm2QPPzQO6SSJ#_G{Qk|7|a=m45qn>D?6p zQZLtY{g{~{p4c1F`@`VNgx2+8regbU=yaOabbdM{^5SPr+2oT)_J^IgcG|7y)+8xix6R2rf{_Sh0qgyS`%1tc>do?m1ibJMZ>f#~@a> z>OZrb*D8kOhx;$*cue9-a6M4(_CtT#tGWD0sp?1Bxxb7(*9vbch>E6z#64a8T-G@y GGywp0b8{^K literal 0 HcmV?d00001 diff --git a/src/res/mons/420_0.png b/src/res/mons/420_0.png new file mode 100644 index 0000000000000000000000000000000000000000..0611816792a46b6eeb1b2a6556d685c5cd3423ee GIT binary patch literal 397 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U<~neaSW-r_4c}A*kK0|)(c)L zLXn+kgtW9Lp72ufejyaWHYs&u%Z>~2Ru9WPv^>}azR&yYU#%AS{_K*MS*$>F(1CZ( z^}{zmoIYrOmw)y2v(Jxw-^KFOgv*|NzWVfl`^#IjU%Y#Ec)j@+-1DvGa_@KTghWQc3{GSA`Om+suwhUt{L3>?N|eydOnDsS{Q%pukiU_ioEusyMF||C}m{I|L`mF{hxjB_uKZ_ zyq2Ed6ywwq@8?#j-1TAaOA{N`r|w%>=Bc-?Z%F&!#4oJ){6C9o#l!!Ol9hjc{Ofmu chr@%@?7dqrRTkg>{uw0Z>FVdQ&MBb@06}P|Q~&?~ literal 0 HcmV?d00001 diff --git a/src/res/mons/421_0.png b/src/res/mons/421_0.png new file mode 100644 index 0000000000000000000000000000000000000000..f0974240ba8ab29afb5c415b617c89a1fea5b056 GIT binary patch literal 526 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwr2>%=KS^rq+47IEGZjy}h9rbl5?J?STw)WM|JB7o}pBlvLG8$_f)@8l~Iz<;JB& z1_|6v`mt}OdCOdukNZy7W!coQQrQk&FH6ht48ec?!imRgOAUX{5n3n0xUDhYw>th$T-k90 zjR#VaDYEabX*_7F(_Uy-RCH>h%AeJ1{|CHY*?exp>#sY)9OSb%NdCK)GgV}F+E3}2 zl`K*F@8({38?{dV{N;n&7d&3O{`#$^Y04evPVJOCnBRJTT7vkO@O^F1!Y}UX*w%7K y@pN%XNSWi`%3ZonKk65Y6ec19tl@vMgdJnFme#93#~=R#iF>;GxvXVBF&A;uunK>+Ma&AZAAa)(bMK zLMH{4CZ0Iqp(51jqNF@ghOyJ-nS_T*-b#6+kj+~?9dD>~d|$Q8iR;Syne%R@8ZiRR zLIn~h4?o)F?fJ;%;PQL(<4hjjSeGUqfAD#6>Gn5o+JsFOgx%$pDy(=NYA;e}cUeJD zb_ZkWpDSq@2PT#~X1lEY<7eZ3i}ml-`R{K_1?2mm>tvq8TKe_=-8tnerT%Q&|5SY1 z=E~`-&NG&NP5-z3!~L+&2OqTVU*7%lrq!P7M{}po|IO?1gVXlwAB$-7M2$bc?j(r( zEqbEz=S@Q$bJmZw+e{DizU=q)_))rN%ZJ+)t9B>US>CE6R1) zcirp9U-9x;2A_I0rf%4*ob_XN`-Z$1iN3;a69kO&Zk=7uHh*e-dQH9fmf4d<{tNuu zzWT}E=Q}hHmOH=i-Lpxql4a?y#i_^d*2(VDesRM0#ee5#?2O$11*{bhUT+RRp`O(u e0Sn`X|1X&L2eG`7-@D!%BU@Y)-aSW-r_4ek*!b1ikYzb~3 zG&GHyyiZN(nIISwl*V#uisZrMB`G{shc^GUILf|qg2%_&ax3Y_um0%CsN% z-*Z*Gx-^;fiN)M?&jt6Tu6WhI;a~ZW=|-ET6!CZbKGWi5{9r@;w1uZTK5uG>X-djG zwOz$EL__ggQ>kE~E|dQEW*w(2(e4hzzQ-{qHW@w_Qu)*MYu|jc2ORdtOr%elFMj&6 zziCP6#s-<|LSgmuI%W!f_j+^iq5Ffw24@bY3%(A&l3L&KdrH8|m;LIt-80tdOBeV2 zm~;OozgEs6$*f2xySGp6vs>=J3NJF$R{8WKk`Wd}AL9Qo2-q|F{4ZTw1rqag^>bP0 Hl+XkKEgH6_ literal 0 HcmV?d00001 diff --git a/src/res/mons/422_1.png b/src/res/mons/422_1.png new file mode 100644 index 0000000000000000000000000000000000000000..a89a8640f52c055e52750b95f8bb68c0bff3ebb7 GIT binary patch literal 900 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoEa{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C|TkfQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QBXK3bJD{p1ThF<)$?di!M zZ<;n6-&e8QcgnA9sm1O@2_3<{o^HZ!b0TZM&a3IHhq?5wJ}mh0rEEpK7?1XXu7~semREcZ_Fe!ot>IOL zOu=-jX@AGtNc2z((@%?~he`8&2H5 z8UQxkVe7*7_wS!CJTHHyTlJ1qod__r6IoyX`m{&B?$5og58Eq*uKkxh%5-dTc)L6# zVs`yv+EvMU`NQrCrbll|Bth|$$a=b~@z{a*xbyM9g|2bGn9pDM?v@b5|JOdflaD{w z-Lc;Ai{81f-yg;7mgoY-EYpgo0ronHyKZ0CgBT(G>Tqyj-!@UOdD5@nJ#+_oh|=Vy cb@-jUmdppggHsF+19J?6r>mdKI;Vst09~!34*&oF literal 0 HcmV?d00001 diff --git a/src/res/mons/423_0.png b/src/res/mons/423_0.png new file mode 100644 index 0000000000000000000000000000000000000000..473a06bbc727a4d5090971a72c7950f0c6c7b90d GIT binary patch literal 688 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwr2>%=KRx7?>11T^vIy;@)1f^;32faZS`e=&hjgX2OI5Cm@*iKviH9%QS}<1=Ea9 zzu>WOjeQ+xWIye8vf^C-s-p7BT@&BE%{uQjNyQTv+JE8e-!GT=zwQ_Omsb5bi8Fn| z2i*rg9Dl!kJio5x^y=;~mg4&IjoL?w{8IMDZQr1o`0sn1Q`_e$2X?B?;ZPO$W)fR> zgZI3Dc<$T>n~(9moSvy^^R&hOeDUu!57jH$iZoWoFIy_0^)QWHpytr|*PRbmz=dwF5Y<8ZpCi28Yj*8FadB(oi zb#I7F5X$=STP^iV^s9g=6Yd&_O^{E#CVB4lMpc~-S%Ya4CJ0yAuDfq6R?zZIubz9q zn8OaqbDtNVx$-`k;q~7#t0QmEKKsl0jaQ@-lJgql9pl->g2nt3I5JLmo1WVAE<-NEI% zA4s!=FsmPtN@?5rYl-@wkM|4qTm3!%LOVHQ=0=`A`|4Yg>t1fZA{6ArJM(eWr5*S5 zuLfnE;Ay?GAh_k>e2#-@>_4W=@ATh^6qmmiUVSCH$EA7m6Rt~(feDJi)78&qol`;+ E0E2Hcr2qf` literal 0 HcmV?d00001 diff --git a/src/res/mons/423_1.png b/src/res/mons/423_1.png new file mode 100644 index 0000000000000000000000000000000000000000..bfd98a86582d81db38884d3b333d56cdea6fa16b GIT binary patch literal 535 zcmV+y0_gpTP)#K}%4XQl*xl(xpq6E>ot=5>mSK5?p#YSwc#63NDi|1`m`H$@(O~Ilw?B zVX>IYd5_fH9RL6T00000000000000000030m(A+aP8V+2{O6~Koe*vuKDYyqpqhX*Uh}UUKs7qkkmG#z=39a;9KhR`Z&RZ;zn7w# zimDvf1k_W~_#|bM{$L0{p5Lb0tk%;W&;zLE_6_;aIZh0rreO@ALg>rU+&KZ9<;86M z9zynl3Siun_ni~M86Ha$K%a!(=wA7sEL-DwA)M&z{p0iqS^uCOw>;7Ex z4=qFWYw1|yb@D`|!+&UgU(@F%V4Q-w)AO0{r^%_hR=Sx?jeomb?pjERByE9<_ZDyOVA|yA;uunK>+MY2yxRc+Eu}ou zHEUU>=>@O4A{ewQ&={3_ogzb#hiY3-1+~u+E@So-txO%X5TgEwEw9lUbPs_x;=jtD`M_)n7iFS z-C(d-dY<6}H?|#uLiXuy)p9N2GZ@p=RyZb~vWn83{=i7(-nTz9kL2IyeN@(Oe}0pK z(mPR!!i9o@cO&wqa8CW9`0n((3qBneHoM55&7AL=aER5dh0*9>vW~UyofBN0x)1-} z-0bYu^L>Mvw91Zms(Ci<`2`P)RfKI0i*3(aVtz2ht}Cc0?6o#?(EJ&;k3Kx>6D*Cl zcq`bvLUG#lzx|sOyuzeQ)2Hp(sm!mz5$LROzUdT)TEjt!F%)1SADj(s=Dwn-eqg)>-QTR*X#K1Tk&&dKx#|(`*i=G zJDi_;YV2{Uk$3;REJmX65_i#y8_XZWr53o&+IC+vt!{&*X80>zqsf->WyK^Sx8hO;McJKj|KO$Z=(@i@Ap!-(>swgtlGju;n&6T|M7Jl`GG1*0X2P zJrg_rMY1jFT)OJzhncqvXGKUTzE8A1)}o(x=FG?M(?wBIR)P2)=J~bGc4U~KesaSW-r_4dX_-@^_fYzfB_ zSlm23J!f80HgNJfHAPcWQMsaJ$`r{)!Ap|1kHurxG&r1^EBMRq<=zy4dtKX}In zGzj-t0UpG?1bQVO*_IJ zSkK?}ZmANi+9~}h{b4v){q~#ue_t2sC^nyCN_)s39C>F`1BboZ{g0LLZSwP71G!dg z`E}Y-?%wgM@nVw}w|K4IKd0Nd;+qenx!!}qt^bPHk9>_{EEMy2&!+U}td7lgP6c6ihcRc7W-_MjaO<;24bmc#6sz;9O z6i9sj#8UB3n`;WE>yIs5_5bdLA7WZ<&;L-zkumpt>3LH~Sl bXo&s4%kFu~^JmD)^I!o_S3j3^P6U{dsSaSW-r_4by1&>;tzqlJBs z1T`$3y!sO|XI@echysG3s3MlW2Zoni$Ib^|XC2Slx~QR8OyF?8>kA35 z6=x1seS03}xJ#(c&WX`9)9v^K@8}7K@~8ES1WabSo3DMiWA#C8m-l;Z_I~sC_2x7^ z9KM1t?6B*KDO)7upF46+J?wwD*M553;uc|x3o8?+cPX6|PWyjlK_siV&H|CTm$h6L zhr&PGRDTP0aFsvZ#p=XkmA;4Yl!nsugE+ z6=HTcnk-%}wjfz{->Dh9STj!-{`md2ok?a{)10WLee8Rz;A_vB$w?*_E4yQXUUvq4St+o{upZqD#V0)+ELyiXO@CwhX_qBBW`*g{+U<~kdaSW-r_4dX_-@^_PtPgse zW(o!^JHw%=8C=EUwqOa6CD}en@Xkz|6Z(?si>&9j?DMyZEc!X`{P)|ld4cAjf&YgK ztb8ITy%72Lqi~+yb4Sj-ht^LOD%-tQ=-Q+W!d0#FS2I~n4eAr(#2D*uFzV`mN)tQd)WeAm4o4&+nFO7*V-KsDmr#S zYr(s-P2zR0g|b-Ino7I2-naTw^*lZF!`G~!174~r&(1FiR?gs>A%8+COXKm=PtDq` zI%Q0{S0?{|u{!*R_MR%S|CP(CWK+ZM*zFOyu&d>1;_L_M^$wyJiqka~{67Z|gSr~V Xhv`jAdFI^F0Ev0J`njxgN@xNA#&w@9 literal 0 HcmV?d00001 diff --git a/src/res/mons/428_0.png b/src/res/mons/428_0.png new file mode 100644 index 0000000000000000000000000000000000000000..da5c57bbd47be11fdeb82fc58fbfde7e6193e28a GIT binary patch literal 586 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U=s9naSW-r_4dZbTxmyv*2HO# z0v0;AX*sH{U}@tM-NiF~!G(q1g_7qo&Oe-I5HZnWR=LXL_v~Vq0z*FiyLor!?YBUq zu!4r(%DeTpcJ{TFUXL6f*4J0g6XWE6aQorYAD=&1asK#Tu|@iw%)j;DxAQZK*8Pp^ zZn5V4@%i_0kqZ9#E!Kfo?YUkky?X!quQ2EL8;qqaOJ6B3J9Pe{%G%oot#d!TPG_C} zVY9Huj*TrGD;^ZTd9r!mGe6GgAa}oWe?#h3=IomBwndu5V@Iia$cISPMNIFNvc#`^ zSK02!9^yEyLB_mPX0QCcW#_#d?hDSG=I!<`yi5Dg`}De1dz$7~|Mzs*wWLO0`@G7U z9Q(~ig5R_HJ8J5(CKjl!e8)25vD)q=zS5}0Iznc7_RrTnn>-<;en0m)U8XRP6;r*< z4~M^NIuR+9AihRHH_gdEe9HC9neK0!q|Y<%m6c`Hxyvj#LG`LOOV8o3+IbH8d)Y57 zo3tUw;ZS~}o}6>7-v_SW_A5SI;{6(aY40NaO!wU_KZ}kpHFj)U@3F!l`0L{}8&n*= z#^3B)_UQAv<=zoO26O(hteH9?KsjL#^Dpa#3qQ5)cXMdlc+IbFP2r1I)7PE4A91MD z!M@b>@#YtK+6mXo56?_r^RmUrXQ{T(8|GE}=YM6fiD;2PioOGp|Cj>i%5S`Lb-f)( N*wfX|Wt~$(695;L0%`yN literal 0 HcmV?d00001 diff --git a/src/res/mons/429_0.png b/src/res/mons/429_0.png new file mode 100644 index 0000000000000000000000000000000000000000..e2e1eb5d1a18e7ce331ed408cb42f3dd4ec4c87b GIT binary patch literal 620 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U^4b}aSW-r^>(&l-XRA8SIyvM zOF+QKbEa}Y&@&EAO-nbgzNygy$4CK4HMSfm2W!Tz)|*}W6|+q!)oi! z`Nj>O7YHftYKhY|W1lMDdbOTsMXCdb?4$g!-D+EY=RQ}i)BUKrM|uH=aFXr5<6pOI z_;CHm^<6vxKV~)vG9Nv!w7qja?}c>9iC!W+g8##qOVobs+SK@Y;iGronIrEO)?6$9 zlhbhfh3MY14Ck4q%Iwz-Y|@%Fq4xt%)=S|Ba>9SaOjL>vw{bH2Oc4B@;;iRsW_q;2 z-Fwn^_SlcrAIuicYq%S)A-%6mzx{8`Et{>^#L7PWva(5XNO2IeD%&$}r}~3$!5nv! zZdI{Nl{Rm9ozBXf75YUD2i)*HmKdw2>?Fg88xy|9Kt$7<$@!yZ=c~ kVJrW)KX9G_QWP(kFMnyx5k|eacg#Vep00i_>zopr0DcPyC;$Ke literal 0 HcmV?d00001 diff --git a/src/res/mons/42_0.png b/src/res/mons/42_0.png new file mode 100644 index 0000000000000000000000000000000000000000..1fffde7be0b38a6cefa0dc28d3b326100b606fe8 GIT binary patch literal 1356 zcmah}eLT|%9R95++>8>DuxZU(XBf6r!#0gi>^gbdC7GMo#88?xul;P^y2(o|^Old& zsibg@h?uP_LUCQU=#VaAFRiqX*IS>@{da%dAJ6lApXd2}zJEUXM=4}oon1Nr0Ov@@}Z3Gjf}(~*FagCo|>(aFsT19x!vdN@1rGb{M&hpj#&&j4oF zVg-U>>9d2wk_Evpd6P7@Cv7sxC*Ah2+_Q&5N`~d*vPp+6FXb8J8G0ivBZNB0>BeMb z_f_#(ROtOc7SwNPqp`CynsXv*y=SHSr9qB9K??!?KMB7me_l9sO;UC6N`G*?t6tmW z5!XLg zddk+k_+~~m@01-EC5x#sZH1LUT9Y-|LQuF%ZiJlgG}irlIB0j*=o8+$ER>xuracZO ze#nSlV?MvmO5)jzc*wcN+632fDzx0Bvc>I4A5fx*YtxxLW{5aE4uGbgR;+H-KQ`{% zVB6!d8P?EqUCU2yqP>bYkG?+B zqPjD0W0bkSv&CGMA!pSZGoajQA4yX2>bzfG?#86*yAgHyK$i{XrPFB#; z2yHXR!t1yK=D>b7cGkhJm}UE2O*y?0ZqDrf;R+f38Wlmaw+A}g4nob4K{mM;Bkw!L_AH& zM328TC|wAj`Mf+CwRpZ8&p|d{tuiH9rfT`5xzLBBu37bPRI98!BCI%*?KQT41<_&n z7aU)9Hl4|4J1eqNoH2V}c8`Ye-#cnq6v~)&7n2m|M|UG@pgrl*B0*Y}jNLKEb>CP% zM5h{6S64r2(Zpi0G*^M4h%L>fWI%_ao{F6H4!l`<L>Z6~kqVZvz_ZQ@vR#l@5aQhl{W`^Zar? z|JyNhyi_=d9+!wgh`zwG-ap*#|JD{7?yB6C<5U(WroA($2s+Z|tAO2PpHM{HXuv6} zkcmb0$6%|{z6Mn6nx(fxc z5XxGS*BF4(zwvP@kaLZfHLJ5ceKd4aKKef+;)qz?e4bI#3^EEd)ME$ucu`1Agz%hy E00&oY&j0`b literal 0 HcmV?d00001 diff --git a/src/res/mons/430_0.png b/src/res/mons/430_0.png new file mode 100644 index 0000000000000000000000000000000000000000..ea19727cc7724599b256f119a75249b28015fab7 GIT binary patch literal 632 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>V6yjgaSW-r^>(JA-(d#<*W#8b zQ}i@rcP&{`@^WzjijlP;AWC*e{6BwVXn@NUh7}CeK(YopH=p?{BQQlet-S@OZQKIQu#7W?e6LRg90uB z^C!()rQvtI`rxlMC$}eOg}nJ*&Gcc>^Ci!nCirxIRX%!3MO)y>`4j6k_3ux&&tIe( z|9ryxC+9h1wCc-OKVSXjZ=}+?z#Q@&j06s zvYS28uOnqDOX4QqKR<8yrmkQ6=GVUeg8A#$awND)&)`0kGOI>g`2WXizKb2MYe-Bz zlyEN6kq0Om!kX~tYSWi_OMcH3WQ@_|xchMBCE5AaCpQ1s6(sO4um7!@`u+25H>T|{ zVA#4a;@iG$3X6W+nKE5L%iY0iPkq=A(E?AwL#>M)jOR-IT=}i#spQXn|6jlRzB=yh z_cfe~rb--1iY&Ujg1Svw3wjj{_8I8r-qw?D*{1U-%sn&uk>lKhOQJJpJ1YKAcocVe zsdAIRoSLoj)?WYayx7pY>-n;oeWr^W8H98-PEGq@p`~*F)eZj38`W5tG$Q1W1U_ul z=8%_D%(2k=Q+#m0{Q5{?CdQC6Q@rf9e@XcEoHKFphG|Y8>@^Z|77IN4HYtMtjweUN yuft(34CO{#8TRHpj33SC9sAU52aoInVl|9$d_NX>xgJRe33|HvxvXVEp6h;uunK>+Ma&B56kf)&SX~ z1_tgNJSIFmB0&5_kf&C}+1XiM(LG|D=juzV%Cetyl|5ChT%UDnQ`zYU-+kV{so2g8 zG!7L!`2XSS>AH8$TGBth{Y~uq_~VC(z5V`kzvufOUnmgH^W)Ce%vpTOhyF`{D?IX5 zr$t4)P5z+U0ox-y_Un&xbzF$%4r`!1l(jB_*soVblCEtzw_rGi3yzfns zUs$`?mK;$TyL3jSKN6BDZF9eG&3)zhe>>N@3)5~{>|CE8${roS8gZ*H>Dcx8=}fho zdDk9{X4Ecs7OdgjDz|NG!t;Ly-xcCC552dZbL+Ny`oFKekw3yK_);d6wr`f6UnBSZ z@7shvQ`Qv=pRJM4HD^~}6tkJ*?}fGdMY-#mnV$G*%xBcCu~Yg}A$fXU{PsmU{dmQaSW-r^>(JAAG4u|OL2=# ztC6be(`i#Qi&?x*$t3nWdCr^!1j;$vGn9NKB6nZB#mUn7UFGzl*-I*t>;Jc01sP8W zENINzEWNS7`RDI-@|=wf|H>Jzb3A-lXI_=?Z94OWFLyt`&J=KRX3$m4dAIAL^QG&r zO&PbaC}eswU&yxE^H_fSUqcpK^_F7{GKVY+D>JLhekwL_J6+(Lwq;-aOi^>y`hOv!w1#V~#HrrCuamEjfNjBCX{trux%cX`ICsh@LpU(46Xs@i+(8w?t96wmi+ z{(M(wV$E|#Z_4|yqRtx5y4T+xfA~_%6;rgSBypP&!`aBDbF2zKrS_F9k88epN?;jN zfO(0lf}1-e4`acKUga1&u)~URP_{NBhp_ zn?FIvo#lc+gNxUqwAfRJkAKsMEV>)EtY&TIxqJ4}5l$;6=%2iIR`Zr~wq$@^vBc8_ zqOlz=sSK&U=Yx`e-uo#Qd+PglrZ-_R2gGtdYTCBHu05sa{6X{3yF&~yZF_D%FWdjV zdF9=C|9O=gxc6~SxwP42>Zh&G7(SV+&KEip#`2)=xavvWmF_!#@0~V1cbYL%h6SUg z$|c8$ecrwMC8sY{yWf9Rp5y3iJ=2bTiKn~%NYCfWL5<1-@sGI!|MRsOi27dy$#}Z@ KxvXU<~$jaSW-r_4fMi+(Q8(Yzb~B zIHu^uF7r7lp{c1UshaBLmeA5OVUpmD2WrP3xrl%E5R6xLy{|6&am~N~zarvvfF_}X zf78!y(tmw++mY2KasvMnx9ZJrfBfOs->E{+^b$%~r)2-181h(KA?^BlJ+2e?H!qP` zX&U9YUsT|K;DIAb7dXtG)o!=fPLQcvr@hit>p{t`(`&z$Wcz+R&h+R>fAiU-b$8@j z?mw~%5I2bP_WSF@niD@=^}1h8--qMbot-W>zS?~EfBNI2(VqSftJ9etZs(}~e~rKK z`H|;3P9Kch% z{#}BXPegJ`R$VW(zrUOPOn}pzPjfiz)vosoNwv#6KA#$3-|@79Z^puwk58V4UUY;uunK>+MZLzrzj!tO4?k zlavFNE%EVuIcbuSs=LQYK?}FO35x@Qf|hajOx-wbYHvqQyT=~&wN1hQBM0L?st&;f6&4GIrCfpi$8o{zW#3KgWJ2ean~(r<4NiK zV1Mu1-)G0G4O{k=czh+aWR>!>Rr6|e51(h; zAuV?64~MnWdE+og$vy9xjPvVv{biubsPbZ1sG}=DHmD zKIezmm%sa0^MR}G(X`{8iYZ%pTJ5*}b)H`ra(;=?XPy!gp_HrC)HpGN)t zo3^HlrR5dZ=Y=^hr^>BFz(t%o08V3mKrH-C11bX-|2i!8Io{-0d`Yif50mc<-r zc=Udu{Ebh$ZhWa@I5gj&Va=ophUuo0rRPPU<&bcaSW-r^>(Iho|B z56_vCCK;)!s;2fGGz?nyL_)K;XNu;_xGfsmypy*ke-u_d_1#nK!@cIDG}~>{Z}I@m zA^;xLZ{8K}zoH6-DFP-2i?-1&Ni9RE~87hIY^Tk;yUtwtKusY|VYIZAZRkSLH4E#r<*h+Qs2}-v5oZUGQp` z-m4Y&1n>E;kNo)i>!T;~Kp`r<0V=Re;alDppf_q8WC(?|AXO=Z{B zVMi~gSLr@|`>fDQS>XSnuM16+SG_-^qs@{~xCRV3@O> U!8D}oa3DzB)78&qol`;+02TuxIRF3v literal 0 HcmV?d00001 diff --git a/src/res/mons/436_0.png b/src/res/mons/436_0.png new file mode 100644 index 0000000000000000000000000000000000000000..e4d33e3acf9116baba635765184f1075330efb89 GIT binary patch literal 450 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>VC?jCaSW-r_4bBt5VNBI+XWfL zqJ9C%okl{Eoi0TzDngwuO3IdOLNgaX5Ubj>S5i!7=7dG}R?qTE6~21k@BH~BMxaq> z;KTVfzZdSl#rJWgM1A0&+q)CL{)lN4IQL=M^zF4$y|n%O9m!tBCpw)4X8P-o zmo{H!|FG}7-=RF}95PgUne7PP(YtdzLCNVj1dW6Jya`IfIuotMtqzHlw` ib=5b0AU@G=>aSW-r^>(IV(IEo?SIef; zQ>ILjX`D1kc?k%d5e!=Pgu~Lw>y(V5yT|hi(|_~6MhWm3d49Zi#?NTMk{|xsCqLzY z%p(9;XRg1twaet6#-F<{wXYWazcjgV20KTDto^H>?{oHX=*yPMb*qmmO%;D&-FQSTs!1oMRiDw8v&H@_=ZW)0t?R$u z=QaqO{g#h&Y5M+Yvib+!v)3hW+wbVK^5*@P-*vxyQk6vZ#ZP+V*3;nRzvotg>VZSO z#{(uOCJPiOhYC+ye{k8YKXnz>WkM>4rdv739`wxUX;^h?-plIQdB(?7Tm(1f$S}PV znJ_sac~x2D#EzJo7O}xM{4eP$97x-gwykgG-r7ZLxA2%g{!`~5en(O9?5|~CYM;(y zEt<-*Wz&|*=!x$<80~)isNJs8+I#!dp=-FyO7Dj$;x_Uy1~Xr8$}sg4~0*#s*AJYJi7SR zgR_!C$3E_jyT1N*?e>{kcVZswD~fGsk!FqftM(u!{fV9Xp^m4=%Nt^ye=NTjQ~qR~ z!5)LYWy$jA?yT89x&K{_%7Yy-d@Mg!ca=mHy`Qw(=|Cxy$bx$F1$-MmTxI-NcS1gx z{klv`{qMgMn7*9$693n#{`g(J;6Gkj0j9U5u4%`PZ=Al)^1&?YMc<}A-YHpUR#9E< x^P*M%b(Caahh6Xsmj4`*GnHhKlSae;WBlzYhXNfBUwsS`_jL7hS?83{1OP__EJXkS literal 0 HcmV?d00001 diff --git a/src/res/mons/438_0.png b/src/res/mons/438_0.png new file mode 100644 index 0000000000000000000000000000000000000000..4818b22660f9fbc20bac8428f2572d18bc2a9307 GIT binary patch literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U^Mr1aSW-r_4bBh5tE|;Yk-Q- zOl1X2CU*y=i6>5Yr1Ukq6t&1G8y!C&Sf#bs)Kym_&FsL!krU#vcc{_vXd=*ayhIqe7Ej9Itv*>hKHXcD=wq+z14 zeB$&6t@n>^7PfDBA9iJ7i`AdQWwt%hfy;$n3Co{<{QKD246fZ@U;X;JQ~Pn)mB=-7 zIQ~7~BhOW!{YoXwuWdf-6w@!^O&_G^|KTum+Fw)OGp*pe{6X#VIvU`+OOaSW-r_4dZb!b1)MtO4zM z2Nya!O?Tkr;^dUw#p2Y?r|GB~(B-{=#b~DO=I7FBCsbk|d`~Nr;9T@~SL}nAoIs;c zL4w<11D`;viz|OlKfQE{fEBAjU-HV=OBt$K1%j>;YZssU%dzMtbE!B-($8o1t2mAZ#Z~;V z;aVu`=@gOiv2LIIs~bDlf2-p>u>Q%<GM_ur=IuKsv0}#W+Xh!|484L_ej-D=#Ar*0NZz%S>au7K7v3B_ckCar^Pb!;)DnF&DetP1m zBGl=kq&@M(-8>$>R5_#!voxdw3sKt-fE9zTFpSEiO=D`1<@O!#Vp} z><=5VwAS0jUVdA4`tdxm$0Zrgf9*e+$=nUT;c6W@!+1=jZmZ^} z%IkLyx9Kag<(1b*>IH3nJ?W7CDWlTd+55t#@87nhaQCNEe|c`mOg|rR{Gs{sV!Kl{ zcJ&bxuT1+go8w{kYbK39S$j_M3+ykf`d2q4_5ZDfxw~uT z-0gp9_xl9v%p}2o$IW&-=Q+9>?)m-lmr{h`y4cyfyoL2D9{+OmS?hj0cV|7D{nBe8 zd&1A(cYC~x;o0i7pD%VTXo`q7n#C%(Q@>&BtlZBto5i(HXcycy|2i%BZEEOO{aeS@ z7zkC$7FZ{IE#dxm=gV8yzjbGtrmyJU5PhpIi|vN{^$?NTW7pqS|6APPbkEex`bygu r9f6xNDyy2@>~o^>bP0l+XkK4>Ldi literal 0 HcmV?d00001 diff --git a/src/res/mons/440_0.png b/src/res/mons/440_0.png new file mode 100644 index 0000000000000000000000000000000000000000..dfd0cf739b653cd0e68c09f2518a19ae79b1d9fb GIT binary patch literal 449 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>VC?X8aSW-r_4ek*!b1)MtN~ty zoKqf55E8LcDS2^Wq4QKn&M6CoVw$`aCP%hios;i!#Ixwby)%810w@13pWISz4KxW2 zBq%O_e0;{|e^nByn;aRZe>SN5uCAIRTIaK;PiS4fc0%{n`uLxR?yq8anExQVUZPlJ z!>3dB@_mob-+rF^sC3E$raeJFHafgNJEYcbrteHzPA!%dY=J^4D_x>WAAk6t*w2za1c2C0X;& zCh_Zbork+-8QV7%t(;uunK>+KE0yh9EGtO0$K zjNBJI(a_WkE^3(~(`cl6{Dfc-koi*PSki~8TotB`flIzG2|N&_@$byK>v1|jlh8ok z)+p2Ny9*=t~E^_BP(P7|4%=dCQsXIAAaydT2A(?++XeH zkJ2i0u3Y|HyjU>UzkVl|n^b_w!vEH#h4IYOVmp3T-e}lix2@^XEVY=M4G%wV4wtNZ zZx`@CUc4eUMsfRWvp1XEw$J%>qH4`5&pVe|tp2RYK6Jf-Q(8bfVf%ga^|O8T|9sz` z_mty5-|p$9pSRvM{aCK^hvWO_f{fV(iZ%S%-#ZExGX@G))%0iTfB%2+!*AXVLU~g! z&(~H^-^a86Zk^vkcjjAaA`ip)GyjxvYpGitI)7fUt|oq7-`wXPR=?c;qv6=peC0mj zd6VZ&eR!RB#rZ#{|NWdFedzpx*IjCJ`e*KZFRm_s{Ji}H#`Fi3!g~GlZZ;G@$PWJh z{5<2vy)FkVzvliB{P8VBvZ7_b+0V(QicR_7e;NH*!*joT8|QuQ)Lz#7U&~A9{kiJ# z;_egf`c)tH+gI^N##&~bOE8`DAx7}(Wc}iG9U7Pazxd4vjfp?Z_FV>3ZwITf9s`MZ My85}Sb4q9e0H*QsEC2ui literal 0 HcmV?d00001 diff --git a/src/res/mons/442_0.png b/src/res/mons/442_0.png new file mode 100644 index 0000000000000000000000000000000000000000..6ca46467bc79dd670552697fbba39901d5ec39d9 GIT binary patch literal 564 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>VEpar;uunK>+MZLzrzj!ZVzP? z-92X-rJj;eO!WeRQ&VIbCrwH&5V5+T;AvVp*cVCr~7JkUy5qwa%keP9BpZ@On&IykWd@%m<GeIcAJ-ZE&^oRqv4_=lbMI@8{oXg;nB9MP{wp)nx(L=-2Yws7foJ;CR$6pzE1yLzpiN)lhF^W z->YXt#WsBSZ}2(T&6YLwYTKRgmiA4Izw3GRk83RuXXKW1{w?@<`3GBWoeK@w%4^jZ zto*P%?p&o|`BTF!d5&9OKD*JsQm|qgo6QRGFYKFkUcY4eN5_*dinVsx^HQ!A3!lpy z-hcej;n0fE3-RZ!ZfvWsvxs$LVq4#`vi^A1kHT2i2?idA=5*M+T+%T8^JUc^YyOsb zAMg;Y&0h8JIhVqNHviM5yE!=(m*m;M{yM8cb>1}NKQkT*mdyWIsJ~A+;ow@0b;=K> m1bF{2S39&$RS*$V5w(on@(<4x9dO+W67+QSb6Mw<&;$TAL-sEK literal 0 HcmV?d00001 diff --git a/src/res/mons/443_0.png b/src/res/mons/443_0.png new file mode 100644 index 0000000000000000000000000000000000000000..c54b516bd2dc4ff448731da1828c2392645c13d1 GIT binary patch literal 525 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>V7%h#;uunK>+KE2pu+(IY!BoV zHwm2-oM7vu>h2KsO+tpb(?w~bhsq@7E27&rY_ORm*|voD(eJc-TV96z{k`e;q@zqg zvrs{TT6*~HTD{CO0)Kw}`?+D7xHjtyqGX3oh|i;fK=K4&S*bg zyZ0;){Y#oM{f#Q;CT_Qm|2=cV(lztr?_IxLy8Chaq4U=kGbp!bMz<{d@Vfr-iI;cm zome86`wYUjm;b(ZXv*tvFEmdIE-JlJCd8V-eOY{;l21%ajOm|+8y?&5EQ<3eJhaV3 z3`MV?T#_*Iop<4)x18?H}(HXrV4!%N5yTY^ZswR zS)=VHwj|fQ_IUWiegR$eL+3?}73^PMH1@aK`Fk@%*?*7ecOOMF79D->KmEBqTWPNS z%|%NrHnDDfc>G=ehkU(#ZKdD-@8N#)Px(wk#7Eo1{ZrMK{%SfWeNlOj_$eoz*86sf z-2XY=xBd#de|eMff1mQsefE!EbEp54eBY2`&-VUIv6B!q7XGNOpM1c)=S|TK1CWTP LtDnm{r-UW|;QjSe literal 0 HcmV?d00001 diff --git a/src/res/mons/444_0.png b/src/res/mons/444_0.png new file mode 100644 index 0000000000000000000000000000000000000000..d86be3f98735e83c3f8ee61728d6944090293f68 GIT binary patch literal 623 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U^4S`aSW-r^>(Ip5R;>bYb4V` zMMZCe6wVf%gA*=XQ1v+>6vMP|;lhVHhbQn<#@>5aX1(IG^C_$4t5&CWDOr^7y8pV& zj2UPg0r10KC+un){EwPU=ayXoyR-l~RRpTyt3xyDofsqlf0Pq(|?fBySN^*!RcOiklstRlogXsyJI(js)7i{$MbPux(#_6V*IGUlpO@dX_3Dr3GejHs;}zvx zDy!5Q_+Iq(|1@VbQBSy zE2OoUHQsmbm?9l8BQ}La;5z?3-lN8)zI6rK=LJ|UZnl`d{LYP_q!(|)uV2}+_NZA% z+>^wu>FratuDTkz<$AYBi)a#mla;{&iRt0ITrP|rHNp*Z7np9aTp-M~(MtZuDG%Fy zb7g~c9e(VH_CN7``<_32;&-=MD@v?pi3-@ZQS2HMPJ}Q;B jAmT8uNH%KZHe`QdJoTf#GS@%;FG$AI)z4*}Q$iB}?^6Ov literal 0 HcmV?d00001 diff --git a/src/res/mons/445_0.png b/src/res/mons/445_0.png new file mode 100644 index 0000000000000000000000000000000000000000..9645ba5ae3297344ec289f7db4c38c14d3f78188 GIT binary patch literal 837 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>VCM03aSW-r^>&tFkhG(KYbi@B zA7?2`dkY_@CDTIZcDts&hsqWzB_1aNrzC!zrT_2SxgIyCsF*j^p~2k_tVjRb-nF%j zS_?D}4|wpopm=xfMW^1Gk@@e~9_Gu}@t?2g)iUmqKXkgKVw#v&tY;19deO8g*LJ%7 zcz^7K)065e*N>cco1^sSVg8!y9ri{E`W^0Rd+gNq-K$;`vHL?u{SlV6?fJ9Uz4&f2 zwcNR{>d1SQBlUOI?N+J}+29*vuJ&F>YD^JC~`#xbc_TPWF{O?R|58QIg>dTMyKli6L@T{K8 z8MT;`XT_4nFQOCDS^W4r*wU>TE159qrc>nTB}br%gnPvYlX5f4YHGeI+bbe@BZD)b@*kScj{5P+ex3BH&+Pa}%W?y{G+@h~%o-;08e(8DL4Oa0J zzi+nO;I%yZBhx(oT=F5+uJ?7Gf1*-;>segk@Y%6PaP9o$1MJc!R*dC5zaJc8jozIQ zG{rDsUY@6^Q@sAKeczQ|HA_F7zsGsu%-$2R!l(YU#|k5o?U}RjsdBp$MJA|+fdoBW L{an^LB{Ts5204In literal 0 HcmV?d00001 diff --git a/src/res/mons/446_0.png b/src/res/mons/446_0.png new file mode 100644 index 0000000000000000000000000000000000000000..6a707dca4051baf34fca0c025121cb789cf87658 GIT binary patch literal 427 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U@Y=bkY4ycQ8R;4%hk`P0~Jc9u=byCfBH$i=f^rLe?pyHwajX z@BjACO5|wimiPNP6Z$s(4>A@ndH2_8$K!kP&)Gw>v+ei&U;5)&lb`qbTSgNyE?2id zbZ5|gyKQ!%MBCyde{Ol*f7%Vl%wAvJw?Y2>?ZO{5x7!7;Z+%gyKkHHXtOn(l#R`17 z>mGmK5#Od5<$Iv=$%MT&-LcWJ%eWR^4i2dPyK?LPy$;WPBlv7TTJk1TnWflYSn)&h zK)&@un;z?pF;8#ZeP432GK)EkSwnp>Q^wZcd$+K!sBYA#sr6TA(RQBUx8ZqL{kse& z2Hts1zvO<%FJIVo->RcVX;b?3#AW-|1pcTzWbr-rBO^4J-W?K;nHU@Z1@aSW-r_4dZz+(Q8ptO0Hd z&T#ZNc+NCZO3=`ci!x%<)o(!E8o@De|rct10C>u`S$Va zghPD~_t)Q-FZCDXx_RMaNha%)RUiE4Urvs5;tD$V;Dh#?eGN75yie%7^qzE&YjJ(u z)%V`4TkiL{tNzjcliu+8;{EdtJzsw6tlZyfukh#d&pkW-#H_!*|9;dB?&=m6cF_q1 z!hcMB-~PV+_S(B#Hk<#~U&OC$;o8--{`K>sNS%azDxP@-oSF-o{C-5X{W=SjRs0hZ znWgnbZ5FYdW_vhNKlP9)6%nNaI`}ruFgEi-~mXdd{E%TMsFYiCP+|lK~#h%kUbFt)w`mh7sXF7IiCp>32&4h*3o>}o{)m~0#LT=By}Z;C1rt33 zJwr2>%=KRx7?|2TT^vIy;@;lam@Dll;u<*hzy;M6ENwipRwX-!C}AgYm_7MN0*^fX z1!Ze~e*63Q!}HIv32*!k*VXQpH~sRpMqOg}$_r%$?2aDgj?5f z8YxEC!6@j?eLX<>lnMwJ^#CZ#dX`q-xHdFZt&y{WnTMs={`=W zUF%+2{O5ZS!F{b((4cHlW7Y(z4>zta_qV)QdN(|JYTWwwH#v{x9eW_(e5E0K$0Gmg zy>i`OejGV}zNBrVG4IxG3o1{~Jbyji>hO)3|87)z4*}Q$iB}YIkth literal 0 HcmV?d00001 diff --git a/src/res/mons/448_0.png b/src/res/mons/448_0.png new file mode 100644 index 0000000000000000000000000000000000000000..496a8f224f8116147cd91f90db92b530c54eb7c5 GIT binary patch literal 653 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U<&bcaSW-r^>&tR5R;=o>vxYf zAZTfmX;hYwdS}RE$)xCRVDf|`<@FbX{B7Tl>#|C5>|4L8`|hC^d*}U=%#i|`gcme$ zguRzlx-~7wE`HuBMEu4m5Cikn!buYiF*~K`gX~9c%ZvBmyf2VDJ$JZX4?`7!8Hs$$C zk)tcBj=h+9=v05|*RtDb4^{Wg+I0HI${#}aq|ARGl3biFglsdb7$o&cFVqhvZ2N(rQz?} zh(B>}f~UweadIE}T|G}LPUzf`u+Li!gx}cKzt?~I>}Wolt&^~b5ATMb_q=>{^<6g< z3SZM)5vj{uC%%8C1mkJ%@Uz!cR_u*Frv3T#p7)#Mp0YOT$L})vdF7K)@%P0(>r=he z+4Rg8n)#+5xa0BieXD@|A&#k{SIg2nmMQfvmk>y7ke9t0lj@`yer-qg$tDHinjLA@ zyBLo)oR}BjI*qgLWYVWjdH>kOva>eWd_HWtJw?4FpXH{!_OA!_if-ZD?~YgS?AZ20 zs4nx|^YjxBdMi}^%{ify^icX^(}tWw{6WhM9-Omna{D7;%k=JsvH?m8SoVj(aRFQ3 T@A0#LT=By}Z;C1rt33 zJwr2>%=KRx7?@o=T^vIy;@;jgEV|+#!g9e@XrZ&yAzn_)rhW&H9mf^E2+I88Xlb!K zl;&i6E&OcVtf($6^R=t^;!a*xUK#Vh-_2;wwA9Z39c>Gp4_{cA_~L>=Nrr@#36HE) z8y~N8JAH+BST45C1tfb$=;?$=J@C5`sR-p z+p?OJT;smqKjZy%i^U7IMatt}&d#5H`s|K#FR$-f1QZa{-Wyh(?{Ic0$Hz^ZKi{wVV&M@9%V&niem-u^{TH-s;bJYFzUBPS zKc2KSPpFxtH2=Ia+cDn-3s-CD?b&Cyf9)sJ!-9`z-R|yJUeo*Xdy%7axJJp^AIFbx zR}<-(c)gmTb^YsS^Y31`5crqT%$&hs-Tc*zk5|7?sGo50!dVTwZByO`3v2J;s@og) zT}{E=Oe$gDcX6p*DV+Q zMeS!9nDWllma_Vp`!)aQ@mKSu1N;xy+!LI~B(>|nwN39|{y63yc)jV`w&q3G!&*LO zFi5q1UbbI!!TsB;ys`^2Dh?jfcolXb>gv^&P2%;l*SB4@jhXG>EUuyTuafboG^=aj z|7%rt>kfb2;lF=7x74l~;XiL&ub#N^QufvI*FQ^hr9SirxQOt(F;{IgTsJ-U`ntE@ z%N(867k@~t=6t_w`di}ufKoU($?o@xLy2p+>b+2$#FlNoWrYyxsDZwowfA% z*w}V1;Lg77k0UBm-5s6N>#H^?a@P!LE|3q3nzsfM9xZI?q_0hHe>|fXto}T~w zd5*Evu3gs|&H!UFMbF^N-hcP@07KwV*ZN1B)EOREIW0K98x-MNzgX@te@}8k-ZZC< ZQRq9j?XGlJe_*C#@O1TaS?83{1ONo(zhD3W literal 0 HcmV?d00001 diff --git a/src/res/mons/449_0.png b/src/res/mons/449_0.png new file mode 100644 index 0000000000000000000000000000000000000000..c91e78942c654bb2bdc2bd6c877edd50e7c96c90 GIT binary patch literal 543 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>V0`B3;uunK>+Ow=xwivESOfYO z2*#wbOqWzlJ=L?&XzA&mN0*cojJ@k9*Z<3cTE5D=gD1J zpkZiW!^C#|@9k2Pek}R0zy5D{gOZ)%pX=A{+vnTAEos=Z{;l_KJ6pRwt?`RbMctat&E?S%>cDmKdCqF(y@%}m zLYH5c`kOQ1nP^o5r+sih*UH+u{crk}AEs-qI&b>P`dkNh)Ay32U z_Fd?cw2+-}%^~jv#y5K8>hu%eg)iP_{mWk94^M5T%7cG9`z7o2-59kWUO)9r`Qdq` zXm*3ExEJ5U88wp6AuzEJnX z41dGvTrX6welgna{k6?l(Y;*W_Rl|u+;gAhw&j+j&&gb(AAbGNTk)8O`4#;J?J2NG bc@SIAsA1$=WNq282PEd{>gTe~DWM4f`wsF< literal 0 HcmV?d00001 diff --git a/src/res/mons/44_0.png b/src/res/mons/44_0.png new file mode 100644 index 0000000000000000000000000000000000000000..7684c1be66cd77b8e13213c1d3247478360df5b9 GIT binary patch literal 1008 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|484L`}5uPrNAr*0NZ|e3e4iI5|V7^*Qd!k2*>L#JiH7-gMrz&et zJaGyrkeaG06xq4v^}gcMsqwSYuBuhX7wv0tnE9?{UiE$dbXh^dVCMI&a~21^y;Hn1 zW^R6A-Lw~Szm}hw@B01iv0&}>%QL5au9$!4%MSN&j?etR=c@a&tnM-?KU^~Pb;;x% zI-aszMpyP}2#Ov2(wwyF;)Kg3+TVAbez5Cu+`793g(oXt@2cI_wmwO->1Dgick{oI zyQEE?)K!TxpDKxSXX;uKEac|N<7)7`A@RF%#hlO^Z{I7kBxxO5|1_ts%+l#fLt)DC z#fMiMh-&!Y$hE1Z&-mWr*Da-K+zl&PWBVo?e&=_&m;a~Ybt|nBlQq_hE_wp;$(}cVF|`}xS&CU5A~Caw3WGOrG=AvhWj+Zhp0|dv)^3j^4$8-o(aT$yRLPzgP4lVH*R7ulU*57k1j* zK3S{LeW^6}@uW{W!M-o{a!fnSUd&o?zsc$D7NIJR?*T3Se`Ym4Fkk!o(R`(Uj6Rkp zKScCrR+ZXzDWuDrS;Z%A`LZq|?q=FLh8Iz1Zol^UU_Jjx*! z;&k(yWlvfY)!Z9I5*tewNcq2u`BIdj`0eds*{<*piQf;G?l~!`e56Xy=Y0Qy-3mP{ zEWH;Qf*OvUw`DA`=W4sKRiny3P9kL&1Bd))%YDoVvKL;mcI&+RzomM**xH!W=l}fu zX?7z0(z)$2b~EBzO22Prd&BH{Vn&+4zDa%j`!rAg?rGY;N literal 0 HcmV?d00001 diff --git a/src/res/mons/450_0.png b/src/res/mons/450_0.png new file mode 100644 index 0000000000000000000000000000000000000000..f42d0c2f3f345ee33be9f21633f8a6844fdfd181 GIT binary patch literal 839 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>VCM65aSW-r^>&tFp0p#6Yc0=I z&03bJTE#3=^@>@hYZkXmv2636Zt2#yFprsS!N-FIY2_-q35EBVITTN&E&f~I<{VU2 z#RN1DADGeo_~Vu}tXgkXe*FCNNk1;WzU1(_gB{kK@0-?j_6e4Y-3$M{^-*@hp@dmG zLkoN)MB;;w$vsLwbZpAzGCPy~C>d(eXd?V&#kX#{U2J`cL8^6Sf^UzFm;h+tu2+XknU5V)akkIPt^07yd8) z!0Mzxj}bhwA+ik4>fYZzG@YBcrP*- z?=Q);Olpw2c$+uN$;`ZKw@bOlp7KcMHwQOgxh!<8RmOCo=*ONDVf*i{&fyATu2MT< zvQX^{&+C~FwBwF$|DLneKe?gn{;IM?Kj!IeTefl@{a%anD^)P;2s>5sBk?l^izVxM-Bd2HUh^^Y5_**u$7r(mqG`myoHy@$`0 zH7r}M$+P1shq&c!&boUqA{I|=^LocnyJKSDCy($q&U@}1@N>4G{Z0H=)G>y$-?KMY z?oC_rFst;+-pplt|9|^d{c`WLn~ci$eO^`r17Xp(`pdJXt(!VI@XhI`p9=k}_g}fN zHq|9tXTeSjuJwnu@!YUFeLee1&m`51*E|>YhcEtf{wCuqrOH=9lh^&-nRxTr>hH$< zf3G@<*#Dlir}V`1{3Y)~yN*qCcpY;isC)IsrP3?+p1Cl|Ki*wxp{CTzy}`lR4rW;@ z)(?(d*%DfzoBxgTe~DWM4fHHeKb literal 0 HcmV?d00001 diff --git a/src/res/mons/451_0.png b/src/res/mons/451_0.png new file mode 100644 index 0000000000000000000000000000000000000000..4fafbea6df9f77167b4fe8fcb6ccf7cb59947e77 GIT binary patch literal 534 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>V7%+;;uunK>+Q|GzR8XvtO;HP z9-J+DjT0tZP*hY@&Eag37RvLmoZ_%U)@Fwodu*@6r|35y+3u_N8az_BIBr~C5fcM6 z3=Q~fyM0%8t4iT9rntEOb<;N7y{8v>X=cLan>zmW^S-NwyeQwjTy?h-=VUIA8=Us7 z8i`4q;o-My88w%1y>J&+4`Ypqw|^6^zc9`_y~!%;n9!yr#w#1FnpU-}k@37VGvdJC zzn`B69hm8LqKJ8xO^a|%C-#*lS;IQ3%|FnJozLtN_}9h@-**(oeOVao-v1%IC0_ow@oX+T)}Gyqynf`xrM$5E&Hv@D z^QO217UDsN!aqAP9^ZAk{!NFLqWSEoua&iH)?Ym*`P{WN-j(Bj`|+SM2c~sGo0Naq zM`q=HNqoKWv*2^5dp|{M%AEBR=1AX^6tX!KbK-wd@BxWBr}GmhuTHP6pZh<^=2F4A zigTe~DWM4fn~?04 literal 0 HcmV?d00001 diff --git a/src/res/mons/452_0.png b/src/res/mons/452_0.png new file mode 100644 index 0000000000000000000000000000000000000000..9c22490f2d895ae6523025853d88170214b3255a GIT binary patch literal 952 zcmV;p14sOcP)`8d6h-qHNIszwi9|+LRz~&{kjTo)N@OJx$tOf2k;u3q_jS(WOppOG!OK$^gb9~0VR>Ioh~*|wicF~0$D2Vh`o?*-39H4jER`pfC`{-@`u+Xq zkO`%E9x|c7zH2Qz?jS^T)ZRlvAD1dq?eawBGG zfbHzM8(kQQukxWXrIkc%HXuHuo$q~Nb_OV!NL+~{QL8vx10;T2!%Yla|85fsHIb?XLc9dR~RG%qNEf<80b9{NHBPgu8(+zc)nF z(hijY_0HLf9|qMXY{NG1F?9~qrzXAU)6sdPAS)G0Jx9LuPJ_%1S9gwPITBjpTN2ta zCRRQJcnX{Ju8)$T`TPkx?rGO<1uipvGsAa(jjRKQxp-B7kokVrNFiX_hc1nPPyE82 zKg}wos82fHto48T-J-i73~>YUoiLB|vlXZ`)ex#LN3EaryTF(3sG-E z8c)z~7d;-7NdK_oc6NRqE4$d*^@^l^SGWN(!Otd>G(oxEggPrd# zpCeiGhUXfy$4DN3uT;>RS!4-|H#Dd(O{g zDn-qfQ#iCFE9HO9b>g%gD?McC^5hedM-pH0Rx=$By-Y@!!bI3C>AIi2sTPApZZAi~s-t0000000000 a;E6x5sy23`(>Y!M0000U~KVpaSW-r_4dX_-@^_fYzfn+ z^h_{P1%lL5K$f6}rZJPUfzzp;LmVZJ=Rd5O?%mRolfzj%zeH(H?BD&h<(}6Wfrg=h zKk}>3zFsLCG}G|M?zPM;nga;>{syo%(eE&Nj|9yEaqu{^a zpRZpMslWZo3%PbBr58Ko@{ivRHlI_c^kawm;qXHp>h_1%H$IaV zbbM|X;2yh5#@pTQuV9VM-JR?%KMalT%s4&KHPte*iOFprtM8A)H8&I5m)l?ezb8+5 z-ij8rKixlLsy6lP;z{*Pnv)T^D*b;%)~1d>c@w;YYWjW_@dwZ8xYh9bd&{?5-`6iW zG=Eo%RNYV2bo~aSW-r^>)U_!b1)sE}D%K zCJ1qG#xgDRRw(g!0c6KAsqSED=ZkGKI+L|!)>EAvP8Fu})yC#d?Tha2-v2+(j2UPc z0r2DhnrpWwvuD`^wpQ-;^z)ZrFFe$;GD7eA+7nX$)-G@BJkO`EG$9i4ulD&N)q{BQfRgD#J}U;M23x0uDV;%vBl_ca#jMU7R;9r}T)n^WTfAmy}IUI8^&+_ZgY~_iI0dhQ{uB zUH*=NN8)fp+SY1zj|lE~JN;9BQxv@}&Ru=KDeIhC#ntST>yu+ASgF>&e{igUF=hMX ztM7lVQ`~rW*0Yxuy^mY&2(zvYE0f!zv*q7vzUkHu&Yw%CU+I{i-fY4zT$SJ$Yj&x@ zs^&b~63$=O*ev*WMFmdR_j#eX@8~JxhH{6UpKQx^*Xr(@$M=pW@za9kjFCo0KDN^r zJ%4px=EUraddx4n>NxLzvVFd;b%VE$`|zcyX!qWhUQbwvpW4$N9#wt4m1Ki(&FJnbGN9+;cPBdCA)R=c^^1?8f}n!$PQ zml=-Cx7c93=5vsq|1E>W?N2V8J5bh_aNvmK!Uo;-TRzWXnkpx8WqXSmY6>`TqlUS6 W{_@*LOI~GyWISE{T-G@yGywohOCe7H literal 0 HcmV?d00001 diff --git a/src/res/mons/455_0.png b/src/res/mons/455_0.png new file mode 100644 index 0000000000000000000000000000000000000000..7cb4e5379a136017662e950a1d691eed5d71cfc8 GIT binary patch literal 612 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>VAA$&uEAG4u|>*f|s z&EO!vnUjpX7xt^!g zqf9^p2>`bZl~GIM?pN>dzA?+=vWe%R(A8g!e#XsT&w2g%-P_4ZEi;`vrnU>T3LogX z?7Qacvu{sc3F!R!nOZz$UG^UJ4$j5)?-@>(GaP@_5?!^D;}Lt)hZFW(@8(T^mn`t} zmZL#((+;KoyEm1T_x@8WYhS}V_s`*n6YRe2-tXZ>uh!TD~C^lZw*4~^e%q9H&@ua=-!Q|jTaPcnF`dOI6g`JDEISd zY-#w3_m;dz6+Rg(D!KZ)Z05V`<}1&CWDCC3;n#6_lB)NPBdhK1-<~{Cwt2&!A3XwW zWlnN!?t71{7CE-mc)s_gO53@LJnuzS;zX}EXFvCenDcSRp-bCyCx2Vb`hUsF*84wo zV?N0;D2CXqn~>9A7kgLK$8_p0heNi%WE<{JG6;FOVC?mDaSW-r_4bCXA5)+RTflUO zOixeGOiNYo0?sK@rs*BLG)Z*_%k;-WFOJ1b%8r|t&(_Xp_-xLTV}Zw>?S4Ofw>8ix zG|=!rb@Sb?fs=MjJeqVd|9k$d0`JxB@7#S2qSxJN*r;~ozW?6CtWpB!lOOW$J$$D2 zLFxAVHtj$0SqFYUdm4SB^vARX+U5)9v8FOV+Wbk@cgDlIov$`WZB~%Fz-8~voYreM|uxq{Dr`hrcBJ{b;@b>~`s*fO0x zC3r8(LC;>Q;F#O&hsTR8g{QqBOd3r?u#osb>MaBzCE(HOY}?L{IQVfW4ylb zy7^t1mwIvH6B^y$?pnTnufn|Oh5UDUbM_eTPdm}|K>5s?jir0{Oo(hsGh1l$*gx`m n?w;_Bw!pvbX)PwO;7hoo?(gBowR7>A`ye4tS3j3^P6U_9dK;uunK>+Ow=xrYKoSOeS^ z_?+aJ0tAwZ$^pyHaP&+t3`%S1Iml6>a{iRF|1{SFH;i1Kd&CE-EZA}V|IgRw(|~57 zf)5eXR-ZMTrlMvr|9t=L@BL|-iHC$Xaj4!o=r_Y&cZ$K)-42Z90SA(Hh8+rdsGabL zY2NmHU&iaxK5U7QOFsI2Y2{(>9sZ1hH8pnoX78WadSueOsmm8+d!6`DJl8MCe*gEK zH)X?Ti>rRod^m~e*2Cv~Cq8U{eSKNOkN92T(=LQM$ZEg+aGTZT!`bhx_y221t(L7| znVq~e)}e2KOyZ&Ul68N2KN$VEdwn10*YzJ>TOY`Lacpt`uf20`>AD6P$9GfmbQBJs zSKlW#!T4Xy54ZEYug;uj($jSO!8~1H;q{&I^FNd^e*L1nw~_0_&3Nw&@d>IGzua{e z?5o*b=J01Lvl~x+y~Uh$BCiBD_bs@?>u0Ada$!zS-FgwFA3Xc}7X0c9IOK5r;;&0< zuXBC%Jb(V`-9#SV2&e0-{Hylv5&p*!E)?6C#<{gY$Gu3o{r*<#PcNt6Ik0&7`M(pn wcW}P%fAnO^_GLjcH?SPPz%CgJ4fX#w%)M{*S$nLlsRxO8y85}Sb4q9e0A}>+2><{9 literal 0 HcmV?d00001 diff --git a/src/res/mons/458_0.png b/src/res/mons/458_0.png new file mode 100644 index 0000000000000000000000000000000000000000..5ca68d2e51bccc1b3e53204aadae13988f3ebc42 GIT binary patch literal 460 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>V4Upf;uunK>+Q|GfrlLg*aD_I zd3d}K(r6SC5ei~bRNcYi-@bhQRgmGR zV8OKC%ieaqHu?Xu_WHWGZB7w)&i=abLx)l4&Y!g6H6J;QCW&R#nOMxuSJ8c!^O;>) zvnlD|v*#XN$Fl2=K0E$OFTLKf&t%`Dy>({)0}P+DZ?>!JZdh^UkMrXB=IdkUvP`f( zbg;T|d->~c3oCOTzrS5}{py1SbF~y>%o-xT{{Fj)J)lye{`wyoXZ7ce4A0mF{{K%CpThWM_W_Anl83IpZvDsiB1Yix zeU<>l2}Ug|XW4MKZ1CYI+*{+ffm^FBz)m&&^W!MVfc@O3{HKRlDj!?F$bbHX&(6H3 w*{-~8_;}rD-3D(X7REoF(NWMqd|>~Rp>OSvlh3!-aD#+AUHx3vIVCg!0KP8GPXGV_ literal 0 HcmV?d00001 diff --git a/src/res/mons/459_0.png b/src/res/mons/459_0.png new file mode 100644 index 0000000000000000000000000000000000000000..48a6452b3783756dd39091f12c2dd49fbb19be3b GIT binary patch literal 603 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U{dmQaSW-r^>&7C-eCukmSUE} za*7)aHe9%{VS|CYh7J#p&YQrh7MbH`-bT#L*iyLa)=8<5`|7r9Wvx@5{e4rlnGt9d zA<*#u=)(#bk$r9xryl)pGq-Kudw1bIi_UbhE%{-jtj!cAaDUP5jx`)1t30^YzBW13 z$T@ZMebIol`gJn`3O`J{88^#GH00gi%mew~XB05sUMDLewDIk()o+)H+$%nK{g-~$ zIe|MD_sJidFv0h74A1RNU#IL=UjIw~)jvkgt<`tuw}z)od%aWp;LKR52XC$$ABjJ3 z_;J~pI?06^oA0Xa(2XqUo)`K4d%)K=tqp>|V%Z{6){5O+Sna+|Atcs-TVv0}#W+Xh!|484L`}>7Fi*Ar*0NZ|F~WWFW%!;myjaQ%`uQY!d2p2~(Ol^#qWU zqPj^avU3fH|NPx2)ymv;*YDaE8|xe2&u@GADPQgP-Y2R@1q2C#+V{FKlP`(=Tz~ts z=saJ&!`eIlyMJvEG+9@8V|QrUwby5!tiChj>@hp9;47*lt&oc>j3yq73%nw14?;j|P}qwCuNz{WE#%+^2s_bsWCGbJlyU z`6fHnKKbcG)iq7A#h>qQUKRXyT@?36<(SZdhxv!kxc!*;>ekI`o68=4pFX!*p~mL; z>lt4oWcB_W4_WZ5%)GSL^tes&YA@-~&5!z-Ji0e-mVY?^ob_g{oYxz}W>4OIXtVw7 z=X*CB|9{x^(dO6rGk15zJ^i;}9m9=;i*5?{Y62N1C~T$jioOfFGE4p?( zRj)P{WfCcJYWn#+`Q7e=Zy%VyYySK0^--}c9Gi{##M_E3+xovhskOX$Wc^>)ykmz% z?_U(NTOl>!&f28rSfzu9)8|Jn+W3`YYV)r*>CMmUtn$`H{g*x;-a4TvlUM!|Z|fmt@n`hHFOojsonx zq6Q^zXRnzT@{Q?g^O^0xH%|Aij%@nC$XZaZ;_|jZur4$-Z`$Jd$2XWWM2RG{E{S5f z+T3gYxN?JrKp1P(Q9f2b#By>pV&>WTH=@3623Da(-SG`%m!4-sUh*}xr?3V zC|WS$f+j2(RVSzwXEZ>wUlHJ9>zYK@z=$&!;*YoAUb>(x%%fDK8d9I3&)eVM9W_w* zgea&-nc!_{rl*XOGOXS!(eIw0{tPz-7A(TPJp6hQyhfR!k!i|@B0$2I3Ac|A7_dZm zPbVpG8B!wFV@812g}SF6OZ*bPMwx&C1L2k9Q~b_|65p?R#MI~LzIrb4nf)`{4!-zu zGdd%d3>o7y-)q9=g)b3O&@#b|=)^z8koviV_j<7TNKjXjGj0pb(q* z-bPAP8IU4-w=-o%*PgloT_N67I?@cx+3yBq8XB3=MMk!v{=WLX@Amr_@qK-;iA9<( zhC1zv~P4K;ciR(tV;AzO{bsCi>r1%vX-YKnK ze9y^w_|k1Tcv{Nn=w6Qu@S2b-x5ShR{r%=v&4Yh0rfOBb)cipD95TI!B?Rr z@<{xydzlh&)QWohTF9U0)0V6|4467Y_6f53MVMMW z?>18Wr6Yy*=bp-@43OEI+J-0-YWTHt7$DJ=a&#;?m4Xxno8J}nD5w;*)PNMdyJzlO z6&PS9cqejdM2rmZ6?a|BO+ZBo4qU(lwZIbGSHCi&eh&sj%c`w`x0)bBUGQ!@gu|KG z7WURqLt6{4HDEM2oUwhP+_dv8f;2-SPen<$^Vxm=rVYrnWXXH-2og0fSiF^U|i+t;uunK>+KCgKPE>Jwgj&} z2hU8;%uG+ulY%?=|DayZpoJy*Z8V{Jp+S z<>lSPS2y|elNWrf)c(VBudL+x#Lv5#j9zT(hAUyo z)x9dP=t->KqqlF0z|oW&PVcjMthqa0YotoFeXRPsMYzgeuwd_N^Q36|?As?XM0V8?z$U&ZUxb4L9KR;O}T*fCy@?=al5c-Qym%#p&o9#nVk zwqfc&zvpwYj_4nkP)9afoy$Tr4@7HC7gzka)pE=b8 VjTeh&PnHLXc)I$ztaD0e0ss@9-B$nr literal 0 HcmV?d00001 diff --git a/src/res/mons/462_0.png b/src/res/mons/462_0.png new file mode 100644 index 0000000000000000000000000000000000000000..3fd9e546771fe39878df829c78ee03decc11f405 GIT binary patch literal 725 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>V4CCU;uunK>+LK-G z4^{8rZ2s_f*&15~IqgU35+9x4$(zkR5LqKRp;i8fp2UI!E%F`fMdhylt-H_p;?eFE zdi%C7jI24|_Je1NoT0*zzU+?mt9?3oZyY@%IpOGex1+xwe@{5%F?;1L{g1WwA7;(- z4!9~&?Juz)=TM7sszyuEM`xd@OM-SNstT*rz12wm_@iN|?+xpP0`Y-SFXxHwe7E~Y z>*5~0N0s&YGavo-;&r^ku=Zd7?caJ+IOF9mhx2mi2Kn3%WjZ30&R1d=_JOmao6a|JyMWj>>Z9 zZd=-@$NjEN=MV#DUDFTtnG=qlK7J+cyzQfXMhAF5RUS5fcGPE&de{C>yK2@fn=f2; zWbY2i2XpMJGUSgxnh`jU)#vDb&KT8Wfq;kk$9EwwLrbw z$Gx{dRnIUG{Am&Ol#Mwp?r+_qsGa=4=zUe2@HPJaMYnltK5tK5^RM%H!=8hD|2G_c vwg1e;w)(v%UhSWt*zy1TCMKkW^x#qrV_#eP8oTXo^&nwSS3j3^P6U<&edaSW-r^>&tR-XRBpR!gSi zCj>P#gO@FN!ZF2?N!8tB<|HFk)zni{ES?Y~!C4rYzGwwiOxLb>1j)A!^%l*vX5dD(jW2|0G$>p+WpuHEjtkq>sTCOYx6 zz4)MO*s%76+nTKvM-EE={(F&UB~Pw@j;nds|DAtt=}&(@-OhgIyu&>mX-lpJt)Fqp zU2==|$uAoJ&cA*mG5hAz_0kJPABJ95t6McGBJt^jr-ybw(Aw8pyDaJT|12M^&BeJr zGZ!j(UUUDbyT>c$O-Qs?YT3KuG`FQc%#?FJWSQhTM`^A+FR(wLX7{!;>jn3}y%1)! z=KsZO!=XDQ{J`TdG?#>Z_Y~wDDV6Bb9L#rl%{jc zo8rs<$Gkq-c|WCr`wjc95YY*L6TkcO#?*ce&1y*7zI|3jg7cpq&bl9;-1)SkeE)|( zeEj{xlr2YD_=R(eSG3$&xiy9P)Z4!j0S3Y`2j2cJUMy(3aBAZz-KhzOR&&b5wj6Jm zwXo(y)!Ba%rcK!f4cfOR%wBL&CC^i#?rfOK@@v&BH}5YLEnUlW#}AXu28nD&<=h?>`!z>% literal 0 HcmV?d00001 diff --git a/src/res/mons/464_0.png b/src/res/mons/464_0.png new file mode 100644 index 0000000000000000000000000000000000000000..9dca75e89b41605dedea96d5ef177529d4f3b1e0 GIT binary patch literal 1098 zcmV-Q1hxB#P)nsaAxCgXxZxgwkdPw~as)z-K*$lC3C6YUYPDycq{1ter0%LI zuPn)*?s@Zj-owE#48t%C!!QiPFbu;m48t%C!!QiPFbu;m48t%C!!QiPFbu;m48t&H z!pFxC9n5SjK>U}d=Zl?=pDemi0dYQA@Y@Y zlfMx8e@<_^AICQrdoA+aOC;n6@gP4Q-#@(To*xfaF<|%1F}oI_MLw?r9P9J<5Ma0c z#1Q#GN=Cj4VFB(?W+K#lK0RHHlW$lhM%-rsMk0ugFAGwYgl}KJcfWrAzFHjPIu-&J zI%eHWhTN-Sge2`KOQr}cp|FDQ@wu|0)*$c$Oj3ictC2aH{jgC*AFG= z-3bunXC$fsVH|?0d$L{up(q|(l~OfZ+N=Om$Vb?L2wEY9wFIb=G>fn+0j81<&xa5} zmX@Y`KhDAX$CRsC_<6}2`xF3VEAb#I$UQzBy7T#bF})vERjWjWwY;B`_$EdaW65W) z&*uL_s|U%wB3?vA8! zq(XcxOYwY*eC^Wl-m4-Xu^nLo-ky2BmX~433lJgll?z6yZQ!vYL>zY3sU&*5rS0>lReVevPnn=fDBrZYtnZHb`d z>j*o`8B@GJ^LT!}H8yM4p&F5&&SW3}%E_TJRGTsOezwf}v*gPY+A0aJwOdZTUOQ6W z^~$>5A4C0_C%9g|SrDO2(}UXK~zS%3inlGw{tNH1QGCEo%xI_B17 zRGX{HTGPzpx1|;!nzO1x(G8X%^7(jZ=S^1Be#wvVLW{7h+^huPjh(S#?OA{uvUmfY z<209|6{$=JL^mk z3$Q?E?K#kloi%<@k!-*ib9UC!4;XU^f`9Tb@$2rc4Z|=D!!QiPFkTIR0bf*ehwAN! Qr2qf`07*qoM6N<$f?~(|y8r+H literal 0 HcmV?d00001 diff --git a/src/res/mons/465_0.png b/src/res/mons/465_0.png new file mode 100644 index 0000000000000000000000000000000000000000..4113ab42bc18f37884fff567608c698c5110e8e2 GIT binary patch literal 948 zcmV;l155mgP)S~c5QSL+Lx&0-GGypbAwz{OL1nlEm*5f@x)gPC9&l#qr+2&H9ZfU9ecud5$J3Fr z-^2a@;BE&100000000000000000000000000000000000@Fc#xzD+t%viV4N%}sN{0H%y;2~_x ze2)ZAMVRm)15{X@{eGRLB{hM%uu^zUIn~HgkczH@dT>YDSt5RRKQkg;W5UAOuPLPx zGwXyhgZ%wNoACZ}m}1bOvn~&`dPzvK@kld;b%r< z1-Fgk@pu`!!`Z6`x+2!$_u{jLi-IQnQt?C75JS_?>2#XT=kw)fjAleU>-E3|_BDv7 zyOG<`#o~L)Q3IOz?Q_(GxXui#W`4|eEx`JE%bRqw1(l|sHrrkNFeFk^)-h#~;N4Hu zk~UVP$?*)RMAKrc=_kbZE~i?cRqd`CvSkCVCS=7iJ8DKm6X%nhq$6 zah5u&?dD$2uYT7{O`DH`-d2TnOZsfpUb<0Pz3{rQSp%xQpEWz2Zjh&*$}kb1G}Jpp zSu#}As_V&8*yamzw(W3_0o9(5c2!lEB>Pp{7C$SV)xLgqKU?v-0ov*&8;08=gmCez zE~Ywa%nn?1wd)7{-f?YyL8kqCb<)*qCvUZ_*{Pg;eQ~=6gm`K|c7|I;LT@KDKC@cP z(E&*m#7xv8su5Cs0n7LKb@&-U76m)_yNlZPeKJG5Z}&YNH$k@^LU0v7equoXJmG3c zR+Os+mYSr8Hahd;n)FjdLKxwOXufv?w6jqIyj9g}47g#$ZhpY?$qY?FaahwvTvuO9 zS#xp+3tCu>nm9x7l;+p%3>yO;7b&y!;N00000000000002MR`>(q WHGs0x)FT!E0000nv(|tEzg_ zNXYo|8a0u_gfJtI_`P3u=_cZj;i(g$GF0hA~_)M*2jaq1O;bnx^ z`?|mI|8Jfy+~nPEi0?UJFf5&f_tBiUp%H$l36~pgW7Uv8^91ik+H6PsDXYL|Y~J;j zcE`E2&7Ya*h(9qmbY^&1$zjIBP0biLVW=vCf)Ty_f~usKS8eXH@Jh@cx^jyf17_p{ zt%9!lIf-6s+-XHiyd7%+y5t&%aftMkvb zB<-sO@n;y2cf5@~Bbtvd$Br$nCxii0V}GvWQw;AJ6738RO}<(4`!Qff{Lgj0AL8e0 z)yz}4ks)pbD`3X#&u7P;4+=+)T|-Za+fUwP0^-kTL-<)hHlWhsY~2hug5J*zLa+!I z`M}=u!N@6BC$_hnw|?MqHSyzd6U|&Vp?A(ZEM{kvC+X&N)_@7M(DNede*g0*ZkV9= zc{Jml%${+L9rO@}#+z@)YNljFGqHsnLTmMSCB#N-rV$dqnc2Hn63-?KBySip;?m7q zX(wFhh{6)a<#Xb^8>TC|a3vL?%b%|H=Z#V;1D2?!aw+Q@GWG)t_m8}CawFosJ%0pC wCT=fb3l$Z-Vg=P+T2TQ2000000KgLb0mPVgHV7l+=;uunK>+LKC`tq4~O~)-R*3CEBbX{S>KJ(xI zjW_Sx#RN1F4`^`wv*%}3#m)EpGj>e)6aW45r~UWq73UP6n$Nx9iM{8&9Q&P~$w9+X;(4lkHrI1J34N|3V zQ@a`1zBLF<{uH18J^$0|z25qr*-joef7!PryeZqgxTJT=dWI|VUp|{M{@8cOS*>BF zfY+MS;S7`38B{UuxHD;P`3$?mRmv^*-h2;idR?w+9qz{!cir3OHr~5FZ-MIl zRP8lyWV2rU+sWSWr*-bSBhyaoDtoDC@7?8{KUKPR-%AFsP5rxf-+rvIFzWgB6|d)2 zoIJnj5|`7b&-pn;Y2V#A134zGuY2(L=hLr0etmiSaP5~TKHsNKx$il9n*K&ErEqgD z$HPzk?dARpMSR-(?YrA+zFTwtIBou>VZ0<;Lq&Ya>s`iLEmD)#FHC2*RJnbAs+qLI zw0<3T&3n@qOTGlt?C)7KwKOrFElFk3{cekmp+`Wq%RO{by zIG^t}X3*i|I%uA^_NwoCmBa!EhB}Ak3NicMi~m`7;9kSkfc*B?^Iz|FVlk+YpWweg z>iFeZfB!AjWs)#>{dr;a`wf2SE|n+T8RS!DEo-))5Fd3sy>ih{zKmURM<)5q|66yf z>!hP&P0C3x2Jv_DGWIbZb+3Or&G_l^Gh5nxPUh2=KlLe3TPFU`c*=rEhtHpxul-fu T)ZOO48zkuI>gTe~DWM4fbX{|_ literal 0 HcmV?d00001 diff --git a/src/res/mons/468_0.png b/src/res/mons/468_0.png new file mode 100644 index 0000000000000000000000000000000000000000..6c892a78a0af9fe4a1ff394a7c3eef3c12af85e9 GIT binary patch literal 491 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>VBF;C;uunK>+KEeyh9EmtO3&w z7zG6_Te8IGq>)B&6{qIrmMK%F07;!j)eDwY)8?7@L^N^N4%McO!d!F`!v! z;E(+7tIpEO_U7wxAtwd zR4Hp`;`9Bi`{#!YtIfLkw@ZuPxb2yKgCl8XXTkK-Pa|JE?YN)v;gG!HkC?}wFrYfih@iPYCYo?a4(^&0Lr(@xAToMvDW{mEMOj)nC(FO5U{L!2sC1|Q=1?IKwf zbKsTIE1^^0xg-|0*a*6A_{gzHN74M#u9iVEX6j;uunK>+LMXB56kf*IJf? z2OJI`aBy~XJnV4T;h=-Fyy67|cY`yAH7yPseQ$-vf4w|!=GSRkwJX2vUA1m%%4)B# z_5SBe-p9o<0u99n*7VQs_itu0J*V*R^84ox3oQ1y>^auKdh>m~%+c=$T3C5Mh&FJ_ zUul_r_qyUD??$spZ<=bmhJ{Pt@rWAW?&W2Jk$8HN7;I{o}$xKsFQMIMc{O{zWx%1Qkbe%yZh zPF1ChL*A`K{of6(h*K<6r_EyI(s#WZXq?#jc+vD}I&~d#ip{(1cBKi2EM9DLMswe* zJ<}ySX0ZQQA^%|i%BvSj zuSZVzsmRwn6{&x5@1369O{U6^YHRNObUtl`6B!AI;7CP9MBIg>jD0gaSLOj?KHDnG4NWqt6lly5eulU905h ziIHXsE_{uTy{?(7&0E@MK3^*&D@$@cpIMyum*4Tf7eBZcuy)tA?P<2EA8ldmpa*QWbuxW2Sle&XrT`>V6Rt_gp3{ZwS%tvZwEy$kt|MjV^&<@g;P>pWH(p-MTgVk@=dc{TzjVe!NI}-nq2=^uEmg(hXZT zb^Q2$q@Rc1(e|>ps(a-5$7<@Uek#^w7N7l|u3G0(qkg?^UPJZsOig)B<&e#PJ6@iR z$PDS>6b^Uj2os8XbUf5F?)c>&d3&B29uc0Y!2HKW=+NtuC(^5=FYKyz^_-Q^5Y}WA ze`xoQQx$7j^6y0LWl-}mSyZ;NT~_3|6j2VBshQc`k+9AS?@=`tlHWsX3ZV{nY^HoT1=dJHC-U615M`aa1b zh$Y4UkDq7EZU+DW0000000000000000094h{o(Eumn1d{|L)h1)0dmC3fL-q1#BF? z0yYj`0V~72=6Ak592Brtgm_H>5q9o;;{S+C0au8XyJGwJT0&e=fD$fT{R2kFsoo6= zxN!CNjE?wB&q%s|Je)5jTsVFru)G_V!tNPS)5~X`Uc!$n{(XD1S3++A?QW(9-t&-- zz>m)l=WF`&S>g9?C8v2mU-$L{JiRg-zx%}%EPnn=j%vXDqxz+6a0Vz z;%ltpy81Kx``b_N!d)0StSO-eejX>!kLTS?{H!gYhOdM{1?1|_K%YwZd57eD@iU_c3R<;-82`!)CsypAbnfkCe)^7TWz`b)rz-{)z%=j9!L2|f>G z^#NSp@wDfIylZyz-v^|*qJ(-HuH&eVoOn>T1uUJIS-Cx}1vKHl3BN6b0bA1uHBZMK zvt9V3!_U_cQGnUL!Irch(5&ta?}WG%uwnR4xEr60t$qLi000000R9KR0d%J=TbS4S QB>(^b07*qoM6N<$f^m%zApigX literal 0 HcmV?d00001 diff --git a/src/res/mons/471_0.png b/src/res/mons/471_0.png new file mode 100644 index 0000000000000000000000000000000000000000..62fc0f5ab948d5ef21be4bdc28520960a79d7d56 GIT binary patch literal 604 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U{dyUaSW-r_4cN1(IW?mmc+gX z7Zy4@IXTHUPEfW`DS2_>xPpqxmp~b-Ct{nTE(FhKOB7$caDmtRVAIy}>30`Y|64Nm zEYLKpprJZ)-7J#=_4A+8w%rVJ(S5z$cX41yQ@2CqkNErTo0#@6-4a^&@3+OTJMVTg zJ?nn@m9b5z%PZxZeENQ`jQYs11F!Z<|1$6LTGHTLSa7$;zBN8Z>Gt`B78arpK4>l| z_}0&PmbK^Bv1Kt0PM<};>|dSn&o(z&ZzA)K1E;Gl?|E0h>%$*QktNLE=O4dm_e)@Y z)sOD}*!RZzifrrOXB_!(e4gUuuO{)!E+jKnavJ`Ss9S5Ca_U^#{`zynb(xVU(oZ4EqYN0S-??C#;*l@8_1=0a}W4B>&m{|6SV5bm?{b4z5kkw^ui`Z@gu` zc*ET#LTq`yKf4_6GJTS~x7+mVHVv*7BL6BE)SvxOVi(|WmTBGXB#!@X{OLJ{{JWG2 hj*BuPqVvGvU#yaEEM1DWuq*|Mdb;|#taD0e0st}t4zmCN literal 0 HcmV?d00001 diff --git a/src/res/mons/472_0.png b/src/res/mons/472_0.png new file mode 100644 index 0000000000000000000000000000000000000000..9021e8be5483efdf70bdfe290d122b2932669b22 GIT binary patch literal 682 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U@G)&u6-(d%V*6mB4 zaA?-HOwrTS3@&PsX`D1^Qt}fEOD1;@_A^}*=N->h-zb~Ua$mhyNT~gh?fLtsG#P%Z<{rq_0{T&8=QwCwRq@}56 z7_|KGYr5}^!>nCw6`O7CwpiZTqsZ*lmJ#e; zd9rB|XP`lK{`IUWRj!^NWL_G!|F8E7F*tar_2PAfUn>faUiz&3t2(P_$B&OzPx#$> zI_~ZKmV5s!lc*iH&ZFwg&mECXUxd$C$pyVXXCD0L^NrvwHY+8+w6gwk&%4lm#n9pR z@e5OyxaHgy6J9oDP25Yt#L}j&<8t#j)%N7yn6bg(y+NS=^5DAl&%JjAXYdyY-{J6? z5!e?~AsgDx_oHM_DYMChFNa*;m3O_Is(ij};ZmP%Njx*EXDqLF7TLaK!OMKFN6Cjo zQ`P6Rr3Jp-ap>9qONYdGxtq%EtT%TzT&vV|R@*mwadeqTJS%@v@_`o373TA@UP|8F z(%!N!MY&xuxP-I&?9KiA4<*dlt$F;SNaFSQOOyQEWe$Z(#g+;`6Ua*~F+AMx`z7~= zGO-Kn@0PG9IIuE*N$8W?u<6H_hEq$`ZRWK8$iDvf(nJ%kwK)v@U&17;+vm+$%(;F~ zjp!+UwmVTZwQ?dKwIwES^{-W^d)jlL;a4OgjZC;?Zp*h&-i&q2bWo!4boFyt=akR{ E0Bw#Y0RR91 literal 0 HcmV?d00001 diff --git a/src/res/mons/473_0.png b/src/res/mons/473_0.png new file mode 100644 index 0000000000000000000000000000000000000000..ba444e0dc428c9d27255ce8c8982be9cd774bd95 GIT binary patch literal 972 zcmV;-12g=IP)gpD?19vDuCZjm2*%d<;y;3BTWWZ!Lb# zgw@})P5jg8bd5)tAko#H&i_V-_zyHe)wXK!y#d?jLw7hFt_B=`JU_$)Ye%a!LE@Y6 zyI+5L6H?XSqqQ-Y-ruc0`z;gAgdqc3wMMB%_Xo6jDwTN3) z6+{za*t8=9)T(j@Pz4Qzm-q^qP!hkD0T!!hLnRX=e5{0A|5poYWx(RwP!#{~%WEGo z^Hc38CH|D`&z-6*x(Z^(zaD?~VJ4)+kC77p-W%{D46uwI`~KKsWWtd63g337Oh2g`mvNji9C0 zlQSeI?xGCnH_j?eh)0haA+^etAYSm=)|0!Q5;;ETl{05i2BgHljIY_O^i@%MPAE6c z=;?>Vv!gZQ&&Pn037U9PE7+V6xeP6}m7D>pELGW%_&y0ftO+KzKbi6-SV(k#!>tv+ zWQ4u;zfYrVX&b@`Z&ckIW-$eM6a2P76g;(WBT;H@m_BpuZ^qx*8y>1;U_tfYBPsD7 zGK&X#mFZFZQmE(q0~Tek4%zL?Ydnnt))+95$;HF`gz1|_nBax?V)%m=y~m$?MG@k? zL@lV+0DVS3O>|YPTH@?>L4Dt^6h3m(W}E?olhly-sS42Fkm%n0xo<&tnW)BRc4-A& z+kOh;VC?mDaSW-r_4bBt&|wD&wg)ne z$}URU6Q@q~=)0gCQpBPnbTe6DB8cZy$V&~U(%N5sK2vj9=;yxF`b(uiqfkLX z?6$jiC%6gq9;$yYC$gYHJGLz72Umu`zvAtd?eq674?NWLP`>Q9O`wy=!j{%+e^xT- zxSQr~bG8)x_WX6#4f}h~&i~MlDAi^?Blqv}@eS41Pdx80Zu$Mym&>~TSloh!onMcu zs-FG!RHW|A#+EOy{U0v(e|Ub+nI|)~7TL=>p1$nQ75Af9-}t4tedv)u7QG*q(`SAZ z68`KicqZ0~%aYYD)UE2;{Jt55!rzqEJzEw%EzsvD*CE}Cl}24>&GnK}Ij5~)HGlQ- ztogj-7efN3a_^Y&u~;=kCt;7}@ne7f?%AWsy~c^La<9JGlRw|}x2H6Q2Ha~nZ8=@w zvbE^dBEh;nT|Www7Ugk1RXwx1!%ek<|H`K#vG?sd=DdgcC-;4jjyp1^q@{i?Ys7Eq nb$>q|3;x0DEno);z(36K8d6Ugx8`sQfCM~U{an^LB{Ts5)&j;$ literal 0 HcmV?d00001 diff --git a/src/res/mons/475_0.png b/src/res/mons/475_0.png new file mode 100644 index 0000000000000000000000000000000000000000..6d1548ad908297f75aeaca1404a311311a9244ff GIT binary patch literal 552 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>V0`cC;uunK>+LPwJQ+uUqlNN` zi3|D#GBS1;6f8(gNC2{T7`T5BtYJCqAfJ3w&Gb~a*W%XOwqaj>doR7VCgoGy_3+c> zQ_bhm4x3ns4U2y~|NL_m zqtA?#1O1n|nZKDl_*@jj`+|1{<7ADG^7E(H3t#y3sq}9jXKFxGl<*P%EAOX@hR(aB ztYMb$bC+73>&)Oo`}gh@uHV8~`fYanqw8n=i-%`Qu#21L2-Z*HEd3n(dFnh{pC7?ZMtRrDQ(ag~)g%k-Y}Y?sZvNQES!9+< z9nT5AfOOWWYV%+Hhe%`4ck*P1V2VDb(G4^Y6-p4#t^n zyEv;3^{$v${QFw5?j%V=oqFek(x&%aw%yCwce_@BZHak6euLyo*3NzWDJH7_6snZp zUHsh&a+}>>73N)xr_MjPeV_M*aKJJDNB(99x?ivxHaH3MdfZGrkn(Z+?EGn)Q&^X( z`Pg6QnZPQ{dqQr5>4N?x5`R=K`rfoV7ns$)=0m-sb*hW`fw%Whwxl%O-d~)*fCUyc bKUVxV4CCU;uunK>+MY4AZAB_R!b+9 zNy;wo1eGRElu>qfP@3og8Cl>epWTefM#(T6{DLQ}Yi!R z-KZ)%_cWe-11-u>6caFM=ATijy{uG;k* z7p;^i5O7>%v8kX?_rtW1`KcZ2Qj=9SwO;#b5%x9Or!k;TL`&52cd6|+W~1c2KYxhc zznS+?w=T8e*thozb%_r17{#>m?7yyBvB|D0e&z$o21e$k8fo?K+V)=G{$rQ_=7Sg0 z8J4CWV9-AzW;R_ez5dS27ymTbDj3~9&Xb+Uy3VWLI`+Qw(e*qVIIsNcWG@JPd6MnP zr^~Y#H;P|K57FBZU8a8ftk<6(?cSkvn;3G znCE;f6nnD5=f&%$+IvTMG9(g&S6x1TYQnWJllhuElglbE)y}w(?4;xAe9=f@+JYOL zmj(Gvk_rRQ3AXn0hUIPhqa`f!QKsYZi;3Mu@mqX4*g_f)38y)kDD7X*)A4BW6H&2e pSqs%p|4%fF2w?%GOBiT4`G?`ZvCB2%tp)c%VxF#kF6*2UngGPsIL-h7 literal 0 HcmV?d00001 diff --git a/src/res/mons/477_0.png b/src/res/mons/477_0.png new file mode 100644 index 0000000000000000000000000000000000000000..04eb3b1f68b08ecf5cbcf9aa3dabc73a80bf4be8 GIT binary patch literal 911 zcmV;A191F_P)g0{{R300000000000000000000000000000000000T!DxE@LY>jt{DE) zjNvUSD$dcnI=fQK#jBzQykE(^%&38+IA0^TVgho34T zS3)XH#`W_IOAFBor?&n&`C3K|za3s6`dMotN+!;e-$`JC=0Q-y??;VUc!nG&W} zKRp3e*k*HwfK%anT-SZJeg!*MK<_yTaFKRn$nj871*m$#X85N>DR}RqZ(f2!&sLvf zbq%kM?Y-sa)I6ck{eP%#QbGowVWb2FQ-gHCt>3xz```2DJR7P4Zl)(Vj0|LRcXzBR zAw$avbqws~`KJ%NvHbZAzqNVG!@F9m7f@F({@DS4+-{E&6q48T4$UpspHt8&&tm6{ z`z-;h?gb8}wUpGo0!RrC$^sm|L#l^zQ+orITX--0Rri8ynN@&We+p2w1ms-NTHEI& zTq|4ul!Vpw0#A$;0a9dX{A2s}kTzG_SQ< z0y2mUt{yS?`Ch9oYyR=R^&Z(0h84X<^YQOwE3GS{p}b1e!CDQqx2B&f!M!5iA=h5F z8VOTjXAO;axcRMz8fx7`%#o12pgyx^33J7~Lf>kT1cfp;?Cu2Hke>Sw)#~PfbBOXV z@g4y!;a+v+{^OQ_K2cf_AhX$Cp&Jc(~Xx$BUeLw5{?%AF-WT z!km`h2pq&ENOMJn5p=lDLCCcorI!Bw*}M@ z-{n0)xdRsdh!U0xXkXH}5gYXUr#LZBwS@(ws-&L^UhFl*-)B;=qgRg?z3+hYv{G9(2 zq<|GqMfnaO!;dS#jo1n$G-F!$3;+NC0002|3m=YCNBI>DC2arz002ovPDHLkV1mX< B0B`^R literal 0 HcmV?d00001 diff --git a/src/res/mons/483_0.png b/src/res/mons/483_0.png new file mode 100644 index 0000000000000000000000000000000000000000..81a468924bb2a9c8b2e7492aea6fc9a51fb5bbad GIT binary patch literal 1815 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 literal 0 HcmV?d00001 diff --git a/src/res/mons/485_0.png b/src/res/mons/485_0.png new file mode 100644 index 0000000000000000000000000000000000000000..352504b00585ee0407898d2b9d04745e3da7a2d5 GIT binary patch literal 1036 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 A`Tzg` literal 0 HcmV?d00001 diff --git a/src/res/mons/488_0.png b/src/res/mons/488_0.png new file mode 100644 index 0000000000000000000000000000000000000000..00b1debfe078dbcf67daf78f2ddab793b3c57561 GIT binary patch literal 749 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>VA|s8;uunK>+LLSKW0Y(R?DV- zCl4Ul;jW+p0#7*X*c27r6`pX+maIBDd0w=wb+chvkm^>Qo70-BjBV$CJ<19+3@-?= ziM4+da>Jte%k`J3-~WBtCgM29qsHTZ#a|t5JLQ(9m*0xSzl#6Nezcck!GmY7%C^_e zxXTMNh$xPIwUk0tCAQlDO2fANj7Rr`c;`<{Qt6t&`w(3V~ zO9r?4bVj~|ul`3duVSeBWXs_8|G^{aP0uRtWjpTt@BQM0(k$kLFXHWb@daBS&wRJ- z>_z>B%AfYe8ve3&Tv79TW@@HOf5(;b&3{g>&RoAC|Hs4ZnX>nd52|{uI(^n1)6KmU_wfp*6KI(?S?bI=Ec&tg literal 0 HcmV?d00001 diff --git a/src/res/mons/488_1.png b/src/res/mons/488_1.png new file mode 100644 index 0000000000000000000000000000000000000000..1145d506add0dd3cb1e5a0992b3e682f76912eff GIT binary patch literal 1127 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwr2>%=KRx7?`hnx;TbZ#J#;?Savx;gyn+HL2u8QlO`E0o$lc2={eI#)%%1|P*57@ z6rF=}Ps}iW_R(nm4Nke*`Nl_Wx4Fd&otZr4z|~DU8?xo{9$6^j}rzp zDH3)@Jo5AseyFABc~`ZsN^5J{H^mbLVz17ix+|%2&*Vsj)9;Qu$g;2poS)1nvyy+owENfN z?&rj()N)83=)A(<_B7w#R%fwd3Pb)C_J+513{(1Ys;l?@f8*@1>|F5mGY)Op&Vf6s z1Mj?e=g!9eeLuTlR4~w_ISi@2YzKDBKYc&XPQGoyJSG|Y*LV4i<}l7@nsS}JA$Ly| z1M`FOt$fGNSAA~=dhJrh_f2&=7Y&J=rED+P^E7w20_9^qXkJYkF z>;|7fMsRwsIl3sP=9B2rzh`#lef#9tX6!goL+}+t+3vgX{1 z1O4XP+Zi92Hp}lh@vXVy-?`j>4$l}Sq%yn@@P0D)?4^xo6F=PTe}Ch=I;+K=x_6Pl z(9+=fQ1wu|?f=sNZuWg;4a_&~HP65PZMgs(X58MZmM)AC!x|5vKvZ}y~x!rlkhPyQ<(+md_l zYQuM{`WHf*clpg_fBt-{MaQmVzHNG2djfwp^sHB$a;7oS_SEyr3B?>We^(T*eEqFd z@;{H}XHb)2TM-Doe`IW6_`yY z$=mX6M)n5@bIDyB7W_K(V0F{)Uxr8ihQ>SJiH~>Qb1nP$yxBZ=Bb=^Y|HHrT^&BUX eGFIx&U#x}ugbUd>+wK9D0}P(7elF{r5}E)A5)vr@ literal 0 HcmV?d00001 diff --git a/src/res/mons/489_0.png b/src/res/mons/489_0.png new file mode 100644 index 0000000000000000000000000000000000000000..e9fd8399e354ab45b1e40c160cebdecc5720592d GIT binary patch literal 603 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwr2>%=KS^rk?h6aSW-5dwYFvp|qg@Tfnpf6I6GwwDQGvc@?}cif96oLNZn%oLn>K z<~zQTY|=PwY;)jbwXwBwL;1<=KP+XZr3U`rnCG{uva~qptTxbEB=BI{<;RzWLfg-X z9JK#ep}ACW^45pxvi?z<$3~+!pFcm9sxUd!HGgsJ%iO1a2^%6F)(R)(JoOLioBef#rn{f+L;p+b|7`lT zS+H-x#$O*EGoACc@D^sP)UWZKq0%>lE#`|Z!ltAxeyQkIlYd_7s&nox%?T)oKbpM&}2$n8r znOW{AU1YL!zV=qT)r{p@3$Hu;R&#OvQEBotM)TqO<@|el9!EqySNb7TVx}ZhCe8jb?bQY@V0!F7Ms{j`+Mc g<$wit!k)tq%}=Zn4yk2-_Z%eX>FVdQ&MBb@09_9W=>Px# literal 0 HcmV?d00001 diff --git a/src/res/mons/490_0.png b/src/res/mons/490_0.png new file mode 100644 index 0000000000000000000000000000000000000000..5da1c94f11ebb89af39fb187688d46a6b205a03a GIT binary patch literal 606 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwr2>%=KS^rk?Y3aSW-5dwbom=yHGrOM?7C_XR$lo--#I9rrjXXu*`)_aM1|#mh^+ z@zUHGS2Jd|=cf56bvM1A{qy)H9n;DPzPky|y<7wDEtwggcY~r}2o;1bKvu;_-)JPz2>NA)m+fHt%GIu$^4s>iten{eEMY1hww=X(GJV~ zotn&DQVS_Z_Vo5BZKQSG;^+_unloJxpd3grw@YU;e1xFwu_J_T8)Z kmS$#ROt4_zu=egd_2=t!lvI6;>1s;*b z3=DjSK$uZf!>a)(C|TkfQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QBXK3b%h$O^#-v3*Byx-qp{_njF``)Q1wW~tJ zu57vf{BvQY&D|@%<6QLD?0d}gu0hOzuRhMHcK?;{c6C*Czd8Ti4NZvQ)J>49D`tGZ zpv^*WL7UHEecKxG0{7*YU-mzozF*eyGt;a5=l7#|k4?QIP`zMpLnY_upYNI8t?8Ro z$+)=igEjB|gcx6Y*3SpB4Hy6Gg{z5d?pPg7y4 z=>w?>dDFGG@($}ulm{G^J3Ie9)8ZlnEq3yVrxiaK=W!SwlX>3t9+U^4J@aSW-r^>&u6-(d#JKYYQ`>G^2EZ9>G;AWX9P8Zi?|neesMjVQMT7iTBP&)lF&zgMBm?@dDoPO8E6s# zaG>^cNk!bZn*4dsU6bE#er%yP1rt6HYJLw))f5 zWzSmzGF>NSE&AJcd|mFhR*k$+nfVsw)&)1;KmGlDYvlQ9pT)Bq_n)5m z_3x!cubGczv@<-qw(+a2y}|B8>sRUdB6DNcw>oi1^QXi`l~t@d`|VBbnLHa_?>o23 zj8->j%;(B@^ZTQjOYZc^tW#MZ)bpR_Wju0xnxJd?)Ru?G#6-5wiGFhYL58)p_Q7zM zZ{eFK6~r@kysr?76MonH(OS{zMMbjS?OAEuW}otJ^zFIwLtb!B)&CVzUb&~(+055< gY`u;Wxew<3U{ihh@AIaFsSzLvPgg&ebxsLQ01;0JrvLx| literal 0 HcmV?d00001 diff --git a/src/res/mons/491_1.png b/src/res/mons/491_1.png new file mode 100644 index 0000000000000000000000000000000000000000..a79a599b5786a8fdcdb0ee99e0492c06e0ad4cf8 GIT binary patch literal 617 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U^4J@aSW-r^>&u6-(d#JKYYQ`>G^2EZ9>G;AWX9P8Zi?|neesMjVQMT7iTBP&)lF&zgMBm?@dDoPO8E6s# zaG>^cNk!bZn*4dsU6bE#er%yP1rt6HYJLw))f5 zWzSmzGF>NSE&AJcd|mFhR*k$+nfVsw)&)1;KmGlDYvlQ9pT)Bq_n)5m z_3x!cubGczv@<-qw(+a2y}|B8>sRUdB6DNcw>oi1^QXi`l~t@d`|VBbnLHa_?>o23 zj8->j%;(B@^ZTQjOYZc^tW#MZ)bpR_Wju0xnxJd?)Ru?G#6-5wiGFhYL58)p_Q7zM zZ{eFK6~r@kysr?76MonH(OS{zMMbjS?OAEuW}otJ^zFIwLtb!B)&CVzUb&~(+055< gY`u;Wxew<3U{ihh@AIaFsSzLvPgg&ebxsLQ01;0JrvLx| literal 0 HcmV?d00001 diff --git a/src/res/mons/492_0.png b/src/res/mons/492_0.png new file mode 100644 index 0000000000000000000000000000000000000000..09bef24b6da9bff75a5a73c6c1c1c8282a789489 GIT binary patch literal 397 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U<~neaSW-r_4eAv!b1)MtO3&< zBwP46Ib)d=6&E_U^Kr&DIeRT&@hae)vcP9vfBMYLYtE?mH-Aqnd*`S0OM7ia1<)uA zuwe7!O#659wkLm!%s%fVRN&eKhYCCl b9_;_ga@+8JR%^<+pCCa`S3j3^P6v0}#W+Xh!|484L_eH#}V&Ln`9l-qbBnaujHLcyi^`i4(Oap72l+>g;iGbDQU) zG|@xFNT}0ADO^eU`oy1U%ctvdO}f*$DA2#B{QbH+$zy# z@+`XE=iv9SwwUP(th?v*J6G5~(N+w(t+gjCwBp|VfA7Se9DHIpSKe&5377VR?pqH| zS6t}1xkINp%-L?Q7HjLnn%VH`ZH(Qdh^7#? zX{&QL9I4sH_2u&~ndgVe4As}Iy{@by|nqQ<&Q^tjH~{BejaF- zE%Kc|(@flT;VUtZJNuwebF^TOXI|5?{?$KmWEuEZ@>oaa;b39RI~tL5tTBqyTn zlU;nlsaU2hM|1dQeM)|G&4{P|d~?$((TkZ${8I(lX1{Kf zy(=CitI6qg?9EEetu%V|{*4kuLX|#*)3~bnVl9-=wc|21o|Yy?(~- zU9yX|X=ANL-ZsqxyUKq)XZyAnsm?CI*~vd$@?2>|5P Bo|OOq literal 0 HcmV?d00001 diff --git a/src/res/mons/56_0.png b/src/res/mons/56_0.png new file mode 100644 index 0000000000000000000000000000000000000000..832c82e33b1b8aa64d9603fb151ac6a2dede7f52 GIT binary patch literal 995 zcmV<9104K`P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D03mcmSad^jWnpw_ zZ*Cw|X>DZyGB7bWIx#XjGBY4BFgh_ZIy5qvf0~#800T=&L_t(|UhUZ-aNjCOmxx$Y!&1$7b(l+1x21_oKJoW|wt7`l~N&73j8Y{V^|Eb-B0nng~3gK#xYF zOS7H%L)U86*Z+tQaNCxb(_wW>g8J-Q_wJJ;>eKJ~>|RWsIs>dcsCG~Cy&wHn$HQ5$ z>So4klDK)k@PSR!@$FjFel|-~)?)Yc5)_sUB|+y_!)0IB{h9MY&)0=-?OK}V;KsAe z-wTs)?(VO*{Y9jrSOctf>s-N4)7065DywdBe&n#LeDLdH)%Q3Tmay1GkpMFvw?6nP z9jE$QZoV497JTh^LVE6e{MZ+xs1l$xL1pM|TKGenE)kpMwbnl}>32_}z*n28KOcgq z_sA+G$75IXU*BD^c=I*hN{(8s59$lqs89O@T4{?_w11q+kL_}_$Yy!%XG6KU26j=L ze0x6ssZn9cv1ejWKvX3twA{2W3buAS+IBAAy9K(t_FK_D=KHGa>?!!+u4o9sm*`87 zjd}&WDVMI?t^GYE!UAq=2B_cG4JFc_L@N3bq9kZ{w3u}t#=0F+I$yiPGIQHwCHhXl zKGf+mMXU>Qvu5~Cjg0000000000008uy`wgY({ca+ literal 0 HcmV?d00001 diff --git a/src/res/mons/57_0.png b/src/res/mons/57_0.png new file mode 100644 index 0000000000000000000000000000000000000000..dfa5f6629c167c1eece1034e4e64335d4885f92f GIT binary patch literal 1265 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|489)OgJzX3_D&pSG)Gg6+muOp_dxVQciK){iX5*u-jxJHr4lWl~ zBcaZo6%KB0N)tP{Ql5CZ9PQ$I(#7S%B6P9%Qf=GcZN-*5ckZ-Z{?`4M-Saau6K|?M z`CFIH;l!cXB0vn$vHhd3^=^gJo1T|RTFUjW+jrl-ady4HNBL)mC-k>{{JQK;d;8aS zccl*=wV&Q)FVXvG>)*WVl8Lj9dr!Rjtyc2M?XrL84bQt*91u8saAUOo_16ZoMIU~9 zw%(-mVa}H6dVJ<=E6PfDTS+zszTf=f@8l$bSI~Y($LUX$7?+}ji?LUo` zO(&J#kw}QXX882R0R@S~*wzd3A`j~}c6^Uq5;EIWqwDq$xi*I{w_lnV=y8g(Ex4d$ z(lohDLZT(xAm{a=tV;344J9QvrYBxKlP0ll>eE%b!~gJJnlrC2d2eOhz214{{of1E z-dJ~R{+T`gA{(}eOzr#TzvHkkm(!9hw>7(hvu66c8~(q4?w$4fb*ECpjb~K)9%1+{ zWEmzeQPUQ#yyF(T!jz@*3TqW!L|@|iKCwyTPR+6BQBnE7xy%I_Ru+_4&li^OUoOXB zynbi@qMjS;w{E#tkjk(}d{yn`vPUO-3p%R#T5q_dJu@xQeAPPbn)bRw6HQXAlNKCh z3F0%Cz4bFHwR zk0}bQPcQpM=zfx5m1v6TSJb&GVCd5A$`&}u-|zhV#T-AFI9#?*3RDwcIEV0O(wo}1D$7gZS@cCQ<8u4 zIC9eUy$#;X4^}Rb=sB?GUU;Ixo8yL3X0k!aEQ^{p=HK(*J3rlG(S~!!Z~3p!eNq1Q z4OgGgx~ksv^!68b?PWG!c%7bjjl=ryzvLCKmm6ptOZ-wOQ?)nvc*>Xc>t~CEw(-kX zJv?40$9Da1gto>Lx!?)A^;>@A96C0+@cB^*#`VX4mw&bUqW*WCx7WrktTLCD&h2;q zc<}CYCI9!QB1P(V>OAhdv1?AThi%8X9O-Re?5q^mACi6-bm8jNtB;n?j=SU0+qT!> z?@q4c_g{Z-Uye?fBEQP5EAk`o@zl z%YtUPwY+7$k@2xu)lIo5BT(P5W_tpI^y7~|CL7mAf3|K|EBUqT9&erWgQ!0S&v&e0 zobzzDIdj~(hcQ)i&eXoNsy+7l;%Dz2cRKHD_g=Tuvpv#s zc(vdZIk~vc8S@_AP;9;R(3UHv-qQF;w9A%i!$T_TldsJ9Xd``aE8{(`N0&`ERvPOq z72C0vF`ip)zSG+sElz*(coL45hv+>1v!gQSzTkhZC5o$=Uq)eM^ncr1KB(91T43SP Tsc{roA~ATn`njxgN@xNAoytV_ literal 0 HcmV?d00001 diff --git a/src/res/mons/58_0.png b/src/res/mons/58_0.png new file mode 100644 index 0000000000000000000000000000000000000000..cc9ba56cf5fe242fcf3ed6e339ff6859dd69d1a4 GIT binary patch literal 1066 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 E04FARSO5S3 literal 0 HcmV?d00001 diff --git a/src/res/mons/65_0.png b/src/res/mons/65_0.png new file mode 100644 index 0000000000000000000000000000000000000000..3bbe095fd7fe79d5c8792656337d758ecfcda78b GIT binary patch literal 1067 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|484L`}lRaG=Ln`9l-c&4jXXV`R2(v`j>b9j{8(Lxmbx1C~}=9ygj|;W#~`Q zzLV9OM)4g6d!?E+9QH~7Og6KWIloc;Y1I5_^2SoV-+ZUOz5nT7fo{pVM4pul<_~9> zaDCXd^6;6R&yN>edbD!J+3e}Q#`gO4)8Exu7L~^GKe}%=gK5q4b8F`vd%MKeuvE^E zk7NG{_q@H5Za*ZBNICqt^Hlwz@+@Jyd4AcG_B?qvbCO<+Y?F zv0V$l9%;MKHmQn9@+3ss4fk8G5neyL+CC%pA3LY_I@Y&k*5M+qGrmTz zQ~Q?}zc-})n#hNB4WHJ2N#>ZO#c*)?)9Qjd2lp@+OrQO{^y#(k-0Jr0>vZz`qk`{D zlAE{svGBxAPv$jj`@Z{Tj#%2;*u7HQ%Re7i(B!%u=#(BH@l5B&?%1c?EL|Sio42Z( zdWtrs%hJ_!xN_!>$pU#R44b9JBds#U8;Mau+iT$Xm?A+#VsE=uf=V1 zxN(Ma=I%LSUknx--27Oj&7zyJw>IDV@=KGQa|4b186FB}g!a{L_)>6~TcTU9xqx#f z)6x7R3p8e%mnSQl-+Z)V*^z8-uSr>sH*;z?O%Ph~HpgKDk5eCa$+;)n3VuGm)4o4O zZ*q;kN4DU)&y!<${h5zNepR%&#eH;RQ{aRjQs;K(A1&uz)nWXZ(UGwMv^f_Bv_C#v7`Pp9vw_g9Mn_e@C_5T(g#`Xl=5BHQ@ zTtDr1u{-~+iY@V$<-%jn#VnrlwEk!1TX_EO4LiAi$GZjp{b&(wTr8^k^uy%a)4nP? zeEYjmN&oLWd!PPChdvaQz1tPCWGnApg?}mscfPGj66v}S{`TH{LzZTZhPN*{=l!j_ ze|%@eAIn|q12iRFxSPHf{yxQdPkfht#ukNnOc&}j9KK8a;4!&vH6#2N??)co(=k?azeH0VC zv5v>TVe7;nd%EXeUiGN#=+B+6pLPqDTsHY_bH4Tkk2U}F6Xly99RBi1SQ#bX+&{h3 Ze%*=a@Y_O1?gH~NgQu&X%Q~loCIH7^?N0yz literal 0 HcmV?d00001 diff --git a/src/res/mons/66_0.png b/src/res/mons/66_0.png new file mode 100644 index 0000000000000000000000000000000000000000..2df7e4d2b796f671b2781c0e45ebd38e5a8975cd GIT binary patch literal 740 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 literal 0 HcmV?d00001 diff --git a/src/res/mons/6_1.png b/src/res/mons/6_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e33b60a3391a043e3284e7827b16c887a051c877 GIT binary patch literal 1716 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 Q^7;etj_wXzyMUB`0SLczK>z>% literal 0 HcmV?d00001 diff --git a/src/res/mons/76_0.png b/src/res/mons/76_0.png new file mode 100644 index 0000000000000000000000000000000000000000..cc97829528ec551653d395e23c11dd7495655c98 GIT binary patch literal 1329 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 literal 0 HcmV?d00001 diff --git a/src/res/mons/7_0.png b/src/res/mons/7_0.png new file mode 100644 index 0000000000000000000000000000000000000000..83cb09d6bb738dfe7633a5afc11b8a7988f139b3 GIT binary patch literal 899 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|484L_euRUEHLn`9l-c+1$D?s4b$GzK_3YiL(7AYAmQW6Smba7Lf zc;dul4;NM=p+G@NpuijlrHLI}DNj1jZTT7ZDP!4O%iG_r{@?deb5EOb^6kFuyE#FQ z#{n9)+wwerpnK}8|J?JXkL~W~ZO?f3SNGt5VXhjZ)4JzBJ@lI1a{6Z8^3C3EZ#p@C zJrn(NG%Gdp5?^@T?t9Dh1lx;*ONH+7K7a7zL3fkwGyClDC#MfhQYn0@>2^@fVap*~ z)>!xAJ$&I+TKaPBFKDhrJ_w*S?Xa9Gr zu*_}9{aya{x~Zz#>BoAuaT_=Tifiq@82_KK?)>!4|K2B>=MPkcLGogZ+X!&V92bddC6n2dmSvrWczp`nLAqSGHRH zHcibFEO(miSqf$?UH5U_>#3=$m#VrxUH4w?Z&rBnx@)mbR$7t2=KX3Yb9~X{(~$Ko zaesNL+oYVNJ+EI*I!ypj8+tg_Vl z!KU?h6(c9!4d1OcuW-J=+J6#pmsn>r_)qrPyfXHH>r;=_`=j37T{S=F^zYw__PRgA zuNqd^&uRYhdo!%{MVN4+*`Bq&C~2!`M_ii z+qe(rE7^@qBmdhxaQDCHJgeINN^JP~53B8#-DhvocU(^b literal 0 HcmV?d00001 diff --git a/src/res/mons/81_0.png b/src/res/mons/81_0.png new file mode 100644 index 0000000000000000000000000000000000000000..e286385c5ea4f1d6d341f4b0856654e123045b89 GIT binary patch literal 654 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|489>v&dAc};RK&f#p}TpugGl?w%d1XkPdwp~q9WAU0|aYa+>|DU z1M!IyCp=W-8Qs6{Pb@CBzPxkM<#U%R>x|RCsdl8C-zUfnv==w{Kk@TVo9Dalt|@vM zwKm^da;}Q!vy?Tpf75wGuV=E&4A0>swzFf65}X|HH`$wtHu5tmpcz zy7fS4!M9nia~n2R@{~xVTd1zt8aHLvSVIV`04BEyzI=0w%g|=?5hpPyW};r7>O>~V^- z{^}*#-Aep?XIGMVDbt$}u{`k>>`sNUQC=nPRFtT5A|T-M2nXL`;)&3^ZdDcG{HuP2_)y~>gTe~ HDWM4fDo7ej literal 0 HcmV?d00001 diff --git a/src/res/mons/82_0.png b/src/res/mons/82_0.png new file mode 100644 index 0000000000000000000000000000000000000000..2f4cfc428dd4064f933a38cb5de29b438ecf8868 GIT binary patch literal 998 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|484L`}ex5FlAr*0NZ|YB2Y#_q+p?rB*SeTNw_CyaAp~%QimoPUV z2gKV{q`FBc^7`ZIhZ}RA|2y~g?lR;1`D(%(GMCSKe_~R1AqIR|zh=?by*l02uU2;2 zO`1IY_a>jSTyx*uakRew>ZMSvNJ-WHzAaZu|LSo>PRm}tSl0C1a&P~qr$g8?Z$8wE zI=Rxy>*<_%$31moZ@)BraA&91i~Y~5=RIRjo)XOvG~Hw0*(WtCm#>Zs-gc?%ZZNCj z2l>~}BsX+v-CU}IA{hwcluxo3ZMH&1`jDHqo zf2hY`_Ai~ERclpC7<+oQ2hKZEC$e8x`QNOq%xMjgOZDGd)mh8we|EX`Q}U4H2X3=d z-J7mVIknRu{hX+#I5JJ??$~=?U~y2ebd z-LXp@HNICD9$!3V`P{O)%O-XSl{)L2_lsLAo>?@xzJ;x94)?)xP5%EA`>ShT$5h;T zn$SKu=WoxA=XR3G%NE>?;LF&({mub~KP*fQcTYWyIJxe|>6Po2SeF+!^@i1H+%^;W z$-rokakyutmb&jt9srO&EA}PI?HD9zB$jI_k6!Fe}jSoL)fvjw;tSF=L+YS?s>}eN1pN4 z#c$2eFWiq{JCMfkDs{QCM8@`;37a*xFxWhe+VSRy-skM<7?-Ho>t30L_so5Nf06k7 v70&tBvmt}0tDnm{r-UW|X)DJB literal 0 HcmV?d00001 diff --git a/src/res/mons/84_0.png b/src/res/mons/84_0.png new file mode 100644 index 0000000000000000000000000000000000000000..adf0479a316918e30faba2b45569fbbea64b26d1 GIT binary patch literal 1038 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|484L`}Wu7jMAr*0NZz$&6b`W8EaJ^T8MM4A&rFbNGSlD<(cv!@w zctpgibPNm(E))QXgaZi*7ZMZ}C@eUzAZXhEN8xvs)L$(tty=fbf73b3<)L5h-Q8`? zEl3dj^?sbV=kx9Dj~3;gbvm$FW#UDHiAmpl3-(8?UmA1mS^aPCJ^9g-|2%N6kv!4< zC2E%Y#DWhYe^zXdzuPQVeSKS6<_E>TsZ zCC%$TY1zstmv=^UzuJ{IUrvbO>844K%!=m+PTMk9e^uO@DQEsVu*j`ti&y02(8>5< z$h<*fu{^hl(2}+11YUa@e0}^Ukl%CKX${`Hws-n2J%7N=)MM9EcEDCfopFuYp)*nq z5ANT;yZb?S=+mbCck}dL`6}-)xb$~oKlg4Gmiup~eLHU|XeDf5d?A14%)o`54j+#H zJj1%b_Q{Jf<32veujkph8r_9T)EefSbZatzizZc=;uE9uhW13d-JTj`rprF zoxqBhOnu)He?R#pKYK0DxBB0oA6~q3J9zTqM>1DFX>huh`*c5ba(f#cbmh-u$%M); z&g;Dd6nDmixwf=ous-F9*A?T8cZ~96`UC&)| z87D2j*8XyiI)A%=|3RIP*V*^FAJVz@*PQjB`vSvPrD88mJbzK2DpkWG<#=82{DJ@K r|1{jI^LiJAKT~h+Kmp%e>KHfdkzd8$;lCZ2T^T%G{an^LB{Ts5BHz{z literal 0 HcmV?d00001 diff --git a/src/res/mons/85_0.png b/src/res/mons/85_0.png new file mode 100644 index 0000000000000000000000000000000000000000..7a371324f26b71b2bee66cddff6ca0a18bbb23d8 GIT binary patch literal 1185 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|489)O$JzX3_D&pSG)Sqz6LF8C`w2O=D5l$D@MNE>ClAS9YLKKuI zdZ?6kbWNT(u|xR82@e-mp}8$cj`F5*3V?U__N7~bqc|JbAaJhVTs!n&L!rnUnU$*`R z{oh}fESN9Jf7tl&&c4r@9JSL@wakv>H&wn?th@1jYks$)UC3VJ1GCF_$9^sGF`ql1 z|C8-+<@m+xa?GPO>%=epo^&Gb?}BW*T9KWft%Yj-RlM5k=f11Fe6#%Q`1>Uj7h8xj zo(*ZX>3?1ldP;>a^v}yh6BOc3SjoP$YWVKqd7#Rr#kJYbqRW`g;3IqUKh3KV^Vkz5 zPMmvvy5`CJ&iyy1U45}b&TZ4i+H0wEx*B#R2ngw(*z-x_SB_m^ zbIac2UxLjUjxm_Bm@a-lJ>89Aoy4PM@q7<2&YmuPIdajX+1DQ*U|sx#ed7c_w!G#GuJ@4S!boG?OcF6|{t_G~U-t=FONnzhov4lgnYx&BYUrcP; zcD3+8mqA0|fwZY7GUjC18mw>saKlyce{>^TM?=caT`Mn~V_<$`#%;UO?0xk-rq{D_ zXZn3ljeHk=GGKn8=*H9PzjAnwmHd?{5MJMqpuh8A%Zd)E3Y&~~-`_51)983U^YXm< z$;Ah}*Y{8K3(($TAn#%}Yx$EZ*#gn!`j6)wF8XEh>1)fKZnr4&SI;}lE<`aiaP&>y z^mfS`okUiN_p!^bvN5Pxo#Xlb((AIok>lG$ckAB%G%1|zP?CC!tmv<07q;DYI=Ft> zoF!KU6IQZMFM0Xsk3;IjhgN?17kS=1*MC}Ut!rK$`k`*m;i+zy4W7t1{;(*B^xD|= zeEFsBrE1qN^B3H*KJ)qQIgZwC|LhrK;>&m64Q7duUGROs(uX7$hrR3L<~Drz+H^=5E**<#dn9 kxT&{v5=PGK=r|Fd#9I4|L))nwSb{Kky85}Sb4q9e02l@qUH||9 literal 0 HcmV?d00001 diff --git a/src/res/mons/89_0.png b/src/res/mons/89_0.png new file mode 100644 index 0000000000000000000000000000000000000000..d0c0b068cbd9a11528cb3070f3ff5d5b8bd6a7e1 GIT binary patch literal 1302 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 CE2A9% literal 0 HcmV?d00001 diff --git a/src/res/mons/93_0.png b/src/res/mons/93_0.png new file mode 100644 index 0000000000000000000000000000000000000000..3d5fa5a1975a94e20208734d09d3577d6715eb36 GIT binary patch literal 1123 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 literal 0 HcmV?d00001 diff --git a/src/res/mons/97_0.png b/src/res/mons/97_0.png new file mode 100644 index 0000000000000000000000000000000000000000..5e609916772a4733a4b7cedddec7fb76286af968 GIT binary patch literal 1131 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQoD?=kI zBVz>v0}#W+Xh!|484L`}mpxq^Ln`9l&QhFk%R!{=`>n3YqM{xyM^AdF2z9zBDf=r; z6cs%I;@EWdxP&N7oT{GJ_AL6_#R<>eEimSl{#9>0)7PwE`tSeS-|sy;N7#u&u|m+x`=!teJ=@z?7EA`;8I&E?AY#aVNWR9>;W{&}eIQS(IYx)~onZ;)EH`Ob3n z#kb>k-Oal$#k^=esC8Pj zaoWubs(Y1=i|?Gn6qP62|K0l~`^Cuz&y?=_OmG5(M*=rm^aN|8hprVD+JOZ;O}6zFQmS|F3GZ zrO3NNt50ovL*tVkW|=mK9AtEPz45ue!xbZu@CY4ad#3v@)gDhiq5hrOzI^uizvquE znGx?B^Yq{*o!iSZtNz@*wl$=;;pnQz%D-%%-8^)6_f^HIqS`0E3Cua3;~?^zp-YuL z^YHT76QV5AZhkqZBt7xgqRe2Mmxue}gXh-s zxaEg=n3^RqxZRL(J9bOZb*Jz;;nQKAu2zqnO%LsKtGUFlz3NurQMbixA`|zY|9oHe z+|mtPuWorO%~|1|!>4rLN>w^}>BiK~ADeHU$)9Af(8E>y@4HW@cdl9?!H~u`k$=m& z83#+(Xs+1UuJrw~+@;OwH{U2R3*0x$JQh8%_l4V;M~9Ca{0r{*cQWPC{fB$@*j!#d zU$^7FvCX&G=iW0kfT?0$P5kcP{^#>PCqI|lS9U1&`FYD7@|%BLh~Q0_K1;>5anA-e zg#^n*g7c>&Pds}fasEathSIM}W>SU?CC;~g&c4IX(epvKTNlGI)?rQXn!h|^wG zbL`#>Cbo#V9KnG?f4LZ3wkZ4TJ#Cq(#TJ!#Ky}LQ1!e`sY#;oiuC3bE7)=4q#cp;OXk;vd$@?2>?si`W*lO literal 0 HcmV?d00001 diff --git a/src/res/mons/9_0.png b/src/res/mons/9_0.png new file mode 100644 index 0000000000000000000000000000000000000000..cc2642589477724261abd06adc9b4e102a3949d1 GIT binary patch literal 1837 zcmb7FX*}DB7X8N(8G9Ya zDF~Qf7pme<^9@A8Iokt_zmBi*8zG|IIXeJ&P$c#}P?+EU5`(!!0szV9KLuh&w_f27 zk#UYbaSpM;fpKBcQ3$WF$Y8+4$k@Wt*u>K06vD{pXD~IXqE=S{0Qi;*+Rp1be!WIN zM#&k*4Db^Kfk1*cQw2c+!UABvKz#f+frP=rY2F$h2x&e%_#p5h9W(GD^``B>O#qZG zC;-0g!tLl@p_^R`F}Z!k@HV%G%|0mAJDOWzL>P-dH~K&L@vOWgi<|#xl2?I9ste|f zv~N3wcDzsV>Y!p$7|W}OxQf@o4`*CkSS4ul_Rdw_rkc`xOL(EAYJ7m6dVNvP>X^&1 zFtTsyJ(9xclf!A|yLHOrJsVV|uL8kz$q6CWq3{IG({ae>;kW0vzh6N5f4+L!@dz|7TE@p~nIh>gzXX9fAJmfEr$tdhd zzVKtt=j=mg9PBwqQRYu{w8nC(P)xc}} z@G76Fs_ITOQ8|tmQ51%#ycJMI)<`5Z;`IzRoNMK7jEkr8U^9^xvinr^?Hh%gvH1=g zA|Z8CY04A~#Qka8GZM;A&cqeo?sM<^ewu>Xq`JPNn4_6(i)XWh=9V#pKJ-hT>1Z1- z$XiU*J0H%<>Caxd>Sbqg{D3GOz`mH*YYAIx)rLT2#T$nR%0_y`QtTbLRnZF%okJ$( zPF3w)@?4tS1Xpm=%u<83mfmH6J_XEX$Cu&kIZO!3Otu;RHqTE1ynP8zTM!@vzrn;? z#zA+L3pbMrvbrC&@)vy|U5bH7%nPgNpY*Rx(Na0(5c?W3DI`Xfq@#Z=P< z_j`S_$i`;W^-*I##!`?S(PCY`ua`o8xK=Oae8Kw0Ci=}5{dnVw-?fN6^g~vT)LJLR zYJ5CX=gnF6WwAWFdi!EIR$I(%tWF<}E*Fam9ii>-ib%$d%) zV@B$_K6@)+{90Y2X1n2{M!YuBdpL}yP8+HHzGBVWIj5~@pkGVgSlmna^ldMqn?jp* zb7k+9mvv5-_4k!-ZRfx`I#SBt|2k2UXWC)=lwmTlyc`*c^C-urejmLYYF(#%u?72z zTw={LK%nET8fWVFO`m`34V-cof00lOL+NO>&+l#r+U@@NxeHFQO_G}kq%*W!MHk>s zaRZRWP=A@?T>I`f2AW|Q?hWbs$!1zeVS>~crTm4DWo%}1+LH=sQ-Q5p)0@<_D+^-U zP(VKOFaYl9x?z3h@49!98hxjW%KXVoNElxB5YbIjSf79=Eh&!Ve=jX>7JNlZIk%vtzhDsJ7cjwLbLK) za|FI0D%zD>^tHzOXgFzpqs#t%l=;#O+h;fWSJ=AJ)`Y^=_tCkfb&blm_x%k~e{lBq zO{&$L3V=)u;X*z!Tpyuc!pspu2!L6yrX*i;2S{HyG3)OhCK&d*C$_EYlAT%ZZk%ji zdEnW4U_R(Kk#NY55l8?5PCM}Tn0RTd6B8;l!$2&ZkG`BI^*ApzNGfYgx_1|AaIqO) zZqFFP{V9v5O<5*Vk7ADNfdfc3}^QhJIM7LzV!j-wnfoG#n979 zLXtKpw*X5A-U)J}xytH08uaY_WY^QlPFEqV%&W;j(;rc5BH=60dNHtV=sDwDMYP(0 z_*Yrmq`8k4`&_CSDDb2fGmLJ4z7Gn>4e+^eU=JCs2(RSCj*67U z3!jtj$qac5mF#g8GrWIaZ9QS!XRgs1D4+E|yp}P1w3B>H$f+AK&i`hBiz61zuqUMb E1LNjGS^xk5 literal 0 HcmV?d00001 diff --git a/src/res/npcs/1.png b/src/res/npcs/1.png new file mode 100644 index 0000000000000000000000000000000000000000..23835eef086734c1c35495f2554fca651344ebf9 GIT binary patch literal 1400 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 literal 0 HcmV?d00001 diff --git a/src/res/npcs/11.png b/src/res/npcs/11.png new file mode 100644 index 0000000000000000000000000000000000000000..289486678f7aa24a2874fa0f3913e8128961e0d2 GIT binary patch literal 1285 zcmV+g1^W7lP)N2bZe?^J zG%heMF*ZbLuk`=`1cFIKK~!i%rI)*T6fqQq9l8WULPD27=#bDQPy!*L%Ww%U!6i@v zA)z~1{LklqI6Brmu!FObuFm61GrQoc%jGh~m+#*%jpl4&rUlL0!$Kl8S#7uvbmwgSFf|!GVG-1xoir#C@V7hYw`kKoqsLwPF^+1pAF+rW4m}j3$ zU9sOwH(-87-|GPY8<-fzT(G9@JavLS5Ag8#v>wz38R6KxI=Fh*LR>h1RP#D z!qKSncSW?$Iyw&m&~EL`^nfhS0MO7AwbX!h;^FfW_|6N~xj(xEHH77bZSfQOdI)ui z+}rch3(y0-(39s#?mB^Bhz1H74YdL4Y6bg*$WIMVrTGc-;hE1UT(i%7mM?tU)B$>; zH)_dUC%4~zthZznc>#v|gyE|d?)TdQXsG##%=g033lFuIFW{ML55ArFBzK)GKXfmq zpTGS3t}0@*#y&jwY7^=RqEVZ`XRqm5{tQR??2+Zc>49E6L-SV=L`?bBL`+bFy1%Nk zrvQg=M#7lG^YF6`THTS78*Qoh`Mt!R8GpcDVt!d1(&Dlccw8z(un^F{M6m&?^(i3>NuzX3~l00000NkvXXu0mjf^;df_ literal 0 HcmV?d00001 diff --git a/src/res/npcs/12.png b/src/res/npcs/12.png new file mode 100644 index 0000000000000000000000000000000000000000..595ec0b8fd1ff0c9d84bf3e2b459e9e2db07fe79 GIT binary patch literal 1347 zcmV-J1-$x+P)N2bZe?^J zG%heMF*ZbLuk`=`1i(o|K~!i%m6j`l97hmD7a9s03K|;v2s*+Z!B9sKG&D5y5d;kd z4Rr(`!Eo7lUTa_bb*g%17KHLs5s_Inv%7k_TrLMZzk9m;{ruzQx1ZlFBj;07l&8-8 z=?ThOC+2+d=zM0#TkY~4-vm-cVpYpkTYWXe=ESo{kSp&DH{<_4?n-;a88RoX)d0PVH{66?udyY=2&0o;hg3v#A#=-C1vH>pl5u zIP0#PP6G!K&8?f4SFM+KKy~&29Cd~Ka&Oh0FM9dv>g|r|4`K-wQfmOpo7xpmAJ3+? z9_8p$)NguF-BePOd@#n0p=d=*GD)AG$%sj#fTm3QsioZpFV@& z!f8JF6V8?E9O0wLnfgLK-0H~Zw_q1Za*_D}oY$CKEuijWdHHI~pU}5+CVH7$e(Igy zUD&bO?H|cR4iWH61TvAnXXR?L8C}od*2kPkU4BunS}$ABC$8of^>enlzZ`e20$+*T z8Zr?mBF-f??)4XrKWp>>TzLAzU4b)noo}zO@BHZ_;B>D0;K7dUO1^Ow^f#uL0rc#{ zb+`*vUk}gW`WSFmP*0qBf#+)e1bunx&2a;;eViQyn|>+dXxAvK0|Ih+ItZMD^zSOzs(~Q`_3!)J;@J z-a8$5Ew;w1kZA4$tPCd9)MIjP!T);C9qKtXXPEkx_E2n%Yl|g-e={|4xv3HI9jJ!> zZR!sq z1&v**X4R?v=kxFT`Sh6liSmoi2kt;VJ&M&1TbBp=bO*4~?a5YL%c6Y@G4O&tFV8_>US{%F zfG1kxp`T}GnEYFN@5wzNEathGJTZB1#aq3~FOIy+(|;*zXOPvF=7InK002ovPDHLk FV1ntUn4SOt literal 0 HcmV?d00001 diff --git a/src/res/npcs/13.png b/src/res/npcs/13.png new file mode 100644 index 0000000000000000000000000000000000000000..7d84ec3f6d5ab6e780eaade90c81e2543b0e3cb6 GIT binary patch literal 1415 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 literal 0 HcmV?d00001 diff --git a/src/res/npcs/15.png b/src/res/npcs/15.png new file mode 100644 index 0000000000000000000000000000000000000000..a8618fbe3a5dcd7e7208f9db91211ed6413b466a GIT binary patch literal 1370 zcmV-g1*Q6lP)N2bZe?^J zG%heMF*ZbLuk`=`1lLJKK~!i%rIs;v6hRC`eH@2`4hac4fbE>D5&-g# zuXpFymoLM)Wg=3SxJH|p`P|}h%N&CcK&ZmR)(}ni`Z927*aul^TiQhR85X(1BlSc7 z4UY?h9JmTOsaH*FI@2W9+TH@xTL17F7FhD!w>;i5$Av*{*s&d4~fx zwTZ(8)_m5PqZnBay2Jnt_71sA2fLhn&@a4Yc;R9SVhdT@gBy$;%ra(^W z)cOh9!`=hn0jCe_Pc4?GKI;$atTQlU>IVY{-~%0(ob}WJjFU$U%+H!vQ1cP{ zBLt2-QlGs6HDJDL34ZOSnJ|^w8;^PCjlc!!a2^y<;%kuW;BTG-g z{hI!X`UtaGhD$c*L~wfey9BwTA=IbtmZ9O<17w`{Yy7UAWf0LoA)@Eg>HPZrM~fA2 z4RE1bV!8b8RsIZm_;#5L(ajt!&eJh4NdTkT_*VzIdFXd<9viYKXvvW zW?5#$Uv3w);v(wJ*N-w{8&gZJCd~+4@VUzagogo)flS6xwcSg?of4a~M9)84n*lTzIk~W6uLcqq> zGyo2eIe0cwL!LX_8L0W4!G*JD#&Ce&GpZM$PEWP^5<4fk##Q9-k~HztfEmDO_RY{o z%cgodICuFK)PZ_+83R06+y|>Z)YHei9^C!ugD$KhNaTpkYeF8VRgcC8V?Z7%2O>^Q z1-$x+GtL}5Q1!rhsT2G47p?Q9b`Vo=(0l-w0)D(xC&i4 zAE;_8Qm+SR)ej<@Fa&TR4Xklb9Uzw)xHjWH(?7JabUAoK=&MCpUpl_UGL5ByYXW;@Pdd|wPP!B)*<3&FKXU~sX)jN09 z^`Ko=fyg|D7`R~8lV>B~A`Cs_&j3$kPA`zP8K~1!{@&a@I0C{%t&7SNm3J#{^-6wX cN2bZe?^J zG%heMF*ZbLuk`=`1ae74K~!i%rI#U=97hmD_Xs|Mp`oFmprN4QLO~y8p`eZ+D5xU{ z>L|m;{oDKNMaNck&pv~%s>+Ip%6w4#Ys|UIV860X_gA z(g+!jE`54abGC1fE;nUYq?Sb7F zI`%ZDS-yz&HD~~R<6V0az1e$zhIppTIGDwN-S~pTE(I|UuSrsmpL@P= z{JTcoEOZWmc1Gr9AF?FtsqZX6lYP+vIn0<}%)>xIgWsNhfk4*LIh20xyywn)2UR;m zPxo(D{Tu4OB=$K^&be#(gUf8{xiQ2b&iFF})a1j1+D5PW=FBjQefCe(QI`Et?L2aYfUsf_FvFEIRLfwZ~*BL{bCg|pA1_MBEX6WJ9PWLly zqmF#BwyJkVqJ|lm#eMt6WmX_QPQ>Y$bkG%!cl%&q9QMGE=XIdTUo?2CH~}Gz(om$I5>& z?S)qnW*^wS!?g$W_(k@Jr_p!T-&%VcG@Zk2<_w*i{ZP%opbkr)UjM(X$DEmdMta07 z@xHyyYzFpzAr74zut^*9Ea?MvuAs-YJqf<<0huT0sCR~_$ra2>?;BHoOwu&F*DGk% z=+QURC)p=Ct9OQQpU(i!-M)j#kFaJ;7(9E2j`NAOZNOZsEnaF;(Q zR+#w?CPk1#_Z@rhlGc&oATxb~Mh`GNHP)!funX1-bN fiuTA+cYpd9cmi1=muz-o00000NkvXXu0mjfZsK|U literal 0 HcmV?d00001 diff --git a/src/res/npcs/17.png b/src/res/npcs/17.png new file mode 100644 index 0000000000000000000000000000000000000000..a4de637714a0cfdf2adc759fe3524c7529363b75 GIT binary patch literal 1260 zcmVN2bZe?^J zG%heMF*ZbLuk`=`1Zhb`K~!i%<(4hB8%Gp`y#y~IFwoF2FwijYLBlK~@WH@9L&Lx< z;Xy+$Lrj@(a=vj*O}8{Ug7G=!xj$8PZ?`0S-d(TP|22k1@af}+Yoj?cJfjuQdYsiC z3X;FP{CdDGBk+t?JnQkO{vd|<_WJoC&U%}uo$0_Wt$1cWxTgp7Qol1;{_IE^rkE$Z z)SVs7Glw_y>A52Ntp)ZU*<%xPs2q?Yk^Q^`V(UG8R7X zb_O&hN0s8Ei+Jk}S<_Ip|-gY%PYSkw%2a~HCY1JnOq(}GKqxIyeCkO7h=?vCn zNjdOeU;kNuXC5AqQ|}uT^pn@ibl!T{+%?f991pFh4_fBXFBI!G}fr%t~$iPSNSTr_tCct8F9<2TDZW9zMH$Om}| zBkev}Qid>;-we4oPfq>T5)8Y%{TS|L-n%q`2LF4Q%}?ZP_hGl2-+=eOf7*r+BSyrt zd#M8+{_E?1d@jsOJF_rwMm|N?Tiak}@4;?;2|IzqATvk-Pjc#V`cUK^-X)EjI|3Ya z#Lh`rKjW#NI~%iOY7c@O#Md7I&oc{jpJ#eDKOtXkUN#`7PCT10k|%ez#}+7%1Q^QU z9S)MG7QpeVriVQ9I-)SdOg2)u%@SRdjUE6 z3BA~reC6_&!zkuK9BMzs_R+6KOO3ZJ`Q$9%rwZgY^oQfOEqyYd%}>w=qi;dK&29pk zzAUV-vI`u>(;7KE_{19NlR7wg3CT^!b$-t?)^|2vQ1|fi^lZ&eWRoZVSNamflRW#z z32O3q?etR`aT{<19;5ksi}py+XEr;q3%U9oFB1XL_jv?7NAJ-iz;_@EoV|bq2WDo@ z2h^K8L(g}o1Fs9f3-HhxH@CqMFN}CJ^d2}U`n&-0M=k(3KfMl|Lt!c1T3}=%=yOS_ zF>me+aP!j1jUVw!AJ0MFm$(zHg&=xh<68^RXOJBEdNhBA)aqsYh*$ckBW6ePjb|We zwlH(h8sGq)#_7@g5#aSKYgs?zmtKGz7;iiSpuk&ln6aNQaq5Hv)XTl4NvMY_az3C> zt+fex`OI%;a<^bjmek)GKtxS3@OPOyVPCEb=+pd$v(O1@nV<2}CwBnuw&U)SC6x$r z0c-TBrB1XSxX4V?fQKe^JguGaNlorD+G7j0!ct1iYBMxfH18H#*ZCQwCb8#T-~9_# WyUJ%|Y++;o0000N2bZe?^J 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 literal 0 HcmV?d00001 diff --git a/src/res/npcs/2.png b/src/res/npcs/2.png new file mode 100644 index 0000000000000000000000000000000000000000..06157b6e675154c79b1369819c1c6ff12ee80fde GIT binary patch literal 1395 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 literal 0 HcmV?d00001 diff --git a/src/res/npcs/5.png b/src/res/npcs/5.png new file mode 100644 index 0000000000000000000000000000000000000000..d9114f0d8831fd2f9e7080c3aad27e224c1d0c7d GIT binary patch literal 1309 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 literal 0 HcmV?d00001 diff --git a/src/res/npcs/7.png b/src/res/npcs/7.png new file mode 100644 index 0000000000000000000000000000000000000000..4f4d018e63b39c084c78e23c5cef1d1948182a55 GIT binary patch literal 1546 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 Y1^Ikl5BvN^tN;K207*qoM6N<$f{RvkX#fBK literal 0 HcmV?d00001 diff --git a/src/res/targets/1.png b/src/res/targets/1.png new file mode 100644 index 0000000000000000000000000000000000000000..ae4dcd16693bbd02789c323357511ea0006654b0 GIT binary patch literal 385 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pk#?_L`iUdT1k0gQ7S`0VrE{6US4X6f{C7i zo}rmb=K8NdMISv~977`9-%dQu+Y}(+s@Z516V>MJy@BP_Mi%c4Jf{nnTc-5Q6zKUB zd)7Cvf~UXwUGuUKt*O&q)mZK+>Dd-~dz&psLb>&~d%S!dOo!f|&)d)Bq+3us=ND6Q zLE25jdHPNb%u5>z-Y4H?xA~SckwaC0`-3>g!&&vGR~5VwKOx}X8Oi@#aHG!w+gLkW z0mq#paiV@7wlke$u}-%ymMy%jI$`y~{ah92?YQ3ZMug_ox` zuF;&x&5=HDerB4WX}r^hh39mh7N3=IKT;&AaX`pIJgN8b)~{3j)gxXkdl0lTPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00CP`L_t(oN9|HEZo@DP^b#+mFv=i20=vOi)|!>3^*O5J&ReVDaF>xbOSk&nce1G4r~%7$m+Rr#Rj| zx4FFOuC@s))EhgQtr|kx_hX8&0X+roy%EJr|BpzH69T>!+?nZn$}{t((IDc`Bq_^* zV%TsxUr+s$Z+Xa9EvYJjiLp*jFOgek+Je==CsQSiK+}6O6qys2?|Iz9;s!t(r;$h$ z&F|Cz>O5Y8L~exgbHUvA)AHq$stzF0>NkhC3z6KCxaGw+;b+B5~7=r6CihNbKR~QJ4^Nc>T?rl5ZaZ z&B6wRfcw#M{z7|8|EG8IDFW+ zlO^e5Rk*TB>jo{urxPpMKgHeee_rwHXW6uHRiPcsm4c?fZz+5@_jKu!i3hYk-oE^L z%blvpHUss+$3k$Ee1=fzc@&?rJvf2uq0Ndad_)(t(OJlQ(Jw%1Y5uoTZP9)Hj|z zP&M~J@22&4TS6MAPrG!nmdRY?#^mWt^85e4OG`W@d-r@;%Mo5P{p%cWSR2bX)qIL%1~Oo{f7}#1=C>FI%?vZiZ;Y>-d((?b=uO?{urxY^+LMVyxR@}uCdF$ z2nOvcd3kB6*Ho?GWhFC>Qu`h#FF9iv^vvR=NKb=258LM5&Ov5to>m`lP*bg1Sv%)$ zWKelI&_F^!y0WUqCi;S~xz_uN3a1BaKNb9c`KPGrpMj96)Qz7JH-09rRP;NvX0gws zYR)a&M1`I$y}2`DPn~rPQzvKKtW5>0UG&w2pQ!!}xE*(Az5H?S8{gisgtf_4-!EUV z?%T8@U2~=_n5J=m-J$N=PX$)>U7G&hb?N2RN>xE_3zPq7eE3^p^S|=%CjG|t_TQh+ zPrv+>E37@lx>hA|?UHMS|L&A1*4F;35mc`fdXZe!SYN;Y&vc38%(M`tZ1wE(+ZG#G z$8!rmKm08-r6bozH;_s9(H#-%vMUeQuE~)VwqITLc$@h02{-N?U9jQ2uWik(4arPz zuWr*d(b;Nc{!adEt(MUuiM{1(Kiqt+KSgu%1(vLP2APEsmo7Y6Y(72r6Vt&i0Cxoz2Wi!R;JRFUbT7HgNfs8zoVN)>)jG|wcm~^2CUED$R~3$Gj#LbR9Ee?jcjM82}gcQoqJ#SQdCgSkucYzi%yFB zb*;=_yOQhb>OA+A9F?zqR`azg2S#xnz3_d*j4DaR!fTPg4%ro7<2uPTeXIHI>DzX8 zR|YsQU-#nGo<+a=yysmHeZK2W{j7$2v(^h;PD|KR`mBA~8^1GRJNG_s*sEofwjr-K zv~Ru@ckS1etlQ_Chg?VzJi0w^uj@i@Xa9ejTPwfa4DCkOan*-Cv)gys1^@YU(Eh93$t+RLXe0kgkIt)Z*bqzi3@5wj!hsKoUc|=ca vy?#!s>ib-7sUvrGxUeu1O4bYv2il*??`r9CQ@na15v1DF)z4*}Q$iB}B9NQF literal 0 HcmV?d00001 diff --git a/src/res/targets/11.png b/src/res/targets/11.png new file mode 100644 index 0000000000000000000000000000000000000000..131af56dd057153d9af352311af9c05a9fd4479c GIT binary patch literal 346 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pk#?_L`iUdT1k0gQ7S`0VrE{6US4X6f{C7i zo}rmb=K8NdMW;Mn977`9-%i>n*lfV#8oO*s3d^aU0~}MPfCx$D)ME+86Iz}aZ=0+( zO>3{U=!r-FCM#O>J^phz`5oV?we~ww+gZxzH=c4)%A3%D#=e(5!Sm%T1*JN=`F>38Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00EUrL_t(oN9~j`Qo}G1MSTPxfs)c?O3EC= zB}bs7q@?61DY+TpDf-N3kzz}+3udx2e`49|eb0)M;a>l$=I5ucT5`)i1>p4gay7fj z2>$*tr{Ra=LkjCCp=>7NaG-C~_!Gf&ji_I_Sz;V7AO-<)cu9)vBB3o8qy~4eXA=n* zVC`T6NMecvINu~OzaIWHM~RryuK3qc6<{zx!T_x~&Mm2y1R`8%mhiMnlme7{ssa&u zoF9LExluZH0a5dH4a$-}N300000NkvXXu0mjfQU~O{ literal 0 HcmV?d00001 diff --git a/src/res/targets/13.png b/src/res/targets/13.png new file mode 100644 index 0000000000000000000000000000000000000000..4c5cddac59daf673464c977c92a1f75c72e55b42 GIT binary patch literal 684 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 literal 0 HcmV?d00001 diff --git a/src/res/targets/132.png b/src/res/targets/132.png new file mode 100644 index 0000000000000000000000000000000000000000..bac28dc66112df5c3ee69c893e282577de7a9a23 GIT binary patch literal 882 zcmeAS@N?(olHy`uVBq!ia0vp^1t8491|*L?_~OmLz-;O1;uunK>+LMtzS{-@ZnZk{ zic7tx+qLygQr_XS)7@jH(bE2nb2o>W9C~tFa?+(syZJuI8Ei-hw105}Khi@;ue&vdQt6C9B$|em<@y^#1ww9~+NIcJ@!auDn*wc;b#zzyF3U zV-c!m(Y-0?rr_Ty(|_EuX<0ts?e)i3x(H`{(h<0!Xz*(FpA6$k%P;v%X`6OZWl|&a z)0qc$Rz{!t(RF@F>doc9Lz8y4abB^zz@nFWz>#@I z|JnSkNxz*IaC|vjH91sk)rrluvuf9x>jb*w=j?HrKk?tKDxgM(l`?CW_#}KWOYOT| zvj1*g;*?sg%jX`?_S!uyb)WdN+1V^?wF|ywPIQ>Ny)yHk>Q?^jF6Eh*mj6}0uuk^t zR*o2!XnhJoE#9-_B`hInc|rR_OXE|09)^t6RKnwS5=$ zl^Hiam0)=%kTG+5XSDOLGx^8&ywNE->B3?cupqP~`=(2$(iyiYsk_xKB-I)SSj0WB zlHc>Cz4P_N?OrjnQd#&!cDUbjKjiK5fT3~g!BfhI1U;%If~pf?!P#nf87d)CV#qp%@8 zE}dz&xN+>g`O4Py+a~cgO0!;jRvNdUHt;+5j4$RwGv>+zg?^pt3R|8kxmBHcyN-QG zCkGFUo3~cfL)N@n@5Mz~3%|EI{FIA`-gQCbhUP-GW!v5~sfx-nWqXT9G1+fYTlSqX z(bLs+fmcqg$6ueuo3%SN*?;)l+2!-WnB`Ti;yT5P{a>OUvWrF^;(nv+zyJEpId;Vg f0{D_NL~h#$_V@n+TC)o66+r@?u6{1-oD!M<*9n8T literal 0 HcmV?d00001 diff --git a/src/res/targets/133.png b/src/res/targets/133.png new file mode 100644 index 0000000000000000000000000000000000000000..ddb5698da104cf7a449df3d5d4f62ef7cb1746f2 GIT binary patch literal 869 zcmeAS@N?(olHy`uVBq!ia0vp^1t8491|*L?_~OmLz^vox;uunK>+P(A6Bio@xXSi9 z7f8sc_gMb&u#hqD;Z5v6cO*Mv>#CP;^Elbk_J+O>{ribAC!{J*rBP2DXbK+iBVSVQ zyvc`SmyS)+?2vJPCf#|uWvh|Wr~9XZjoLCJjC_NoEb~=`I@>>+a6bL&aXLlmBTJ?H z`ac>!HwaC&(S2OEUth9Kv3Jh${oO}|pZu*V{WNE)i+f!E79TYse*uk8DxnJ|rnlb7 z+pc;}x1v*K`~A-65aSbUs!qat)i%;uQe+2OYAjjzvboV&z2@P63c<(lhj{{5-3ljAr4 zY^WXFzjvO)N{iciENsaOWG}CA$iKU6=~}s<*HhZ>&GXr9@=@!8bhcmw%Q;!8-oS0a zTWtizJy!?+b6M7LMd)kkW=VR7dvHDv{1_GqY3*{_!!Db4)qa zeZ=!i`Siliv*y^xWvMECaB1ASIQq6)oBg3zYrftRh)}BMVVS3}VPB=Z*^^uP>zCb` zCRnlHK`h{n#dwuK=>zcD!(`K!e76fXYR~jpLWB1I=tw%Ec)NPr} z+ZfH7_S#A{;NI((yguJ9i%R^l1A61i+^26jxV5v~S@UkzWvD7$5R}M`^(YV5Zj7FP zDZ(-`XSYDcJ@&L{@hGNh)s&=7x#Br1UkJ>|jm_Zvb86msn zS~^W;fp+0*vxDyiGH$o-Xmhc>obBqbwatb5jqUux^`FaropV&claQfOISaQ literal 0 HcmV?d00001 diff --git a/src/res/targets/134.png b/src/res/targets/134.png new file mode 100644 index 0000000000000000000000000000000000000000..93066de7d65e02ca971484b05e6cb0f27a3aadea GIT binary patch literal 1078 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 literal 0 HcmV?d00001 diff --git a/src/res/targets/138.png b/src/res/targets/138.png new file mode 100644 index 0000000000000000000000000000000000000000..a5f9f5da763050444f73ede596df34c9b1326ec0 GIT binary patch literal 1084 zcmeAS@N?(olHy`uVBq!ia0vp^1t8491|*L?_~OmLz{2e5;uunK>+KxFq9{WVSIyvM zXM{HKOpoMBop#VDD2-EdbBoULSfj4z4^Kbcr{BoC%p%<_`OnWbNm=`sFFiNhW&|3A z3)E=D|6gZX;gMNiXFq>SyuIJ;?|;3WpD}kzFPb-h^M*+4shs8F(--BQkXb8ty;!vN zs=&{KkG!UEg%oOCX}{p7rj)PYzqIo6!_7;k&hfhwqjD!^9{=Rh^b7pSm z5pI@sr!M=2G5)IYN}F`x%l2PVixoe#U7Ws1M^`hf&AjF-^SuHC_Z!A_fuj#s*z6%szLXB)Xvacefu;>4E=UhfR8)RfvQvaB<3)_s$p%fCyRCT1|* zS6c7w6vVXT^MkA{<)YFoc^rFO=5fc|t$MX6Pff5&)fao^+EGx@-j znlndouUgc4xIU0(%?pj#)l_Q!eXU!9&{a>D1)Ntl%~*dtEp+OZd$U7}F2yBk<^2Aw zT%Z)7TH>0u_xtB}&o@@4>^kyp#=b-BSvY%J`VQKUi<$T4Np2wNokM}3$Z3$`7t6coEYLn6i zmQ_nke9A*-|9bB9;L)rAV+YY6x4vE5Cp+6aq%qbteVU14z9Cm_cumQVoqL?M^G$k9 ziM^jt>^OtZ#@>TF-LLzEM77Rdvu@)3?gklAq{ut?9dd?k#KHX>avQ ze(&$gi@&teU&cR4>4R72?a%R@7BbJb-!%LkvgF&DtFKp`*d4Se%;S?ygZD}#@|^s|dM{)5GiMjb9=p$Bk`n5`NKIgtuIM;KdIfk>1!~^U?lM2Jnzyy z`n~^W@*V1ZZaMF{$?V5pW=`mQtlJvRrI~c7V!5>Yk#k}5rv7LTn;)v7z@+p*{^M(T zL)QZ`jK||yWLVFL7VLTGR3~DPexUI1+AV#Yt=a*40ZgT1Ph;M*Z2|z{z|pqVWHhzmH-M^f10} z|9yJprgz&T7B|$g)YMqj%oNN1@vCZY!%Y8$pXGJzb6MX!vEH!m$S(QqOl2Y)YQ@iO zXX5I3?+~W{q&qsZmZhh^>)JA)t2Q;5`t0W4Wj2o;D%+|s`ydh0GdnmfaW@v;8t zt?au#ZkyfE$#g7!=I8cZZ>LE13mPOI*p*uz^Qvx6nYbFzh(#TS3Ac}R&Tr+e+qCwG uF5}VHDXQm~qbldN##D%dq7e!FxNgVr^rFAxMW>}AAYo5eKbLh*2~7ZZj@^y` literal 0 HcmV?d00001 diff --git a/src/res/targets/14.png b/src/res/targets/14.png new file mode 100644 index 0000000000000000000000000000000000000000..48a0470cc958b7268e4ef6a2942f6fed074221e0 GIT binary patch literal 598 zcmV-c0;&CpP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00G8HL_t(oN6nNmQo}G1MSX;nl$4Z|lsQ6< zkt3w!7#txbN1#ke$uTI?g*;^+v!js#TTX_Z`D01e{{O7l8G7pJVK||f-mVDUZHCjw z^L-KHn}HB^e0w|{kK2pRtNE277^5)&@B1?_?)rD6nU~BE zgOz~-pd8N2xd;GnJcgPJlY_>}07|xZTY+i@8!o7yw^rG3|4B!)w&6fo@zkHbIC-m6I=7{~Sh28YhsD}6rz;Lc% zHNP;#tbB$EL>L1N6~_BvGp}+0rWu5wmRf*eH?3$arsuE>q6AX;p8Ex29JYTi4G?3E za!^ZouW*dRc3RP>k>;uuobMTo!ftxe%n29}%cV3|v0REdJ)T}HPcNG19$`=KchTHq k(A)n%0Ae`1e)brKFGz%@lN+OHJ^%m!07*qoM6N<$f^ZA}!vFvP literal 0 HcmV?d00001 diff --git a/src/res/targets/140.png b/src/res/targets/140.png new file mode 100644 index 0000000000000000000000000000000000000000..f4c2c9fd580c1fbb8d02c51b9b1784d174145a75 GIT binary patch literal 1754 zcmaKtk3SO#1IC994PiAhDsq0j*2vE(){S>aSk|p|D4gaujcm+tW$^JMwZpE4%=d?w%pzvdp8n$hvxkCik5RnOYt>oy zt2xNKlkS{nV}I;K7s6+&(tdjpelP&{H^$>~j5Tf1PYWfNop&ORp8j6qBouE=wS`1c zV|q~1+iPFfyWIHnZguGO^jaZ@Ke*lP9K$)v=P=b*zb>E^Y=5GH)<5@jGAN(7H{VOC zn~7!l{A?3&a;!j!}rU;l1$!{ z)6K|s^cYw=#*h~2bv^&K1P~UI1yJ$HUiOu#@rIZZ8bk;-;hDY+sBeR!4XVjmHOLrb zWly%!mE!;a#R1#E6R;no6JTqvzM-|-yiC;42kXEkc4(4^Omo{YNo^=QtC@!^(3=W` zX~hBR@%DIv6NM<2*uL!0ada+*{=*_Xs1)X$YD3$AM8qu5Gy%P99}Qsav%;2lH@LB% z^SZIQC$ZDa1XzN{#xU5Hz7s9*f7^q|xtB7deL`m)4?vxnkkaTBqMofUd-Gz$Ghu5D z87QzrYjMlsncDjeqJ1`P4$QSD#!q=mAe1?7r9 zw%eLu!i8+4B6S0C&}3hrg`Y@9o#Q{(Ia6?_YLHQ8?~ZVA#ojlOD=a(ig8`GD{h}r`+rKLbt zCpAg?#g9?9a!-<13=2u16Di|^{jZK?!@f$o$e0P@8>fT9e?e{D5xI3sN_xCaInWXz zfYK-e9^xHu!C=U*0v2mqrV9EecGv*vbwOX!%=45fFbTfHm?pX%2x6qA7qRVBDOMZO>l5IZt~;J`h-}_&`5nRBFFr(`NwO?`7P&B7 z7$tCAqZPT$j+FV(?vFIh+bbt24ME4n9c~-*Ro`2YcxT2gi1Z+RRysM6L|qQnE}2SO ztTtj_M03pUA-xjh9%CIQ)b@OC`$n3sDU!VS{mgWH~OQ=aQt#^@-#Z;iS=YG`^ z%v1%`DrV;=(c9BEW(4dDcUFAjp3=7Z?O^rI z2(+=ky)9ic&>SlK(=BSO)wY`(+eraFY~6Rb5rHNhAIAE(E|8bK53GHhL2XPu2tb1+ z1b`iLse%bDnR1?20S8p);cBiCf(KB&_Yo3S{FFjG80dawimP}%N+9?0qfG@kU#&s`+1kGB%9tfSB79A9$a-&6#V zbJZSQ-vIhMFV{aVQ$O(Qpd`gW5-W~iTB6%l`%@o>RM$6B)sYoN`s3Oc5j(M2`OaTl z7!K3PIlT;X))rtryh}r8` zHePS`n|+h_L|d~kx(r6X+ne>Zqm9`YydIY4!97NA)?I!s-ekZdB1UGTcnj~$tbU!o z_RzNWe~Y&vU?$FJV-tzz%(uhirRZ`u`;fLb#M|LuKiY_7!@1*fz?m>QW_F&I&K)8~ zLuPlGk$ar}Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00F~EL_t(oN6nNmQo}G1MSX;nDJfG@QsxLL zIYN#=$uTG?Q*s2#l$4YlgD%X|?8__~8L;JK*qJ|;WbOaYik+dS)|=skVtTzIbbCLX z?jCQ77+(#9u+8i3>G@+<#P})@tJS)M5c>Z4R3tzR!QNjqE;J5~fK=G@N!VKuKX&=}PK&RYOp!)ktI2*zj(!2A9TjJy6FY33y} z#9(Eh04Rs^axMbE8($2=T$mhexKMtUT>umY0Qd*wr)N+dnAII_<&$VhsEdYc+ycn} z>_>}07|xZTY+i@8!o7yw^rG3|4B!)w%@+mW<-W5Q1820fybQq7g&FGKdmL<$LZIh;i8dy);0KHOfIP z<-Ni&4%=x(qehymR&c&&FbccrMKdR0KrENiT*Y!J=Ja@au{^zKo_mBnz2~C2$Dp_W he*naAcKz%z3|~O>GZV*23{L<6002ovPDHLkV1mFp`!E0i literal 0 HcmV?d00001 diff --git a/src/res/targets/16.png b/src/res/targets/16.png new file mode 100644 index 0000000000000000000000000000000000000000..f845c0d047c6be8b2ce6a667ee772475a87556c7 GIT binary patch literal 592 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 ZeFOb6C;2p_Yf}IK002ovPDHLkV1i)b|9b!c literal 0 HcmV?d00001 diff --git a/src/res/targets/20.png b/src/res/targets/20.png new file mode 100644 index 0000000000000000000000000000000000000000..a71af23fbe30ef0d71967782ecba8dad8b8dc16d GIT binary patch literal 541 zcmV+&0^Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00E6jL_t(oN7a(MO~gJK zd4u{o{}YKAe!IRd-(MfUP|qb!6VaktuoJ(;Aqf`rh6~-%-6*oI>@N+qK6wek5g3*@ z5-wa|Sc339!H@~?w<)0uy1X}BL;RCl zEM;L$gm6G$UEfzo5SA^?@H+^pKP;fq5X9vf{uP9JyTfB4(IX-VJ|&!DAtEJC4~|7Z fiS^pO)HMA7h>1{}Z^Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00HVrL_t(oN7a93hpqiN}9*ZjcaXQ}66E|#RrrRF4hioKn0}%w&z+EOXjG%>V zU}PewCeq(*z~UBx$Oh_+=YskYn@nUVq@U;0?F?B@%&<_e7R1n^3BEp}0Ac3OKP)!6jLT`knxo~&?9oqoQMrt8;4k^Io$UyGVXv7mK z=4mWo5$d(ygXhRo&)I!`B8?@1)bj-pk7nqRvorj9$C?QMc}4Aq>uv-7DIn$C3X5~D ziW3=R(MEjli3Xl~NSwgL$jHb9eRjihw>ZHvW^BZUjMTk1Q~f?nx`uh>8Dg5g0j48d U1id;0D*ylh07*qoM6N<$g1i0~&;S4c literal 0 HcmV?d00001 diff --git a/src/res/targets/22.png b/src/res/targets/22.png new file mode 100644 index 0000000000000000000000000000000000000000..5c9902386655b055ec7ffa20766aad3ad728f2ca GIT binary patch literal 540 zcmV+%0^|LOP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00E3iL_t(oN7a%$PQ*YE1$_h`fzTl#AtB+0 z8xnGiJpv)&9)TMgJ;^0K+C3kCK-!i{$UW2j%3g+ts&O3W7R%N1OUtL1=lS*WHeWy9 zSE#S^Kaq&xx6j-B^?m<^dM5#aLi06=s(>zJOKT`F!$bKQL@L1B_x|=V zOlTH(b^#=wrfDs~+cPY(V8MAL3V08RrhqSm9sv&rKSKaE35c!Xk$)4=4uAIkVS%il z1!X-C@BSz3Aq#Vf7%o=fDm8WJ!=<27xIh46c>4A#HFe0vDB?>!(D6IMgY~TaMFCZm zV9*1+Un0(XuPUHIB3smwK$LsH{bsnz1>&%WdYHqx&obW(S0UhGzQp@Ae1`BY0aYf! zQWn-k2nPg~^?ii|VcF6Qzk`tan*~%Fg19`xzk*P2cX%u$dPD@lr-V~1M5M&&!LbM^ ev0QtU8ipT<98ANh+A6&O0000(ekz6nZqGT2 zSq^bRf#oro#t9RY3l2NVN=)tgwfT4XlJ6?sI@UQ4wtwAu>h2srpfR|?;yLG^M{l{Y zu(`Xsu6F0%+CBHz&A-0i^l#;_e@|ZuE_4_F{`K?Ue9wu#YEJwSh0|>EPoBy#lGhVY z$y4?BdOh{J_GH=kz;y|zRNu39b7cy#xzU9{pB zj99bp)a3RRtDc+>TdG*_?1q8Xg-J=Fvr7|YPhRG3bZwm05f?H_8gW+WRiycHIbsxoY%Qmez{Nl z)dc_~Db8p+ulVV;GU0VKlp-zmE6PzL@vBH@mwDJDMc`z9>IAW>M1oA^1#K(|D>*5W zo7U7uj=!^!jW8mqeO2(P*+B4r9KSg1=5{AIBX|we-DPw2EI+R>JR*BeZ7J2xQhfW_ zb50;tJrA~(H5LB<5lyG zNg&dMdY#e3K)MglzJ61l8R91dM8((WK|%qK1i~!qZOkt~%e4;2hg}!&jrF8_n>s>a z=*$;dDjP^&r0=Vo8!xhw=elcvWj2w-d;$%P7ehl1!UBQ?q&8@T10ZIO9W}jcK(Uf8o=4EN2o+ zNE`4-nM%`mpEFZOQ^hmDtODw0-(|TOdCjQS8Blh&J;Hfun^djd_gu!$&`d5ueWoX8 zsWh)Hz}%N*z)tlo%dl;ccwSpVVR$TxY28`&!Y#!Z48&nsuhml`ac^8{@cS60C#?R6 zZbx)RSYq9#jYJ}u>Njd#!Wlm2sqM+}uc%7G(#<0q1_@z)>`~emi=}U*QLyrc7dg}_ zcq-OC^5GPtRor&vG5zeJ zh`^XN?E)~1tjrEKrh0>tx&NF76jm+Mr~UATbuF5h2;0j?#b5YD_Ns+!=p&NK1A++k zM*v8$2?Q>fLb4GBs_`a&r&Hc|uJ5)uF&$d=?y}wkeH<;<*Vdrs)4%nPl2RYvzBJSf zRBjXHviTz0k*RNXDx%t}xlrZ(sKu;+0%@l11xdPLhO$C1OcP|azkGTS8bU~ktIlG6g5cjD4$Kn2n*=CJ_e^;AJ2Uz%g~8eri9e8vTt zRx9oXMdy1l@YTi>`EB6R$jT>;xdw;0b3~=RPsW{2&A3X!DT)ey+k(hWzZLlr12k~g zKVzsjS>~iRIC+m?THHH@TV__RY_|ZH(gZh>^-G$bf>}5TBwAl_;k%!wkN3nV6K61S zXb8yTp_3=PUFHk5>;<1|-Z`fGEmbep2+qVHsG(=H<94PJYGdDk9B73g!!BJCFvRtD zomTZ-oOfSm>iU3=bPoa9T|#0Tq9WGFtsUGrIMor$5om3#!p8=^`Rww7xyh29SLL-? zD})B_h^K7D{IVB+WWVj86&?~El0FGS*GG~{XkeoRu!Ldf_I1htq5(E^Ulnvikzr}l zWLySrj4JF`3X64Xm4PQ`Vg^ng)tQm6hW-u-A}^S(-)}8aM8AbbN8Xmg``=jzZsvuM zR|Sgq5SVLHE+g1tRBoI&YF`AJ-IS8Tii;w{%*8st84Gw&+Kw)J`QQDer+T_nrrr?WA@b+=JJHm}fLq nr&Dn?KU0f{*nb747s^q0S25MT+#LC@G1WSZZ)u5 literal 0 HcmV?d00001 diff --git a/src/res/targets/25.png b/src/res/targets/25.png new file mode 100644 index 0000000000000000000000000000000000000000..7d36f0901f12540bc85a087efd4850b622e605ec GIT binary patch literal 719 zcmV;=0xPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00KWrL_t(oN41nYQUfs%ME3{|9TE~cBy>nf zNXQX5f{(y4xTUE_?Q`|cO8dcBRb7%sqwc50#jtlA4u@+`W6NWPA+K-m*N@N3_44(7 z6MO0pgTe6mbeaWMaZaBwE20Gj53b)Mzk9)Sg5 zy$QlsYi5YXRrI>H$9s4Qzo=6MN2jk1S7l_B=2 z76A1o07V)zoW1}31Yp(-Z2`zTth)dl8lE83Ga${D0N4XzKe9H1prEPYD9sGe%y7@` z%^uIPZxO&xzV-!}>1FoZvzF{Z+?xQf;ebW~R6;2B8m$E*!_C&CHz)r-m@j&=md#&j5rlEKRe9QT77B z+7Qk%FxSd(bOWeCh9v|uy&7lTpghmeTAO`=H0%MSQT8W5eq#Ic4zhLwU{nZAnUzL) z)&r;zo~s!EgF>3tz=UL`uL5W+h_wpQ1Yl6a)Fv-b*U-=kz^pNI{d4H0-xxU^9BAkz zgQ;Uy0W_@udB5(*xc0~k8E#mHCje{j)Ih-1Dgc8fjaq@$m<3>M0CNS^1aOMC2002ovPDHLkV1g?t BGZ+8> literal 0 HcmV?d00001 diff --git a/src/res/targets/26.png b/src/res/targets/26.png new file mode 100644 index 0000000000000000000000000000000000000000..93259b6ee4b3eee01996c969ec266ead42a28b7d GIT binary patch literal 739 zcmV<90v!E`P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00L7Ign0}iZoe|B z`MN)R|M>t!ya0x*`>mR&Ppz3Zc2CUyy8$>b%n@KFG-OVQ3YI`Ue-}V&_DfcTnaJB& z%e_4U3&8p|h;eJhG*P$)y{_%?99jafzYfugX{3-h$eLk3jfieGevZtuUPH7(isvB& z70ModDoyM&_5gZ*7oa6+Omp`B`w76T7;y_gp6U4&07cCcgnSyL*d+k=K-f>1+d{O2 zqM8#arh#IbTemlRtYzOt0H6HY3oz5mY~9*k*h6sc9H4C|&?tbB5C(gNt{D@W>vI=C ziu)>r{Rzm~>}RdHf!8j8&6fa(1aK_`A%v0U)0l7I>^m3$^#(-lT{Ckg&B^tA6He2N z4xn)b5JIyQ%^X763jk|PsHI`9jcHB@P>nQ82xfW}&b&rhPt%&)yg&-B08%LX&j8|y z?awoWxpx3Yfl!p$P$+9lfC6FN*a9$GB1NlVLNe1=0jBT(F;^k>0T?Zbs7)T|%|lSr z3c##zpUcmo*3{b_t)QTXG$xN&1yHmCXV>tfxVnHvmI(INUhefiz6h3NXz^On{qjy&5|ZzDxpaOa{nf=8hCw#fQe>@CLnz VhLc74w1ofw002ovPDHLkV1f_6I~f1~ literal 0 HcmV?d00001 diff --git a/src/res/targets/27.png b/src/res/targets/27.png new file mode 100644 index 0000000000000000000000000000000000000000..d3c8ddb8f47945e5485fcb05f778559658589a13 GIT binary patch literal 514 zcmV+d0{#7oP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00DAIL_t(oN6nHkZbC5-L~{&EjzLM8GDk?s zF(`A4lsQIjMl?w8YyNs|V<6u|deY*Z-I*-BP5;~PcbA!51N{D+r|>!fzQ0aaREy7# zW0m9Kuz+6pJ1}!Ty{~Y;)de(!z?0TsQN)enjNYl!0CCv}En~gu8tzvFQ0=FyoiO&% z^o-HcD+1hefe~ZEqv;0V9lUp|F*;}lQ0-rVhDq&jw-~!V?qQ|~Q2Pp4pc*acO-nIG zmoXFo(?^WsjOYevnF_tTaRxga@3X52AR%=m8cSOX8IcZ}0kVY*VeHH9Aq|iT{d~{F z|B2!PTk|>r^y{C&62QNoEm;N7LzePCs0L6?Q*fEl>u8U_%y+nl>LLKd)DhQ4FmPj^ zqp!Mp0frrVAU%tDb1gmZdz}XGrIFZYQO#7u8P&|GZvFl(z zGIcGpt$sIv270C}8O3Ld0NG+UeHQF40&L9^U>>{6A3c~g8GxWsA^-pY07*qoM6N<$ Eg3d40T>t<8 literal 0 HcmV?d00001 diff --git a/src/res/targets/28.png b/src/res/targets/28.png new file mode 100644 index 0000000000000000000000000000000000000000..210a975c2c1a670475c848cee7eb556754c65529 GIT binary patch literal 653 zcmV;80&@L{P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00I3;L_t(oN5zz_avL!iMGXxD0}Trc0}Tre z3k~xKfq{LD!aPPErH@hO`s~cn+|^22uajvqb7JlHcdw+icVGT@I6PdE*WG?dUH?%g z1MhF=!tY-{E`Pr7hftF}_tG>VJtLnb4#faNfi;{@he94d&&Q|7g7uJbDKnnG%}Bl3 z3D9IgI_>S=K{Y9q^+4Qp(?C6J3nO7-oJQ&`46x3l>m6a8w`NV)T5}5n_ng2MVa=20 zN>A7KYG}Z?WbRgB>x7u^)WQJkyaJkaov~Ylvp(nWZR#56U4a8wrzj9hVe48Tdb0sV zKO$WBz^Z|fC=j0sUx)Z3CC*4P-!(vCiX{u-YpsK1WLoIuvuU6;z$S$qr0C1@OId^Y z9?WoVF;Evl9v{#sZ-@QF&(pcAle#y_O`ttHfm>jgf6u!KcAppr>RSEDT?Qn@q&5Mq zUMU86`?o+3aEH>0NoxjBKN-mT*#blS8Xk{N6Fw)cUYHEvQ1RN~8uhMy&RDB&Y2b~N&51c-fP;-?t+~wSx@iEiF`;3L zDAYZyX9oC}23%WYp#ykUaJ17NSyK!U%o8xiCr~^R&02d$`Go-orudquL$;E=#Xt&} nlob6eoV_sczbOX3j)%)XG?JErjl5$a00000NkvXXu0mjfsBRUg literal 0 HcmV?d00001 diff --git a/src/res/targets/29.png b/src/res/targets/29.png new file mode 100644 index 0000000000000000000000000000000000000000..c5bc8887a6e229c6878a24bc0378758fadebe747 GIT binary patch literal 1193 zcmV;a1XlZrP)H#hgqd?G2!2F?KnBK3U~fjN9{ z-uzHcPXGV_0000000000000000000000000000000Po22^Ye>Zdk#Ojyubeb`n`Sq z=iAF~pFVy6xt{;=<-m!EGS_1lOb@@YJaxE>NpUG~U0dRG zkA&sx)?*~TgS_^83C!z~wv$duePe-Y>$zGJqH7tcle~;jBtB5y@1H;aN7_k3MrDeh zUW>#x6u3H6BD3>b>YU_danp((-M`)si4PK}&YT3E#=BGcRE4Uxp0D=d;|C-@DuqrF zwku?IX;-gpsZ`ex_yBpU6Q^-b6ZR=B?yA=*l68H(_xk$?yhGrU*91&s-mYaKG*zfB z4}o{e^XQwT?IcbqR%y8vIT~{r1K%L}P7+hbsc7+vvlTE@qIZseS5u-Q#-&W@($_`v zxgIZh{yQW-P~fS0%&itzA}AI(X$h`t1y)kUEEZmY609Egx_Y_gBAd+0&mt!LmF9>W^Lv>nN4)hPlu0#Cc_Q!2f(o#Y38HBPpw_EeoBuoN#@1@6W*U!iGpMUSW{ZTc=l znxGP?AEXpOe-8|99uUsQXib zuX%VWiz>%000000000000000000000000000000@H6u-{jXD|o1=LL00000NkvXX Hu0mjf3B)es literal 0 HcmV?d00001 diff --git a/src/res/targets/3.png b/src/res/targets/3.png new file mode 100644 index 0000000000000000000000000000000000000000..d1ee6ca6798df4d56a8bf8d362459f57a7fec22d GIT binary patch literal 576 zcmV-G0>AxPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00FQ`L_t(oN9~j`Zo)tiMLB|xz!4}@<_MH2 zQ>LU$$q^`1rlfR9nPX6L3_9Y!%v;SaW3Z7^MDj>aX4f6bm{U$TM5K2a7Aam{KJ`kJH0hpH`{J-&C7Pzm zu$RNw%(*=z28YPz8svCIx7Ixgo%V0ZR98V5{Vq<8SL9~RroVE40L;bt^i`aI)`TfS zbVze>05$1d^S-tA_y8Wv34p0b`(|^$5U5W;)Ik7a(Kl!E_e+h1x&ICvn0fMC&=2Y} ztJ^9>Kp$fuBsf-G^Zx@MUfs_}-CcV_6hbu;L7Y(CzQp)uZf2tZ9S;K}A(uD{vUYoZ z#*=3Ph6S*+i9kfCAG~>*w+E>A#po08!+^2G`a(o7W0tq2o6#U(hL8{7>6^Q2P9a(k zdl9kTY!j^OJ`X)+@wga>z_=#r75b|-+2>0l%hz=_+w8szd=T|bVoD*1@vi;J)Io&$ z)IV7Wo?L=57-By8Dey!x;3Oh*j3+hsg*c}Ie{NhCW*)mW*IfUp7K>k`lszngqtS@~ O0000#yJUWpN&^!ez3f;@IRiP{v47Zi8`;(X7XI3%SYms z<++@UxFKt#Ngb=moXJ$0Wwoyuc{?&ZeU4-2cSPX_L|-dXR`T?IMAj;L^LI$Ruso$m zPm?Q&L)7?=pY!yp-{&<*qgRf;6q2b?X*T7xLw^h&)e=Y)UO4)iKuPels3_gtCq1fN zAW?XQ;$_w6>Da9}n@CTgMB#;_FN=>%c`o8T5Y%o*dd9G&e{nUd(~FjH(swNGy{H6w9To~OW!LT?{D zm97dC7nPDSGF`M+v_#=M+lF!ce0lyWFefTAffCUoP3bZP=JdveGh*A6=h2}Bl)&-o z`&w3{t*T6Uy3RN}lAFN19s*BDpDtuqV2iL!l}+GLaisSMJfZsZS6_60uRSqSVal5c z^gj;&o=bC~2;3By``SvNFMQi4vyJd;`Tn}PNlX!Qf?;=-`HIqGlue3b7v6};OQt5#}i5QEU<1cT#B|s9Jz$1xX@HBZXog#5F z`dWE^BvAWcljte46+qd%w>ue1p$J?=Ut9Ei#xwUYrNSeDnRbr~mfVLCxKX@lp|h&Y zDM?E7)Z5afrQ((J^+j>41I6gmWIWm&lU5b>9Kogkqn!t>T zR`xeBs%Ud$hQKQbRJ5c(rB81K+WytVX#6&thpq(9hUEw>5@!N^zPakHQ~o&DTOVir8B=<`(D1_=3(6#_T* z!`c3{64(|!Zx_u3&Z^aHEs(b%QO9g-)&#au+^is4{c+6tLmK!qdc@Y4&-%KQm-ElI z2kJX*|K(obg(}qD#@zSO*?q&=7%qnh{O?FEye}RJ)E)L!!IKj6yNY0hT}h%(R`PKQ z7u@bbv?$bL8vZ@xUAegN0;fGn;WAoVlEsOCheG8OhTy9LX7vn>WU<$MqQra<>gaZo zw-m^_vDDfG<~btmKiVfrj{pDw000000000000000000000000000000aEtr~8Z%Sk T+I-5N00000NkvXXu0mjfTn;uunK>+KxdJP}6$w^|nY z#sX(22D%WOe_x+}zuo!%<8`(ZHe6ob|9{EUHRt2^@7Wu^ zKJ<}A`w?p{ZA+~)tV@es9?o4-x~cEP>SPyPq4gT;m-I^8PF@sfYIoc9sfGQ&IbCrq z_Z;qNZ3;Of5S0B;$IDyp^#f7Xb3qB6I+b4|dv9F*6~WYbNSgZ#$0v=sORtEm6>a^} z5iYP|;!>uxi!<-7?+B^<_4)A2FZV4~;tF_mGF6kdZd=;5xoetMLP&zF$DTz8yryb5 zmhM}UeP!hVMekI#PL4ed2PUmxN`JXID3x=y^ZogpIv_EJxm(t-WF368ci#GHRfDC0 zQ$3_=+xP6+X*I#`ZR2vUsZRo5xOShCUVpjqK=ajfp%)XMehOMrDH4|QGd)P;TH_Js zz47V+ms5l+_3l@Di^Kk3C@0k}Te*5(0L*XnjCB0Lu z=c4#n^4#WskJkz*mz;D$MW6G{wu!sG%-N^IF~?=TnC33IWl4v%L+&noe=PkjgZ0;G znn{8dnGa$YxJL`U=qn~Pa&I!ur^LN=R z8Qy08^7>NoeC@`&d3)ARv`I7UwCkT$%u*#f%Pqs5^;&vGR<-kj`#Yu{Sm$-M!&2$O zf4wE=&Wcp6bNJ7$x7pKcmtC%HsWUL!c=)W;KC3y|Ms{s!cA|LgT|GOd^HW~1p7mK^ z|7G^7t0t)*i|-zoE%|~qDC_ULy-`^=F7p(BQ}y_J-$#jw-z8c0?hNm0SO3{BB_(SO zP6g+Bdh!2Ldf#+es(+cvg=#1N#dhYQjkh*jwu%W%@>&_Ix?5<)eCJ!eL96YPEQD9A zyvVvM-FS~Mke-@f&6rdxcK=PGYK@T2*NXKlRpa$%q`xWIwq zA202Au;NkOpFe*;{rK|y{@16!AOHMa*!z5+-5;kX6OY>3+RtCFsBPb;ouc%K;nSQQ zI;Z~b5$L?I_{3_JXH%@?`qxj43+`&|pJu);klop*<5cM-PuE9tS=K#y>b9)P*QWmn zGv^u2O~p@FOu5Ce-D|#IfSh7jp!j^j>lOYn9DAJKax*F>FWD<_q1Psyd9#Pgy@iD* zCyJaepDojS;!l5L)Q-h_KDMuUvh%r;QY?EE=NV%om z>ONI`|M8P<58BoRTc3Z|ux|FObq?2O?&9SYntgG(X^!fJrN^#TCM-E0y6UP)_Yv2( z#m*I?p_@Ajqs46xyfv{}p3fg{D%9z=ppR$u#)NIBc^WHQ!_HRamF%#P_F+mr+ID2B z!`jZfn-AzRnZ`c~y-kYl&&# z)1#rDWnTl%^KGrX_*~FJ&|>locjofw1%0wt?XK#sD?Yp^^YW?1Y`=WZyxDj5&+*I8 z(|ddSm^UviRlP9xm2yF|gSprX$NbV~;_qK`UAg{p#X+-Yy{}EKXOwI+({B7&sg+fx z)Og^TmGAlgX-u)d*S|dH8uo9^o{2AYwg}#s!TR;XHmPlMEo^hIo2>jk<($>sn;V6h zx<#Vq{>>F#5oqCku*!eM?qumk-p0zl*D|t4vsd??&M7s^PDs1^;%F3a#G(Mmng2+Hq1{e;d>+ZX4lu5xAWt4 zSN^wGi+yKtXY~PH@7FSw?^+bO_XxD_`MW6aa@O{X7t>P9T%MR2bL??6c@<;kJ@ef^ z@z{X$O05aT`=$AQRq2K2CWUlxmAu}n!dJOn>Pxt}!BnQ7`aAo!ekgOd^HV6|)7n@p vF7=4dPJ5NZqIZ)!mrP^CmE9N^4x~R4Ef8OC?3Q&y52VV|)z4*}Q$iB}T(8>v literal 0 HcmV?d00001 diff --git a/src/res/targets/33.png b/src/res/targets/33.png new file mode 100644 index 0000000000000000000000000000000000000000..a70f4659c6d4a047becd747425b777f0fb8abb5d GIT binary patch literal 943 zcmeAS@N?(olHy`uVBq!ia0vp^1t8491|*L?_~OmLz+C3(;uunK>+KvzKV?G!*Uc#> zC#6o)DQ1~g++xXee8%Gfp1y;*O+6tmUZ2-z7AkB0GA~6nGb-}S>`kjrotxtaGzd3{ zfBNp(vs=9L&glz$uc+VmZ}*(_{?mWIzW@2{?bknS?kRs{Kdl{ko`3rHK&9A6?#=2| z4p&z0n10;;J=51+{fZ@fRwXEvF5aW!=kB@6RtTbx2KmW zeUaUy8B3-+ygJaVI<4o+c9jcHubQglWi9@BVXKd-+QzE=>y|$jZIo8}VC;Ow3g~Z|>t^66bug zOUrYbnuX_sH7nd7C^g24lrrts*{b~|lG&WYXZFt6!&aqbeLh}EA)hMFUyhs68KzQse{*(3x#00-?--fBhRiCD z+LHOU_QIqU7pM0HD-=2_J)SG}HoI!eN}Ka>rdhU=1b1ls`m@K|b%|S$SIDkk>xGnZ zvnC(W5sNUoRCv&^ZOWE?rA(nkwf0Qn>*}RCU+S!Q7jVYPVAg|*c+tjgmTS%WmUuV@G2+YQmdoq=Fx6IbRI0AJ0s?S@*FPkM+KxFJZVP(mai;! zj*8ChT%uMXFD@*ce^6bcWQF>Rc9Sp%=3Y1bg$=vinL`g8++*y^6h7nT%$-Z;&jT8T z4?HmNTYh<~?46naU2d$m-@ktP_tRhBKR4~zdk#Y=U%#~qyu*R4CHf>iQkx&qdR zMTb=FJ~%gSj#KU5PqXzIH3P2ahc5Xg!;+_wwCBf%7v7D#mTkFp&EJ3Pk_$&aZTgeX z^w)OZyR$*+Oy*oAftnYt?~1OCmkU|M?h?~ zwt2}#-^)PXea^{Pi$3e3n zZQ1hL*G@>B<4l;6{GDIFEUKC2CtIxds$JB4fc4^Y(G;#TrR!W%qrVqP9S-hvJ?gz$ zrug%vHC%ITkDR?{xZIdy&*B3&pDE{GiCqwXUO9b!+{{hj9c8!cDlS#Q4We{PfhnS)!~9?b0eTFbF#v&-E(k*SuyUGu`0=&cep z=ZLZK%D$}`)$;S#^G&l3$ShSX2o!ntLVNzP^HFW@xvrF7VAqS|5BBlinCtLX@b$$x z@15^Cb>@ag+T~>h<^BDAC+oyqJBzKqdOlAR_~*Wyy~nEsPxd&V{F(p3UY6pYR{ujl O$~;~DT-G@yGywnzak88M literal 0 HcmV?d00001 diff --git a/src/res/targets/35.png b/src/res/targets/35.png new file mode 100644 index 0000000000000000000000000000000000000000..cc571841cf8138da0037a654d77b211ff54fc33b GIT binary patch literal 1455 zcmaKs2V2q!0Ehp;VTq{N6Dl~vyBu_myLt>#5p(YWAr8Wo<(Z>WNVC*ZF$Y<>GR@)& zLX<+UbD?B*ju2BcmCV^`IjS>Pmfdw7 zDt+@`Q>z{T08MstB$Akl`~ZZ)p&d0a16k8)BSag0 zPF6M<nOIS-?uF0;aXmUM^l3{di=uhOcXYD{Fu^xvx`x~rAw(sIC|sBOEK8k zsVL;N@>Vs-Re{7dAUBNVZHi`^iEd_5#C9!2zL>oc(Bg*()(77-rAM%ZTc}4eHT}b9 zyaQjSg!oZ=X8GIdlffCYcYya7KpLE}O3+s^hm4F=GIY=Zl@TMEa75^vcX6wFt-bEf zi=`kn`IR_R!<|0F{K?-K){41QqZ5$em`2>WI!HGgo6heRbCB*MiKLR+QOzYHXAu!1zEvEV&E~qL1(J zA$Fegg<2w81&Pl-hmF*Bqs75s_@6k)74=wI!!2jX4S`1nVl1snvl=g#nF|#)Lx}fM zX}-Gzn~pr_t(R<4^9q2QgoHmclxf!18x64mUPx@?kR05(?SO2kpA9AV)S3mIUa(Yo zu!UOJJ|yiO2RiK?mjgBeXIubMs7l@Qn_}!95XMpIU{Ktwd6xTxi}T)t=(&#?p+^&1 z3LQ%{rJ7~rL77JMi^Q&WjzDu>41fx0&2o z&-r#BaJd%lS-i$)CFjV#w2bF+ML2Hieo0)1=P-Q$<8tbWoK2>$Ie763bnSX%!qW?n zftK7@a#rpdz+v7F?HSiS8PQBGAm{@d3U&m6I%Lj!rgjACDkh;3XYob(s*X}&ZI;IYqodzK47fRYJJvbSGyem1!Kg$4 literal 0 HcmV?d00001 diff --git a/src/res/targets/36.png b/src/res/targets/36.png new file mode 100644 index 0000000000000000000000000000000000000000..50b7c70dcd6b33cdaa8368efb6af1209269b5fd4 GIT binary patch literal 1474 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 IM6N<$g1E#p*Z=?k literal 0 HcmV?d00001 diff --git a/src/res/targets/38.png b/src/res/targets/38.png new file mode 100644 index 0000000000000000000000000000000000000000..16a4bd84b7df1ea7cc703713c87bad102cc9b432 GIT binary patch literal 577 zcmV-H0>1r;P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00FT{L_t(oN6nP6Z9_2(L_J1ImnkzsN|z~J zW`vB95i&wX$yN@YrTaM1lw$e+7$$JgCwV#^D8svliT%_5)I+7*6q%k-DJ3ZUd>t2j zf4rS>L7a@JEA7<4=kag>>TA){t)ojs;`{5%LiCLsp67DuN>7+Fz_-AFnLHZM*)@<6 z`4;}g014o7gnDZ*(p?PjZW;8JYmn)J#sF*a70p2F7BUWq{l-9a?H9K~oYCC?ZzQ+w zSp8U!9EbCztKMBV5cNT00JvL$y8n7-G13KR0|W_9x#Xt=$aPWT;F^9v0YZIPvZVBGC=R0iI`l)keB?bQ!LT z5$dhMNOv)i{a3T9Es$x0#(>tN6**MTda*y^0p~OZ za9xmY0JzYW@EM>n0NkCs^k45RM!Mi^fFQvom;96fxh_f^T+{FA*3l(IL?ja90OerR zSKiaDqf1cWT}0G58URLp<*uibdL3PY!owPqBBDb6!z4` P00000NkvXXu0mjf8HxNE literal 0 HcmV?d00001 diff --git a/src/res/targets/39.png b/src/res/targets/39.png new file mode 100644 index 0000000000000000000000000000000000000000..63baaa561bc0042ef9f2ba14607527e759237ab7 GIT binary patch literal 1082 zcmeAS@N?(olHy`uVBq!ia0vp^1t8491|*L?_~OmLz{2S1;uunK>+NjYJY_>3x8f-> zipL9PCg<#YIwkrUhhA;Z6gxMs`znULiXR#uc*yiWx-t7Z!@(0g;mRL`zn-qGVgee4 z3*0#I`Sa)H;!2vpthXGD)n9M??td)ExVkvueB`$~IaPh@Z-lUH;cz)H zwR=Wa!{wVBqmQoac;lRL`dxVUw%c#@REwwW3*Q}mtAb_M+P=&5f;UC>-YE1e=_&~i%|}EZF%DRqwQ<>en-Fl==bzL8>6(~4WSF( zY75GnGR3UirvLp_y*Yg1Rkx#`p6@dXV~plr5wD+6vPZOhSJz{u7ZaBEU0)HoO8vFY z#(6qSH-lOfuY@=5>*zcjYG#wh^s39Kc-OQXzAKd%UVmKMd#iBAUIX?treA-aeGbm& z2%VVhKI2f#tkP)_{DKiXct1QUUf`A*7II)(uUin1S}J5MdfmHq^MzBKr&fHvbg$Fz z&g?}Y?gw63KJWN^=~becd!{R+_Vd2%McGFpGnNKB7F=7={K{*}w;X|jRF+wrqh4}n zx4E)od{;wr_`GeIYQK zH}A>*M2@{r&6pV13ltnNOSq zzF_>a)zh~y(KRSoz(CD3RH#>r)BDvIT~FVSR-H?hrQEpkrFF*XPjflFr{*8M&2fIN zqeJA=%5~k(=Z6#}JzAQ7{#bF`pCSw4oB98?&a=>;EG*1&Mf&I8H!*YT@66N-nf88> z`6qA5^qIX^r`Kw4>s+&?tzlOBBf%NG*;2ZNFD~a8mzPX?FT{FgpR3nVQNb0QUR4Ea zW~La<*0C~qR-C4E{ED-!NVs(GHy?+#0KtIjEtWB?J>1*sfdHYvSOfC&sv^xE8;ZK6A$-vqdN7Ki>ak zf6>k2TVELV%;kG|aHH*VUw(nwNS%G}c0*}aI z1_r)EAj~ML;ne^Xlq_+LC<)F_D=AMbN@XZW%*-p%%S$a$Fwry6Gcq7Ufzip+ z#W5tp{q5x4y@wn`Tw|L~FJSRfSi<7uM(aZ&A}1IcdHNXU^*i}6 zZs?HBPO#}-cxb1%4L1X4WAgNO$_$Q73IF~lF_^S;DAY-^aUR_HzOQYuC4)$hEN27j z=f3ZIejCd?W#C9`$W}j6JLiHDLx+=9Q^xVPCX*g!@Ht!&XxnhZ^mU5GDb^05BL&~j tzdj$uW{Raj)gQu&X%Q~loCIADYq@Dl( literal 0 HcmV?d00001 diff --git a/src/res/targets/40.png b/src/res/targets/40.png new file mode 100644 index 0000000000000000000000000000000000000000..fe3ede26f4eb11088901b54ca4fa52fe9d19c790 GIT binary patch literal 890 zcmeAS@N?(olHy`uVBq!ia0vp^1t8491|*L?_~OmL!0hPh;uunK>+LM-qT2=n4x!6R zR$f}_HC-=u*%!eYmg$)i)rQev@#vAtuB zZ0D4@=gYrb5{;Y`FgdYx+LZUredo6yuHTs188~sTk=M!Xi&U11D!u-G{Bz_QuSL@g zCOw#!^UGQI`#-Yi{pRQs6n>M!?h6=z#rpZ}z` z)<*V!O`ZL1M(u@LRjONFJkOdcuvW&~WrqTfO#tM@|3t z&*6%Oq4(E+KkPXtWZ}9a7mxI*y`2{LO5!r7&(-NiJUjM;aqmer%Kv&ZI4oh6o#6C; zud?3w9ueZywT*jK?Ph%{MCkLkmA7A9axcj~5G*AamE^4ym1}LaYHQtV6DIHH_A8yT zS<-tyRk=;Qw&J4omF@fNwRV{{&D+N0y1?V~>J92Y!&F__P1m+mX|FELOg?#PJ#(p# zvH@>`%N(AxEeB$n%3q!IDoNqe)>>g6CCsjRGMID9E8&?t516*5s~wMS-Fkhw_>B3? z-fLBjZVS!T`kXU+|Gio3UT3bq_UE0N)`o3|=Pjvz=HebEp)_A`=Hj{UWL^kH+?L#X zXhX=O=&L238!L}So=%%B_QG=4+W+en(^Z!3>d5EJ@!Z^Z>BaA=qc4|S(_`F|Jz-Pq z+j2kEfN2w57VPWkklAahxj6Uo=7>3yR)xD%u~zNR-Zi!3kClO~dC|I$>n`YDy!7OI zqt>UR<|{Nn6puD!kds#A6UgA=;q_f(!=4WGO{#78qgU;XLTaBCy|$iREkmYuJ? zrV+I5v)kL+%lG^iK6hLyG~H{<@?TY2$F%*o-HmxVmCe}7#`B#di_Xzopr05BAd&j0`b literal 0 HcmV?d00001 diff --git a/src/res/targets/41.png b/src/res/targets/41.png new file mode 100644 index 0000000000000000000000000000000000000000..7c6bfe31ca177f400338fd600491256949edfa45 GIT binary patch literal 1002 zcmeAS@N?(olHy`uVBq!ia0vp^1t8491|*L?_~OmLz`W7Z#WAGf*4x>(MRyE%+-h0m z6;r+B4=z1DMKksnhh3BRbW10%>6*n;?xYC6W8rI4Z0P^wukm!Rq|Y^NFYQOl4gn#0 zdO+g{fd@Bg_WUWxDr>Q;_?>^`_rHqTUmr`VckSC{bzAP}rt1BBcUEru_WfaNj%?1O zyZ3ADW|#hn=a%Gra<*kt_4~IUAHK_J7r!_sQMS%oQ8dv_DK+V4?d;m>U!SJSM!6I( z>AYd}ru9qGxrq0FbfVtb$Idf8Xes^Y*BjQGN;h8I&~rKSto=-s_4^e4McZe3e0bj9 zXS@BUZrtqdT)Vvcm5O^LZhlo(T>JKt(l)<-w_3ALo6WA8ZsG`3I>eoEXyyd5uZv$u zbqc#a$_rXq?lfbWRbhzYVvbjHS6URLn0?S;`rV|pyG-QiZlQ}us(1X|tl|+IrqDBq z>utr9U2gT-O5ci?iEs2;JT;?sw<@d2$6Nb-9WtMEPZW)usx-CaIr|9@m-vX#{Y&|7 zJ$>dRU%5|U#!TsL7LJ{--t5WpGdumxb7P?Vbdd`!vpWyXY*HxRqm@w_C*OL?NJ&~E zaCa)pmY?UB`wJJTow}lN#;r2+&X?@dYc|cDxqE8kMfV>?OlBW{h1?Q1-mFE0FHY^7G;QD>ps98&j5 z)XK@O?&4MD4Z9w6ZGGVGi?*r$^U72o8ux6@i_UXB5|K-^t_LovF=tBi3)Hqu z-O|6x-TUU^Db`W%Q@6cjtSnl;Tev`kcdGJ~ohn}bwTvcN(VR=~EdNwn|5o*S!^DPH zhjW*91eBZp($%c5Q>jr|w99uY@2aKcFMmH@5Xus^Xr=3c6P9NU|1EU-9n&el^u!w9 zdLPlslN@sd3*0uW`8;#${r^?)P9K zw(8-kBp1Qb)3X^*?_Yb(eSW>%EZ2Kt$3p~faL4R*+!i|F)!L>t2cp6p`X+haajZ^A_pPV*mT@TZT*8xm%A8yolNQ_smBPCHF_VvXxiY{dpsu zI&+4XS54-vwU?6B;!GW;*Gr$x*Pa90?l^~Rd7#JF+e-dWwS1o_FR=EhI+SAp~Wt~$(698nQ B#AE;f literal 0 HcmV?d00001 diff --git a/src/res/targets/42.png b/src/res/targets/42.png new file mode 100644 index 0000000000000000000000000000000000000000..a9639d7d12b07ea4ff949502cc1643c6a4068421 GIT binary patch literal 582 zcmeAS@N?(olHy`uVBq!ia0vp^1t8491|*L?_~OmLz{Kn6;uunK>+P+*xzdIV4HvaT zSACJtiA`hapKvKTWlqn-vqE!Zm{g(f@*FMZ@%%134>u_L$ z;6{_AITEW?i+Z$PoD_8LnRcLQo``{8)h^y=>GvjXXqs2Ux9oXD?vdhr+31Pc_6$vY zd^6%*E_wQ>?@50mnC*Old9}V@oYl{lDO+7)_Sfm}SfIXcpM_!JlliZcW?VAc{jWCv z!@UI`tGQ>f_Dr6{ey3`yCaVssef8y*PX6G`0Qa6{jVuOIq6` znU}3z@|EY-t_L!_b>}5-OPAbg&^@30b5+jWbC+IJ8&;jaaf|ETuOCLa2lg)CT=FT} zdHrJ5oXpd{&Uv}dZKL!4y`TAsXOB*DT==D{*QCnwPp>`t`fkzk-W$IgY(L3v*<$tm z(cR5YpY8v&iK~3k(vM#LnM)VER9*RW+U$0nT3-(*f9ZlRS~4F`P1?WyUiIm@b`M^J zMnpG$XS=)mq76+ZK_5!zDH$@#DQ_>K$8N#E98P`GvDLO++3{Vk3k4I36W zFWa8TxL@H_$AUz`_b;2demrqxt@*To$u2X1QJp)>4K?b3yac0q#(Bbx)AV07PX$SO My85}Sb4q9e0KD7=;s5{u literal 0 HcmV?d00001 diff --git a/src/res/targets/43.png b/src/res/targets/43.png new file mode 100644 index 0000000000000000000000000000000000000000..db32dc2fefa823196d648fcc05c0629b5c6c556a GIT binary patch literal 2356 zcmV-43Cs40P)#oH_amj!PF)SPD%?{uio z7!o;vuayIJp=Q9mlnPVShsMi+S9PvbU|wE@G4-(#wY=qCD+oz2ozK363O#@pyw3{o zV<4{y&=@{7c)UXJ>1jR&sen55Fp6Me-*jzxrGpbMns5v3l`dn*$(IB24 zAi}UbNNdHs#r`nFQ_q74(1Pc!y0_XVgm?*nQXZkX0P*RhT>>COv5J&>SgBy| z`SbvBI2AxW16&|pMS%>=D-+xT@a5&@J+!0a+)H?&sdb&D00X$!KYx9+qadDk2%T=X zcP)*U0;NnoN*RQJT3~(sqiU z8QNBWwO|f_2CN*I50BFTC}9P9s3|~GK@NZkfV38XASkcN>kwuPsC+46AWsc2bf^>{ z8(R!6zYkpkCv}c3IDh!>(U^}!Jz@xx<>cn}|QsZR+ zatzlhK!zzJhNZ^S0$dHFO5D~1KnAHn6o99L$0}qOy#_$b)3iL)Js_S|eWA0G8$^h* z%u@;wf#pCceV+#r;e~eOLh}9qe|mC~;JpLH(8*wo9Dp^9U-N#CFCg?uR$fA%Pouu@ z4V6p`LJTbxpcs13aH8Zh7@lNej#`5}1YY@Y%u$nch*D*(HNh#r~+P=h!V$Q*#NP@*)1 z5QySwYVb6GM;267hnEUagUHG6TApO7$BE!9crk!oL3}(g)u4C)HOGcwdg>@qRmvQv zfwSOg0I?pYYk(35dH^NF@Iaywt@&x|@W{{@+~jPB+Ih?G=X zjTkWZUb$feRvn;inj1z}9+v_zB@mEEVnn@Tlda6o8)kQukOi15i4E zD%=y`Q46{;fCz83MXgnU+E9VpxLAd`09!1n(3+(_vu+>l(&R2#FV0@qY9gF z2rh+(eP(-f2@of4T;R`k3hckOM(lyygjWufbw8coh)0lG_On`mSkdTsIta= zc-UO|0#AQHY@yky3xL)ZX7o(Amey+!rV<_kxGYvj8?52jasqKo6qCi3~Cq zAeObG_qzq6s8*gYdYT0R^la25KvbdZLSl$9HF~MHBLN~fPjw7Wb}d=MXHx*tb>;^Y zfT%<*OXGnIEp^^PfV>)>3J{@r;67wq$Z459^|iF5WaT~?APy&d;ErV&`Bw8u_ZH9+ zfDBC5^F%q;^I@h%n>I9n=-@QBoWvc)Aa+)q8ZKsB%@;LUDnb>esIl~PL0nX3rR3ZLKbyZ` zmg-P_o_d=Fh;g2l17(PJM~&>+=E7uvxzN~Sv{ZLD;BiirgZws&d!eJAItc5jo{$@xvn(~DfhHvx z!09;zrzsLQmoO|=8h)m?!zre^6};{?c}6lBscPh(PtH*5&68SkLA#gt*{Q12GD&?N zbdZ?$)Pnw)5%Kq0U>+!;QClw+uM~M+NV{7wb7C-|ce&&<` zPEE6&;kd05h1z|<89S9Lu*ETs^&OiId1ga%NH z?aY`l10b&ps;avJycI+z*BPsuVSt?a3T^pA9tKDT9-H5IV~Upfxn1qD@|@P6#PJk} z;IKwCrbZ2*^(TI;eCh4VmvuB(EMdKZ@B|nBm0B4O;PP{Le=O16?a^6>gG@|XaM3c%>R_iXa#0#X1DXgeyChrk#_QKmW%Ix7@|z+Ny7Z<0Z( zKppROK>I{5HYW}oUSxx7kFgbZ4fL>JW1)x#k`+2E*Eq-zZGh|4*%{!*HLh`uYh2?x a-St1QfO`71{sZs;0000tc7$J2c|} z$HwmxU++D$~$NF8fetb9XPNf&IT&ECcaQfJy%$`{d%ilLX?&Ak)4WH z`sNq+7up`&K1bxO*#VKb7Kz{;SC<_9GG)5>)2(-+rq1n=?7Wm{#j?` zqpnr!g_c!|-4c2rV?v5PkUROeG+sQU*91n!@ayrJ^f_$d%FWW_;k*@ zWS_o#<9n9lmU|Ot8W#qab}(Gd)>(Lc#+J2N8BMG^f)tAL%f9akU-c*Rc%omD(h1X9 zyG)lj&)I+JvExVUbAoH` ze-S;MA@@Kmaf?aSilo_9YWnLh3my@9wtnsZ30I^&@}Dxw>CL#Oc_#ij+jf;33v-2U x^=RHHT2)f@SRniKas#`-4kjkllmq11t=WIj%^-Z8r?nbL&ePS;Wt~$(69D2=M&JMd literal 0 HcmV?d00001 diff --git a/src/res/targets/45.png b/src/res/targets/45.png new file mode 100644 index 0000000000000000000000000000000000000000..9569195e014ab5525a1a5e882a7bfc08843ca10e GIT binary patch literal 731 zcmeAS@N?(olHy`uVBq!ia0vp^1t8491|*L?_~OmLz_iHI#WAGf*4taQK_QMJZHdzy zJTfveJUmVa@o>hnc^jl~wzcUUoN(d71=R_P_YZ`Z?&w=_(kIzA|LV%y<$1=A`-}bl z$N2dH4a5N~n5L&M|K6D^z1}6}(X+F&)5DeGI}dQ&_L@Cka_P~hd#5z2=$$!!I^H;M z{*f=nQQcgBs%n2m7j~YPKgSUho1nC*sCPrxYhxzyCttp7Gzq)pJ+ba({uMFd8#&%L z=SW`n$+7gEeW2C&!{4h{H*bpE_%nu0PtUOF9T42kdtx_#d+rvoDck3=-@aFOZJ%4N zVqy7q_1%{1iW8sje#dLA|E%)X_Uq~{>x|yl?x+y?`1tKnzm%n}5sQtK_5P+En^d7v zDLVa9gyBv%ugzBo{yB}Yk;_!V5{`r>tlQmF zGa;-}^v3%W{ffm)f~pc4CBJAYecBZ1eh*VliWZ(Zw>$32y;pp^Y)!6Di@88vv~Epi9PxPNR6kfpUXO@geCxbWlui< literal 0 HcmV?d00001 diff --git a/src/res/targets/46.png b/src/res/targets/46.png new file mode 100644 index 0000000000000000000000000000000000000000..6cc9c1f4c08b3e747bc557abdd61b1caa72c4781 GIT binary patch literal 2931 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 P6iAt;tDnm{r-UW|+yrtf literal 0 HcmV?d00001 diff --git a/src/res/targets/48.png b/src/res/targets/48.png new file mode 100644 index 0000000000000000000000000000000000000000..1d8e76733870050dcdd7ecd51635eb0c3e311c9b GIT binary patch literal 1374 zcmV-k1)=(hP)pqJ=H2wArL@pjk#YsQlq0t@&T zdF7AY+}t1#2m}IwKp+qZ1OkCTAP@)y0)apv5C{YUfk1@f_REhGHT1**Hg>Q ziT(uQ0r6g5-_Gsv`Rxn|!~@|G8Uu0z;(_syi3i7%SxD{X_5p}{!+ZGk>f&(*(&qti zXYuv!F`Iq#_k>3cL+Q@udO17|NbT*)$NPKM^dZ+gK+FjT22U4wEt3(WfH_0}4#K03e|q`b!?$7LS_^4?#~5NfT7G9c!HgR_qseY_P=Z}3V$x;798 zXCDLB4xuSPd3_)bxcBu2l*6aKK4l|z>?`r8V;N3&GG}KGK#j-OCp;XxXjpNf4&+MH z>fqY@pGLH<&)-`vas%;TfSloSeh9=4fc){+d!Pp>7YX!E1`q>)^0je7 z+W?qZfyo`twHBm%44?8k0Ia|(IUb)n9?=S@ui<@f8s<@vHsJLJw7%Z^-aO0$u@WzJ zK&dC7_cJlz@`xq(yc}Td@ruaN3=eQ=MEb>Z6<_W_6)ycFSt#*qcK2nq%qQfQENprL zMiBKbd@JCx`-d%na<@PO<`w`XIsh91YYG@S45k1rNDEKyK1A-H02F|c65e`DI)`XI z$O6EDfZidb2wV$IIP@9(#s4#9F`$9svKp(^F3qMgv-N#2ns-%$psMS1d|i zht-OgdbwS$5lAT@pN&~&HHJ@JThHlvm1zxLPry|6rT%`}9eUpXi@f@y7OxhNKs2I< zXMNt3fI9p33i#na3V9z6`J}jP)=6%OIOQ;!%091?TZYe;47@xO_^&9D_d4%5{`7#+ z>}v&VsX}#inZmOm0k{J|Ik(eKOXUEk+?hBU;3bm^vriAD0Gt7ECd8uyMuyP&0N;NR zYYLI;%pQ~Y)Z^JTfZod&rU#5p;9CJxTS5^)o=W5vxvjb2T!qa0FA~L*FZ=0*=RJ{Y z9r|U2DBhDmyH7_mz z;0A!y5mCI>;S)n>XTTn>4Qb6j6fw?RFbCN3%zMw_Q%>f+&0K2{e7;=?k%_5$A9q~z z!Ix3Pr~KJ1&~@-sCZ^zIgKp+qZ1OkCT gAP@)y0&&gw0|T5gJFe0k%m4rY07*qoM6N<$f@3LhivR!s literal 0 HcmV?d00001 diff --git a/src/res/targets/49.png b/src/res/targets/49.png new file mode 100644 index 0000000000000000000000000000000000000000..6bf5cf4512f482851b349c1d4a5ae0ce336aaa57 GIT binary patch literal 1446 zcmajfi96E`00;0NV>I)+%DLA)^d?7SxsP@@B9^2F@oLm0jlIrEi`R>nxp@(CMM4A}ks6qe$kalrKVt+j0|4M>?EOTDy z1_0tWU6796aWfm`?lE6np{bW4Zb5HOJu64xR1AC0%8;hqc)4(4OWGhG8?nTG4d0O< zI1PNOtOebj8r?N4s*6gX7U;U<|1^!`&3&5({Oyq?iU#iKidK7292N@*db{p3a**W#~~8J$i+8Rg8CU zsYd{7bSoQYm+Mdr{w*_&A&>h^YgD;`gk?qv_vnFBTgP}mAd!J}X z#Mtw<$1?)@>6J|j%H=PE{)GGX4?qKKk3{8KGxV-c+Am)Q5OYhIZYCrf zV{e>-3$>4>@pqgvTXsx8<;O3Y!A>{bP`62n_{gB_a!6gx?0S`%WXUUHCh1OVa)>!P z$yzk7-M*GO08s*)hY%i%heBo(s^S##W_O9rixbE zj9qJ1vT8=|`kth(ZS|F=jrX7u7QL4p&Mp7$wv2IGefeM{(q0DGmfbMRnV8V1piP%a zchl-QJ9N_b_v&-a4F>=}%5UxOLJRDGTKAz1l^7D*T%h$PCJ^n_nktOUx*bT9U2n&g z7eAiO<02gIC@}6FqeQpqc^ySp4epM-3NYvpTzQ4q|w&^!$Q$s{rmN7~Yx$ zN;CmRPbtxD&&YV%FKUHgM`k{<>L{MQnoDnBQRNSR-tf;6~%l5tPa`#2+qg7F6;YMCFa4Z_Nw)Ya47K0#ny(u53eUnO+~Nqtoh zkU&bI51nr<43ljHFn21xhDv8wG6b z!LB}5)by!-p>xH%a0N-{M|N%Srn5*6o2^>>RkIGub>H14i_{rd8wF604cUd2b|Ul6 zC>C8{;b;np4XRCd!cQLax+wFEq(8mLO)LpGLkI`IHt+pKu#Q~guoo>9?n=tB@cmXx zH`^@YRXZk4g3lzFIBo3U?YaLp*7A1IV-f(SHg|l=mRAqU&SvGQp(pZ*-qwR0^D^KW zi0vFc@L6I+J!3#&-BY+Rs5LvJtR^2WH6I^4Y4v{d{w@8I0=`dSP0qN1s6U7a!;nJf z@GeWA_wGv{><5F@S=ezMhhkMxHmsz-A8IozwJFy!M)w(2L@$(i!Ou5KZ@HT^su13( h{oKDFKnnYW_VP&Lbq}E+`M=Q>UQh{{Z9Qw^INB literal 0 HcmV?d00001 diff --git a/src/res/targets/5.png b/src/res/targets/5.png new file mode 100644 index 0000000000000000000000000000000000000000..ff96eb8ebae3b389557e813b830ed5fd1a707735 GIT binary patch literal 608 zcmV-m0-ybfP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00GcRL_t(oN9~lcQNutGMO6kR5IQ6zBy>m# zE`g9T2nh)(gOHBQJo%pZ?C3zq3Sh=N^XK+Xt9}0#;o%bhD(?4JM^*Q!v3Sd{@!@cN ze0aPWmHVgX{dCURrba3Vy}TYKU{4xpZPo=1Y$*8c{c#jI(p1)&pJl?ES8ys#u%-!( ztTy58h0MVP&6)6we3b!jFRU8yToWn{Xy{i{u-GOEtNRK??pdu_WPl=XO)+c2SZ$hc zCDa^QyVw9PQ%Ei}!2(hh?3y|KSi2^K1EGjwff`sM`y_Oc0inEncl()Rg1mS8l%ULA ze>4EpB66E#^UQOvd>z!Yd@*4$`+P(-zBvXw4$n3I zzA5}MXK_J`T&sWIMCFg$W3}3(j{D7F*gfl;?a50eteds%WvmzWvjdI51OA-v=|6sa z%h6vmd**l~_$yUUUiW^sz|C{oi7$<(>0S~GR_ILrV72Pwu~U;jiK%XyawJf->W*FX zRhg-c2l`&kb~)eqXRCtN9a|G!MIF_+0**^B9E?PP(iBCB?)T&z+s5D|%p zK9%L%zsBgVv24_t7dAFGGGCadvrb!8VZ`FMDqZQ#k|QS?l0toR12(GoIjKC_R~RfC z`)SQW4aN6WndM&@|hyJJ*y)PrimENw=T8$hFh-g-C|(;%Ae(k9=EdJX^rhh z=R>7TN)(Hl%Bp$kYW50&{r@AsN`2ZUx1&9JXPZOms^+~D4jhd2+q^IGw_N1Tqi@}p zJ`#Mvku&jzR)GBKowdad3DXaVbtX-EBP6jhjHT?&-!F<=rY0yRif4Gu{400k;9-^qrl%7d->&@++%;U*5*9R z{`AD_!x{b?hF5e7?6_)VZQ7rlZM99yx#@CeD$~f?|y=_@zq+^lKE$*OtOua;jmFR(0PCEL;OFdkO$jOF6R2r*l5h; z|J|YZiTi`u^ABBMz8{km^6WyP|6hCigQ~R`t+-a7l%93}n=(J1Wc==dx!|?Txz_V; QJOruoboFyt=akR{05A4^^Z)<= literal 0 HcmV?d00001 diff --git a/src/res/targets/51.png b/src/res/targets/51.png new file mode 100644 index 0000000000000000000000000000000000000000..bd64eb37cde6d11b31483672dd308c69f081a320 GIT binary patch literal 1279 zcmVDeD40j_$lYHJZl z>#BWpPj}DaVE_OC0000000000000000000000000000000C*>EZ*Csf9Nei7Ebi{> zm&g0v%TZpJyi;m5;Ek$1zjd~3iNgBO!^i`7ftwb$qX49*P)Tj=DMBxSH zl^dQ3oFpDz+K8pd?1?PWR3K4!h2kX>SgmynEyI#TO`$~Lg`>}lk1FC0&jm`P)N~ zm1=GD>C9N@XjD({I}VL-qHu$}hys^aj<~^E)byHitwx*FYuB0DkMWnIT37c2QFw0K zP>$czuBY z36x?+k0KF)8`7r=Su3zv%cQ~AbnF6CiBjxDF@wMj)u)~(dE?p?uVaTn1!)@e$ZG^X zy(g}t@0(KaewZ421a1)M>zYQN3)CB*t&`q@%n9_!jtHie*dQ=k2o)GNHw1=&HHFTS zKrM)T+M_9$2z=$-Q=9h?pb{&AB1VPzYfZ^%A+)cbw?W{>xo0-7{CoGK5~u}ECFVFZ z-*PL3QVUYhoLD%;(b|xQ*L_5^N39! z&qyXc{;UlZ>0J68*BVcAS`}t%o)$NHMCF>TmwtUu)jq0=qKCnDCw-o7ct@a)xU}6+ z8Ja5B2=szRAII+rjKT+ji9p?_%LHaS>Uv{+ZB&81mLscBvt0_8j6e~nYhSEcO{I8z z87}u8iO9rg(UXnSviJK=1_Cz-%!-YO3T*|l^{Y3L@q(x)&>y|%4a*UjNSs@*GJ(A! zr%JcScGfu;soH!tRd96^PW5s?b1qn)l8iKC7%$CFy4YP8f*EZAH{ zC!?|<;g^TT5_)D6{@l$12EUZ|@_ zpZMQSo;dQ$rS~``C6&uqlzTwBKw9OKFyW`;>9k>sTSe+KRdTJeNzYE_THTk}THdC) zro2yrIN?>$jui7?5-xENoO^tRdGO zDSN(VuIS|@OxVM)$&R&AB+ui4D!7X3Szn&kK!#lR-Z-EE^xAfru(Jg!UQBV^*M!tp`U&rInlUzWyjs&xrypowZ&M}mvD9AyA@Tv0?A zoc8c{0>ghm<3i(C712O}zlqS|6a$pj9s%MiTEJRE5zs--WZ9Wz=fjcQIyp`)r#_u!8uLs>o7$a}n4VAGs%P!{8&&u_SU8dNLHDz1v-#Q)?6npor|O zW?Af-^UI-ioF{1X*SARC%0ld|cixk7{><)Qn`i0GIPMnZT3eqL^Uh-~+|6?PF1MMy z9zD;7HdP(=^IavbLbAXg;vFE=7&uKXkr}Mm5n>cK^UP;_;xUV3&$|j@SMz(?o}QWL zX_Yn9o)9dEJF{NslFCpL=@5^053asn7kGPhzT5B0fVQO|VRGNt$gI{V++P$@Jc|>i zT-XYzwiU5$=hzqC1c~ncZnFSE zjK-8;RaWZb<25MxN7#ft+a|=3`C<2l)E(m}vkw&I9Sn_6n|4=B^>4A|ZkZW`fkoLH z2UhZBDkp7h?};%jRSH-WH(wP-X&#tVr205N8`cB;KZ-hqs^8Z-!(s$Y^QbCHSTr8h I?h$tHUyh(POaK4? literal 0 HcmV?d00001 diff --git a/src/res/targets/53.png b/src/res/targets/53.png new file mode 100644 index 0000000000000000000000000000000000000000..8dbddb4f275d64a708ad59c9edef0380db69bbb6 GIT binary patch literal 592 zcmeAS@N?(olHy`uVBq!ia0vp^1t8491|*L?_~OmLz$EVJ;uunK>+Nkrzc&UV4uM|N z4isrbGO2nmNYR|4(>!TzqXwI6SkCjK=hNJ*+&8%}itPMv={KXkoE>Ne3MhzvC;x7L zzh3xjuEVyr_I3OB?Jc?f{(EQT(ueo#@6B2*dRa7fkL@(!?Yv)qe*L$-O0mBFyy_Bd zTg_WfmEy0NMdg0lCRnZLI!9oAPw4Dzdo$L~Slhv*cC5QaI&xXT!6&kFx9nZJ`Rm?g z1&#+6Mn#>>g$Bdv)x*mqMyGhP|~X@nIXGD{9>7vL2ab^ z`86F(^C}ABH@3cWHEHe4k4tmQ*&A)zsy^@cqI$VgRmRE*m!hXH*56?KzLL*anE9Gg zpIlJYe}_{Q%QgrWNN@aVv9bKVm9+k^osx{qjMd+do={AGvi{4{Ynlnl2`Z1yT&>dA zN>ES8)t2Rzn0e$@d*e}V7aQsKZ``%A9+3a$Y=l8j{gTe~DWM4fUXH_jV6RG}2B6~BHKX(qnh!?DKY!Q=1w*L(Jq#<7U8==uLB zn*2?0hwWc^%b-G_G|!U*w|#5=S=H)X_m!8i{IEnRP55T<;q>_S16>F1T)&~ixcB|( zv#kf(ICP#aUNNC#$ED}O5rRLaO}}>C-L|Y)$Cwiuw0!)h)Tg+cF$H z96s9T<0eL5X+6635~qy7jBLdy*K1*=S&zJm6%7;$TvDW3*FNH~aZK<}ESmDaic6Zw zzvI9~wSBK06$;|`-mKL~|1yciZ-tZc+5_9pS>Ey%vbezB_pM;@-X(Sh8U;Iko?COI zr$eRSQJ%{ZQ3+Ac2P%z%h3OqC8x%HdsWNiD)8Ubx#ALZ)%eKmI1!`#y3FqG(bmvP? zQWG~k*DB=kz^8G3VM#%XzzmK%>uc^DRWQ&m(3be-oft0h{+VlnD%13MhFF779BVl4 z%z72XGOtj}y4>mai(*cmX9wO+iG0^ln=kVAez;YW2K&4pqE#x!>R&vfLSypuSj;$L z+;tCqGwQZ)SUIO#lXL%BMPvJCQc4DUCkif9O!VBRTyQBo+dT~5r2FVdQ&MBb@0E#g* A)Bpeg literal 0 HcmV?d00001 diff --git a/src/res/targets/55.png b/src/res/targets/55.png new file mode 100644 index 0000000000000000000000000000000000000000..dc8507b472773d7b9c366c606bfc489066a22048 GIT binary patch literal 505 zcmeAS@N?(olHy`uVBq!ia0vp^1t8491|*L?_~OmLz<9vZ#WAGf*4tZWbD0bU*e>Wc zCVQPUR1IKKeKJERh$%I|txr>Nt^n^Pk7-+H$g>*u-J9$-;p?+a^N(fg@74jDg97g4 zZQdiZI8S!5M@4)8`oxCCh4XF{2L8VL@WiTH0-u9W6o#g?J)ZI7d+AThO zFW%n&{_n2GhWF;_A5daU%eWZ((bn$wsmHl9m~?~^*i2^GZ8q{?6yq{Dykpy=8W7`s z`t)4}$8Y~H6zyiYaqqg@-0ONpED;%km)99wKNKCkl54{Qvm}uPxkprPcU*k6**3o6 z=)1<9wkP~vufEG4)hfnqu>3+`!(U4#9f5?BD|=NBFfkr$dNS`r(ZnUH*%+8E4t4&vJWQ{X06rUhM$qt_}YU!@vKX zY`c(w^~7SP9;vs?dppfeCOwPc^lz}qdX*FZLDu&7m!SNE44;=T+Ht;@>CDF(>)Tg_ z73yUZ+O~c(us+UeQOJIa-|s>r(;SNf-l_)+P)Fxpy2yTqC=@ zZwSRSoeFqyVIhzuV^#9vg6a;IR=viXQvDZ1-`VXI+$le4^D)Z<4l#9Z2W0llJbhCZ zWE@uTqVK$a`($&sCkLPW{aaugnmDe84x!-(*Puu^K%7xUId(H)R%7(>rOq%h-rtk3; z6~lEqU0BML0w$>#_)ovOwSuitc3r)qruP(^`B^IuoV(@_y3qTK@Ab!V*AAS!_xIDR z@U45)lr~&e(F)u-(ZPD^^6PACOV@H;x%J|_LCsu_Evu}!b>*^3Y-`)(SgI;c?l#c# z6YVenATs;KtvYx>GVb61^zIk@@fK| z(OgqR{=W%c<3I80UXD8vaqFx+Cs^2jTlV|Ujq|FF9x>hv!Xu_#5cud8DLDw(%S;kEE_nzrMr!XsFWaQo%-P&ONS4 zqD2Bb4*q)nzUX?#ne$tJrQdk3a(=b*@#Aerrk%M~dvE&pe5Hr?n34~~r?Kee9?p(; zXIZBm&}_T(_?GpRs~tSQ{BJxkl_e{Fb5-Ylw|V=|gzq-x`7g^_)%xU1L}$*@YkO7) zf9*XW%ChQ{R^U`^n>-L$>eYQ8Kt(LX1SZJ@V z@9Ic7Ci5vfp2QaDH7eyF-Ws53@?R_WW%kht`{F+ByA;Kh?QzC_>51KXhtIrETyO-U+wN`4j(LA~?AC8gT>Z7+ mwblQP(xtGbWCn&m@_(4amcD1P7JYsfq{P$J&t;ucLK6UkiH&&x literal 0 HcmV?d00001 diff --git a/src/res/targets/6.png b/src/res/targets/6.png new file mode 100644 index 0000000000000000000000000000000000000000..6e8723c2db3114cd60dfbbd5c2869ae4f399cc84 GIT binary patch literal 602 zcmV-g0;TPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00GKLL_t(oN9~lcQNutGMOA`BLPCcwgOCyk z9a4rvhm=4G4hbp2A!Rrdewuxn^;rTjk}l%U?A&SZwC~@ZM$NzeqT}nXH6m44fWJQW z?dk2gH}UecscT9gBY_!AF^?_lt29v+jsSAU(5gkoZ&+f%2hC8W-$X(1WXgai68HGX<@+j`wdhx;K^w} zaDPbE4G_YKYTtnO@9CXaGXX>sL^+Rb%S(tLgS%&3wF5xC?+lLRhB>i{3E*R3MV>vm oL$Nepx#f`>lzSG1udk;023Sh)v)=`ki~s-t07*qoM6N<$g7-{Hb&HPv;mQ{0?0Jww?S3rS4uohK=Col~;vZB2aIOm@i~!9RO0^d0j^ zNSl<_KRsG>h0x}bRW^T(4Ag9#6U;tku~o6T9@%Jdo%LKw^1S8)`~oxPP8N|k|9Q{M z6WNLdfeB_mqB(o6@5{ZdxkY$$?)T*%iq8D~Aj=Zgdr!FHtIqpVEWfftEuZcCA)oRf zi_^F9-%XAffryi*A_Qk7ADx+zs_^|NYoq2mYxQ47X;&J5MyDm%xjk@5_!B#ee`@80 zi4JF%WxcsBJxQU!>A@x&!5Ko@jdlg{uBu{0Bhx})~jucLH8#-m zuby<(v}&_W53@MyuQ=bSmR$DxPaW_|%CEcnUzcN!&cZ0A=c_R$FH5y=PCc;da*L_(ir~;+z4@FnQ}<6WKjommda6OZ zhT8)L=IWo%^{cQ4()Cd^sDLSx}Y zi>vF?OCMP-J;!n8d!<@sXIbOoy+#~4Qv#+wk-Q-kVSBA`f#1=s+x%MgSgco-YUF1A zspb7;dEzdo2jBhb@61wLy-oLl8;uunK>+S80nTG>JSOa<| z2*#wb^aIH%k?ESoP2Rl|3~l;$spvm!{xUIEvoU5aGe48&nWs`~x<48KjX?q>eC^Ns zw@&^n&$|2WvZJx<-v_FOO*?hvd5`XfcSV)m91)UQr=yO|VA6i@=hfXRtGUTsYjmcr zJTDoXz&aM1mp6T)(L;- znkgR(dk}uiaP0xE9c7-Z%bsm!e(PX;fo}^6btg-GY3;(@yJc^1`Rs82`36(Pm)e={ xnWx`pUna6+x9p5>kEgw0`n!h*DInm?8_oV+*@B+?8)S7sVxF#kF6*2Ung9ZprOf~U literal 0 HcmV?d00001 diff --git a/src/res/targets/68.png b/src/res/targets/68.png new file mode 100644 index 0000000000000000000000000000000000000000..76ae8ea96b06eea7524d5a9323643e5e4cd2bfc1 GIT binary patch literal 576 zcmeAS@N?(olHy`uVBq!ia0vp^1t8491|*L?_~OmLz{Kw9;uunK>+Q|6zK0zI*aEyh zOib>Za$urR5SP2xLJ_ZpvlsN5B$<4Y`qRAO>35axh7FN_Qp?ikwzC7xKm`(pF>SYB zKQG9R@3;E5xbN>5#%+fC_r$+Dp6P6p)gTxr{rhsMMSh1npTVK(I_pB!W4#u)?C&4D zb!c~;&AsDyopRc>Y!X=AW?Vbi%z9&$e}nZrx8&}C<021_o=@i5I`>AP=ri-sx@6Z1 z%MC9)Sa)pBG%;7t%`r@U_DVS6<*RQJNhaErXQgiobA9-=*Ye)&kXx%ZT;IT9z`Db= zWAC%%?zc{I*?)S??gf`GG(GZXM%JrkKBXOR|Lh9Wjb%Q5Ofb1O?b(-yU+>+ltPWhh zRxBX*`R(s-=UC+Ds`|$|7YH*xlNNEjs_=R_W98gaj(R&!{*+oCfB#y`4Q``rr(f_D zUwx`IFIe^G_s`QFewqDcE2AIl%;h)#oIH>}t4pdV#{5wB^{(raZfYEgGGqBhj{Lmn`0WyhezyyJ-dGYp-T960-fMg9xeCvIK6^*x z=$4r4M_1%Le7j@y+US;=FIto5h8C<}#flkm3=Bub_Z~d)wR~w=FDObqUHx3vIVCg! E04Ns=pa1{> literal 0 HcmV?d00001 diff --git a/src/res/targets/7.png b/src/res/targets/7.png new file mode 100644 index 0000000000000000000000000000000000000000..6f4bd9c880728b5eb4abcd400ff970057d7d173b GIT binary patch literal 475 zcmV<10VMv3P)LU$`O1{9q~r*cIYLTG%9JTnQsx-B1<_g>X*60tJ~HuI>`E)ZSnC<@ zc)br+tF*MVw6w_fGCiG!2EX3ForWY~py%&RA@IC=9hXFApeJ}HFboL>uLQ!AQ1Bjs zkR%L{2fjuCB)Ss;i0Lr9;Fkz=CsNz-YYB9f6-aOwO-;e<>hB0>j z-gfhv`8BCEJD}`Zaj?q@h(9AcTA94~O%J*!30(kETO!~|Lrd)4%B)^OUX@ZkD*?#r zmiYg27hFOhj?G*)W|yyxYi|1U^OOG`@&XMY^2YJu=J Ro5cVC002ovPDHLkV1jW5&dLA) literal 0 HcmV?d00001 diff --git a/src/res/targets/70.png b/src/res/targets/70.png new file mode 100644 index 0000000000000000000000000000000000000000..c97b3f415d71640805b3bfe7fc30b55e2c088b7e GIT binary patch literal 586 zcmeAS@N?(olHy`uVBq!ia0vp^1t8491|*L?_~OmLz$EDD;uunK>+Q{hxwj2O*b-!` zzi?QVwa8gJxt)-(EbHmJQn;&;$*PjYck;H>n;jgr@(L1m9%4U!Pwc;B!U!}61=yVZ z^ZBd6a(`#TjEeey{{f#8Ni!U{}#-v9gl@42+)fycM@e*ap1 zg`t>vn$-*2c8i<_!F%h!A6}sOwg1iB*9%^i+12_#KT?^k{qvM5OS$3!8wbG<7sx8tfo2H zuPnH~M5*fSvGZoiY1vUy@LC}MokQq-W~VjFHr`pHBXeW2Zrg`_ibp=}D31?swfHWj z{LohMNao$oXJul1PJi7cF;#aDZ~4}*Vhe5bLe!*JKZpzE=0k}*5GUg|1N;7MPKz`z P8GyK+u6{1-oD!M<%MS!M literal 0 HcmV?d00001 diff --git a/src/res/targets/72.png b/src/res/targets/72.png new file mode 100644 index 0000000000000000000000000000000000000000..29cd46fca6008ba4e6cb9715fac7fdb7e8c24099 GIT binary patch literal 2401 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 TW517900000NkvXXu0mjf6IOFb literal 0 HcmV?d00001 diff --git a/src/res/targets/74.png b/src/res/targets/74.png new file mode 100644 index 0000000000000000000000000000000000000000..6fe4f4b73c3b1d7cbd225dafe9afe0997da6335b GIT binary patch literal 2805 zcmVtl!=LniHV7csU=`yVq#*l1eU-OSOTV&fXOcOUMk{K938%_o*5*ys^(@y zMt4_NcTeZ3`+u|N#fup;X3Ur|W5$dbGiJ<~F=NJz88c?gm@#9u?xaN93=NKL#{`kk6clR^b<0A>>MR9cQj2i$KBrg8C zzkmhcnuJAwe!O0r*ITj)E$8v`2H+EIOr(&D%1J;!{PA0rLLUowLR+upMY3ijd{pRv za99YDQnx0-EC2>bC=F(SMj|rN+q=2I8+yV4!0x58tWCq;2 z-Kp6DsD%iqI3#VZMPJWTatP001B$?C19u=Z7r;PV^HzBB>;TfcwAaa7FLo#_@z3&dB9U)(M&pt$;>ZIe)LWIBwoY<@YB*=A6;6x$=Fpu+jxef40 zDm~ZScWn8rLxi~P^bB)<9k-Whc#%F%s^LJS+9kwXK(Tv_FBxa%egH^C5xek zZ6BpAU^(0Oy1c~M2F4ay1@7SGc}gE&Pj#2`Z$WhC6s z$}G9`NOukmy<|FIm$rj+$MfZBQ|K@pEpkh22OvWdOLbInZd)dXk{_ueu-vz!b9rYb z3lKQD-<$;79>$9~miHhGO7MD5#(@b{B8hp=TOkDj5*{zQ%S#^bM_ux&b}G!^X!D$a zrj4XTGbs?8MljR_O&X)(^EdNC^X;>X`Fw>tz9TrQ$VlGK9>)F=BBhNGbG)VRng^P5 z8`MjCqlx*v5T033W>;J`Vthz=bYQ6BoFLD85F+c11kISR{mu4h{rxT%LU8fX1P#Ou6m3yk)*1kc|m-Ifl00wDS-0WMxVSv1CcFqt9(%vxv+6mefqAv-t-BQhQ zp(CXZrU{P@4J#RTlmegC3qx!kCT*!>LU#=i=B4tUEFZO`FeQMF45gHDV=FOPLRu`x zM1Va`OB*Gzfo<_%OK_hyV7FS~7j5>4#Zo&C0b_WPPD&p?o8_NK;d-yA<((wjbKPBZ zm(9jdl6G1BUD=4)4rXtf+Lia!-#feGeg6Lr?e(zwgX6r zIft2;=Cn|ivaGa?Pk()LK5z6^LoRJ%zG&1FVb~F1NYQGCPA;>}!YY`Hf0Wy_ea>f4 z;#+;NrQJ?r6CFDpIW@bwn;ikdvkh|tFzqADNey6wXosYoPe+PC8OXaM;52HL{VfiH zn@w@W-6bG*qQzbjh(i+g%CvYbP@1>t1bhA_t4%so4(5F!o~oOhy)DhlY(1ZDnQ-O3 zRp2RUK2Fb+Ap@nK7ltb$0Yrc<`Zkb`PmeC#FIpm7!kQ|Ey)agnR#&`bdjvm&0I5D3 zKszHTNpW#`%wDP;7pq}c=&5NO)|{f}C0A|&?3VA0%iogK3_0jg?h@B*DoR|~RBg+F z8f>JKuVHnfX_;M}(>DGT-l)}Mu4LMyU6p}Bb+aigb;jeguTB8i0ihJR@z>JD?{v%a z+%*QD%AsML)x5@*lO#B%$E-RDk9IBL1EHnnM}W4q1lT;){2g|>@>=$_wvgns85+Cz zJ6q_!7GCkOVXPfGW8-Q(i?Vj0+)zbT%KD;P?P(Wto6q5WdY`Ay&>U@x4k)U+=ABaV zD18Lsz&X&_ea*~DUdLiE0rELF>_#=xE<1bkkPOx7ATpIk)#{w*QPsg|G#7piFvp$Q zu`RSiLy)awpd|q4ZC(Ifrkwf!Y1gj?-mUp>F5f6W1xaZcR_8 zZ>w;|-id5`iY)F@8rx1Hm$TBtvJ0+T@s^H@0k(eDqn*2q1uxZF(b@?)y~~!za-SPs ze3jD)a*~<$$_=~j2_-;hj_j;BF>%SpUbjln&b6GVOGNBH2{@6J)a0LRY(D{F=cd8)CQy2bt@Et4Tex?Ixls3y@^SM{k3gO_Y&a?}?S5R2 zc}dsN*sa!_52`uat+pA{-P)1<7LYgF*OJ_}jV)e0eL|ZqHPxXrC#}t}okxkIs$-hY z$!n@k2i|TVX71CruZ2Z!9(GsxW!mhI!0o~eOCDW%mzo@o@H5$2wkx`N3mW0L2WGb? zkefy?wOgsRQMBeIOI{0}*=j)>WE<81IyunPsdq3rm&=gIdjfX>|K*$-rp)NT?7+EC zlv3lLD=|Rtk+5XBu1M8OHMwib+9l*K69?Y1i?m@omFW~27tS_|7l{EHlxu_zFIqQR z19h4D-(#iGTbf&=EkSuRrK|3iR04FefDqe{>@_diAYVN9;oscc?X_#EGkU9SKfD2Y zpM<52U}!s=({kCp@c+fZ+3jt2)xi?heu19Sn)mtP)vJFs`4Zw$j+Ax7(^eNgb+UW6 z<=QQVRGqe+tX3QWjKt-A7-rbXX_bhPzJr#FwhPGsTiD@N3_3dtUMAJ#F1V*uwzAN` zI{>+JbQ&P4y{}$=s6N?ZPk@$0da$k0X@Gr1N5{@g1K2vZ4KU}n#J8nz2z(@n{!s&} z&UH?p@b^6%ya2S+?>3?i#E$^adncMB5rBUF2;j~me(b-eoACgE{;!-~SOX-ypTGI) zK>)3?2jC~LgS&GKkiZ(iCDD&@s%CuRv7p4mw90%6z!`S}*nq9aJhsk_U7eNtLf}0V z;JOXKHD~qiJeCv%9w8Z~Zv$~w@Xqi8&}#Cb07s495#9no>HGclHy?nq>fG7FSe-MEefZoe608auh&du)E zbOSTz55zlnnJW5$dbGiJ<~F=NJz88c?gm@#9OTVkE*7Y_2>9s+2mkv-bD)`{G{r20+Ck1W%W&7{X zcjrt0airn;>#vnNW8xP7-Sgc``tRBXb@m)}JGadBTh}jMU>Ihzt^fFA#e~!Y66@Q$ zCq8<;xPwXTu2cHQYfODgToD2Vy7$5k$OIl()Ues2n&}x(k|kz#?K{pH%2tQf{gbXu zmY9lpl6=22Kw-^G3TlP3mlkk}$SS$WoxIZNigu=sRI z;oqG8v*C*yj&8rOXU6%{O*?*Ha_blA7v1nd%!>QQ<67O*>n|#QOU_LbXYJ|!A+cgV zd*7p{9h*xR8`lIKsAGMq&b2uD`HL{E2kkM9_V2saU(8?lHoK;_tmn9={3p2?>({Mq z_&a0Yk&fAq&J`TgF|k*h<$7ka#O4c3A6K2^&(l@@_cJVN{*fcH)Avj`f1D#iqTuyr zy~TSkY<2f%5{qeEJfZS`akldB?`x)A&R@8B^+$dFT3zKXrgL_w+td^0T&UpJ*~64B zc%A9l%@qwtH(v-m5_#Zakkf%hkuP4{Oo(THmfo=Vsf!Gg*qb9i?sG7*uDRu9on&zs eHIjh5J(tbTpJSXnF=fFOkesKhpUXO@geCw<)A-Z? literal 0 HcmV?d00001 diff --git a/src/res/targets/8.png b/src/res/targets/8.png new file mode 100644 index 0000000000000000000000000000000000000000..98ca5e247a0e9ddf9b6ba5715b27e5f21b7e471b GIT binary patch literal 667 zcmV;M0%ZM(P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00Ik1L_t(oN7a-)Zo)tig?)q^gEB|RF*pKc zN=lAENlBS9WlD~~QBt~d_^kb4G^~xSBp^n5+MhS`-t4aB=BZ<~dh0-0-ZvJDmu|aT z_jpJXG_cvcKBfW8F|`54yEYL|fA?p|rx*Wz3m6ZX=O)N2WxtEv_Ny1uc+6bD1MAQz za`Qs-sm3*U8?&3RFq+S8z?!I4xGoagwmlaql#z`h zsPiyrF`x7lAIqluUN8G(3lVfJShKHrji=T*nrIiBdT0*X!~QIi#RdDA*Ej&**PgW0 z9c=;btxq-~L$M=2&>=&EyAQ5wl0ZniM zO@JrTpvF@NkJe;!!c##ikx4D3qJv zI(cuvTmw<#vyOkwVs{;oCg%qH*nmGCbC~I$hKg$*`7y0x zcL_FuSL8Fe2CU(s>Aav&cv=y;lK%G*4WeP*WBw%3G(QL?83JqbtFHh6002ovPDHLkV1n|W BCT9Qu literal 0 HcmV?d00001 diff --git a/src/res/targets/84.png b/src/res/targets/84.png new file mode 100644 index 0000000000000000000000000000000000000000..797f7621cdf4b9cc4f4d01be81316c83c33cbe20 GIT binary patch literal 765 zcmeAS@N?(olHy`uVBq!ia0vp^1t8491|*L?_~OmLz;wjZ#WAGf*4x_$bEORh90I3L zNcIZQwEQ(gsK$p=Q+KZFgaxJ=NITG59eC2UNPO`%4u$(AsFC5ir)0o z_j9k*Uw>@;-FW@MdaghJ9)JCoxbNSu;@{=jHP7mvneqsDC^WJNc_?uFd6jx(`}X_W z1(*K0UVWQg{_gphU^g8hi%C1~?(UtR?>lqt_4xUF`IzP_7zlU14|;e0s?uzs=I<#9 zjR*KIin-isKB0BUsq<>9F@{aI&HO4KBi@WX@wMSg)>$f)D<;OmkE^!Mycfh5QzxIIJk-hFI>E%n` z$$ncF!KTK2Mn!(FMs3HQgP(bHRxrCqCs#*%@4aqdu)4=%PCV!J-EQr6n|s|JH0hK? zgxz7imYukleOBfdp&eS>XI0cYm0M@(TC$0yF0AekY^gnTEhOd(pJc?8)@wzlE?QMi zvz3nWPEEKJ7Nz#++Y}MWN*2F!PK)0io_BZVyNT7+3%NI6IG8V6<$E*CEoy)G%`l~c zhf)%650tdJW+y!Fux)hDU#eR7 z+`KuXyshzQs!N*e>2D%a1=*(vt`yF)HVR5TaxnGCx|hZ;!UTRSG2LKyc&F#fseF-z mEc15s+%T5FNNym3%|F?r+D_KwEImIH#PxLbb6Mw<&;$Uo%}&Dr literal 0 HcmV?d00001 diff --git a/src/res/targets/85.png b/src/res/targets/85.png new file mode 100644 index 0000000000000000000000000000000000000000..0c91fe5eb86a132160722dfddc1246cad894a2bc GIT binary patch literal 738 zcmeAS@N?(olHy`uVBq!ia0vp^1t8491|*L?_~OmLz_ilS#WAGf*4x{@ebR~o4i7E+ z`VR_5q@CQS?8oqQ`svHTiNf(J*^hHwBx_qC*uIui~0FL12Dnlop->>}_ zv)%oi`@4hctk1suOa1rb-`n%|-QQ09Jh56rVS)n_r^*Befgk&q3r1JvubohTyY}PS z&l8g`b+|IQ3%!3{xBb$D%98q@)wYfP0unDf%Qe5h&YI}{efzwV2bdav>+j)dJG*JO zp3=sBeT}Y6#lOl=$neguPF%WcpZY|gz~aN{*?o8Zb9~!WTq@5j&LP7)*?m*=afuxP z2__FRS*=+7e4a#G#`(!-I_Q^bG&(G|b9#~Kd(7& z&Gk#0Z3^ZdQ1)CbSE^E5pTo_wpGQX^qN&kS@=3+wbb%j>nBHG)Tf53e;0G&pvC+@xSinV^jyOGC7OoG#{YVVeJm5X0XMoeJun|AEn zv}s*71$z&i_&0UhfyG>Z#pbw6&X8&CyVNzQ@A;ugx1zN@e1Jb&+eFy!gVLM@tvGZ@UxC z9c$6jcdzt?XllRGrC*UtKjyHhoo`ePs9n*zwe6CS#w(+Oi$PIOj!u_}kV${Q8TjJn zwA__Hs+jtp9SrMImU=z2af+zT8o>>BQ~TnqJC!9?DAASI)UCxzqs^ zH9nl~$+c_xxyGLf>0dQUJGzuVv;swY88H(U1B1cr_=fE(zErtBy#|u@boFyt=akR{ E05i=;X#fBK literal 0 HcmV?d00001 diff --git a/src/res/targets/86.png b/src/res/targets/86.png new file mode 100644 index 0000000000000000000000000000000000000000..2f2b96b99f0e8783ba8b285f41c6deecf3722cde GIT binary patch literal 755 zcmeAS@N?(olHy`uVBq!ia0vp^1t8491|*L?_~OmLz_iQL#WAGf*4x`>d!-F|93JW> z_FF!CAr$0x%0p9A^RDU#B_wo_GnELP6@AnsfocVdmmPf!tp^-(%LxJPZ{nH)u-`}@$oA&Ac z`K|hP*726hdMs25R5#Au-7o)s`@%C9|9;PY-+X|bV~tDF{zc4=O24en%+8V){3`2i_wlg#jt{!Ia(46T zDy7erVT?nxF=6t7Q=heG9=OO?yR_HsL8DGdXqZW3p>B`u zg;Q?&jqRH*cohXzF4=HtQu2cUv8u0zU2B|;XO;cl>&(WNx-ihs-pzkr=zQMZAW5K` zR=eDpI%$zo|ADiS8QXprEVVX{cK_>caM~b$M{m)Zq1jGcBpX zFW(4OGtIx_wR+DFqwF%_9|v^4ypq@};ryVRTV`!@WamP@nhgi8hD24q)p>o+pkPPO ziZ#hsZCz832%qXWC7cy*6qI^o^63uk%jw&q9UnAbJMe=ieX^0Z?5al`H4lv*ol3w= dWCO7x__mU_L}#U}L)_HUUROO5-nm@)?6tD>t*ra(ou4LkU-1p{Qw_>f-4>+X zX+7=izZ(g)@tV=z>0W0$cia>3LENPSf27}4CSh>oO$4t`r9k-1FW(Wf+3J^h4H zWwucEn@d+t-^#a~<5tR`K*FZ{!;^QU_9%r#ztd{Mu)9XV9K?#Pq0^`CYoO1||@@2dXu z^Xs3#A3shC{ch?jG4+zwPPYebnmU!Hhu$n>{Hyn8IcM#%_3KXF-k^Wx-})zORoCx7 zUzwVxFSujjk$wNWKbia7dtn#saqpZ^arDdGD%YxSvQOGR`AFUE6~DJD#ZL;aP3Ma{ zaXa#nkn|o)cbTmRU*>%3Q`zK|?RV>Q#NS6Dw_=Rgd9frb28ILuPxZf~Po5#dQ1u?9 Nz|+;wWt~$(69C*`SquOG literal 0 HcmV?d00001 diff --git a/src/res/targets/88.png b/src/res/targets/88.png new file mode 100644 index 0000000000000000000000000000000000000000..39df4c9a19afec66c88852de9ca0422550eacc31 GIT binary patch literal 866 zcmeAS@N?(olHy`uVBq!ia0vp^1t8491|*L?_~OmLz^v)%;uunK>+PJ4xpy1{Tq6%n zU2tKc^V9`GB5^A&q*|1$2v7wQLNQHF(+ebf4L|V3C(oNY2Wr;zfDqo{&henK0hOSJA!bI06f$ZLK*BmabW@5ix`0~?=b`Ry+Yky83Zf0^9 z>R6&TVg6KuCs%iK$!z%lTF6^L=yl|!S9_~wIk8XiDA~w9i%GEEMIJuj`+2*?6#QnmXEo7%IP)mtXH#UFoL4E%D2q+jckdPctgRD5ruXC=p%1Le&eOTOuz6}-tFczo%yd3G~*OU3T|e)@$o*Gi-8 zWcw>i%RcEH`lQ7cxZ=Q6C4=u4l97*>eV=``TlxOkkXf3cjoO|rxAv>lnRFbAE)A&E z)=x2NeYWFUnf~|Bk6(Vt`#8z|y{^kO$Hn=~oi`7py96H=eRR+3M`>`9JS> z>0CXq=f&zhjw*hIT>i=T!dK{&h=t8QCGDxQ()9lZFVdQ&MBb@03Pv?EdT%j literal 0 HcmV?d00001 diff --git a/src/res/targets/89.png b/src/res/targets/89.png new file mode 100644 index 0000000000000000000000000000000000000000..56b09efb581b1d19a003acebfa4e59b4a69d3f39 GIT binary patch literal 1081 zcmV-91jhS`P) zXjTLA2DnkQS}Q{srCA!0hoa2S)dfK z8kVQY4~PV$3J38#a8Wc1QXew{H~}vkPB#fi6($dxGvPEMfQbv1*;RM8*a6Uy=kxj3 zY1S^u)p!6V4V`zuX+!`WcxB#M2@k-|>XU#g;FWd^?DBtW$406amfRbOPaDbdQR@o4g~C}8;z04P!p6-oz5z(^-+IN9_8dE|Ek=md;( zumvYqwWA*n01ZHi(A&ZCOo4{eRUH8=!*bbRK&=9JbZTUd(sO3*q9)yX|Hjs6W$3Y* z1T38%IaAQnqKl%Q_I7)kR%ez|MbSfsa;(@wi=OB`-hc0h<1GO#LeVEG1Atc|T2%+&AmD67@5ZzT5kLb_4{h0Swao;%dn2n8z#yRR z^ay0F+BBSX;jpI)0dxS?5NaLU`q}cFRdoO+1IkX9_jr-RYis_}O!)2#gH!YY2cy_D^pgNs&cEOVdJZqVN zJ@f6hfM=bphpamQJv%l48l7!@J9cCa?7g?*jBxA%KnQyA#k;g#b42 z?gnfj0@%P?0q_iQdqB_G_!R&x#H|6d@Uj3Sh-{@L0Ji2S>s(+2kewI+0jzzEx&^4e z!3*F8fEn}O?0FEt$;0Q2VH7|B-yhIB+2w(%Sr;~dD zdw)NG69K)$XZA1(;0d6&b9;x+$S~?T#ROmwuXp&24x_Cz^{hfKtiG%&1h4{lMfGJ> zA%K-zj9gWH(JIt8XaF!!1sT;hQiZj@zcpaALZ7+goi($p5)* z4fqai3qa4@Qv1&~M(4WL9VmK#-g+&7q9d}=&ORi)@5_4aTLaDnS*ZaC;Cg_&;K^e| z00CSFaL4u_gb+dqA%qY@2qA5P)+ncxlZEglGJ{*~B(1P~+1 z9`QZ$k(!5xHrlw)@$2Q#Vf*90yDPx5$MaKn{5bZeIV5h5lz>FQnE@O^H$ehGOYFx9 zc;v^TKSqM=d^-Uw)BPO#F-bZ2QUMQvj%%H_+wHn<(Y~B5)xQ@tgqc?-u%>XMTs(u- zqW^Mw?B4&JIwW&9z@5PLdhJQfCE(H+lARN)Mu4a-(Kzo81%M*noP-EmE|)&d-eIzv zH5R4IWh{Huir5L1+Gb{R?uV*f2m-2ssU#>&vX+qmboCbMfaMrq$b&Ut**hKfoyhxd z8ECgv1iW23_)^*dmhAx^)7rC9-BRkU4>vIr(9KvvvuIH6LgK{O|nx zKMAd)b$~~UC`m$O!-+)jE)(xKGAARzPU7?9)En#BMEoEe zyZ!}=x%T5X5a3H$lLTW10IIc~^35J(CK2HJo6k%g6#g@ayt%5|gr# z9fF35JX&@FSr*)o3*cQ^QTHw%2R=zk{%2mmSuDgU1O(QLI5V;pr4pk)i-aGP5peMA zaj9udq$2_5zURPV@v?RjlZ%)a$08U3xlD#gU@_~Nc{WD-eRSf{h>`MQFBM#-pJPY@>}f+GwMVHY$uS8L92)o_UJr00000 LNkvXXu0mjfmHkr? literal 0 HcmV?d00001 diff --git a/src/res/targets/91.png b/src/res/targets/91.png new file mode 100644 index 0000000000000000000000000000000000000000..c2515d1ed8298fa2e35accd831bef6fb3ce1aa84 GIT binary patch literal 754 zcmeAS@N?(olHy`uVBq!ia0vp^1t8491|*L?_~OmLz_ioT#WAGf*4sM=b8kBcxFt@V zAQaSe+Cx+8XzGs{MnO(q1)P?z)T$-<45f5c<#n<+YxpHDB)qtM*xuTEU9knwAS~ei z2}{v$YVV(Z{r>a)OOsg7J2Uq@p8x&x?ce)dAM`)g?yUBTJCS`gWzr7g%E*M@JMZQz zdEW8-G;7T~2Tz%ryWEMUjf(o~Sl+4BMrLqa@nZMCAI{?SZ~@cmJvs*4FNU%3schJK zB<|O$1K;L|S*gIPj%c0#WnRIRy!W(l`iWe7 z@B4f#>vEs0t+$>qW53Indq*ai|ESwg*SmsKrQie0J)sq~?^g7F+vhgHe8Y|vyB5CZ zP$@DgtgH`bpJ{bqN_eJ=UFf~_k2jTC{Hd9#mGaEk@U(cx&zY`|p1+^`!=+MD%j}h+ z!TuZjEc^`rS9{D`GHJ)&J!%T_QBf>rlJh53F)jacw(~5LXN}XRPrJ_vOk#azHtX_q z)=5898o!=M@R+^MGhyv7pWSUX)kk>0S5#&PT;IR)()3R5MqfXvl4&PP{Zu=pm+Ie& zyZ8L6Sd^;Xr@Xa|#Y&tt3BRt{-HKaUFl|T3F8T9rUHVZkbY>i3_nlYy_cUkD^*I|< zI|HBAO`U$);Il&G-X~ALZZMyE?NoYl5x40X9)%5cCt|HRYmB>1I{gB)5hIN>D*1=EZs5vMQY!qu&bIN|zFyUDeP{I7n#6y$n(?h=XX&KxDV-BfMC~;- z5PIW(maWoy^8MbrRNgQ0@;qvWF6-V3SO0cPPhu0T^hkGpecydanCG3ilrm7-#R4|? Z+cESk^9q=-QG60e+SAp~Wt~$(69C_KQ4s(D literal 0 HcmV?d00001 diff --git a/src/res/tp_npc.png b/src/res/tp_npc.png deleted file mode 100644 index 50a0ffae134a235ba7fe5b7df909d8a19ab48219..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1035 zcmV+m1oZofP)N2bZe?^J zG%heMF*ZbLuk`=`1BgjPK~zXft(0v{Q)d*%OM5GgT-x$-c`JPpXn~p1j#dbf+EPa4 zrLYQVk(Uk(f}j>;G$;fKh(w|eY$C7}bYjewVK5SvmtX>9-Aq^(w`4JX@yoL9Lt~}} z{jy~FdoNr+nV9wBFL}N^_kYgGJuK}#!@u#iM0HD?vMQFMtAVa$#^V0 z7{GT60jw;K<0n4>Pq7&OYg1?|-_u0P_}l8xkbco}e6{ab0Tc;|aFmr}WMT&1q088# z(}6D({y5R^f^X~sJUu;}{=l-&@)^QKB3Mjj+`2l6^*{jka}VN7Tq=%`2~_SrJ+6K| z4pJe*j+9ZR#a@ah#;U(mp?AHas&`~49Mei=`7V+M#2xid2 z869Wp&7@=UEDRYjxP7q%;)q?G+wvaY&dr^Awy_BRP%XM^vl0Al5hG1nI2#)D ztYl}DY7Ge7yo*A|A;@L%*!W=)v)|7^u2QYCk{$8nnX?6(|GdN%jR6r73Hra9#LWB} z&Wq(Ar9kk{z|VMI-;PV8eyGLK_Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00iSnL_t(YOQn^2OjCCh$D6p#h=L;EGLaw# zu|*lBK&7RY(n4DvZGlqk07YH}1d)M4)lI@gDo%L~5G62y2?iWYBoGuI^RYPw3>`68 zA245=iK|i4gg=&icYhajW^u~!lbqb&%{}LP&iTDA<4tsk+|Q6_>DF9UqoG(AEeO-e zSi*J454AP#jI^hn-i4k(_bW+m0?#WQt>)*CAH#HS6u+D(njB3Dd3Hb|NuyjGr#xrL zJ)PLJUlWbVdkvU;(1E8nTQHuh!T5Li7(7*s@?E|OPYxGRW)fenmM%S ztHk@OZ`9@+@Ci>bNZ$LDUZ$~A2VpMSh-Q%&+6yCbLBU4n?i^gmj(wTn-*&p80#=rm zM`%$3sa($V*A*szik5>1AYAK)cA*EWQs8aA^SKDO5+n$Bv_sS8cvQW?BLG!_bu1RvSi6D8n$ELR1Jo@>+x-6DV^l}@iHVR!$2hn zVAxt%>+1Iy@O6O!HuJ3^=JJrAl8zl*d-Q8Pp!eZpd$0!Qn@MmRUFpNCjkuH`gU`~% zT?^;V4`4a281!;uLFFyMYUh=3S-!lB7H2RPQ^wGh==E4=IS*x7dTa;@LS0b-GTlDL zl6h8LhRhV0ZZzV0ZzD=lwdiXqqZYLpeGLY9eYk*B`R1KNF<0cn>aQ!>ggvR5_$n_C zB|&^xzCWix?96p-Fzk5NUa=R2>JXT|Pee~~6u!*bg3GPt_$(#{Di1N1*)Exw)_OhV zTVkwA^icsTot#QJYu3Qd+9r4U6GO%nb7T&V7>VcLexn*UGq_moV2>DI6%J&kAz2m$ z9>C&?RIecf^LP%Sc5aVSp9!D>fmGUu~H!wo)jKXn}@ zwuQh*bupIA$J6W}91IFXI$w;mwIam13ns_`eeL0T8)aMb&JgiQeHhgR4_DP}oR+gO z9L=UXB1Xo|axW-Z!V6?dr$c83xw47)^PFH>tV+y9sV^5J8~#b~!hVfqBb6hV`FeDQ zdRlY`vVS58h>h!fuy?Ho+?|||E)GCzij?lAUo$0sBaV#(ch1Zckbgn1+LN9d(t$C7 zgD?0FI9nb8<1sC6)kWe?r2>8HeNZj%hVRlvSZ49T%N_Vef>#Pzwb?53pXcJ~t$Fv5 z62|QUY<6*gpZ6*x2Cu?kofat(0=PKXk*Z^-BHx0BAIMIZN&ASn`DYy_hg0#ScO%I7 z=J9CEe{arF%FUWsX@*oYH_3b-y`R66bUZfIQn76{qQ@dm>t>MD>MGn63%C#$mm zlCrpA(=P80`2l5xM;fKBQu@l3Gev$c#xsY(_#4&B$FNCxwOjxI002ovPDHLkV1idO Beq8_n diff --git a/src/res/tp_target.png b/src/res/tp_target.png deleted file mode 100644 index fb5e5ac355a96ca432a986199699e386a0a547dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1104 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