From 805fd89a6141d1056defb9ab32752a09cb43a8c3 Mon Sep 17 00:00:00 2001 From: daretmavi Date: Thu, 18 Mar 2021 18:02:46 +0100 Subject: [PATCH] My mod changes/patches update --- .gitattributes | 3 +- buildscripts/03_my_updates.sh | 4 +- my_changes/LICENSE.txt | 9 + .../environment/dynamic_liquid/bucket.patch | 28 + my_changes/_not-used/gui/craftguide/init.lua | 2347 +++++++++++++++++ my_changes/_not-used/hunger_ng/effects.patch | 14 + my_changes/_not-used/hunger_ng/init.lua | 155 ++ my_changes/_not-used/water_life/files/hud.lua | 88 + .../_not-used/water_life/files/spawn.lua | 394 +++ my_changes/_not-used/water_life/poison.patch | 77 + .../water_life/poison_dead_only.patch | 40 + my_changes/buildings/doors/doors_update.patch | 72 + .../buildings/doors/doors_update54.patch | 281 ++ .../buildings/mg_villages/old_villages.patch | 52 + .../buildings/mg_villages/villages.patch | 34 + .../ts_doors/ts_doors_update54.patch | 68 + my_changes/gui/i3/progressive_creative.patch | 13 + .../textures/doc_awards_icon_generic.png | Bin 0 -> 274 bytes .../textures/doc_button_icon_lores.png | Bin 0 -> 274 bytes .../inventory_plus_doc_inventory_plus.png | Bin 0 -> 274 bytes .../smart_inventory_compress_button.png | Bin 0 -> 362 bytes .../smart_inventory_craftable_button.png | Bin 0 -> 442 bytes ...rt_inventory_crafting_inventory_button.png | Bin 0 -> 326 bytes .../smart_inventory_creative_button.png | Bin 0 -> 339 bytes .../textures/smart_inventory_exit_button.png | Bin 0 -> 310 bytes .../textures/smart_inventory_get1_button.png | Bin 0 -> 315 bytes .../textures/smart_inventory_get2_button.png | Bin 0 -> 311 bytes .../textures/smart_inventory_get3_button.png | Bin 0 -> 333 bytes ...rt_inventory_preview_to_crafting_field.png | Bin 0 -> 333 bytes .../smart_inventory_reveal_tips_button.png | Bin 0 -> 431 bytes .../textures/smart_inventory_save1_button.png | Bin 0 -> 318 bytes .../textures/smart_inventory_save2_button.png | Bin 0 -> 313 bytes .../textures/smart_inventory_save3_button.png | Bin 0 -> 335 bytes .../smart_inventory_swapline_button.png | Bin 0 -> 360 bytes .../textures/smart_inventory_sweep_button.png | Bin 0 -> 377 bytes .../smart_inventory_trash_all_button.png | Bin 0 -> 369 bytes .../mobs/mobs_mobkit/petz/petz/user.conf | 15 + .../water_life/files/apa_patch.lua | 11 + .../mobs/mobs_mobkit/water_life/files/api.lua | 900 +++++++ .../water_life/files/behaviors.lua | 1367 ++++++++++ .../mobs_mobkit/water_life/files/crafts.lua | 558 ++++ .../mobs/mobs_mobkit/water_life/files/hud.lua | 82 + .../mobs_mobkit/water_life/files/init.lua | 4 +- .../water_life/files/settingtypes.txt | 81 + .../mobs_mobkit/water_life/files/spawn.lua | 442 ++++ .../mobs/mobs_mobkit/water_life/poison.patch | 41 + .../water_life/poison_hunger_ng.patch | 62 + .../mobs_mobs/advanced_npc/adv_npc_log.patch | 354 +++ .../mobs_mobs/advanced_npc/bugtrade184.patch | 22 + .../mobs/mobs_mobs/goblins/goblins_nil.patch | 33 + .../mobs/mobs_mobs/mg_villages_npc/bug.patch | 26 + .../mobs_mobs/mg_villages_npc/patch_log.patch | 13 + my_changes/player/fire_plus/extend_fire.patch | 82 + my_changes/player/hbsprint/no_damage.patch | 13 + .../skinsdb/meta/character_female_1.txt | 4 + .../skinsdb/meta/character_female_10.txt | 4 + .../skinsdb/meta/character_female_11.txt | 4 + .../skinsdb/meta/character_female_12.txt | 4 + .../skinsdb/meta/character_female_13.txt | 4 + .../skinsdb/meta/character_female_14.txt | 4 + .../skinsdb/meta/character_female_15.txt | 4 + .../skinsdb/meta/character_female_16.txt | 4 + .../skinsdb/meta/character_female_17.txt | 4 + .../skinsdb/meta/character_female_18.txt | 4 + .../skinsdb/meta/character_female_19.txt | 4 + .../skinsdb/meta/character_female_2.txt | 4 + .../skinsdb/meta/character_female_20.txt | 4 + .../skinsdb/meta/character_female_21.txt | 4 + .../skinsdb/meta/character_female_22.txt | 4 + .../skinsdb/meta/character_female_23.txt | 4 + .../skinsdb/meta/character_female_24.txt | 4 + .../skinsdb/meta/character_female_25.txt | 4 + .../skinsdb/meta/character_female_26.txt | 4 + .../skinsdb/meta/character_female_27.txt | 4 + .../skinsdb/meta/character_female_28.txt | 4 + .../skinsdb/meta/character_female_29.txt | 4 + .../skinsdb/meta/character_female_3.txt | 4 + .../skinsdb/meta/character_female_30.txt | 4 + .../skinsdb/meta/character_female_31.txt | 4 + .../skinsdb/meta/character_female_32.txt | 4 + .../skinsdb/meta/character_female_33.txt | 4 + .../skinsdb/meta/character_female_34.txt | 4 + .../skinsdb/meta/character_female_35.txt | 4 + .../skinsdb/meta/character_female_36.txt | 4 + .../skinsdb/meta/character_female_37.txt | 4 + .../skinsdb/meta/character_female_38.txt | 4 + .../skinsdb/meta/character_female_39.txt | 4 + .../skinsdb/meta/character_female_4.txt | 4 + .../skinsdb/meta/character_female_40.txt | 4 + .../skinsdb/meta/character_female_41.txt | 4 + .../skinsdb/meta/character_female_42.txt | 4 + .../skinsdb/meta/character_female_43.txt | 4 + .../skinsdb/meta/character_female_44.txt | 4 + .../skinsdb/meta/character_female_45.txt | 4 + .../skinsdb/meta/character_female_46.txt | 4 + .../skinsdb/meta/character_female_47.txt | 4 + .../skinsdb/meta/character_female_48.txt | 4 + .../skinsdb/meta/character_female_49.txt | 4 + .../skinsdb/meta/character_female_5.txt | 4 + .../skinsdb/meta/character_female_50.txt | 4 + .../skinsdb/meta/character_female_51.txt | 4 + .../skinsdb/meta/character_female_52.txt | 4 + .../skinsdb/meta/character_female_53.txt | 4 + .../skinsdb/meta/character_female_54.txt | 4 + .../skinsdb/meta/character_female_55.txt | 4 + .../skinsdb/meta/character_female_6.txt | 4 + .../skinsdb/meta/character_female_7.txt | 4 + .../skinsdb/meta/character_female_8.txt | 4 + .../skinsdb/meta/character_female_9.txt | 4 + .../skinsdb/meta/character_male_100.txt | 4 + .../skinsdb/meta/character_male_101.txt | 4 + .../skinsdb/meta/character_male_102.txt | 4 + .../skinsdb/meta/character_male_103.txt | 4 + .../skinsdb/meta/character_male_104.txt | 4 + .../skinsdb/meta/character_male_105.txt | 4 + .../skinsdb/meta/character_male_106.txt | 4 + .../skinsdb/meta/character_male_107.txt | 4 + .../skinsdb/meta/character_male_108.txt | 4 + .../skinsdb/meta/character_male_109.txt | 4 + .../skinsdb/meta/character_male_110.txt | 4 + .../skinsdb/meta/character_male_111.txt | 4 + .../skinsdb/meta/character_male_112.txt | 4 + .../skinsdb/meta/character_male_113.txt | 4 + .../skinsdb/meta/character_male_114.txt | 4 + .../skinsdb/meta/character_male_115.txt | 4 + .../skinsdb/meta/character_male_116.txt | 4 + .../skinsdb/meta/character_male_117.txt | 4 + .../skinsdb/meta/character_male_118.txt | 4 + .../skinsdb/meta/character_male_119.txt | 4 + .../skinsdb/meta/character_male_120.txt | 4 + .../skinsdb/meta/character_male_121.txt | 4 + .../skinsdb/meta/character_male_122.txt | 4 + .../skinsdb/meta/character_male_123.txt | 4 + .../skinsdb/meta/character_male_124.txt | 4 + .../skinsdb/meta/character_male_125.txt | 4 + .../skinsdb/meta/character_male_126.txt | 4 + .../skinsdb/meta/character_male_127.txt | 4 + .../skinsdb/meta/character_male_128.txt | 4 + .../skinsdb/meta/character_male_129.txt | 4 + .../skinsdb/meta/character_male_130.txt | 4 + .../skinsdb/meta/character_male_131.txt | 4 + .../skinsdb/meta/character_male_132.txt | 4 + .../skinsdb/meta/character_male_133.txt | 4 + .../skinsdb/meta/character_male_134.txt | 4 + .../skinsdb/meta/character_male_135.txt | 4 + .../skinsdb/meta/character_male_136.txt | 4 + .../skinsdb/meta/character_male_137.txt | 4 + .../skinsdb/meta/character_male_138.txt | 4 + .../skinsdb/meta/character_male_139.txt | 4 + .../skinsdb/meta/character_male_140.txt | 4 + .../skinsdb/meta/character_male_141.txt | 4 + .../skinsdb/meta/character_male_142.txt | 4 + .../skinsdb/meta/character_male_143.txt | 4 + .../skinsdb/meta/character_male_144.txt | 4 + .../skinsdb/meta/character_male_145.txt | 4 + .../skinsdb/meta/character_male_146.txt | 4 + .../skinsdb/meta/character_male_147.txt | 4 + .../skinsdb/meta/character_male_148.txt | 4 + .../skinsdb/meta/character_male_149.txt | 4 + .../skinsdb/meta/character_male_150.txt | 4 + .../skinsdb/meta/character_male_151.txt | 4 + .../skinsdb/meta/character_male_152.txt | 4 + .../skinsdb/meta/character_male_153.txt | 4 + .../skinsdb/meta/character_male_154.txt | 4 + .../skinsdb/meta/character_xcost_200.txt | 4 + .../skinsdb/meta/character_xcost_201.txt | 4 + .../skinsdb/meta/character_xcost_202.txt | 4 + .../skinsdb/meta/character_xcost_203.txt | 4 + .../skinsdb/meta/character_xcost_204.txt | 4 + .../skinsdb/meta/character_xcost_205.txt | 4 + .../skinsdb/meta/character_xcost_206.txt | 4 + .../skinsdb/meta/character_xcost_207.txt | 4 + .../skinsdb/meta/character_xcost_208.txt | 4 + .../skinsdb/meta/character_xcost_209.txt | 4 + .../skinsdb/meta/character_xcost_210.txt | 4 + .../skinsdb/meta/character_xcost_211.txt | 4 + .../skinsdb/meta/character_xcost_212.txt | 4 + .../skinsdb/meta/character_xcost_213.txt | 4 + .../skinsdb/meta/character_xcost_214.txt | 4 + .../skinsdb/meta/character_xcost_215.txt | 4 + .../skinsdb/meta/character_xcost_216.txt | 4 + .../skinsdb/meta/character_xcost_217.txt | 4 + .../skinsdb/meta/character_xcost_218.txt | 4 + .../skinsdb/meta/character_xcost_219.txt | 4 + .../skinsdb/meta/character_xcost_220.txt | 4 + .../skinsdb/meta/character_xcost_221.txt | 4 + .../skinsdb/meta/character_xcost_222.txt | 4 + .../skinsdb/meta/character_xcost_223.txt | 4 + .../skinsdb/meta/character_xcost_224.txt | 4 + .../skinsdb/meta/character_xcost_225.txt | 4 + .../skinsdb/meta/character_xcost_226.txt | 4 + .../skinsdb/meta/character_xcost_227.txt | 4 + .../skinsdb/meta/character_xcost_228.txt | 4 + .../skinsdb/meta/character_xcost_229.txt | 4 + .../skinsdb/meta/character_xcost_230.txt | 4 + .../skinsdb/textures/character_female_1.png | Bin 0 -> 1417 bytes .../skinsdb/textures/character_female_10.png | Bin 0 -> 1198 bytes .../skinsdb/textures/character_female_11.png | Bin 0 -> 900 bytes .../skinsdb/textures/character_female_12.png | Bin 0 -> 1360 bytes .../skinsdb/textures/character_female_13.png | Bin 0 -> 2062 bytes .../skinsdb/textures/character_female_14.png | Bin 0 -> 5725 bytes .../skinsdb/textures/character_female_15.png | Bin 0 -> 1214 bytes .../skinsdb/textures/character_female_16.png | Bin 0 -> 1118 bytes .../skinsdb/textures/character_female_17.png | Bin 0 -> 739 bytes .../skinsdb/textures/character_female_18.png | Bin 0 -> 1037 bytes .../skinsdb/textures/character_female_19.png | Bin 0 -> 1195 bytes .../skinsdb/textures/character_female_2.png | Bin 0 -> 1276 bytes .../skinsdb/textures/character_female_20.png | Bin 0 -> 755 bytes .../skinsdb/textures/character_female_21.png | Bin 0 -> 870 bytes .../skinsdb/textures/character_female_22.png | Bin 0 -> 3172 bytes .../skinsdb/textures/character_female_23.png | Bin 0 -> 3120 bytes .../skinsdb/textures/character_female_24.png | Bin 0 -> 8325 bytes .../skinsdb/textures/character_female_25.png | Bin 0 -> 987 bytes .../skinsdb/textures/character_female_26.png | Bin 0 -> 1351 bytes .../skinsdb/textures/character_female_27.png | Bin 0 -> 1345 bytes .../skinsdb/textures/character_female_28.png | Bin 0 -> 873 bytes .../skinsdb/textures/character_female_29.png | Bin 0 -> 1717 bytes .../skinsdb/textures/character_female_3.png | Bin 0 -> 2854 bytes .../skinsdb/textures/character_female_30.png | Bin 0 -> 1530 bytes .../skinsdb/textures/character_female_31.png | Bin 0 -> 2078 bytes .../skinsdb/textures/character_female_32.png | Bin 0 -> 8304 bytes .../skinsdb/textures/character_female_33.png | Bin 0 -> 8304 bytes .../skinsdb/textures/character_female_34.png | Bin 0 -> 8325 bytes .../skinsdb/textures/character_female_35.png | Bin 0 -> 8325 bytes .../skinsdb/textures/character_female_36.png | Bin 0 -> 707 bytes .../skinsdb/textures/character_female_37.png | Bin 0 -> 2214 bytes .../skinsdb/textures/character_female_38.png | Bin 0 -> 2144 bytes .../skinsdb/textures/character_female_39.png | Bin 0 -> 2165 bytes .../skinsdb/textures/character_female_4.png | Bin 0 -> 1996 bytes .../skinsdb/textures/character_female_40.png | Bin 0 -> 1055 bytes .../skinsdb/textures/character_female_41.png | Bin 0 -> 3563 bytes .../skinsdb/textures/character_female_42.png | Bin 0 -> 1621 bytes .../skinsdb/textures/character_female_43.png | Bin 0 -> 8325 bytes .../skinsdb/textures/character_female_44.png | Bin 0 -> 8325 bytes .../skinsdb/textures/character_female_45.png | Bin 0 -> 8325 bytes .../skinsdb/textures/character_female_46.png | Bin 0 -> 1733 bytes .../skinsdb/textures/character_female_47.png | Bin 0 -> 1922 bytes .../skinsdb/textures/character_female_48.png | Bin 0 -> 936 bytes .../skinsdb/textures/character_female_49.png | Bin 0 -> 1705 bytes .../skinsdb/textures/character_female_5.png | Bin 0 -> 731 bytes .../skinsdb/textures/character_female_50.png | Bin 0 -> 1456 bytes .../skinsdb/textures/character_female_51.png | Bin 0 -> 8399 bytes .../skinsdb/textures/character_female_52.png | Bin 0 -> 1241 bytes .../skinsdb/textures/character_female_53.png | Bin 0 -> 750 bytes .../skinsdb/textures/character_female_54.png | Bin 0 -> 1234 bytes .../skinsdb/textures/character_female_55.png | Bin 0 -> 3230 bytes .../skinsdb/textures/character_female_6.png | Bin 0 -> 1232 bytes .../skinsdb/textures/character_female_7.png | Bin 0 -> 1180 bytes .../skinsdb/textures/character_female_8.png | Bin 0 -> 1921 bytes .../skinsdb/textures/character_female_9.png | Bin 0 -> 1216 bytes .../skinsdb/textures/character_male_100.png | Bin 0 -> 3152 bytes .../skinsdb/textures/character_male_101.png | Bin 0 -> 2201 bytes .../skinsdb/textures/character_male_102.png | Bin 0 -> 3544 bytes .../skinsdb/textures/character_male_103.png | Bin 0 -> 966 bytes .../skinsdb/textures/character_male_104.png | Bin 0 -> 3001 bytes .../skinsdb/textures/character_male_105.png | Bin 0 -> 1619 bytes .../skinsdb/textures/character_male_106.png | Bin 0 -> 2702 bytes .../skinsdb/textures/character_male_107.png | Bin 0 -> 1090 bytes .../skinsdb/textures/character_male_108.png | Bin 0 -> 1202 bytes .../skinsdb/textures/character_male_109.png | Bin 0 -> 1772 bytes .../skinsdb/textures/character_male_110.png | Bin 0 -> 934 bytes .../skinsdb/textures/character_male_111.png | Bin 0 -> 2793 bytes .../skinsdb/textures/character_male_112.png | Bin 0 -> 1491 bytes .../skinsdb/textures/character_male_113.png | Bin 0 -> 695 bytes .../skinsdb/textures/character_male_114.png | Bin 0 -> 1904 bytes .../skinsdb/textures/character_male_115.png | Bin 0 -> 898 bytes .../skinsdb/textures/character_male_116.png | Bin 0 -> 785 bytes .../skinsdb/textures/character_male_117.png | Bin 0 -> 531 bytes .../skinsdb/textures/character_male_118.png | Bin 0 -> 2516 bytes .../skinsdb/textures/character_male_119.png | Bin 0 -> 721 bytes .../skinsdb/textures/character_male_120.png | Bin 0 -> 1938 bytes .../skinsdb/textures/character_male_121.png | Bin 0 -> 1524 bytes .../skinsdb/textures/character_male_122.png | Bin 0 -> 2502 bytes .../skinsdb/textures/character_male_123.png | Bin 0 -> 1689 bytes .../skinsdb/textures/character_male_124.png | Bin 0 -> 1686 bytes .../skinsdb/textures/character_male_125.png | Bin 0 -> 1210 bytes .../skinsdb/textures/character_male_126.png | Bin 0 -> 3520 bytes .../skinsdb/textures/character_male_127.png | Bin 0 -> 983 bytes .../skinsdb/textures/character_male_128.png | Bin 0 -> 1839 bytes .../skinsdb/textures/character_male_129.png | Bin 0 -> 997 bytes .../skinsdb/textures/character_male_130.png | Bin 0 -> 926 bytes .../skinsdb/textures/character_male_131.png | Bin 0 -> 592 bytes .../skinsdb/textures/character_male_132.png | Bin 0 -> 3322 bytes .../skinsdb/textures/character_male_133.png | Bin 0 -> 1742 bytes .../skinsdb/textures/character_male_134.png | Bin 0 -> 756 bytes .../skinsdb/textures/character_male_135.png | Bin 0 -> 1292 bytes .../skinsdb/textures/character_male_136.png | Bin 0 -> 878 bytes .../skinsdb/textures/character_male_137.png | Bin 0 -> 1016 bytes .../skinsdb/textures/character_male_138.png | Bin 0 -> 1422 bytes .../skinsdb/textures/character_male_139.png | Bin 0 -> 1667 bytes .../skinsdb/textures/character_male_140.png | Bin 0 -> 520 bytes .../skinsdb/textures/character_male_141.png | Bin 0 -> 2022 bytes .../skinsdb/textures/character_male_142.png | Bin 0 -> 27251 bytes .../skinsdb/textures/character_male_143.png | Bin 0 -> 8325 bytes .../skinsdb/textures/character_male_144.png | Bin 0 -> 1202 bytes .../skinsdb/textures/character_male_145.png | Bin 0 -> 8304 bytes .../skinsdb/textures/character_male_146.png | Bin 0 -> 2146 bytes .../skinsdb/textures/character_male_147.png | Bin 0 -> 901 bytes .../skinsdb/textures/character_male_148.png | Bin 0 -> 626 bytes .../skinsdb/textures/character_male_149.png | Bin 0 -> 2401 bytes .../skinsdb/textures/character_male_150.png | Bin 0 -> 1001 bytes .../skinsdb/textures/character_male_151.png | Bin 0 -> 2269 bytes .../skinsdb/textures/character_male_152.png | Bin 0 -> 1021 bytes .../skinsdb/textures/character_male_153.png | Bin 0 -> 2526 bytes .../skinsdb/textures/character_male_154.png | Bin 0 -> 1730 bytes .../skinsdb/textures/character_xcost_200.png | Bin 0 -> 1896 bytes .../skinsdb/textures/character_xcost_201.png | Bin 0 -> 647 bytes .../skinsdb/textures/character_xcost_202.png | Bin 0 -> 2509 bytes .../skinsdb/textures/character_xcost_203.png | Bin 0 -> 1228 bytes .../skinsdb/textures/character_xcost_204.png | Bin 0 -> 977 bytes .../skinsdb/textures/character_xcost_205.png | Bin 0 -> 1447 bytes .../skinsdb/textures/character_xcost_206.png | Bin 0 -> 1176 bytes .../skinsdb/textures/character_xcost_207.png | Bin 0 -> 2734 bytes .../skinsdb/textures/character_xcost_208.png | Bin 0 -> 1525 bytes .../skinsdb/textures/character_xcost_209.png | Bin 0 -> 890 bytes .../skinsdb/textures/character_xcost_210.png | Bin 0 -> 1037 bytes .../skinsdb/textures/character_xcost_211.png | Bin 0 -> 886 bytes .../skinsdb/textures/character_xcost_212.png | Bin 0 -> 587 bytes .../skinsdb/textures/character_xcost_213.png | Bin 0 -> 1198 bytes .../skinsdb/textures/character_xcost_214.png | Bin 0 -> 3397 bytes .../skinsdb/textures/character_xcost_215.png | Bin 0 -> 871 bytes .../skinsdb/textures/character_xcost_216.png | Bin 0 -> 1138 bytes .../skinsdb/textures/character_xcost_217.png | Bin 0 -> 1359 bytes .../skinsdb/textures/character_xcost_218.png | Bin 0 -> 18058 bytes .../skinsdb/textures/character_xcost_219.png | Bin 0 -> 2625 bytes .../skinsdb/textures/character_xcost_220.png | Bin 0 -> 2256 bytes .../skinsdb/textures/character_xcost_221.png | Bin 0 -> 2321 bytes .../skinsdb/textures/character_xcost_222.png | Bin 0 -> 1050 bytes .../skinsdb/textures/character_xcost_223.png | Bin 0 -> 2720 bytes .../skinsdb/textures/character_xcost_224.png | Bin 0 -> 6493 bytes .../skinsdb/textures/character_xcost_225.png | Bin 0 -> 2757 bytes .../skinsdb/textures/character_xcost_226.png | Bin 0 -> 1005 bytes .../skinsdb/textures/character_xcost_227.png | Bin 0 -> 4431 bytes .../skinsdb/textures/character_xcost_228.png | Bin 0 -> 597 bytes .../skinsdb/textures/character_xcost_229.png | Bin 0 -> 2162 bytes .../skinsdb/textures/character_xcost_230.png | Bin 0 -> 555 bytes 336 files changed, 8343 insertions(+), 6 deletions(-) create mode 100644 my_changes/LICENSE.txt create mode 100644 my_changes/_not-used/environment/dynamic_liquid/bucket.patch create mode 100644 my_changes/_not-used/gui/craftguide/init.lua create mode 100644 my_changes/_not-used/hunger_ng/effects.patch create mode 100644 my_changes/_not-used/hunger_ng/init.lua create mode 100644 my_changes/_not-used/water_life/files/hud.lua create mode 100644 my_changes/_not-used/water_life/files/spawn.lua create mode 100644 my_changes/_not-used/water_life/poison.patch create mode 100644 my_changes/_not-used/water_life/poison_dead_only.patch create mode 100644 my_changes/buildings/doors/doors_update.patch create mode 100644 my_changes/buildings/doors/doors_update54.patch create mode 100644 my_changes/buildings/mg_villages/old_villages.patch create mode 100644 my_changes/buildings/mg_villages/villages.patch create mode 100644 my_changes/buildings/ts_doors/ts_doors_update54.patch create mode 100644 my_changes/gui/i3/progressive_creative.patch create mode 100644 my_changes/gui/smart_inventory/textures/doc_awards_icon_generic.png create mode 100644 my_changes/gui/smart_inventory/textures/doc_button_icon_lores.png create mode 100644 my_changes/gui/smart_inventory/textures/inventory_plus_doc_inventory_plus.png create mode 100644 my_changes/gui/smart_inventory/textures/smart_inventory_compress_button.png create mode 100644 my_changes/gui/smart_inventory/textures/smart_inventory_craftable_button.png create mode 100644 my_changes/gui/smart_inventory/textures/smart_inventory_crafting_inventory_button.png create mode 100644 my_changes/gui/smart_inventory/textures/smart_inventory_creative_button.png create mode 100644 my_changes/gui/smart_inventory/textures/smart_inventory_exit_button.png create mode 100644 my_changes/gui/smart_inventory/textures/smart_inventory_get1_button.png create mode 100644 my_changes/gui/smart_inventory/textures/smart_inventory_get2_button.png create mode 100644 my_changes/gui/smart_inventory/textures/smart_inventory_get3_button.png create mode 100644 my_changes/gui/smart_inventory/textures/smart_inventory_preview_to_crafting_field.png create mode 100644 my_changes/gui/smart_inventory/textures/smart_inventory_reveal_tips_button.png create mode 100644 my_changes/gui/smart_inventory/textures/smart_inventory_save1_button.png create mode 100644 my_changes/gui/smart_inventory/textures/smart_inventory_save2_button.png create mode 100644 my_changes/gui/smart_inventory/textures/smart_inventory_save3_button.png create mode 100644 my_changes/gui/smart_inventory/textures/smart_inventory_swapline_button.png create mode 100644 my_changes/gui/smart_inventory/textures/smart_inventory_sweep_button.png create mode 100644 my_changes/gui/smart_inventory/textures/smart_inventory_trash_all_button.png create mode 100644 my_changes/mobs/mobs_mobkit/petz/petz/user.conf create mode 100644 my_changes/mobs/mobs_mobkit/water_life/files/apa_patch.lua create mode 100644 my_changes/mobs/mobs_mobkit/water_life/files/api.lua create mode 100644 my_changes/mobs/mobs_mobkit/water_life/files/behaviors.lua create mode 100644 my_changes/mobs/mobs_mobkit/water_life/files/crafts.lua create mode 100644 my_changes/mobs/mobs_mobkit/water_life/files/hud.lua rename mods/mobs/mobs_mobkit/water_life/init.lua.orig => my_changes/mobs/mobs_mobkit/water_life/files/init.lua (99%) create mode 100644 my_changes/mobs/mobs_mobkit/water_life/files/settingtypes.txt create mode 100644 my_changes/mobs/mobs_mobkit/water_life/files/spawn.lua create mode 100644 my_changes/mobs/mobs_mobkit/water_life/poison.patch create mode 100644 my_changes/mobs/mobs_mobkit/water_life/poison_hunger_ng.patch create mode 100644 my_changes/mobs/mobs_mobs/advanced_npc/adv_npc_log.patch create mode 100644 my_changes/mobs/mobs_mobs/advanced_npc/bugtrade184.patch create mode 100644 my_changes/mobs/mobs_mobs/goblins/goblins_nil.patch create mode 100644 my_changes/mobs/mobs_mobs/mg_villages_npc/bug.patch create mode 100644 my_changes/mobs/mobs_mobs/mg_villages_npc/patch_log.patch create mode 100644 my_changes/player/fire_plus/extend_fire.patch create mode 100644 my_changes/player/hbsprint/no_damage.patch create mode 100644 my_changes/player/skinsdb/meta/character_female_1.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_10.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_11.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_12.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_13.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_14.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_15.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_16.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_17.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_18.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_19.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_2.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_20.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_21.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_22.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_23.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_24.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_25.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_26.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_27.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_28.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_29.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_3.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_30.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_31.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_32.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_33.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_34.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_35.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_36.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_37.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_38.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_39.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_4.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_40.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_41.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_42.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_43.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_44.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_45.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_46.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_47.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_48.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_49.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_5.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_50.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_51.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_52.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_53.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_54.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_55.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_6.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_7.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_8.txt create mode 100644 my_changes/player/skinsdb/meta/character_female_9.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_100.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_101.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_102.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_103.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_104.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_105.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_106.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_107.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_108.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_109.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_110.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_111.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_112.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_113.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_114.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_115.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_116.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_117.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_118.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_119.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_120.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_121.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_122.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_123.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_124.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_125.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_126.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_127.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_128.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_129.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_130.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_131.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_132.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_133.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_134.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_135.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_136.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_137.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_138.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_139.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_140.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_141.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_142.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_143.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_144.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_145.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_146.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_147.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_148.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_149.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_150.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_151.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_152.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_153.txt create mode 100644 my_changes/player/skinsdb/meta/character_male_154.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_200.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_201.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_202.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_203.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_204.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_205.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_206.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_207.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_208.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_209.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_210.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_211.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_212.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_213.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_214.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_215.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_216.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_217.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_218.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_219.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_220.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_221.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_222.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_223.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_224.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_225.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_226.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_227.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_228.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_229.txt create mode 100644 my_changes/player/skinsdb/meta/character_xcost_230.txt create mode 100644 my_changes/player/skinsdb/textures/character_female_1.png create mode 100644 my_changes/player/skinsdb/textures/character_female_10.png create mode 100644 my_changes/player/skinsdb/textures/character_female_11.png create mode 100644 my_changes/player/skinsdb/textures/character_female_12.png create mode 100644 my_changes/player/skinsdb/textures/character_female_13.png create mode 100644 my_changes/player/skinsdb/textures/character_female_14.png create mode 100644 my_changes/player/skinsdb/textures/character_female_15.png create mode 100644 my_changes/player/skinsdb/textures/character_female_16.png create mode 100644 my_changes/player/skinsdb/textures/character_female_17.png create mode 100644 my_changes/player/skinsdb/textures/character_female_18.png create mode 100644 my_changes/player/skinsdb/textures/character_female_19.png create mode 100644 my_changes/player/skinsdb/textures/character_female_2.png create mode 100644 my_changes/player/skinsdb/textures/character_female_20.png create mode 100644 my_changes/player/skinsdb/textures/character_female_21.png create mode 100644 my_changes/player/skinsdb/textures/character_female_22.png create mode 100644 my_changes/player/skinsdb/textures/character_female_23.png create mode 100644 my_changes/player/skinsdb/textures/character_female_24.png create mode 100644 my_changes/player/skinsdb/textures/character_female_25.png create mode 100644 my_changes/player/skinsdb/textures/character_female_26.png create mode 100644 my_changes/player/skinsdb/textures/character_female_27.png create mode 100644 my_changes/player/skinsdb/textures/character_female_28.png create mode 100644 my_changes/player/skinsdb/textures/character_female_29.png create mode 100644 my_changes/player/skinsdb/textures/character_female_3.png create mode 100644 my_changes/player/skinsdb/textures/character_female_30.png create mode 100644 my_changes/player/skinsdb/textures/character_female_31.png create mode 100644 my_changes/player/skinsdb/textures/character_female_32.png create mode 100644 my_changes/player/skinsdb/textures/character_female_33.png create mode 100644 my_changes/player/skinsdb/textures/character_female_34.png create mode 100644 my_changes/player/skinsdb/textures/character_female_35.png create mode 100644 my_changes/player/skinsdb/textures/character_female_36.png create mode 100644 my_changes/player/skinsdb/textures/character_female_37.png create mode 100644 my_changes/player/skinsdb/textures/character_female_38.png create mode 100644 my_changes/player/skinsdb/textures/character_female_39.png create mode 100644 my_changes/player/skinsdb/textures/character_female_4.png create mode 100644 my_changes/player/skinsdb/textures/character_female_40.png create mode 100644 my_changes/player/skinsdb/textures/character_female_41.png create mode 100644 my_changes/player/skinsdb/textures/character_female_42.png create mode 100644 my_changes/player/skinsdb/textures/character_female_43.png create mode 100644 my_changes/player/skinsdb/textures/character_female_44.png create mode 100644 my_changes/player/skinsdb/textures/character_female_45.png create mode 100644 my_changes/player/skinsdb/textures/character_female_46.png create mode 100644 my_changes/player/skinsdb/textures/character_female_47.png create mode 100644 my_changes/player/skinsdb/textures/character_female_48.png create mode 100644 my_changes/player/skinsdb/textures/character_female_49.png create mode 100644 my_changes/player/skinsdb/textures/character_female_5.png create mode 100644 my_changes/player/skinsdb/textures/character_female_50.png create mode 100644 my_changes/player/skinsdb/textures/character_female_51.png create mode 100644 my_changes/player/skinsdb/textures/character_female_52.png create mode 100644 my_changes/player/skinsdb/textures/character_female_53.png create mode 100644 my_changes/player/skinsdb/textures/character_female_54.png create mode 100644 my_changes/player/skinsdb/textures/character_female_55.png create mode 100644 my_changes/player/skinsdb/textures/character_female_6.png create mode 100644 my_changes/player/skinsdb/textures/character_female_7.png create mode 100644 my_changes/player/skinsdb/textures/character_female_8.png create mode 100644 my_changes/player/skinsdb/textures/character_female_9.png create mode 100644 my_changes/player/skinsdb/textures/character_male_100.png create mode 100644 my_changes/player/skinsdb/textures/character_male_101.png create mode 100644 my_changes/player/skinsdb/textures/character_male_102.png create mode 100644 my_changes/player/skinsdb/textures/character_male_103.png create mode 100644 my_changes/player/skinsdb/textures/character_male_104.png create mode 100644 my_changes/player/skinsdb/textures/character_male_105.png create mode 100644 my_changes/player/skinsdb/textures/character_male_106.png create mode 100644 my_changes/player/skinsdb/textures/character_male_107.png create mode 100644 my_changes/player/skinsdb/textures/character_male_108.png create mode 100644 my_changes/player/skinsdb/textures/character_male_109.png create mode 100644 my_changes/player/skinsdb/textures/character_male_110.png create mode 100644 my_changes/player/skinsdb/textures/character_male_111.png create mode 100644 my_changes/player/skinsdb/textures/character_male_112.png create mode 100644 my_changes/player/skinsdb/textures/character_male_113.png create mode 100644 my_changes/player/skinsdb/textures/character_male_114.png create mode 100644 my_changes/player/skinsdb/textures/character_male_115.png create mode 100644 my_changes/player/skinsdb/textures/character_male_116.png create mode 100644 my_changes/player/skinsdb/textures/character_male_117.png create mode 100644 my_changes/player/skinsdb/textures/character_male_118.png create mode 100644 my_changes/player/skinsdb/textures/character_male_119.png create mode 100644 my_changes/player/skinsdb/textures/character_male_120.png create mode 100644 my_changes/player/skinsdb/textures/character_male_121.png create mode 100644 my_changes/player/skinsdb/textures/character_male_122.png create mode 100644 my_changes/player/skinsdb/textures/character_male_123.png create mode 100644 my_changes/player/skinsdb/textures/character_male_124.png create mode 100644 my_changes/player/skinsdb/textures/character_male_125.png create mode 100644 my_changes/player/skinsdb/textures/character_male_126.png create mode 100644 my_changes/player/skinsdb/textures/character_male_127.png create mode 100644 my_changes/player/skinsdb/textures/character_male_128.png create mode 100644 my_changes/player/skinsdb/textures/character_male_129.png create mode 100644 my_changes/player/skinsdb/textures/character_male_130.png create mode 100644 my_changes/player/skinsdb/textures/character_male_131.png create mode 100644 my_changes/player/skinsdb/textures/character_male_132.png create mode 100644 my_changes/player/skinsdb/textures/character_male_133.png create mode 100644 my_changes/player/skinsdb/textures/character_male_134.png create mode 100644 my_changes/player/skinsdb/textures/character_male_135.png create mode 100644 my_changes/player/skinsdb/textures/character_male_136.png create mode 100644 my_changes/player/skinsdb/textures/character_male_137.png create mode 100644 my_changes/player/skinsdb/textures/character_male_138.png create mode 100644 my_changes/player/skinsdb/textures/character_male_139.png create mode 100644 my_changes/player/skinsdb/textures/character_male_140.png create mode 100644 my_changes/player/skinsdb/textures/character_male_141.png create mode 100644 my_changes/player/skinsdb/textures/character_male_142.png create mode 100644 my_changes/player/skinsdb/textures/character_male_143.png create mode 100644 my_changes/player/skinsdb/textures/character_male_144.png create mode 100644 my_changes/player/skinsdb/textures/character_male_145.png create mode 100644 my_changes/player/skinsdb/textures/character_male_146.png create mode 100644 my_changes/player/skinsdb/textures/character_male_147.png create mode 100644 my_changes/player/skinsdb/textures/character_male_148.png create mode 100644 my_changes/player/skinsdb/textures/character_male_149.png create mode 100644 my_changes/player/skinsdb/textures/character_male_150.png create mode 100644 my_changes/player/skinsdb/textures/character_male_151.png create mode 100644 my_changes/player/skinsdb/textures/character_male_152.png create mode 100644 my_changes/player/skinsdb/textures/character_male_153.png create mode 100644 my_changes/player/skinsdb/textures/character_male_154.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_200.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_201.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_202.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_203.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_204.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_205.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_206.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_207.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_208.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_209.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_210.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_211.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_212.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_213.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_214.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_215.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_216.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_217.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_218.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_219.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_220.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_221.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_222.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_223.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_224.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_225.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_226.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_227.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_228.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_229.png create mode 100644 my_changes/player/skinsdb/textures/character_xcost_230.png diff --git a/.gitattributes b/.gitattributes index 3412304..286e88c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,2 @@ -buildscripts export-ignore +buildscripts export-ignore +my_changes export-ignore diff --git a/buildscripts/03_my_updates.sh b/buildscripts/03_my_updates.sh index 104ad49..38dfe72 100755 --- a/buildscripts/03_my_updates.sh +++ b/buildscripts/03_my_updates.sh @@ -2,7 +2,7 @@ LIB="$(realpath $(dirname $0))" # Absolute path PROJ="$(dirname $LIB)" # Game dir (..) -SRC="$PROJ"/../my_changes/ # My changes dir +SRC="$PROJ"/my_changes/ # My changes dir DST="$PROJ"/mods/ # Game mods dir #echo $LIB #echo $PROJ @@ -38,7 +38,7 @@ MOD_PATCH=( ) #patch names #MOD_PATCHES - all patches defined #MOD_PATCHES - first is path and all patch names are separeted by ":" #MOD_PATCHES=("mobs/water_life:poison.patch" "buildings/doors:doors_update.patch" "player/3d_armor:mob_damage.patch" "player/hbsprint:no_damage.patch" "player/hunger_ng:effects.patch") -MOD_PATCHES=("buildings/doors:doors_update.patch" "buildings/doors:doors_update54.patch" "buildings/ts_doors:ts_doors_update54.patch" "player/hbsprint:no_damage.patch" "mobs/mobs_mobkit/water_life:poison.patch" "mobs/mobs_mobkit/water_life:poison_hunger_ng.patch" "buildings/mg_villages:villages.patch" "player/fire_plus:extend_fire.patch" "mobs/mobs_mobs/advanced_npc:adv_npc_log.patch" "mobs/mobs_mobs/advanced_npc:bugtrade184.patch" "mobs/mobs_mobs/mg_villages_npc:bug.patch" "mobs/mobs_mobs/mg_villages_npc:patch_log.patch") +MOD_PATCHES=("buildings/doors:doors_update.patch" "buildings/doors:doors_update54.patch" "buildings/ts_doors:ts_doors_update54.patch" "player/hbsprint:no_damage.patch" "mobs/mobs_mobkit/water_life:poison.patch" "mobs/mobs_mobkit/water_life:poison_hunger_ng.patch" "buildings/mg_villages:villages.patch" "player/fire_plus:extend_fire.patch" "mobs/mobs_mobs/advanced_npc:adv_npc_log.patch" "mobs/mobs_mobs/advanced_npc:bugtrade184.patch" "mobs/mobs_mobs/mg_villages_npc:bug.patch" "mobs/mobs_mobs/mg_villages_npc:patch_log.patch" "gui/i3:progressive_creative.patch") #"mobs/mobs_mobs/goblins:goblins_nil.patch" #MOD_PATCHES=( ) diff --git a/my_changes/LICENSE.txt b/my_changes/LICENSE.txt new file mode 100644 index 0000000..ceb1897 --- /dev/null +++ b/my_changes/LICENSE.txt @@ -0,0 +1,9 @@ +License of my media (textures, sounds, ...) +------------------------------------------- + https://creativecommons.org/licenses/by-sa/3.0/ + +License of my source code +------------------------- + https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + + or mod licence diff --git a/my_changes/_not-used/environment/dynamic_liquid/bucket.patch b/my_changes/_not-used/environment/dynamic_liquid/bucket.patch new file mode 100644 index 0000000..89a3c03 --- /dev/null +++ b/my_changes/_not-used/environment/dynamic_liquid/bucket.patch @@ -0,0 +1,28 @@ +diff --git a/cooling_lava.lua b/cooling_lava.lua +index 035c4fd..c57da0a 100644 +--- a/cooling_lava.lua ++++ b/cooling_lava.lua +@@ -221,4 +221,21 @@ minetest.register_abm({ + action = function(...) + cool_lava_source(...) + end, +-}) +\ No newline at end of file ++}) ++ ++-- new water types to work with lava cooling ++dynamic_liquid.add_to_water_nodes = function(new_source, new_flowing) ++ -- Flowing liquid ++ table.insert(dynamic_lava_flowing_destroys, new_flowing) ++ table.insert(dynamic_lava_source_destroys, new_flowing) ++ ++ table.insert(all_flowing_nodes, new_flowing) ++ table.insert(all_source_nodes, new_flowing) ++ ++ --Source liquid ++ table.insert(dynamic_lava_source_destroys, new_source) ++ table.insert(dynamic_cools_lava_flowing, new_source) ++ table.insert(dynamic_cools_lava_source, new_source) ++ ++ table.insert(all_source_nodes, new_source) ++end diff --git a/my_changes/_not-used/gui/craftguide/init.lua b/my_changes/_not-used/gui/craftguide/init.lua new file mode 100644 index 0000000..e4853ef --- /dev/null +++ b/my_changes/_not-used/gui/craftguide/init.lua @@ -0,0 +1,2347 @@ +craftguide = {} + +-- Caches +local pdata = {} +local init_items = {} +local searches = {} +local recipes_cache = {} +local usages_cache = {} +local fuel_cache = {} +local replacements = {fuel = {}} +local toolrepair + +local progressive_mode = core.settings:get_bool "craftguide_progressive_mode" + +local http = core.request_http_api() +local singleplayer = core.is_singleplayer() + +local reg_items = core.registered_items +local reg_tools = core.registered_tools +local reg_entities = core.registered_entities +local reg_aliases = core.registered_aliases + +local log = core.log +local after = core.after +local clr = core.colorize +local parse_json = core.parse_json +local write_json = core.write_json +local chat_send = core.chat_send_player +local show_formspec = core.show_formspec +local globalstep = core.register_globalstep +local on_shutdown = core.register_on_shutdown +local get_players = core.get_connected_players +local get_craft_result = core.get_craft_result +local translate = minetest.get_translated_string +local on_joinplayer = core.register_on_joinplayer +local get_all_recipes = core.get_all_craft_recipes +local register_command = core.register_chatcommand +local get_player_by_name = core.get_player_by_name +local slz, dslz = core.serialize, core.deserialize +local on_mods_loaded = core.register_on_mods_loaded +local on_leaveplayer = core.register_on_leaveplayer +local get_player_info = core.get_player_information +local on_receive_fields = core.register_on_player_receive_fields + +local ESC = core.formspec_escape +local S = core.get_translator "craftguide" + +local ES = function(...) + return ESC(S(...)) +end + +local maxn, sort, concat, copy, insert, remove = + table.maxn, table.sort, table.concat, table.copy, + table.insert, table.remove + +local sprintf, find, gmatch, match, sub, split, upper, lower = + string.format, string.find, string.gmatch, string.match, + string.sub, string.split, string.upper, string.lower + +local min, max, floor, ceil, abs = math.min, math.max, math.floor, math.ceil, math.abs +local pairs, ipairs, next, type, setmetatable, tonum = + pairs, ipairs, next, type, setmetatable, tonumber + +local vec_add, vec_mul = vector.add, vector.multiply + +local ROWS = 9 +local LINES = 10 +local IPP = ROWS * LINES +local MAX_FAVS = 6 +local ITEM_BTN_SIZE = 1.1 + +-- Progressive mode +local POLL_FREQ = 0.25 +local HUD_TIMER_MAX = 1.5 + +local PNG = { + bg = "craftguide_bg.png", + bg_full = "craftguide_bg_full.png", + search = "craftguide_search_icon.png", + clear = "craftguide_clear_icon.png", + prev = "craftguide_next_icon.png^\\[transformFX", + next = "craftguide_next_icon.png", + arrow = "craftguide_arrow.png", + fire = "craftguide_fire.png", + fire_anim = "craftguide_fire_anim.png", + book = "craftguide_book.png", + sign = "craftguide_sign.png", + nothing = "craftguide_no.png", + selected = "craftguide_selected.png", + furnace_anim = "craftguide_furnace_anim.png", + + search_hover = "craftguide_search_icon_hover.png", + clear_hover = "craftguide_clear_icon_hover.png", + prev_hover = "craftguide_next_icon_hover.png^\\[transformFX", + next_hover = "craftguide_next_icon_hover.png", +} + +local fs_elements = { + box = "box[%f,%f;%f,%f;%s]", + label = "label[%f,%f;%s]", + image = "image[%f,%f;%f,%f;%s]", + button = "button[%f,%f;%f,%f;%s;%s]", + tooltip = "tooltip[%f,%f;%f,%f;%s]", + item_image = "item_image[%f,%f;%f,%f;%s]", + bg9 = "background9[%f,%f;%f,%f;%s;false;%u]", + model = "model[%f,%f;%f,%f;%s;%s;%s;0,0;true]", + image_button = "image_button[%f,%f;%f,%f;%s;%s;%s]", + animated_image = "animated_image[%f,%f;%f,%f;;%s;%u;%u]", + scrollbar = "scrollbar[%f,%f;%f,%f;horizontal;%s;%u]", + item_image_button = "item_image_button[%f,%f;%f,%f;%s;%s;%s]", + arrow = "image_button[%f,%f;0.7,0.7;%s;%s;;;false;%s]", +} + +local styles = sprintf([[ + style_type[label,field;font_size=+0] + style_type[image_button;border=false;sound=craftguide_click] + style_type[item_image_button;border=false;bgimg_hovered=%s;bgimg_pressed=%s; + sound=craftguide_click] + + style[filter;border=false] + style[search;fgimg=%s;fgimg_hovered=%s] + style[clear;fgimg=%s;fgimg_hovered=%s] + style[prev_page;fgimg=%s;fgimg_hovered=%s;fgimg_pressed=%s] + style[next_page;fgimg=%s;fgimg_hovered=%s;fgimg_pressed=%s] + style[prev_recipe;fgimg=%s;fgimg_hovered=%s;fgimg_pressed=%s] + style[next_recipe;fgimg=%s;fgimg_hovered=%s;fgimg_pressed=%s] + style[prev_usage;fgimg=%s;fgimg_hovered=%s;fgimg_pressed=%s] + style[next_usage;fgimg=%s;fgimg_hovered=%s;fgimg_pressed=%s] + style[pagenum,no_item,no_rcp;border=false;font=bold;font_size=+2;content_offset=0] + style[craft_rcp,craft_usg;border=false;noclip=true;font_size=+0;sound=craftguide_craft; + bgimg=craftguide_btn9.png;bgimg_hovered=craftguide_btn9_hovered.png; + bgimg_pressed=craftguide_btn9_pressed.png;bgimg_middle=4,6] +]], +PNG.selected, PNG.selected, +PNG.search, PNG.search_hover, +PNG.clear, PNG.clear_hover, +PNG.prev, PNG.prev_hover, PNG.prev_hover, +PNG.next, PNG.next_hover, PNG.next_hover, +PNG.prev, PNG.prev_hover, PNG.prev_hover, +PNG.next, PNG.next_hover, PNG.next_hover, +PNG.prev, PNG.prev_hover, PNG.prev_hover, +PNG.next, PNG.next_hover, PNG.next_hover) + +local function get_lang_code(name) + local info = get_player_info(name) + return info and info.lang_code +end + +local function outdated(name) + local fs = sprintf([[ + size[6.6,1.3] + image[0,0;1,1;%s] + label[1,0;%s] + button_exit[2.8,0.8;1,1;;OK] + ]], + PNG.book, + "Your Minetest client is outdated.\n" .. + "Get the latest version on minetest.net to use the Crafting Guide.") + + return show_formspec(name, "craftguide", fs) +end + +craftguide.group_stereotypes = { + dye = "dye:white", + wool = "wool:white", + wood = "default:wood", + tree = "default:tree", + sand = "default:sand", + glass = "default:glass", + stick = "default:stick", + stone = "default:stone", + leaves = "default:leaves", + coal = "default:coal_lump", + vessel = "vessels:glass_bottle", + flower = "flowers:dandelion_yellow", + water_bucket = "bucket:bucket_water", + mesecon_conductor_craftable = "mesecons:wire_00000000_off", +} + +local group_names = { + dye = S"Any dye", + coal = S"Any coal", + sand = S"Any sand", + tree = S"Any tree", + wool = S"Any wool", + glass = S"Any glass", + stick = S"Any stick", + stone = S"Any stone", + carpet = S"Any carpet", + flower = S"Any flower", + leaves = S"Any leaves", + vessel = S"Any vessel", + wood = S"Any wood planks", + mushroom = S"Any mushroom", + + ["color_red,flower"] = S"Any red flower", + ["color_blue,flower"] = S"Any blue flower", + ["color_black,flower"] = S"Any black flower", + ["color_white,flower"] = S"Any white flower", + ["color_green,flower"] = S"Any green flower", + ["color_orange,flower"] = S"Any orange flower", + ["color_yellow,flower"] = S"Any yellow flower", + ["color_violet,flower"] = S"Any violet flower", + + ["color_red,dye"] = S"Any red dye", + ["color_blue,dye"] = S"Any blue dye", + ["color_grey,dye"] = S"Any grey dye", + ["color_pink,dye"] = S"Any pink dye", + ["color_cyan,dye"] = S"Any cyan dye", + ["color_black,dye"] = S"Any black dye", + ["color_white,dye"] = S"Any white dye", + ["color_brown,dye"] = S"Any brown dye", + ["color_green,dye"] = S"Any green dye", + ["color_orange,dye"] = S"Any orange dye", + ["color_yellow,dye"] = S"Any yellow dye", + ["color_violet,dye"] = S"Any violet dye", + ["color_magenta,dye"] = S"Any magenta dye", + ["color_dark_grey,dye"] = S"Any dark grey dye", + ["color_dark_green,dye"] = S"Any dark green dye", +} + +craftguide.model_alias = { + ["boats:boat"] = {name = "boats:boat", drawtype = "entity"}, + --["carts:cart"] = {name = "carts:cart", drawtype = "entity"}, -- animation broken +} + +local function err(str) + return log("error", str) +end + +local function msg(name, str) + return chat_send(name, sprintf("[craftguide] %s", str)) +end + +local function is_str(x) + return type(x) == "string" +end + +local function true_str(str) + return is_str(str) and str ~= "" +end + +local function is_table(x) + return type(x) == "table" +end + +local function is_func(x) + return type(x) == "function" +end + +local function is_group(item) + return sub(item, 1, 6) == "group:" +end + +local function fmt(elem, ...) + return sprintf(fs_elements[elem], ...) +end + +local function clean_name(item) + if sub(item, 1, 1) == ":" then + item = sub(item, 2) + end + + return item +end + +local function array_diff(t1, t2) + local hash = {} + + for i = 1, #t1 do + local v = t1[i] + hash[v] = true + end + + for i = 1, #t2 do + local v = t2[i] + hash[v] = nil + end + + local diff, c = {}, 0 + + for i = 1, #t1 do + local v = t1[i] + if hash[v] then + c = c + 1 + diff[c] = v + end + end + + return diff +end + +local function table_eq(T1, T2) + local avoid_loops = {} + + local function recurse(t1, t2) + if type(t1) ~= type(t2) then return end + + if not is_table(t1) then + return t1 == t2 + end + + if avoid_loops[t1] then + return avoid_loops[t1] == t2 + end + + avoid_loops[t1] = t2 + local t2k, t2kv = {}, {} + + for k in pairs(t2) do + if is_table(k) then + insert(t2kv, k) + end + + t2k[k] = true + end + + for k1, v1 in pairs(t1) do + local v2 = t2[k1] + if type(k1) == "table" then + local ok + for i = 1, #t2kv do + local tk = t2kv[i] + if table_eq(k1, tk) and recurse(v1, t2[tk]) then + remove(t2kv, i) + t2k[tk] = nil + ok = true + break + end + end + + if not ok then return end + else + if v2 == nil then return end + t2k[k1] = nil + if not recurse(v1, v2) then return end + end + end + + if next(t2k) then return end + return true + end + + return recurse(T1, T2) +end + +local function table_merge(t1, t2, hash) + t1 = t1 or {} + t2 = t2 or {} + + if hash then + for k, v in pairs(t2) do + t1[k] = v + end + else + local c = #t1 + + for i = 1, #t2 do + c = c + 1 + t1[c] = t2[i] + end + end + + return t1 +end + +local function table_replace(t, val, new) + for k, v in pairs(t) do + if v == val then + t[k] = new + end + end +end + +local craft_types = {} + +function craftguide.register_craft_type(name, def) + if not true_str(name) then + return err "craftguide.register_craft_type(): name missing" + end + + if not is_str(def.description) then + def.description = "" + end + + if not is_str(def.icon) then + def.icon = "" + end + + craft_types[name] = def +end + +function craftguide.register_craft(def) + local width, c = 0, 0 + + if true_str(def.url) then + if not http then + return err(sprintf([[craftguide.register_craft(): Unable to reach %s. + No HTTP support for this mod: add it to the `secure.http_mods` or + `secure.trusted_mods` setting.]], def.url)) + end + + http.fetch({url = def.url}, function(result) + if result.succeeded then + local t = parse_json(result.data) + if is_table(t) then + return craftguide.register_craft(t) + end + end + end) + + return + end + + if not is_table(def) or not next(def) then + return err "craftguide.register_craft(): craft definition missing" + end + + if #def > 1 then + for _, v in pairs(def) do + craftguide.register_craft(v) + end + return + end + + if def.result then + def.output = def.result -- Backward compatibility + def.result = nil + end + + if not true_str(def.output) then + return err "craftguide.register_craft(): output missing" + end + + if not is_table(def.items) then + def.items = {} + end + + if def.grid then + if not is_table(def.grid) then + def.grid = {} + end + + if not is_table(def.key) then + def.key = {} + end + + local cp = copy(def.grid) + sort(cp, function(a, b) + return #a > #b + end) + + width = #cp[1] + + for i = 1, #def.grid do + while #def.grid[i] < width do + def.grid[i] = def.grid[i] .. " " + end + end + + for symbol in gmatch(concat(def.grid), ".") do + c = c + 1 + def.items[c] = def.key[symbol] + end + else + local items, len = def.items, #def.items + def.items = {} + + for i = 1, len do + items[i] = items[i]:gsub(",", ", ") + local rlen = #split(items[i], ",") + + if rlen > width then + width = rlen + end + end + + for i = 1, len do + while #split(items[i], ",") < width do + items[i] = items[i] .. ", " + end + end + + for name in gmatch(concat(items, ","), "[%s%w_:]+") do + c = c + 1 + def.items[c] = match(name, "%S+") + end + end + + local item = match(def.output, "%S+") + recipes_cache[item] = recipes_cache[item] or {} + + def.custom = true + def.width = width + + insert(recipes_cache[item], def) +end + +local recipe_filters = {} + +function craftguide.add_recipe_filter(name, f) + if not true_str(name) then + return err "craftguide.add_recipe_filter(): name missing" + elseif not is_func(f) then + return err "craftguide.add_recipe_filter(): function missing" + end + + recipe_filters[name] = f +end + +function craftguide.set_recipe_filter(name, f) + if not is_str(name) then + return err "craftguide.set_recipe_filter(): name missing" + elseif not is_func(f) then + return err "craftguide.set_recipe_filter(): function missing" + end + + recipe_filters = {[name] = f} +end + +function craftguide.remove_recipe_filter(name) + recipe_filters[name] = nil +end + +function craftguide.get_recipe_filters() + return recipe_filters +end + +local function apply_recipe_filters(recipes, player) + for _, filter in pairs(recipe_filters) do + recipes = filter(recipes, player) + end + + return recipes +end + +local search_filters = {} + +function craftguide.add_search_filter(name, f) + if not true_str(name) then + return err "craftguide.add_search_filter(): name missing" + elseif not is_func(f) then + return err "craftguide.add_search_filter(): function missing" + end + + search_filters[name] = f +end + +function craftguide.remove_search_filter(name) + search_filters[name] = nil +end + +function craftguide.get_search_filters() + return search_filters +end + +local function weird_desc(str) + return not true_str(str) or find(str, "\n") or not find(str, "%u") +end + +local function toupper(str) + return str:gsub("%f[%w]%l", upper):gsub("_", " ") +end + +local function snip(str, limit) + return #str > limit and sprintf("%s...", sub(str, 1, limit - 3)) or str +end + +local function get_desc(item, lang_code) + if sub(item, 1, 1) == "_" then + item = sub(item, 2) + end + + local def = reg_items[item] + + if def then + local desc = def.description + desc = lang_code and translate(lang_code, desc) or desc + + if true_str(desc) then + desc = desc:trim():match("[^\n]*") + + if not find(desc, "%u") then + desc = toupper(desc) + end + + return desc + + elseif true_str(item) then + return toupper(match(item, ":(.*)")) + end + end + + return S("Unknown Item (@1)", item) +end + +local function item_has_groups(item_groups, groups) + for i = 1, #groups do + local group = groups[i] + if (item_groups[group] or 0) == 0 then return end + end + + return true +end + +local function extract_groups(str) + if sub(str, 1, 6) == "group:" then + return split(sub(str, 7), ",") + end +end + +local function get_filtered_items(player, data) + local items, known, c = {}, 0, 0 + + for i = 1, #init_items do + local item = init_items[i] + local recipes = recipes_cache[item] + local usages = usages_cache[item] + + recipes = #apply_recipe_filters(recipes or {}, player) + usages = #apply_recipe_filters(usages or {}, player) + + if recipes > 0 or usages > 0 then + c = c + 1 + items[c] = item + + if data then + known = known + recipes + usages + end + end + end + + if data then + data.known_recipes = known + end + + return items +end + +local function get_burntime(item) + return get_craft_result{method = "fuel", items = {item}}.time +end + +local function cache_fuel(item) + local burntime = get_burntime(item) + if burntime > 0 then + fuel_cache[item] = { + type = "fuel", + items = {item}, + burntime = burntime, + replacements = replacements.fuel[item], + } + end +end + +local function show_item(def) + return def and not (def.groups.not_in_craft_guide == 1 or + def.groups.not_in_creative_inventory == 1) and + def.description and def.description ~= "" +end + +local function get_usages(recipe) + local added = {} + + for _, item in pairs(recipe.items) do + item = reg_aliases[item] or item + if not added[item] then + local groups = extract_groups(item) + if groups then + for name, def in pairs(reg_items) do + if not added[name] and show_item(def) and + item_has_groups(def.groups, groups) then + local usage = copy(recipe) + table_replace(usage.items, item, name) + usages_cache[name] = usages_cache[name] or {} + insert(usages_cache[name], 1, usage) + added[name] = true + end + end + elseif show_item(reg_items[item]) then + usages_cache[item] = usages_cache[item] or {} + insert(usages_cache[item], 1, recipe) + end + + added[item] = true + end + end +end + +local function cache_usages(item) + local recipes = recipes_cache[item] or {} + + for i = 1, #recipes do + get_usages(recipes[i]) + end + + if fuel_cache[item] then + usages_cache[item] = table_merge(usages_cache[item] or {}, {fuel_cache[item]}) + end +end + +local function drop_table(name, drop) + local count_sure = 0 + local drop_items = drop.items or {} + local max_items = drop.max_items + + for i = 1, #drop_items do + local di = drop_items[i] + local valid_rarity = di.rarity and di.rarity > 1 + + if di.rarity or not max_items or + (max_items and not di.rarity and count_sure < max_items) then + for j = 1, #di.items do + local dstack = ItemStack(di.items[j]) + local dname = dstack:get_name() + local dcount = dstack:get_count() + local empty = dstack:is_empty() + + if not empty and (dname ~= name or + (dname == name and dcount > 1)) then + local rarity = valid_rarity and di.rarity + + craftguide.register_craft{ + type = rarity and "digging_chance" or "digging", + items = {name}, + output = sprintf("%s %u", dname, dcount), + rarity = rarity, + tools = di.tools, + } + end + end + end + + if not di.rarity then + count_sure = count_sure + 1 + end + end +end + +local function cache_drops(name, drop) + if true_str(drop) then + local dstack = ItemStack(drop) + local dname = dstack:get_name() + local empty = dstack:is_empty() + + if not empty and dname ~= name then + craftguide.register_craft{ + type = "digging", + items = {name}, + output = drop, + } + end + elseif is_table(drop) then + drop_table(name, drop) + end +end + +local function cache_recipes(item) + local recipes = get_all_recipes(item) + + if replacements[item] then + local _recipes = {} + + for k, v in ipairs(recipes or {}) do + _recipes[#recipes + 1 - k] = v + end + + local shift = 0 + local size_rpl = maxn(replacements[item]) + local size_rcp = #_recipes + + if size_rpl > size_rcp then + shift = size_rcp - size_rpl + end + + for k, v in pairs(replacements[item]) do + k = k + shift + + if _recipes[k] then + _recipes[k].replacements = v + end + end + + recipes = _recipes + end + + if recipes then + recipes_cache[item] = table_merge(recipes, recipes_cache[item] or {}) + end +end + +local function get_recipes(item, data, player) + local clean_item = reg_aliases[item] or item + local recipes = recipes_cache[clean_item] + local usages = usages_cache[clean_item] + + if recipes then + recipes = apply_recipe_filters(recipes, player) + end + + local no_recipes = not recipes or #recipes == 0 + if no_recipes and not usages then return end + usages = apply_recipe_filters(usages, player) + + local no_usages = not usages or #usages == 0 + + return not no_recipes and recipes or nil, + not no_usages and usages or nil +end + +local function groups_to_items(groups, get_all) + if not get_all and #groups == 1 then + local group = groups[1] + local stereotype = craftguide.group_stereotypes[group] + local def = reg_items[stereotype] + + if def and show_item(def) then + return stereotype + end + end + + local names = {} + for name, def in pairs(reg_items) do + if show_item(def) and item_has_groups(def.groups, groups) then + if get_all then + names[#names + 1] = name + else + return name + end + end + end + + return get_all and names or "" +end + +local function get_stack_max(data, is_recipe, rcp) + data.inv = data.player:get_inventory() + local list = data.inv:get_list("main") + local size = data.inv:get_size("main") + local counts_inv, counts_rcp, counts = {}, {}, {} + local rcp_usg = is_recipe and "recipe" or "usage" + + for _, it in pairs(rcp.items) do + counts_rcp[it] = (counts_rcp[it] or 0) + 1 + end + + data.export_counts[rcp_usg] = {} + data.export_counts[rcp_usg].rcp = counts_rcp + + for i = 1, size do + local stack = list[i] + + if not stack:is_empty() then + local item = stack:get_name() + local count = stack:get_count() + + for name in pairs(counts_rcp) do + if is_group(name) then + local def = reg_items[item] + local groups = extract_groups(name) + + if item_has_groups(def.groups, groups) then + counts_inv[name] = (counts_inv[name] or 0) + count + end + end + end + + counts_inv[item] = (counts_inv[item] or 0) + count + end + end + + data.export_counts[rcp_usg].inv = counts_inv + + for name in pairs(counts_rcp) do + counts[name] = floor((counts_inv[name] or 0) / (counts_rcp[name] or 0)) + end + + local max_stacks = math.huge + + for _, count in pairs(counts) do + if count < max_stacks then + max_stacks = count + end + end + + return max_stacks +end + +local function craft_stack(player, pname, data, craft_rcp) + local rcp_usg = craft_rcp and "recipe" or "usage" + local output = craft_rcp and data.recipes[data.rnum].output or data.usages[data.unum].output + output = ItemStack(output) + local stackname, stackcount = output:get_name(), output:get_count() + local scrbar_val = data[sprintf("scrbar_%s", craft_rcp and "rcp" or "usg")] or 1 + + for name, count in pairs(data.export_counts[rcp_usg].rcp) do + local items = {[name] = count} + + if is_group(name) then + items = {} + local groups = extract_groups(name) + local item_groups = groups_to_items(groups, true) + local remaining = count + + for _, item in ipairs(item_groups) do + for _name, _count in pairs(data.export_counts[rcp_usg].inv) do + if item == _name and remaining > 0 then + local c = min(remaining, _count) + items[item] = c + remaining = remaining - c + end + + if remaining == 0 then break end + end + end + end + + for k, v in pairs(items) do + data.inv:remove_item("main", sprintf("%s %s", k, v * scrbar_val)) + end + end + + local count = stackcount * scrbar_val + local stack = ItemStack(sprintf("%s %s", stackname, count)) + local desc = get_desc(stackname) + local message + + if count > 1 then + message = clr("#ff0", sprintf("%s x %s", count, desc)) + else + message = clr("#ff0", sprintf("%s", desc)) + end + + if data.inv:room_for_item("main", stack) then + data.inv:add_item("main", stack) + msg(pname, sprintf("%s added in your inventory", message)) + else + local dir = player:get_look_dir() + local ppos = player:get_pos() + ppos.y = ppos.y + 1.625 + local look_at = vec_add(ppos, vec_mul(dir, 1)) + + core.add_item(look_at, stack) + msg(pname, sprintf("%s crafted", message)) + end +end + +local function select_item(player, data, _f) + local item + + for field in pairs(_f) do + if find(field, ":") then + item = field + break + end + end + + if not item then + return + elseif sub(item, -4) == "_inv" then + item = sub(item, 1, -5) + elseif sub(item, 1, 1) == "_" then + item = sub(item, 2) + elseif sub(item, 1, 6) == "group|" then + item = match(item, "([%w:_]+)$") + end + + item = reg_aliases[item] or item + + if item == data.query_item then return end + + local recipes, usages = get_recipes(item, data, player) + if not recipes and not usages then return end + if data.show_usages and not usages then return end + + data.query_item = item + data.recipes = recipes + data.usages = usages + data.rnum = 1 + data.unum = 1 + data.scrbar_rcp = 1 + data.scrbar_usg = 1 + data.export_rcp = nil + data.export_usg = nil +end + +local function repairable(tool) + local def = reg_tools[tool] + return toolrepair and def and def.groups and def.groups.disable_repair ~= 1 +end + +local function is_fav(favs, query_item) + local fav, i + for j = 1, #favs do + if favs[j] == query_item then + fav = true + i = j + break + end + end + + return fav, i +end + +local function get_tooltip(item, info) + local tooltip + + if info.groups then + sort(info.groups) + tooltip = group_names[concat(info.groups, ",")] + + if not tooltip then + local groupstr = {} + + for i = 1, #info.groups do + insert(groupstr, clr("#ff0", info.groups[i])) + end + + groupstr = concat(groupstr, ", ") + tooltip = S("Any item belonging to the group(s): @1", groupstr) + end + else + tooltip = get_desc(item) + end + + local function add(str) + return sprintf("%s\n%s", tooltip, str) + end + + if info.cooktime then + tooltip = add(S("Cooking time: @1", clr("#ff0", info.cooktime))) + end + + if info.burntime then + tooltip = add(S("Burning time: @1", clr("#ff0", info.burntime))) + end + + if info.replace then + for i = 1, #info.replace.items do + local rpl = match(info.replace.items[i], "%S+") + local desc = clr("#ff0", get_desc(rpl)) + + if info.replace.type == "cooking" then + tooltip = add(S("Replaced by @1 on smelting", desc)) + elseif info.replace.type == "fuel" then + tooltip = add(S("Replaced by @1 on burning", desc)) + else + tooltip = add(S("Replaced by @1 on crafting", desc)) + end + end + end + + if info.repair then + tooltip = add(S("Repairable by step of @1", clr("#ff0", toolrepair .. "%"))) + end + + if info.rarity then + local chance = (1 / max(1, info.rarity)) * 100 + tooltip = add(S("@1 of chance to drop", clr("#ff0", chance .. "%"))) + end + + if info.tools then + local several = #info.tools > 1 + local names = several and "\n" or "" + + if several then + for i = 1, #info.tools do + names = sprintf("%s\t\t- %s\n", + names, clr("#ff0", get_desc(info.tools[i]))) + end + + tooltip = add(S("Only drop if using one of these tools: @1", + sub(names, 1, -2))) + else + tooltip = add(S("Only drop if using this tool: @1", + clr("#ff0", get_desc(info.tools[1])))) + end + end + + return sprintf("tooltip[%s;%s]", item, ESC(tooltip)) +end + +local function get_output_fs(fs, data, rcp, is_recipe, shapeless, right, btn_size, _btn_size) + local custom_recipe = craft_types[rcp.type] + + if custom_recipe or shapeless or rcp.type == "cooking" then + local icon = custom_recipe and custom_recipe.icon or + shapeless and "shapeless" or "furnace" + + if not custom_recipe then + icon = sprintf("craftguide_%s.png^[resize:16x16", icon) + end + + local pos_x = right + btn_size + 0.42 + local pos_y = data.yoffset + 0.9 + + if sub(icon, 1, 18) == "craftguide_furnace" then + fs(fmt("animated_image", pos_x, pos_y, 0.5, 0.5, PNG.furnace_anim, 8, 180)) + else + fs(fmt("image", pos_x, pos_y, 0.5, 0.5, icon)) + end + + local tooltip = custom_recipe and custom_recipe.description or + shapeless and S"Shapeless" or S"Cooking" + + fs(fmt("tooltip", pos_x, pos_y, 0.5, 0.5, ESC(tooltip))) + end + + local arrow_X = right + 0.2 + (_btn_size or ITEM_BTN_SIZE) + local X = arrow_X + 1.2 + local Y = data.yoffset + 1.4 + + fs(fmt("image", arrow_X, Y + 0.06, 1, 1, PNG.arrow)) + + if rcp.type == "fuel" then + fs(fmt("animated_image", X, Y, ITEM_BTN_SIZE, ITEM_BTN_SIZE, PNG.fire_anim, 8, 180)) + else + local item = rcp.output + item = ItemStack(clean_name(item)) + local name = item:get_name() + local count = item:get_count() + local bt_s = ITEM_BTN_SIZE * 1.2 + + fs(fmt("image", X, Y - 0.11, bt_s, bt_s, PNG.selected)) + + local _name = sprintf("_%s", name) + + fs(fmt("item_image_button", X + 0.1, Y, ITEM_BTN_SIZE, ITEM_BTN_SIZE, + sprintf("%s %u", name, + count * (is_recipe and data.scrbar_rcp or data.scrbar_usg or 1)), + _name, "")) + + local def = reg_items[name] + local unknown = not def or nil + local desc = def and def.description + local weird = name ~= "" and desc and weird_desc(desc) or nil + local burntime = fuel_cache[name] and fuel_cache[name].burntime + + local infos = { + unknown = unknown, + weird = weird, + burntime = burntime, + repair = repairable(name), + rarity = rcp.rarity, + tools = rcp.tools, + } + + if next(infos) then + fs(get_tooltip(_name, infos)) + end + end +end + +local function get_grid_fs(fs, data, rcp, is_recipe) + local width = rcp.width or 1 + local right, btn_size, _btn_size = 0, ITEM_BTN_SIZE + local cooktime, shapeless + + if rcp.type == "cooking" then + cooktime, width = width, 1 + elseif width == 0 and not rcp.custom then + shapeless = true + local n = #rcp.items + width = (n < 5 and n > 1) and 2 or min(3, max(1, n)) + end + + local rows = ceil(maxn(rcp.items) / width) + local large_recipe = width > 3 or rows > 3 + + if large_recipe then + fs("style_type[item_image_button;border=true]") + end + + for i = 1, width * rows do + local item = rcp.items[i] or "" + item = clean_name(item) + local name = match(item, "%S*") + + local X = ceil((i - 1) % width - width) + X = X + (X * 0.2) + data.xoffset + 3.9 + + local Y = ceil(i / width) - min(2, rows) + Y = Y + (Y * 0.15) + data.yoffset + 1.4 + + if large_recipe then + btn_size = (3 / width) * (3 / rows) + 0.3 + _btn_size = btn_size + + local xi = (i - 1) % width + local yi = floor((i - 1) / width) + + X = btn_size * xi + data.xoffset + 0.3 + (xi * 0.05) + Y = btn_size * yi + data.yoffset + 0.2 + (yi * 0.05) + end + + if X > right then + right = X + end + + local groups + + if is_group(name) then + groups = extract_groups(name) + item = groups_to_items(groups) + end + + local label = groups and "\nG" or "" + local replace + + for j = 1, #(rcp.replacements or {}) do + local replacement = rcp.replacements[j] + if replacement[1] == name then + replace = replace or {type = rcp.type, items = {}} + + local added + + for _, v in ipairs(replace.items) do + if replacement[2] == v then + added = true + break + end + end + + if not added then + label = sprintf("%s%s\nR", label ~= "" and "\n" or "", label) + replace.items[#replace.items + 1] = replacement[2] + end + end + end + + if not large_recipe then + fs(fmt("image", X, Y, btn_size, btn_size, PNG.selected)) + end + + local btn_name = groups and sprintf("group|%s|%s", groups[1], item) or item + + fs(fmt("item_image_button", X, Y, btn_size, btn_size, + sprintf("%s %u", item, is_recipe and data.scrbar_rcp or data.scrbar_usg or 1), + btn_name, label)) + + local def = reg_items[name] + local unknown = not def or nil + unknown = not groups and unknown or nil + local desc = def and def.description + local weird = name ~= "" and desc and weird_desc(desc) or nil + local burntime = fuel_cache[name] and fuel_cache[name].burntime + + local infos = { + unknown = unknown, + weird = weird, + groups = groups, + burntime = burntime, + cooktime = cooktime, + replace = replace, + } + + if next(infos) then + fs(get_tooltip(btn_name, infos)) + end + end + + if large_recipe then + fs("style_type[item_image_button;border=false]") + end + + get_output_fs(fs, data, rcp, is_recipe, shapeless, right, btn_size, _btn_size) +end + +local function get_rcp_lbl(fs, data, panel, rn, is_recipe) + local lbl = ES("Usage @1 of @2", data.unum, rn) + + if is_recipe then + lbl = ES("Recipe @1 of @2", data.rnum, rn) + end + + local _lbl = translate(data.lang_code, lbl) + local lbl_len = #_lbl:gsub("[\128-\191]", "") -- Count chars, not bytes in UTF-8 strings + local shift = min(0.9, abs(12 - max(12, lbl_len)) * 0.15) + + fs(fmt("label", data.xoffset + 5.65 - shift, data.yoffset + 3.37, lbl)) + + if rn > 1 then + local btn_suffix = is_recipe and "recipe" or "usage" + local prev_name = sprintf("prev_%s", btn_suffix) + local next_name = sprintf("next_%s", btn_suffix) + local x_arrow = data.xoffset + 4.9 + local y_arrow = data.yoffset + 3 + + fs(fmt("arrow", x_arrow - shift, y_arrow, PNG.prev, prev_name, ""), + fmt("arrow", x_arrow + 2.3, y_arrow, PNG.next, next_name, "")) + end + + local rcp = is_recipe and panel.rcp[data.rnum] or panel.rcp[data.unum] + get_grid_fs(fs, data, rcp, is_recipe) +end + +local function get_model_fs(fs, data, def, model_alias) + if model_alias then + if model_alias.drawtype == "entity" then + def = reg_entities[model_alias.name] + local init_props = def.initial_properties + def.textures = init_props and init_props.textures or def.textures + def.mesh = init_props and init_props.mesh or def.mesh + else + def = reg_items[model_alias.name] + end + end + + local tiles = def.tiles or def.textures or {} + local t = {} + + for _, v in ipairs(tiles) do + local _name + + if v.color then + local hex = sprintf("%02x", v.color) + + while #hex < 8 do + hex = "0" .. hex + end + + _name = sprintf("%s^[multiply:%s", v.name, + sprintf("#%s%s", sub(hex, 3), sub(hex, 1, 2))) + + elseif v.animation then + _name = sprintf("%s^[verticalframe:%u:0", v.name, v.animation.aspect_h) + end + + t[#t + 1] = _name or v.name or v + end + + while #t < 6 do + t[#t + 1] = t[#t] + end + + fs(fmt("model", + data.xoffset + 6.6, data.yoffset + 0.05, 1.3, 1.3, "", def.mesh, concat(t, ","))) +end + +local function get_title_fs(fs, data) + local fav = is_fav(data.favs, data.query_item) + local nfavs = #data.favs + local star_x, star_y, star_size = data.xoffset + 0.4, data.yoffset + 0.5, 0.4 + + if nfavs < MAX_FAVS or (nfavs == MAX_FAVS and fav) then + local fav_marked = sprintf("craftguide_fav%s.png", fav and "_off" or "") + + fs(sprintf("style[fav;fgimg=%s;fgimg_hovered=%s;fgimg_pressed=%s]", + sprintf("craftguide_fav%s.png", fav and "" or "_off"), fav_marked, fav_marked), + fmt("image_button", star_x, star_y, star_size, star_size, "", "fav", ""), + sprintf("tooltip[fav;%s]", fav and ES"Unmark this item" or ES"Mark this item")) + else + fs(sprintf("style[nofav;fgimg=%s;fgimg_hovered=%s;fgimg_pressed=%s]", + "craftguide_fav_off.png", PNG.nothing, PNG.nothing), + fmt("image_button", star_x, star_y, star_size, star_size, "", "nofav", ""), + sprintf("tooltip[nofav;%s]", ES"Cannot mark this item. Bookmark limit reached.")) + end + + fs("style_type[label;font=bold;font_size=+6]", + fmt("label", data.xoffset + 1.05, data.yoffset + 0.47, + snip(ESC(get_desc(data.query_item, data.lang_code)), 32)), + "style_type[label;font=mono;font_size=+0]", + fmt("label", data.xoffset + 1.05, data.yoffset + 0.97, + clr("#7bf", snip(data.query_item, 34))), + "style_type[label;font=normal]") + + local def = reg_items[data.query_item] + local model_alias = craftguide.model_alias[data.query_item] + + if def.drawtype == "mesh" or model_alias then + get_model_fs(fs, data, def, model_alias) + else + fs(fmt("item_image", + data.xoffset + 6.8, data.yoffset + 0.17, 1.1, 1.1, data.query_item)) + end +end + +local function get_export_fs(fs, data, panel, is_recipe, is_usage, max_stacks_rcp, max_stacks_usg) + local name = is_recipe and "rcp" or "usg" + local show_export = (is_recipe and data.export_rcp) or (is_usage and data.export_usg) + + fs(sprintf("style[export_%s;fgimg=%s;fgimg_hovered=%s;fgimg_pressed=%s]", + name, sprintf("craftguide_export%s.png", show_export and "" or "_off"), + "craftguide_export.png", "craftguide_export.png"), + fmt("image_button", + data.xoffset + 7.35, data.yoffset + 0.2, 0.45, 0.45, "", + sprintf("export_%s", name), ""), + sprintf("tooltip[export_%s;%s]", name, ES"Craft this stack")) + + if not show_export then return end + + local item = (is_recipe and panel.rcp[data.rnum].output) or + (is_usage and panel.rcp[data.unum].output) + item = clean_name(item) + local _name = match(item, "%S*") + local stack = ItemStack(_name) + local stack_max = stack:get_stack_max() + local craft_max = is_recipe and max_stacks_rcp or max_stacks_usg + local stack_fs = (is_recipe and data.scrbar_rcp) or (is_usage and data.scrbar_usg) or 1 + + if stack_fs > craft_max then + stack_fs = craft_max + + if is_recipe then + data.scrbar_rcp = craft_max + elseif is_usage then + data.scrbar_usg = craft_max + end + end + + fs(sprintf("style[scrbar_%s;noclip=true]", name), + sprintf("scrollbaroptions[min=1;max=%u;smallstep=1]", min(craft_max, stack_max)), + fmt("scrollbar", + data.xoffset + 8.1, data.yoffset, 3, 0.35, sprintf("scrbar_%s", name), stack_fs), + fmt("button", data.xoffset + 8.1, data.yoffset + 0.4, 3, 0.7, sprintf("craft_%s", name), + sprintf("%s", sprintf(stack_fs > 1 and ES"Craft %u stacks" or ES"Craft %u stack", + stack_fs)))) +end + +local function get_rcp_extra(fs, data, panel, is_recipe, is_usage) + local rn = panel.rcp and #panel.rcp + + if rn then + local rcp_normal = is_recipe and panel.rcp[data.rnum].type == "normal" + local usg_normal = is_usage and panel.rcp[data.unum].type == "normal" + local max_stacks_rcp, max_stacks_usg = 0, 0 + + if rcp_normal then + max_stacks_rcp = get_stack_max(data, is_recipe, panel.rcp[data.rnum]) + end + + if usg_normal then + max_stacks_usg = get_stack_max(data, is_recipe, panel.rcp[data.unum]) + end + + if is_recipe and max_stacks_rcp == 0 then + data.export_rcp = nil + data.scrbar_rcp = 1 + elseif is_usage and max_stacks_usg == 0 then + data.export_usg = nil + data.scrbar_usg = 1 + end + + if max_stacks_rcp > 0 or max_stacks_usg > 0 then + get_export_fs(fs, data, panel, is_recipe, is_usage, max_stacks_rcp, + max_stacks_usg) + end + + get_rcp_lbl(fs, data, panel, rn, is_recipe) + else + local lbl = is_recipe and ES"No recipes" or ES"No usages" + fs(fmt("button", + data.xoffset + 0.1, data.yoffset + (panel.height / 2) - 0.5, + 7.8, 1, "no_rcp", lbl)) + end +end + +local function get_favs(fs, data) + fs(fmt("label", data.xoffset + 0.4, data.yoffset + 0.4, ES"Bookmarks")) + + for i = 1, #data.favs do + local item = data.favs[i] + local X = data.xoffset - 0.7 + (i * 1.2) + local Y = data.yoffset + 0.8 + + if data.query_item == item then + fs(fmt("image", X, Y, ITEM_BTN_SIZE, ITEM_BTN_SIZE, PNG.selected)) + end + + fs(fmt("item_image_button", X, Y, ITEM_BTN_SIZE, ITEM_BTN_SIZE, item, item, "")) + end +end + +local function get_panels(fs, data) + local _title = {name = "title", height = 1.4} + local _favs = {name = "favs", height = 2.2} + local _recipes = {name = "recipes", rcp = data.recipes, height = 3.9} + local _usages = {name = "usages", rcp = data.usages, height = 3.9} + local panels = {_title, _recipes, _usages, _favs} + + for idx = 1, #panels do + local panel = panels[idx] + data.yoffset = 0 + + if idx > 1 then + for _idx = idx - 1, 1, -1 do + data.yoffset = data.yoffset + panels[_idx].height + 0.1 + end + end + + fs(fmt("bg9", data.xoffset + 0.1, data.yoffset, 7.9, panel.height, PNG.bg_full, 10)) + + local is_recipe, is_usage = panel.name == "recipes", panel.name == "usages" + + if is_recipe or is_usage then + get_rcp_extra(fs, data, panel, is_recipe, is_usage) + elseif panel.name == "title" then + get_title_fs(fs, data) + elseif panel.name == "favs" then + get_favs(fs, data) + end + end +end + +local function make_fs(data) + local fs = setmetatable({}, { + __call = function(t, ...) + t[#t + 1] = concat({...}) + end + }) + + data.xoffset = ROWS + 1.04 + + fs(sprintf([[ + formspec_version[%u] + size[%f,%f] + no_prepend[] + bgcolor[#0000] + ]], + MIN_FORMSPEC_VERSION, data.xoffset + (data.query_item and 8 or 0), LINES + 1.7), styles) + + fs(fmt("bg9", 0, 0, data.xoffset, LINES + 1.7, PNG.bg_full, 10)) + + fs(sprintf([[ + box[0.2,0.2;3.5,0.6;#bababa25] + set_focus[filter] + field[0.2,0.2;3.5,0.6;filter;;%s] + field_close_on_enter[filter;false] + ]], ESC(data.filter)), + fmt("image_button", 3.75, 0.15, 0.7, 0.7, "", "search", ""), + fmt("image_button", 4.43, 0.15, 0.7, 0.7, "", "clear", "")) + + fs(fmt("image_button", data.xoffset - 3.2, 0.15, 0.7, 0.7, "", "prev_page", ""), + fmt("image_button", data.xoffset - 0.7, 0.15, 0.7, 0.7, "", "next_page", "")) + + data.pagemax = max(1, ceil(#data.items / IPP)) + + fs(fmt("button", + data.xoffset - 2.53, 0.15, 1.88, 0.7, "pagenum", + sprintf("%s / %u", clr("#ff0", data.pagenum), data.pagemax))) + + if #data.items == 0 then + local lbl = ES"No item to show" + + if next(recipe_filters) and #init_items > 0 and data.filter == "" then + lbl = ES"Collect items to reveal more recipes" + end + + fs(fmt("button", 0, 3, data.xoffset, 1, "no_item", lbl)) + end + + local first_item = (data.pagenum - 1) * IPP + + for i = first_item, first_item + IPP - 1 do + local item = data.items[i + 1] + if not item then break end + + local X = i % ROWS + X = X + (X * 0.08) + 0.2 + + local Y = (i % IPP - X) / ROWS + 1 + Y = Y + (Y * 0.06) + + if data.query_item == item then + fs(fmt("image", X, Y, 1, 1, PNG.selected)) + end + + fs(fmt("item_image_button", X, Y, 1, 1, item, sprintf("%s_inv", item), "")) + end + + if (data.recipes and #data.recipes > 0) or (data.usages and #data.usages > 0) then + get_panels(fs, data) + end + + return concat(fs) +end + +local show_fs = function(player, name) + local data = pdata[name] + show_formspec(name, "craftguide", make_fs(data)) +end + +craftguide.register_craft_type("digging", { + description = ES"Digging", + icon = "craftguide_steelpick.png", +}) + +craftguide.register_craft_type("digging_chance", { + description = ES"Digging (by chance)", + icon = "craftguide_mesepick.png", +}) + +local function search(data) + local filter = data.filter + + if searches[filter] then + data.items = searches[filter] + return + end + + local opt = "^(.-)%+([%w_]+)=([%w_,]+)" + local search_filter = next(search_filters) and match(filter, opt) + local filters = {} + + if search_filter then + for filter_name, values in gmatch(filter, sub(opt, 6)) do + if search_filters[filter_name] then + values = split(values, ",") + filters[filter_name] = values + end + end + end + + local filtered_list, c = {}, 0 + + for i = 1, #data.items_raw do + local item = data.items_raw[i] + local def = reg_items[item] + local desc = lower(translate(data.lang_code, def and def.description)) or "" + local search_in = sprintf("%s %s", item, desc) + local to_add + + if search_filter then + for filter_name, values in pairs(filters) do + if values then + local func = search_filters[filter_name] + to_add = func(item, values) and (search_filter == "" or + find(search_in, search_filter, 1, true)) + end + end + else + to_add = find(search_in, filter, 1, true) + end + + if to_add then + c = c + 1 + filtered_list[c] = item + end + end + + if not next(recipe_filters) then + -- Cache the results only if searched 2 times + if searches[filter] == nil then + searches[filter] = false + else + searches[filter] = filtered_list + end + end + + data.items = filtered_list +end + +craftguide.add_search_filter("groups", function(item, groups) + local def = reg_items[item] + local has_groups = true + + for i = 1, #groups do + local group = groups[i] + if not def.groups[group] then + has_groups = nil + break + end + end + + return has_groups +end) + +--[[ As `core.get_craft_recipe` and `core.get_all_craft_recipes` do not + return the fuel, replacements and toolrepair recipes, we have to + override `core.register_craft` and do some reverse engineering. + See engine's issues #4901, #5745 and #8920. ]] + +local old_register_craft = core.register_craft +local rcp_num = {} + +core.register_craft = function(def) + old_register_craft(def) + + if def.type == "toolrepair" then + toolrepair = def.additional_wear * -100 + end + + local output = def.output or (true_str(def.recipe) and def.recipe) or nil + if not output then return end + output = {match(output, "%S+")} + + local groups + + if is_group(output[1]) then + groups = extract_groups(output[1]) + output = groups_to_items(groups, true) + end + + for i = 1, #output do + local item = output[i] + rcp_num[item] = (rcp_num[item] or 0) + 1 + + if def.replacements then + if def.type == "fuel" then + replacements.fuel[item] = def.replacements + else + replacements[item] = replacements[item] or {} + replacements[item][rcp_num[item]] = def.replacements + end + end + end +end + +local old_clear_craft = core.clear_craft + +core.clear_craft = function(def) + old_clear_craft(def) + + if true_str(def) then + return -- TODO + elseif is_table(def) then + return -- TODO + end +end + +local function resolve_aliases(hash) + for oldname, newname in pairs(reg_aliases) do + cache_recipes(oldname) + local recipes = recipes_cache[oldname] + + if recipes then + if not recipes_cache[newname] then + recipes_cache[newname] = {} + end + + local similar + + for i = 1, #recipes_cache[oldname] do + local rcp_old = recipes_cache[oldname][i] + + for j = 1, #recipes_cache[newname] do + local rcp_new = copy(recipes_cache[newname][j]) + rcp_new.output = oldname + + if table_eq(rcp_old, rcp_new) then + similar = true + break + end + end + + if not similar then + insert(recipes_cache[newname], rcp_old) + end + end + end + + if newname ~= "" and recipes_cache[oldname] and not hash[newname] then + init_items[#init_items + 1] = newname + end + end +end + +local function get_init_items() + local _select, _preselect = {}, {} + + for name, def in pairs(reg_items) do + if name ~= "" and show_item(def) then + cache_drops(name, def.drop) + cache_fuel(name) + cache_recipes(name) + + _preselect[name] = true + end + end + + for name in pairs(_preselect) do + cache_usages(name) + end + + for name in pairs(_preselect) do + if recipes_cache[name] or usages_cache[name] then + init_items[#init_items + 1] = name + _select[name] = true + end + end + + resolve_aliases(_select) + sort(init_items) + + if http and true_str(craftguide.export_url) then + local post_data = { + recipes = recipes_cache, + usages = usages_cache, + } + + http.fetch_async{ + url = craftguide.export_url, + post_data = write_json(post_data), + } + end +end + +local function init_data(name) + pdata[name] = { +<<<<<<< HEAD + filter = "", + pagenum = 1, + items = init_items, + items_raw = init_items, + favs = {}, + lang_code = get_lang_code(name), +======= + filter = "", + pagenum = 1, + items = init_items, + items_raw = init_items, + favs = {}, + export_counts = {}, + lang_code = get_lang_code(info), + fs_version = get_formspec_version(info), + player = get_player_by_name(name), +>>>>>>> origin/master + } +end + +local function reset_data(data) + data.filter = "" + data.pagenum = 1 + data.rnum = 1 + data.unum = 1 + data.scrbar_rcp = 1 + data.scrbar_usg = 1 + data.query_item = nil + data.recipes = nil + data.usages = nil + data.show_usages = nil + data.export_rcp = nil + data.export_usg = nil + data.items = data.items_raw +end + +on_mods_loaded(get_init_items) + +on_joinplayer(function(player) + local name = player:get_player_name() + init_data(name) + + if not pdata[name].lang_code then + outdated(name) + end +end) + +local function fields(player, _f) + if _f.quit then return end + local name = player:get_player_name() + local data = pdata[name] + local sb_rcp, sb_usg = _f.scrbar_rcp, _f.scrbar_usg + + if _f.clear then + reset_data(data) + + elseif _f.prev_recipe or _f.next_recipe then + local num = data.rnum + (_f.prev_recipe and -1 or 1) + data.rnum = data.recipes[num] and num or (_f.prev_recipe and #data.recipes or 1) + data.export_rcp = nil + data.scrbar_rcp = 1 + + elseif _f.prev_usage or _f.next_usage then + local num = data.unum + (_f.prev_usage and -1 or 1) + data.unum = data.usages[num] and num or (_f.prev_usage and #data.usages or 1) + data.export_usg = nil + data.scrbar_usg = 1 + + elseif _f.key_enter_field == "filter" or _f.search then + if _f.filter == "" then + reset_data(data) + return true, show_fs(player, name) + end + + local str = lower(_f.filter) + if data.filter == str then return end + + data.filter = str + data.pagenum = 1 + + search(data) + + elseif _f.prev_page or _f.next_page then + if data.pagemax == 1 then return end + data.pagenum = data.pagenum - (_f.prev_page and 1 or -1) + + if data.pagenum > data.pagemax then + data.pagenum = 1 + elseif data.pagenum == 0 then + data.pagenum = data.pagemax + end + + elseif _f.fav then + local fav, i = is_fav(data.favs, data.query_item) + local total = #data.favs + + if total < MAX_FAVS and not fav then + data.favs[total + 1] = data.query_item + elseif fav then + remove(data.favs, i) + end + + elseif _f.export_rcp or _f.export_usg then + if _f.export_rcp then + data.export_rcp = not data.export_rcp + else + data.export_usg = not data.export_usg + end + + elseif (sb_rcp and sub(sb_rcp, 1, 3) == "CHG") or (sb_usg and sub(sb_usg, 1, 3) == "CHG") then + data.scrbar_rcp = sb_rcp and tonum(match(sb_rcp, "%d+")) + data.scrbar_usg = sb_usg and tonum(match(sb_usg, "%d+")) + + elseif _f.craft_rcp or _f.craft_usg then + craft_stack(player, name, data, _f.craft_rcp) + else + select_item(player, data, _f) + end + + return true, show_fs(player, name) +end + +<<<<<<< HEAD +if sfinv_only then + sfinv.register_page("craftguide:craftguide", { + title = S"Craft Guide", + + is_in_nav = function(self, player, context) + local name = player:get_player_name() + return get_lang_code(name) + end, + + get = function(self, player, context) + local name = player:get_player_name() + local data = pdata[name] + + return sfinv.make_formspec(player, context, make_fs(data)) + end, + + on_enter = function(self, player, context) + if next(recipe_filters) then + local name = player:get_player_name() + local data = pdata[name] + + data.items_raw = get_filtered_items(player) + search(data) + end + end, +======= +on_receive_fields(function(player, formname, _f) + if formname == "craftguide" then + fields(player, _f) + end +end) +>>>>>>> origin/master + +local function on_use(user) + local name = user:get_player_name() + local data = pdata[name] + + if data.fs_version < MIN_FORMSPEC_VERSION then + return outdated(name) + end + +<<<<<<< HEAD + if not data.lang_code then + return outdated(name) + end +======= + if next(recipe_filters) then + data.items_raw = get_filtered_items(user) + search(data) + end +>>>>>>> origin/master + + show_formspec(name, "craftguide", make_fs(data)) +end + +core.register_craftitem("craftguide:book", { + description = S"Crafting Guide", + inventory_image = PNG.book, + wield_image = PNG.book, + stack_max = 1, + groups = {book = 1}, + on_use = function(itemstack, user) + on_use(user) + end +}) + +core.register_node("craftguide:sign", { + description = S"Crafting Guide Sign", + drawtype = "nodebox", + tiles = {PNG.sign}, + inventory_image = PNG.sign, + wield_image = PNG.sign, + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + groups = { + choppy = 1, + attached_node = 1, + oddly_breakable_by_hand = 1, + flammable = 3, + }, + node_box = { + type = "wallmounted", + wall_top = {-0.5, 0.4375, -0.5, 0.5, 0.5, 0.5}, + wall_bottom = {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5}, + wall_side = {-0.5, -0.5, -0.5, -0.4375, 0.5, 0.5} + }, + + on_construct = function(pos) + local meta = core.get_meta(pos) + meta:set_string("infotext", "Crafting Guide Sign") + end, + + on_rightclick = function(pos, node, user, itemstack) + on_use(user) + end +}) + +core.register_craft{ + output = "craftguide:book", + type = "shapeless", + recipe = {"default:book"} +} + +core.register_craft{ + type = "fuel", + recipe = "craftguide:book", + burntime = 3 +} + +core.register_craft{ + output = "craftguide:sign", + type = "shapeless", + recipe = {"default:sign_wall_wood"} +} + +core.register_craft{ + type = "fuel", + recipe = "craftguide:sign", + burntime = 10 +} + +if progressive_mode then + local function item_in_inv(item, inv_items) + local inv_items_size = #inv_items + + if is_group(item) then + local groups = extract_groups(item) + for i = 1, inv_items_size do + local def = reg_items[inv_items[i]] + + if def then + if item_has_groups(def.groups, groups) then + return true + end + end + end + else + for i = 1, inv_items_size do + if inv_items[i] == item then + return true + end + end + end + end + + local function recipe_in_inv(rcp, inv_items) + for _, item in pairs(rcp.items) do + if not item_in_inv(item, inv_items) then return end + end + + return true + end + + local function progressive_filter(recipes, player) + if not recipes then + return {} + end + + local name = player:get_player_name() + local data = pdata[name] + + if #data.inv_items == 0 then + return {} + end + + local filtered, c = {}, 0 + for i = 1, #recipes do + local recipe = recipes[i] + if recipe_in_inv(recipe, data.inv_items) then + c = c + 1 + filtered[c] = recipe + end + end + + return filtered + end + + local item_lists = {"main", "craft", "craftpreview"} + + local function get_inv_items(player) + local inv = player:get_inventory() + local stacks = {} + + for i = 1, #item_lists do + local list = inv:get_list(item_lists[i]) + table_merge(stacks, list) + end + + local inv_items, c = {}, 0 + + for i = 1, #stacks do + local stack = stacks[i] + if not stack:is_empty() then + local name = stack:get_name() + if reg_items[name] then + c = c + 1 + inv_items[c] = name + end + end + end + + return inv_items + end + + local function init_hud(player, data) + data.hud = { + bg = player:hud_add{ + hud_elem_type = "image", + position = {x = 0.78, y = 1}, + alignment = {x = 1, y = 1}, + scale = {x = 370, y = 112}, + text = PNG.bg, + z_index = 0xDEAD, + }, + + book = player:hud_add{ + hud_elem_type = "image", + position = {x = 0.79, y = 1.02}, + alignment = {x = 1, y = 1}, + scale = {x = 4, y = 4}, + text = PNG.book, + z_index = 0xDEAD, + }, + + text = player:hud_add{ + hud_elem_type = "text", + position = {x = 0.84, y = 1.04}, + alignment = {x = 1, y = 1}, + number = 0xffffff, + text = "", + z_index = 0xDEAD, + }, + } + end + + local function show_hud_success(player, data) + -- It'd better to have an engine function `hud_move` to only need + -- 2 calls for the notification's back and forth. + + local hud_info_bg = player:hud_get(data.hud.bg) + local dt = 0.016 + + if hud_info_bg.position.y <= 0.9 then + data.show_hud = false + data.hud_timer = (data.hud_timer or 0) + dt + end + + if data.show_hud then + for _, def in pairs(data.hud) do + local hud_info = player:hud_get(def) + + player:hud_change(def, "position", { + x = hud_info.position.x, + y = hud_info.position.y - (dt / 5) + }) + end + + player:hud_change(data.hud.text, "text", + S("@1 new recipe(s) discovered!", data.discovered)) + + elseif data.show_hud == false then + if data.hud_timer >= HUD_TIMER_MAX then + for _, def in pairs(data.hud) do + local hud_info = player:hud_get(def) + + player:hud_change(def, "position", { + x = hud_info.position.x, + y = hud_info.position.y + (dt / 5) + }) + end + + if hud_info_bg.position.y >= 1 then + data.show_hud = nil + data.hud_timer = nil + end + end + end + end + + -- Workaround. Need an engine call to detect when the contents of + -- the player inventory changed, instead. + local function poll_new_items() + local players = get_players() + for i = 1, #players do + local player = players[i] + local name = player:get_player_name() + local data = pdata[name] + + local inv_items = get_inv_items(player) + local diff = array_diff(inv_items, data.inv_items) + + if #diff > 0 then + data.inv_items = table_merge(diff, data.inv_items) + local oldknown = data.known_recipes or 0 + get_filtered_items(player, data) + data.discovered = data.known_recipes - oldknown + + if data.show_hud == nil and data.discovered > 0 then + data.show_hud = true + end + end + end + + after(POLL_FREQ, poll_new_items) + end + + poll_new_items() + + globalstep(function() + local players = get_players() + for i = 1, #players do + local player = players[i] + local name = player:get_player_name() + local data = pdata[name] + + if data.show_hud ~= nil and singleplayer then + show_hud_success(player, data) + end + end + end) + + craftguide.add_recipe_filter("Default progressive filter", progressive_filter) + + on_joinplayer(function(player) + local name = player:get_player_name() + local data = pdata[name] + + local meta = player:get_meta() + data.inv_items = dslz(meta:get_string "inv_items") or {} + data.known_recipes = dslz(meta:get_string "known_recipes") or 0 + + if singleplayer then + init_hud(player, data) + end + end) + + local to_save = {"inv_items", "known_recipes"} + + local function save_meta(player) + local meta = player:get_meta() + local name = player:get_player_name() + local data = pdata[name] + + for i = 1, #to_save do + local meta_name = to_save[i] + meta:set_string(meta_name, slz(data[meta_name])) + end + end + + on_leaveplayer(save_meta) + + on_shutdown(function() + local players = get_players() + for i = 1, #players do + local player = players[i] + save_meta(player) + end + end) +end + +on_leaveplayer(function(player) + local name = player:get_player_name() + pdata[name] = nil +end) + +function craftguide.show(name, item, show_usages) + if not true_str(name) then + return err "craftguide.show(): player name missing" + end + + local data = pdata[name] + local player = get_player_by_name(name) + local query_item = data.query_item + + reset_data(data) + + item = reg_items[item] and item or query_item + local recipes, usages = get_recipes(item, data, player) + + if not recipes and not usages then + if not recipes_cache[item] and not usages_cache[item] then + return false, msg(name, sprintf("%s: %s", + S"No recipe or usage for this item", get_desc(item))) + end + + return false, msg(name, sprintf("%s: %s", + S"You don't know a recipe or usage for this item", get_desc(item))) + end + + data.query_item = item + data.recipes = recipes + data.usages = usages + + show_fs(player, name) +end + +register_command("craft", { + description = S"Show recipe(s) of the pointed node", + func = function(name) + local player = get_player_by_name(name) + local dir = player:get_look_dir() + local ppos = player:get_pos() + ppos.y = ppos.y + 1.625 + + local node_name + + for i = 1, 10 do + local look_at = vec_add(ppos, vec_mul(dir, i)) + local node = core.get_node(look_at) + + if node.name ~= "air" then + node_name = node.name + break + end + end + + if not node_name then + return false, msg(name, S"No node pointed") + end + + return true, craftguide.show(name, node_name) + end, +}) diff --git a/my_changes/_not-used/hunger_ng/effects.patch b/my_changes/_not-used/hunger_ng/effects.patch new file mode 100644 index 0000000..7a072a3 --- /dev/null +++ b/my_changes/_not-used/hunger_ng/effects.patch @@ -0,0 +1,14 @@ +diff --git a/init.lua b/init.lua +index d329d0f..7a82145 100644 +--- a/init.lua ++++ b/init.lua +@@ -147,7 +147,8 @@ local api_functions = { + attributes = hunger_ng.attributes, + translator = hunger_ng.configuration.translator, + get_data = hunger_ng.functions.get_data, +- set_data = hunger_ng.functions.set_data ++ set_data = hunger_ng.functions.set_data, ++ effects = hunger_ng.effects, + } + } + diff --git a/my_changes/_not-used/hunger_ng/init.lua b/my_changes/_not-used/hunger_ng/init.lua new file mode 100644 index 0000000..7a82145 --- /dev/null +++ b/my_changes/_not-used/hunger_ng/init.lua @@ -0,0 +1,155 @@ +-- Exit if damage is not enabled and create dummy functions so mods using the +-- API do not crash the server. +if not minetest.is_yes(minetest.settings:get('enable_damage')) then + local info = 'Hunger NG is disabled because damage is disabled.' + + local call = function (function_name) + minetest.log('warning', ('+m tried to use +f but +i'):gsub('%+%a+', { + ['+m'] = minetest.get_current_modname(), + ['+f'] = 'hunger_ng.'..function_name..'()', + ['+i'] = info + })) + end + + hunger_ng = { + add_hunger_data = function () call('add_hunger_data') end, + alter_hunger = function () call('alter_hunger') end, + configure_hunger = function () call('configure_hunger') end, + get_hunger_information = function () call('get_hunger_information') end + } + + minetest.log('info', '[hunger_ng] '..info) + + return +end + + +-- Paths for later use +local modpath = minetest.get_modpath('hunger_ng')..DIR_DELIM +local worldpath = minetest.get_worldpath()..DIR_DELIM +local configpath = worldpath..'_hunger_ng'..DIR_DELIM..'hunger_ng_settings.conf' + + +-- World-specific configuration interface for use in the get function +local worldconfig = Settings(configpath) + + +-- Wrapper for getting configuration options +-- +-- The function automatically prefixes the given setting with `hunger_ng_` and +-- returns the requested setting from one of the three sources. +-- +-- 1. world-specific `./worlds/worldname/_hunger_ng/hunger_ng.conf` file +-- 2. default `minetest.conf` file +-- 3. the given default value +-- +-- If 1. is found then it will be returned from there. If 2. is found then it +-- will be returned from there and after that it will be returned using 3. +-- +-- @param setting The unprefixed setting name +-- @param default The default value if the setting is not found +-- @return string The value for the requested setting +local get = function (setting, default) + local parameter = 'hunger_ng_'..setting + local global_setting = minetest.settings:get(parameter) + local world_specific_setting = worldconfig:get(parameter) + return world_specific_setting or global_setting or default +end + + +-- Global hunger_ng table that will be used to pass around variables and use +-- them later in the game. +hunger_ng = { + functions = {}, + food_items = { + satiating = 0, + starving = 0, + healing = 0, + injuring = 0, + }, + attributes = { + hunger_bar_id = 'hunger_ng:hunger_bar_id', + hunger_value = 'hunger_ng:hunger_value', + eating_timestamp = 'hunger_ng:eating_timestamp', + hunger_disabled = 'hunger_ng:hunger_disabled' + }, + configuration = { + debug_mode = minetest.is_yes(get('debug_mode', false)), + log_prefix = '[hunger_ng] ', + translator = minetest.get_translator('hunger_ng') + }, + settings = { + hunger_bar = { + image = get('hunger_bar_image', 'hunger_ng_builtin_bread_icon.png'), + use = minetest.is_yes(get('use_hunger_bar', true)) + }, + timers = { + heal = tonumber(get('timer_heal', 5)), + starve = tonumber(get('timer_starve', 10)), + basal_metabolism = tonumber(get('timer_basal_metabolism', 60)), + movement = tonumber(get('timer_movement', 0.5)) + }, + hunger = { + timeout = tonumber(get('hunger_timeout', 0)), + persistent = minetest.is_yes(get('hunger_persistent', true)), + start_with = tonumber(get('hunger_start_with', 20)), + maximum = tonumber(get('hunger_maximum', 20)) + } + }, + effects = { + heal = { + above = tonumber(get('heal_above', 16)), + amount = tonumber(get('heal_amount', 1)) + }, + starve = { + below = tonumber(get('starve_below', 1)), + amount = tonumber(get('starve_amount', 1)), + die = minetest.is_yes(get('starve_die', false)) + }, + disabled_attribute = 'hunger_ng:hunger_disabled' + }, + costs = { + base = tonumber(get('cost_base', 0.1)), + dig = tonumber(get('cost_dig', 0.005)), + place = tonumber(get('cost_place', 0.01)), + movement = tonumber(get('cost_movement', 0.008)) + } +} + + +-- Load mod parts +dofile(modpath..'system'..DIR_DELIM..'hunger_functions.lua') +dofile(modpath..'system'..DIR_DELIM..'chat_commands.lua') +dofile(modpath..'system'..DIR_DELIM..'timers.lua') +dofile(modpath..'system'..DIR_DELIM..'register_on.lua') +dofile(modpath..'system'..DIR_DELIM..'add_hunger_data.lua') +dofile(modpath..'system'..DIR_DELIM..'interoperability.lua') + + +-- Log debug mode warning +if hunger_ng.configuration.debug_mode then + local log_prefix = hunger_ng.configuration.log_prefix + minetest.log('warning', log_prefix..'Mod loaded with debug mode enabled!') +end + + +-- Replace the global table used for easy variable access within the mod with +-- an API-like global table for other mods to utilize. +local api_functions = { + add_hunger_data = hunger_ng.functions.add_hunger_data, + alter_hunger = hunger_ng.functions.alter_hunger, + configure_hunger = hunger_ng.functions.configure_hunger, + get_hunger_information = hunger_ng.functions.get_hunger_information, + hunger_bar_image = hunger_ng.settings.hunger_bar.image, + food_items = hunger_ng.food_items, + interoperability = { + settings = hunger_ng.settings, + attributes = hunger_ng.attributes, + translator = hunger_ng.configuration.translator, + get_data = hunger_ng.functions.get_data, + set_data = hunger_ng.functions.set_data, + effects = hunger_ng.effects, + } +} + +hunger_ng = api_functions diff --git a/my_changes/_not-used/water_life/files/hud.lua b/my_changes/_not-used/water_life/files/hud.lua new file mode 100644 index 0000000..4ed006a --- /dev/null +++ b/my_changes/_not-used/water_life/files/hud.lua @@ -0,0 +1,88 @@ + +water_life.playerhud = {} +water_life.playerhud.poison = {} +water_life.playerhud.repellant = {} + + + +water_life.hud_poison = { + + hud_elem_type = "image", + + position = {x=0.5, y=0.8}, + -- Left corner position of element + + name = "water_life_poison", + + scale = {x = 0.1, y = 0.1}, + + text = "water_life_emptyhud.png", + + +} + + + +water_life.hud_repellant = { + hud_elem_type = "image", + + position = {x=0.55, y=0.8}, + -- Left corner position of element + + name = "water_life_repellant", + + scale = {x = 0.1, y = 0.1}, + + text = "water_life_emptyhud.png", +} + + +function water_life.change_hud(player,selection,switch) + local value = "" + if not player then return end + if not selection then selection = "poison" end + if not switch then switch = 1 end + + + local name = player:get_player_name() + + if selection == "poison" then + if switch == 1 then value = "water_life_poison.png" else value = "water_life_emptyhud.png" end + player:hud_change(water_life.playerhud.poison[name], "text", value) + end + + if selection == "repellant" then + if switch == 1 then value = "water_life_repellanthud.png" else value = "water_life_emptyhud.png" end + player:hud_change(water_life.playerhud.repellant[name], "text", value) + end + +end + + + +minetest.register_on_joinplayer(function(player) + if not player then return end + + local meta=player:get_meta() + meta:set_int("repellant",0) + local name = player:get_player_name() + + water_life.playerhud.poison[name] = player:hud_add(water_life.hud_poison) + water_life.playerhud.repellant[name] = player:hud_add(water_life.hud_repellant) + + if meta:get_int("snakepoison") > 0 then + minetest.after(5, function(player) + water_life.change_hud(player,"poison") + end, player) + end + +end) + +minetest.register_on_dieplayer(function(player) + if not player then return end + if water_life.poison_after_death then return end + + local meta=player:get_meta() + meta:set_int("snakepoison",0) + water_life.change_hud(player,"poison",0) +end) diff --git a/my_changes/_not-used/water_life/files/spawn.lua b/my_changes/_not-used/water_life/files/spawn.lua new file mode 100644 index 0000000..59aa23b --- /dev/null +++ b/my_changes/_not-used/water_life/files/spawn.lua @@ -0,0 +1,394 @@ +local timer = 0 +local landtimer = 0 +local pi = math.pi +local random = water_life.random +local landinterval = 60 -- check every 60 seconds for spawnpos on land +local waterinterval = 20 -- check every 20 seconds for spawnpos in water + + +local function getcount(name) + if not name then + return 0 + else + return name + end +end + + +local function spawnstep(dtime) + + timer = timer + dtime + landtimer = landtimer + dtime + + if timer > waterinterval then + + for _,plyr in ipairs(minetest.get_connected_players()) do + + local toomuch = false + + if plyr and plyr:is_player() and plyr:get_pos().y > -50 and plyr:get_pos().y < 150 then -- each player gets a spawn chance every 10s on average + + local pos = plyr:get_pos() + local yaw = plyr:get_look_horizontal() + local animal = water_life.count_objects(pos) + local meta = plyr:get_meta() + + if meta:get_int("snakepoison") > 0 then + poison_value = 1 --defautl poison value + local pl_name=plyr:get_player_name() -- player name + local hunger_ng_infos = hunger_ng.get_hunger_information(pl_name) -- information from hunger_ng + --minetest.log(dump(hunger_ng_infos)) + local hunger_ng_interoper = hunger_ng.interoperability + --minetest.log(dump(hunger_ng_interoper)) + -- if healing is enabled, then add healing to poison value + -- if the same you have the chance to survive if you stay satiated + if hunger_ng_infos.effects.healing then + poison_value = ((waterinterval/hunger_ng_interoper.settings.timers.heal)*hunger_ng_interoper.effects.heal.amount) + 0.1 --+ poison_value -- if you want decrease healt even with healing + end + minetest.log("Poison: "..dump(poison_value)) + + local score = plyr:get_hp()-poison_value + --if score < 0 then score = 0 end + minetest.log("Health: "..dump(score)) + plyr:set_hp(score) + end + + if meta:get_int("repellant") > 0 then + if math.floor(os.clock()) - meta:get_int("repellant") > water_life.repeltime then + water_life.change_hud(plyr,"repellant",0) + meta:set_int("repellant",0) + end + end + + if animal.all > water_life.maxmobs then toomuch = true end + + -- find a pos randomly in look direction of player + local radius = (water_life.abr * 12) -- 75% from 16 = 12 nodes + radius = random(7,radius) -- not nearer than 7 nodes in front of player + local angel = math.rad(random(75)) -- look for random angel 0 - 75 degrees + if water_life.leftorright() then yaw = yaw + angel else yaw = yaw - angel end -- add or substract to/from yaw + + local pos2 = mobkit.pos_translate2d(pos,yaw,radius) -- calculate position + local depth, stype, surface = water_life.water_depth(pos2,25) -- get surface pos and water depth + local bdata = water_life_get_biome_data(pos2) -- get biome data at spawn position + local ground = {} + local dalam = depth + local landpos = nil + local geckopos = nil + local moskitopos = nil + + -- no need of so many postions on land + if landtimer > landinterval then + landpos = water_life.find_node_under_air(pos2) + geckopos = water_life.find_node_under_air(pos2,5,{"group:tree","group:leaves","default:junglegrass"}) + moskitopos = water_life.find_node_under_air(pos2,5,{"default:river_water_source","water_life:muddy_river_water_source","group:flora","default:dirt_with_rainforest_litter"}) + end + + + if moskitopos and not water_life.dangerous then + local mlevel = minetest.get_node_light(moskitopos) + local ptime = water_life.get_game_time() + local mdata = water_life_get_biome_data(moskitopos) + --minetest.chat_send_all("MOSKITO: "..dump(moskitopos).." : "..dump(mdata.temp).." : "..dump(ptime).." : "..dump(mlevel)) + + if ((ptime and ptime > 2) or mlevel < 8) and mdata.temp > 16 then --from 3pm to 5am or in shadows all day long + + minetest.set_node(moskitopos, {name = "water_life:moskito"}) + minetest.get_node_timer(moskitopos):start(random(15,45)) + local pmeta = minetest.get_meta(moskitopos) + pmeta:set_int("mlife",math.floor(os.clock())) + + end + end + + --some spawn on land, too + + if landpos then + local landdata = water_life_get_biome_data(landpos) + + + if not water_life.dangerous then + -- the snake + local mobname = 'water_life:snake' + local faktor = (100 - getcount(animal[mobname]) * 50) + if random(100) < faktor then + local fits = minetest.is_protected(landpos,mobname) + --minetest.chat_send_all(dump(fits)) + + if (string.match(landdata.name,"desert") or string.match(landdata.name,"savanna")) + and not fits and landdata.temp > 15 then + + local obj=minetest.add_entity(landpos,mobname) -- ok spawn it already damnit + end + end + + + end + + + --the beaver + local mobname = 'water_life:beaver' + local faktor = (100 - getcount(animal[mobname]) * 25) + if random(100) < faktor then + + if string.match(landdata.name,"coniferous") and landdata.temp > -5 and landdata.temp < 20 then + + local obj=minetest.add_entity(landpos,mobname) -- ok spawn it already damnit + end + end + end + + + if geckopos then + local landdata = water_life_get_biome_data(geckopos) + + local mobname = 'water_life:gecko' + local faktor = (100 - getcount(animal[mobname]) * 50) + if random(100) < faktor then + + + if (string.match(landdata.name,"rainforest") or string.match(landdata.name,"savanna")) + and landdata.temp > 20 then + + local obj=minetest.add_entity(geckopos,mobname) -- ok spawn it already damnit + end + end + end + + + + --water spawn + + if depth and depth > 0 then + if water_life.radar_debug then + water_life.temp_show(surface,9,5) + minetest.chat_send_all(">>> Depth ="..dump(depth).." <<< "..dump(stype)) + minetest.chat_send_all(dump(bdata.name)) + end + pos2 = surface + + end + + local liquidflag = nil + + if stype == "default:water_source" then + liquidflag = "sea" + + elseif stype == "default:river_water_source" then + liquidflag = "river" + + elseif stype == "water_life:muddy_river_water_source" then + liquidflag = "muddy" + + end + + if liquidflag and not toomuch and surface then + ground = mobkit.pos_shift(surface,{y=(dalam*-1)}) + + + if not water_life.dangerous then + --minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground))) + local mobname = 'water_life:croc' + local faktor = 100 - getcount(animal[mobname]) * 33 + if random(100) < faktor then + local fits = false + if string.match(bdata.name,"rainforest") or string.match(bdata.name,"savanna") then fits = true end + + if depth < 4 and fits then --shark min water depth + local obj=minetest.add_entity(surface,mobname) -- ok spawn it already damnit + end + + + end + --minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground))) + + + local mobname = 'water_life:snake' + local faktor = (100 - getcount(animal[mobname]) * 50) +25 + if random(100) < faktor then + local fits = false + if string.match(bdata.name,"desert") or string.match(bdata.name,"savanna") then fits = true end + + if depth < 3 and fits then --snake max water depth + local obj=minetest.add_entity(surface,mobname) -- ok spawn it already damnit + end + + + end + --minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground))) + + local mobname = 'water_life:shark' + if water_life.shark_spawn_rate >= random(1000) then + + local bcheck = water_life.count_objects(pos2,12) + if getcount(animal[mobname]) < water_life.maxsharks and liquidflag == "sea" and not bcheck["water_life:shark_buoy"] + and not animal["water_life:croc"] then + + if depth > 4 then --shark min water depth + local obj=minetest.add_entity(mobkit.pos_shift(ground,{y=2}),mobname) -- spawn it 2 nodes above sea ground + end + end + + end + end + + local mobname = "water_life:gull" + local faktor = 100 - getcount(animal[mobname]) * 20 + if random(100) < faktor and liquidflag == "sea" then + if depth > 4 then + local spawn = mobkit.pos_shift(surface,{y=12}) + --spawn.y = spawn.y + 12 + local obj=minetest.add_entity(spawn,mobname) -- ok spawn it already damnit + end + end + + + --minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground))) + mobname = "water_life:urchin" + if water_life.urchin_spawn_rate >= random(1000) then + + local upos1 = mobkit.pos_shift(ground,{x=-5,y=-2,z=-5}) + local upos2 = mobkit.pos_shift(ground,{x=5,y=2,z=5}) + local coraltable = minetest.find_nodes_in_area(upos1, upos2, water_life.urchinspawn) + --local nearlife = water_life.count_objects(ground,5,"water_life:urchin") + if coraltable and #coraltable > 0 and getcount(animal[mobname]) < 15 and liquidflag == "sea" then + local coralpos = coraltable[random(#coraltable)] + coralpos.y = coralpos.y +1 + local node = minetest.get_node(coralpos) + + if node.name == "default:water_source" then + local obj= water_life.set_urchin(coralpos) --minetest.add_entity(coralpos,mobname) + end + end + end + + + --minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground))) + mobname = "water_life:clams" + if water_life.clams_spawn_rate >= random(1000) then + local clpos1 = mobkit.pos_shift(ground,{x=-8, y=-2, z=8}) + local clpos2 = mobkit.pos_shift(ground,{x=8, y=2, z=8}) + local coraltable = minetest.find_nodes_in_area(clpos1, clpos2, water_life.clams_spawn) + ----minetest.chat_send_all("seagrass ="..dump(#coraltable)) + local nearlife = water_life.count_objects(ground,8,"water_life:clams") + if coraltable and #coraltable > 0 and getcount(animal[mobname]) < 10 and liquidflag == "sea" then + local coralpos = mobkit.pos_shift(coraltable[random(#coraltable)],{y=1}) + + local node = minetest.get_node(coralpos) + if node.name == "default:water_source" then + local obj= water_life.set_urchin(coralpos,"water_life:clams") + end + end + end + + + --minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground))) + mobname = "water_life:jellyfish" + + + local faktor = 100 - getcount(animal[mobname]) * 20 + if random(100) < faktor and liquidflag == "sea" and depth > 2 then + local obj=minetest.add_entity(mobkit.pos_shift(ground,{y=2}),mobname) + end + + + mobname = "water_life:coralfish" + + --minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground))) + + local cfpos1 = mobkit.pos_shift(ground,{x=-5,y=-2,z=-5}) + local cfpos2 = mobkit.pos_shift(ground,{x=5,y=2,z=5}) + local coraltable = minetest.find_nodes_in_area(cfpos1,cfpos2,water_life.urchinspawn) + --local nearlife = water_life.count_objects(ground,nil,mobname) + faktor = 100 - getcount(animal[mobname]) * 6.66 + if random(100) < faktor and liquidflag == "sea" and #coraltable > 1 then + local cfish = coraltable[random(#coraltable)] + cfish.y = cfish.y +1 + local maxfish = random(3,7) + for i = 1,maxfish,1 do + local obj=minetest.add_entity(cfish,mobname) + if obj then + local entity = obj:get_luaentity() + entity.base = cfish + entity.head = random(65535) + end + end + end + + + --minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground))) + mobname = "water_life:clownfish" + + faktor = 100 - getcount(animal[mobname]) * 50 + if random(100) < faktor and liquidflag == "sea" and #coraltable > 1 then + local cfish = coraltable[random(#coraltable)] + cfish.y = cfish.y +1 + local obj=minetest.add_entity(cfish,mobname) + if obj then + local entity = obj:get_luaentity() + entity.base = cfish + end + end + + --minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground))) + mobname = 'water_life:fish' + --local nearlife = water_life.count_objects(pos2,24,"water_life:piranha") + if water_life.fish_spawn_rate >= random(1000) and ((animal.all < (water_life.maxmobs-5)) or getcount(animal[mobname]) < 5) and (liquidflag == "river" or liquidflag == "muddy") then + + local table = minetest.get_biome_data(pos) + + if not water_life.dangerous and table and water_life.piranha_biomes[minetest.get_biome_name(table.biome)] then + mobname = "water_life:piranha" + end + + if depth > 2 then -- min water depth for piranha and riverfish + if mobname == "water_life:fish" then + local obj=minetest.add_entity(pos2,mobname) -- ok spawn it already damnit + else + if getcount(animal[mobname]) < 10 then + for i = 1,3,1 do + local obj=minetest.add_entity(pos2,mobname) -- ok spawn it already damnit + end + end + end + end + + + end + + --minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground))) + + mobname = 'water_life:whale' + if water_life.whale_spawn_rate >= random(1000) and getcount(animal[mobname]) < (water_life.maxwhales) and liquidflag == "sea" then + + + if depth > 8 then -- min water depth for whales + + local gotwhale = true + local whpos = mobkit.pos_shift(surface,{y=-3}) + for i = 0,3,1 do + local whpos2 = mobkit.pos_translate2d(whpos,math.rad(i*90),30) + local under = water_life.find_collision(whpos,whpos2, false) + ----minetest.chat_send_all(dump(under)) + if under and under < 25 then + gotwhale = false + break + end + end + if gotwhale then local obj=minetest.add_entity(surface,mobname) end -- ok spawn it already damnit + + end + end + + end + end + end + timer = 0 + if landtimer > landinterval then landtimer = 0 end + end + +end + + + +minetest.register_globalstep(spawnstep) diff --git a/my_changes/_not-used/water_life/poison.patch b/my_changes/_not-used/water_life/poison.patch new file mode 100644 index 0000000..1d5d506 --- /dev/null +++ b/my_changes/_not-used/water_life/poison.patch @@ -0,0 +1,77 @@ +diff --git a/hud.lua b/hud.lua +index bff0dd4..4ed006a 100644 +--- a/hud.lua ++++ b/hud.lua +@@ -78,4 +78,11 @@ minetest.register_on_joinplayer(function(player) + + end) + ++minetest.register_on_dieplayer(function(player) ++ if not player then return end ++ if water_life.poison_after_death then return end + ++ local meta=player:get_meta() ++ meta:set_int("snakepoison",0) ++ water_life.change_hud(player,"poison",0) ++end) +diff --git a/init.lua b/init.lua +index f92c3c3..97833b3 100644 +--- a/init.lua ++++ b/init.lua +@@ -31,6 +31,7 @@ water_life.moskitolifetime = tonumber(minetest.settings:get("water_life_moskitol + water_life.radar_debug = minetest.settings:get_bool("water_life_radar_debug") or false + water_life.muddy_water = minetest.settings:get_bool("water_life_muddy_water") or false + water_life.repeltime = math.floor (720 / (tonumber(minetest.settings:get("time_speed")) or 72)*60) -- the repellent lasts half a minetest day ++water_life.poison_after_death = minetest.settings:get_bool("water_life_poison_after_death") or false + + local path = minetest.get_modpath(minetest.get_current_modname()) + +diff --git a/settingtypes.txt b/settingtypes.txt +index 24bb049..4eb03f3 100644 +--- a/settingtypes.txt ++++ b/settingtypes.txt +@@ -62,3 +62,7 @@ water_life_muddy_water (muddy water in rainforest and savanna biome) bool false + #- + # turn this value to true to see api function debug + water_life_radar_debug (api function debug shown in chat) bool false ++ ++# ++# Turn this Value to true, if you want poison to persist after death ++water_life_poison_after_death (Poison stays after death) bool false +diff --git a/spawn.lua b/spawn.lua +index e6cef07..d2653f9 100644 +--- a/spawn.lua ++++ b/spawn.lua +@@ -35,8 +35,25 @@ local function spawnstep(dtime) + + + if meta:get_int("snakepoison") > 0 then +- local score = plyr:get_hp() +- plyr:set_hp(score-1) ++ --local score = plyr:get_hp() ++ --plyr:set_hp(score-1) ++ poison_value = 1 --defautl poison value ++ local pl_name=plyr:get_player_name() -- player name ++ local hunger_ng_infos = hunger_ng.get_hunger_information(pl_name) -- information from hunger_ng ++ --minetest.log(dump(hunger_ng_infos)) ++ local hunger_ng_interoper = hunger_ng.interoperability ++ --minetest.log(dump(hunger_ng_interoper)) ++ -- if healing is enabled, then add healing to poison value ++ -- if the same you have the chance to survive if you stay satiated ++ if hunger_ng_infos.effects.healing then ++ poison_value = ((waterinterval/hunger_ng_interoper.settings.timers.heal)*hunger_ng_interoper.effects.heal.amount) + 0.1 --+ poison_value -- if you want decrease healt even with healing ++ end ++ --minetest.log("Poison: "..dump(poison_value)) ++ ++ local score = plyr:get_hp()-poison_value ++ --if score < 0 then score = 0 end ++ --minetest.log("Health: "..dump(score)) ++ plyr:set_hp(score) + end + + if meta:get_int("repellant") > 0 then +@@ -378,4 +395,3 @@ end + + + minetest.register_globalstep(spawnstep) +- diff --git a/my_changes/_not-used/water_life/poison_dead_only.patch b/my_changes/_not-used/water_life/poison_dead_only.patch new file mode 100644 index 0000000..d85c54b --- /dev/null +++ b/my_changes/_not-used/water_life/poison_dead_only.patch @@ -0,0 +1,40 @@ +diff --git a/hud.lua b/hud.lua +index bff0dd4..9635342 100644 +--- a/hud.lua ++++ b/hud.lua +@@ -78,4 +78,11 @@ minetest.register_on_joinplayer(function(player) + + end) + ++minetest.register_on_dieplayer(function(player) ++ if not player then return end ++ if water_life.poison_after_death then return end + ++ local meta=player:get_meta() ++ meta:set_int("snakepoison",0) ++ water_life.change_hud(player,"poison",0) ++end) +diff --git a/init.lua b/init.lua +index 0e4fd8a..7c32a0b 100644 +--- a/init.lua ++++ b/init.lua +@@ -31,6 +31,7 @@ water_life.moskitolifetime = tonumber(minetest.settings:get("water_life_moskitol + water_life.radar_debug = minetest.settings:get_bool("water_life_radar_debug") or false + water_life.muddy_water = minetest.settings:get_bool("water_life_muddy_water") or false + water_life.repeltime = math.floor (720 / (tonumber(minetest.settings:get("time_speed")) or 72)*60) -- the repellent lasts half a minetest day ++water_life.poison_after_death = minetest.settings:get_bool("water_life_poison_after_death") or false + + local path = minetest.get_modpath(minetest.get_current_modname()) + +diff --git a/settingtypes.txt b/settingtypes.txt +index 24bb049..4eb03f3 100644 +--- a/settingtypes.txt ++++ b/settingtypes.txt +@@ -62,3 +62,7 @@ water_life_muddy_water (muddy water in rainforest and savanna biome) bool false + #- + # turn this value to true to see api function debug + water_life_radar_debug (api function debug shown in chat) bool false ++ ++# ++# Turn this Value to true, if you want poison to persist after death ++water_life_poison_after_death (Poison stays after death) bool false diff --git a/my_changes/buildings/doors/doors_update.patch b/my_changes/buildings/doors/doors_update.patch new file mode 100644 index 0000000..16ff82f --- /dev/null +++ b/my_changes/buildings/doors/doors_update.patch @@ -0,0 +1,72 @@ +diff --git a/README.txt b/README.txt +index 79320a1..a1eec4f 100644 +--- a/README.txt ++++ b/README.txt +@@ -173,8 +173,9 @@ Minetest 0.4.15+ required + Installation + ---------------------- + +- 1) Unzip the archive into the mods directory of your game. +- 2) Rename the doors-master directory to "doors". ++ 1) Backup the original "doors" mod to a safe location. ++ 2) Unzip the archive into the mods directory of your game. ++ 3) Rename the doors-master directory to "doors". + + Source code license + ---------------------------------------------------------- +diff --git a/api.lua b/api.lua +index d7685bd..1a822da 100644 +--- a/api.lua ++++ b/api.lua +@@ -1,5 +1,5 @@ + -------------------------------------------------------- +--- Minetest :: Doors Redux Mod v1.1 (doors) ++-- Minetest :: Doors Redux Mod (doors) + -- + -- See README.txt for licensing and other information. + -- Copyright (c) 2016-2020, Leslie E. Krause +@@ -972,3 +972,9 @@ minetest.register_craft( { + { "default:steel_ingot" }, + } + } ) ++ ++-- compatibility for Minetest S3 engine ++ ++if not vector.offset_y or not minetest.get_node_above then ++ dofile( minetest.get_modpath( "doors" ) .. "/compatibility.lua" ) ++end +diff --git a/init.lua b/init.lua +index 647191b..e6ceffd 100644 +--- a/init.lua ++++ b/init.lua +@@ -193,7 +193,9 @@ doors.register_door( "doors:door_mansion1", { + { "group:wood", "group:wood", "default:steel_rod" }, + { "group:wood", "group:wood", "dye:white" }, + { "group:wood", "group:wood", "default:steel_rod" }, +- } ++ }, ++ is_lockable = true, ++ is_closable = true, + } ) + + doors.register_door( "doors:door_mansion2", { +@@ -205,7 +207,9 @@ doors.register_door( "doors:door_mansion2", { + { "group:wood", "group:wood", "default:steel_rod" }, + { "group:wood", "group:wood", "dye:black" }, + { "group:wood", "group:wood", "default:steel_rod" }, +- } ++ }, ++ is_lockable = true, ++ is_closable = true, + } ) + + doors.register_door( "doors:door_steel", { +@@ -261,7 +265,7 @@ doors.register_door( "doors:door_dungeon2", { + } ) + + doors.register_door( "doors:door_steelpanel1", { +- tiles = {{ name = "doors_door_steelpanel.png", backface_culling = true}}, ++ tiles = {{ name = "doors_door_steelpanel1.png", backface_culling = true}}, + description = "Steel Colonial Door", + inventory_image = "doors_item_steelpanel1.png", + protected = true, diff --git a/my_changes/buildings/doors/doors_update54.patch b/my_changes/buildings/doors/doors_update54.patch new file mode 100644 index 0000000..52acab9 --- /dev/null +++ b/my_changes/buildings/doors/doors_update54.patch @@ -0,0 +1,281 @@ +diff --git a/api.lua b/api.lua +index 1a822da..9ef1f43 100644 +--- a/api.lua ++++ b/api.lua +@@ -1,5 +1,5 @@ + -------------------------------------------------------- +--- Minetest :: Doors Redux Mod (doors) ++-- Minetest :: Doors Redux Mod v1.1 (doors) + -- + -- See README.txt for licensing and other information. + -- Copyright (c) 2016-2020, Leslie E. Krause +@@ -23,6 +23,7 @@ doors.ADJUST_LOCKING = 1 + doors.ADJUST_CLOSING = 2 + + minetest.register_node( "doors:hidden", { ++ use_texture_alpha = "clip", + description = "Hidden Door Segment", + drawtype = "nodebox", -- cannot use air-like, since falling nodes would be stuck + paramtype = "light", +@@ -972,9 +973,3 @@ minetest.register_craft( { + { "default:steel_ingot" }, + } + } ) +- +--- compatibility for Minetest S3 engine +- +-if not vector.offset_y or not minetest.get_node_above then +- dofile( minetest.get_modpath( "doors" ) .. "/compatibility.lua" ) +-end +diff --git a/init.lua b/init.lua +index e6ceffd..8533226 100644 +--- a/init.lua ++++ b/init.lua +@@ -18,6 +18,7 @@ dofile( minetest.get_modpath( "doors" ) .. "/api.lua" ) + + doors.register_door( "doors:door_wood", { + tiles = {{ name = "doors_door_wood.png", backface_culling = true }}, ++ use_texture_alpha = "clip", + description = "Wooden Door", + inventory_image = "doors_item_wood.png", + groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }, +@@ -32,6 +33,7 @@ doors.register_door( "doors:door_wood", { + doors.register_door( "doors:door_woodpanel1", { + -- Colonial Style (6 panel) + tiles = {{ name = "doors_door_woodpanel1.png", backface_culling = true }}, ++ use_texture_alpha = "clip", + description = "Wooden Colonial Door", + inventory_image = "doors_item_woodpanel1.png", + groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }, +@@ -46,6 +48,7 @@ doors.register_door( "doors:door_woodpanel1", { + + doors.register_door( "doors:door_woodglass1", { + tiles = {{ name = "doors_door_woodglass1.png", backface_culling = true }}, ++ use_texture_alpha = "clip", + description = "Wooden Single-Lite Door", + inventory_image = "doors_item_woodglass1.png", + groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }, +@@ -60,6 +63,7 @@ doors.register_door( "doors:door_woodglass1", { + + doors.register_door( "doors:door_woodglass2", { + tiles = {{ name = "doors_door_woodglass2.png", backface_culling = true }}, ++ use_texture_alpha = "clip", + description = "Wooden Double-Lite Door", + inventory_image = "doors_item_woodglass2.png", + groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }, +@@ -74,6 +78,7 @@ doors.register_door( "doors:door_woodglass2", { + + doors.register_door( "doors:door_japanese", { + tiles = {{ name = "doors_door_japanese.png", backface_culling = true }}, ++ use_texture_alpha = "clip", + description = "Japanese Door", + inventory_image = "doors_item_japanese.png", + groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }, +@@ -88,6 +93,7 @@ doors.register_door( "doors:door_japanese", { + + doors.register_door( "doors:door_french", { + tiles = {{ name = "doors_door_french.png", backface_culling = true }}, ++ use_texture_alpha = "clip", + description = "French Door", + inventory_image = "doors_item_french.png", + groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }, +@@ -102,6 +108,7 @@ doors.register_door( "doors:door_french", { + + doors.register_door( "doors:door_cottage1", { + tiles = {{ name = "doors_door_cottage1.png", backface_culling = true }}, ++ use_texture_alpha = "clip", + description = "Cottage Interior Door", + inventory_image = "doors_item_cottage1.png", + groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }, +@@ -116,6 +123,7 @@ doors.register_door( "doors:door_cottage1", { + + doors.register_door( "doors:door_cottage2", { + tiles = {{ name = "doors_door_cottage2.png", backface_culling = true }}, ++ use_texture_alpha = "clip", + description = "Cottage Exterior Door", + inventory_image = "doors_item_cottage2.png", + groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }, +@@ -130,6 +138,7 @@ doors.register_door( "doors:door_cottage2", { + + doors.register_door( "doors:door_barn1", { + tiles = {{ name = "doors_door_barn1.png", backface_culling = true }}, ++ use_texture_alpha = "clip", + description = "Barn Interior Door", + inventory_image = "doors_item_barn1.png", + groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }, +@@ -144,6 +153,7 @@ doors.register_door( "doors:door_barn1", { + + doors.register_door( "doors:door_barn2", { + tiles = {{ name = "doors_door_barn2.png", backface_culling = true }}, ++ use_texture_alpha = "clip", + description = "Barn Exterior Door", + inventory_image = "doors_item_barn2.png", + groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }, +@@ -158,6 +168,7 @@ doors.register_door( "doors:door_barn2", { + + doors.register_door( "doors:door_castle1", { + tiles = {{ name = "doors_door_castle1.png", backface_culling = true }}, ++ use_texture_alpha = "clip", + description = "Castle Interior Door", + inventory_image = "doors_item_castle1.png", + groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }, +@@ -172,6 +183,7 @@ doors.register_door( "doors:door_castle1", { + + doors.register_door( "doors:door_castle2", { + tiles = {{ name = "doors_door_castle2.png", backface_culling = true }}, ++ use_texture_alpha = "clip", + description = "Castle Exterior Door", + inventory_image = "doors_item_castle2.png", + groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }, +@@ -186,6 +198,7 @@ doors.register_door( "doors:door_castle2", { + + doors.register_door( "doors:door_mansion1", { + tiles = {{ name = "doors_door_mansion1.png", backface_culling = true }}, ++ use_texture_alpha = "clip", + description = "Mansion Interior Door", + inventory_image = "doors_item_mansion1.png", + groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }, +@@ -193,13 +206,12 @@ doors.register_door( "doors:door_mansion1", { + { "group:wood", "group:wood", "default:steel_rod" }, + { "group:wood", "group:wood", "dye:white" }, + { "group:wood", "group:wood", "default:steel_rod" }, +- }, +- is_lockable = true, +- is_closable = true, ++ } + } ) + + doors.register_door( "doors:door_mansion2", { + tiles = {{ name = "doors_door_mansion2.png", backface_culling = true }}, ++ use_texture_alpha = "clip", + description = "Mansion Exterior Door ", + inventory_image = "doors_item_mansion2.png", + groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }, +@@ -207,13 +219,12 @@ doors.register_door( "doors:door_mansion2", { + { "group:wood", "group:wood", "default:steel_rod" }, + { "group:wood", "group:wood", "dye:black" }, + { "group:wood", "group:wood", "default:steel_rod" }, +- }, +- is_lockable = true, +- is_closable = true, ++ } + } ) + + doors.register_door( "doors:door_steel", { + tiles = {{ name = "doors_door_steel.png", backface_culling = true}}, ++ use_texture_alpha = "clip", + description = "Steel Door", + inventory_image = "doors_item_steel.png", + protected = true, +@@ -232,6 +243,7 @@ doors.register_door( "doors:door_steel", { + + doors.register_door( "doors:door_dungeon1", { + tiles = {{ name = "doors_door_dungeon1.png", backface_culling = true}}, ++ use_texture_alpha = "clip", + description = "Dungeon Interior Door", + inventory_image = "doors_item_dungeon1.png", + protected = true, +@@ -249,6 +261,7 @@ doors.register_door( "doors:door_dungeon1", { + + doors.register_door( "doors:door_dungeon2", { + tiles = {{ name = "doors_door_dungeon2.png", backface_culling = true}}, ++ use_texture_alpha = "clip", + description = "Dungeon Exterior Door", + inventory_image = "doors_item_dungeon2.png", + protected = true, +@@ -266,6 +279,7 @@ doors.register_door( "doors:door_dungeon2", { + + doors.register_door( "doors:door_steelpanel1", { + tiles = {{ name = "doors_door_steelpanel1.png", backface_culling = true}}, ++ use_texture_alpha = "clip", + description = "Steel Colonial Door", + inventory_image = "doors_item_steelpanel1.png", + protected = true, +@@ -284,6 +298,7 @@ doors.register_door( "doors:door_steelpanel1", { + + doors.register_door( "doors:door_steelglass1", { + tiles = {{ name = "doors_door_steelglass1.png", backface_culling = true}}, ++ use_texture_alpha = "clip", + description = "Steel Single-Lite Door", + inventory_image = "doors_item_steelglass1.png", + protected = true, +@@ -302,6 +317,7 @@ doors.register_door( "doors:door_steelglass1", { + + doors.register_door( "doors:door_steelglass2", { + tiles = {{ name = "doors_door_steelglass2.png", backface_culling = true }}, ++ use_texture_alpha = "clip", + description = "Steel Double-Lite Door", + inventory_image = "doors_item_steelglass2.png", + protected = true, +@@ -320,6 +336,7 @@ doors.register_door( "doors:door_steelglass2", { + + doors.register_door( "doors:door_glass", { + tiles = { "doors_door_glass.png" }, ++ use_texture_alpha = "clip", + description = "Glass Door", + inventory_image = "doors_item_glass.png", + groups = { cracky = 3, oddly_breakable_by_hand = 3 }, +@@ -338,6 +355,7 @@ doors.register_door( "doors:door_glass", { + + doors.register_door( "doors:door_obsidian_glass", { + tiles = { "doors_door_obsidian_glass.png" }, ++ use_texture_alpha = "clip", + description = "Obsidian Glass Door", + inventory_image = "doors_item_obsidian_glass.png", + groups = { cracky = 3 }, +@@ -359,6 +377,7 @@ doors.register_door( "doors:door_obsidian_glass", { + ---------------------------- + + doors.register_trapdoor( "doors:trapdoor", { ++ use_texture_alpha = "clip", + description = "Trapdoor", + inventory_image = "doors_trapdoor.png", + wield_image = "doors_trapdoor.png", +@@ -371,6 +390,7 @@ doors.register_trapdoor( "doors:trapdoor", { + } ) + + doors.register_trapdoor( "doors:trapdoor_steel", { ++ use_texture_alpha = "clip", + description = "Steel Trapdoor", + inventory_image = "doors_trapdoor_steel.png", + wield_image = "doors_trapdoor_steel.png", +@@ -409,6 +429,7 @@ minetest.register_craft( { + ----------------------------- + + doors.register_fencegate( "doors:gate_wood", { ++ use_texture_alpha = "clip", + description = "Wooden Fence Gate", + texture = "default_wood.png", + material = "default:wood", +@@ -416,6 +437,7 @@ doors.register_fencegate( "doors:gate_wood", { + } ) + + doors.register_fencegate( "doors:gate_junglewood", { ++ use_texture_alpha = "clip", + description = "Junglewood Fence Gate", + texture = "default_junglewood.png", + material = "default:junglewood", +@@ -423,6 +445,7 @@ doors.register_fencegate( "doors:gate_junglewood", { + } ) + + doors.register_fencegate( "doors:gate_acacia_wood", { ++ use_texture_alpha = "clip", + description = "Acacia Fence Gate", + texture = "default_acacia_wood.png", + material = "default:acacia_wood", +@@ -430,6 +453,7 @@ doors.register_fencegate( "doors:gate_acacia_wood", { + } ) + + doors.register_fencegate( "doors:gate_pine_wood", { ++ use_texture_alpha = "clip", + description = "Pine Fence Gate", + texture = "default_pine_wood.png", + material = "default:pine_wood", +@@ -437,6 +461,7 @@ doors.register_fencegate( "doors:gate_pine_wood", { + } ) + + doors.register_fencegate( "doors:gate_aspen_wood", { ++ use_texture_alpha = "clip", + description = "Aspen Fence Gate", + texture = "default_aspen_wood.png", + material = "default:aspen_wood", diff --git a/my_changes/buildings/mg_villages/old_villages.patch b/my_changes/buildings/mg_villages/old_villages.patch new file mode 100644 index 0000000..8037fda --- /dev/null +++ b/my_changes/buildings/mg_villages/old_villages.patch @@ -0,0 +1,52 @@ +diff --git a/config.lua b/config.lua +index be08447..ed89fc5 100644 +--- a/config.lua ++++ b/config.lua +@@ -27,7 +27,7 @@ mg_villages.VILLAGE_DETECT_RANGE = 400; + mg_villages.REQUIRE_PRIV_FOR_TELEPORT = false; + + -- if set to true, players cannot modify spawned villages without buying the house from the village first +-mg_villages.ENABLE_PROTECTION = true; ++mg_villages.ENABLE_PROTECTION = false; + + -- the first village - the one the player spawns in - will be of this type + mg_villages.FIRST_VILLAGE_TYPE = 'medieval'; +@@ -35,7 +35,7 @@ mg_villages.FIRST_VILLAGE_TYPE = 'medieval'; + -- the mapgen will disregard mapchunks where min.y > mg_villages.MAX_HEIGHT_TREATED; + -- you can set this value to 64 if you have a slow machine and a mapgen which does not create extreme mountains + -- (or if you don't care if extreme mountains may create burried villages occasionally) +-mg_villages.MAX_HEIGHT_TREATED = 200; ++mg_villages.MAX_HEIGHT_TREATED = 400; + + -- choose the debug level you want + mg_villages.DEBUG_LEVEL = mg_villages.DEBUG_LEVEL_NORMAL +diff --git a/init.lua b/init.lua +index 2463866..b4017db 100644 +--- a/init.lua ++++ b/init.lua +@@ -104,7 +104,7 @@ dofile(mg_villages.modpath.."/terrain_blend.lua") + -- also takes care of spawning the player + dofile(mg_villages.modpath.."/mapgen.lua") + +-dofile(mg_villages.modpath.."/spawn_player.lua") ++-- dofile(mg_villages.modpath.."/spawn_player.lua") + + -- reconstruct the connection of the roads inside a village + dofile(mg_villages.modpath.."/roads.lua") +diff --git a/plotmarker_formspec.lua b/plotmarker_formspec.lua +index 0dd65ad..f54f4cf 100644 +--- a/plotmarker_formspec.lua ++++ b/plotmarker_formspec.lua +@@ -366,9 +366,9 @@ end + + mg_villages.form_input_handler = function( player, formname, fields) + -- mg_villages.print(mg_villages.DEBUG_LEVEL_NORMAL,minetest.serialize(fields)); +- if( not( mg_villages.ENABLE_PROTECTION )) then +- return false; +- end ++-- if( not( mg_villages.ENABLE_PROTECTION )) then ++-- return false; ++-- end + + -- teleport to a plot or mob + if( fields[ 'teleport_to' ] diff --git a/my_changes/buildings/mg_villages/villages.patch b/my_changes/buildings/mg_villages/villages.patch new file mode 100644 index 0000000..7652a00 --- /dev/null +++ b/my_changes/buildings/mg_villages/villages.patch @@ -0,0 +1,34 @@ +diff --git a/config.lua b/config.lua +index be08447..ea102e5 100644 +--- a/config.lua ++++ b/config.lua +@@ -27,10 +27,10 @@ mg_villages.VILLAGE_DETECT_RANGE = 400; + mg_villages.REQUIRE_PRIV_FOR_TELEPORT = false; + + -- if set to true, players cannot modify spawned villages without buying the house from the village first +-mg_villages.ENABLE_PROTECTION = true; ++mg_villages.ENABLE_PROTECTION = false; + + -- the first village - the one the player spawns in - will be of this type +-mg_villages.FIRST_VILLAGE_TYPE = 'medieval'; ++--mg_villages.FIRST_VILLAGE_TYPE = 'medieval'; + + -- the mapgen will disregard mapchunks where min.y > mg_villages.MAX_HEIGHT_TREATED; + -- you can set this value to 64 if you have a slow machine and a mapgen which does not create extreme mountains +diff --git a/plotmarker_formspec.lua b/plotmarker_formspec.lua +index 0dd65ad..002c7c7 100644 +--- a/plotmarker_formspec.lua ++++ b/plotmarker_formspec.lua +@@ -366,9 +366,9 @@ end + + mg_villages.form_input_handler = function( player, formname, fields) + -- mg_villages.print(mg_villages.DEBUG_LEVEL_NORMAL,minetest.serialize(fields)); +- if( not( mg_villages.ENABLE_PROTECTION )) then +- return false; +- end ++ -- if( not( mg_villages.ENABLE_PROTECTION )) then ++ -- return false; ++ -- end + + -- teleport to a plot or mob + if( fields[ 'teleport_to' ] diff --git a/my_changes/buildings/ts_doors/ts_doors_update54.patch b/my_changes/buildings/ts_doors/ts_doors_update54.patch new file mode 100644 index 0000000..da75ddb --- /dev/null +++ b/my_changes/buildings/ts_doors/ts_doors_update54.patch @@ -0,0 +1,68 @@ +diff --git a/init.lua b/init.lua +index 566ff86..2d235fc 100755 +--- a/init.lua ++++ b/init.lua +@@ -95,6 +95,7 @@ function ts_doors.register_door(item, description, texture, sounds, recipe) + end + + doors.register("ts_doors:door_" .. item:gsub(":", "_"), { ++ use_texture_alpha = "clip", + tiles = { { name = "[combine:32x38:0,0=" .. texture .. ":0,16=" .. texture .. ":0,32=" .. texture .. ":16,0=" .. texture .. ":16,16=" .. texture .. ":16,32=" .. texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base.png^[noalpha^[makealpha:0,255,0", backface_culling = true } }, + description = S(description .. " Windowed Door"), + inventory_image = "[combine:32x32:0,8=" .. texture .. ":16,8=" .. texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_inv.png^[noalpha^[makealpha:0,255,0", +@@ -115,6 +116,7 @@ function ts_doors.register_door(item, description, texture, sounds, recipe) + }) + + doors.register_trapdoor("ts_doors:trapdoor_" .. item:gsub(":", "_"), { ++ use_texture_alpha = "clip", + description = S("Windowed " .. description .. " Trapdoor"), + inventory_image = texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_trapdoor.png^[noalpha^[makealpha:0,255,0", + wield_image = texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_trapdoor.png^[noalpha^[makealpha:0,255,0", +@@ -127,6 +129,7 @@ function ts_doors.register_door(item, description, texture, sounds, recipe) + }) + + doors.register_trapdoor("ts_doors:trapdoor_full_" .. item:gsub(":", "_"), { ++ use_texture_alpha = "clip", + description = S("Solid " .. description .. " Trapdoor"), + inventory_image = texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_trapdoor_full.png^[noalpha", + wield_image = texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_trapdoor_full.png^[noalpha", +@@ -141,6 +144,7 @@ function ts_doors.register_door(item, description, texture, sounds, recipe) + door_groups.level = 2 + + doors.register("ts_doors:door_locked_" .. item:gsub(":", "_"), { ++ use_texture_alpha = "clip", + tiles = { { name = "[combine:32x38:0,0=" .. texture .. ":0,16=" .. texture .. ":0,32=" .. texture .. ":16,0=" .. texture .. ":16,16=" .. texture .. ":16,32=" .. texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_locked.png^[noalpha^[makealpha:0,255,0", backface_culling = true } }, + description = S("Windowed Locked " .. description .. " Door"), + inventory_image = "[combine:32x32:0,8=" .. texture .. ":16,8=" .. texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_locked_inv.png^[noalpha^[makealpha:0,255,0", +@@ -154,6 +158,7 @@ function ts_doors.register_door(item, description, texture, sounds, recipe) + }) + + doors.register("ts_doors:door_full_locked_" .. item:gsub(":", "_"), { ++ use_texture_alpha = "clip", + tiles = { { name = "[combine:32x38:0,0=" .. texture .. ":0,16=" .. texture .. ":0,32=" .. texture .. ":16,0=" .. texture .. ":16,16=" .. texture .. ":16,32=" .. texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_full_locked.png^[noalpha", backface_culling = true } }, + description = S("Solid Locked " .. description .. " Door"), + inventory_image = "[combine:32x32:0,8=" .. texture .. ":16,8=" .. texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_full_locked_inv.png^[noalpha^[makealpha:0,255,0", +@@ -167,6 +172,7 @@ function ts_doors.register_door(item, description, texture, sounds, recipe) + }) + + doors.register_trapdoor("ts_doors:trapdoor_locked_" .. item:gsub(":", "_"), { ++ use_texture_alpha = "clip", + description = S("Windowed Locked " .. description .. " Trapdoor"), + inventory_image = texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_trapdoor_locked.png^[noalpha^[makealpha:0,255,0", + wield_image = texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_trapdoor_locked.png^[noalpha^[makealpha:0,255,0", +@@ -180,6 +186,7 @@ function ts_doors.register_door(item, description, texture, sounds, recipe) + }) + + doors.register_trapdoor("ts_doors:trapdoor_full_locked_" .. item:gsub(":", "_"), { ++ use_texture_alpha = "clip", + description = S("Solid Locked " .. description .. " Trapdoor"), + inventory_image = texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_trapdoor_full_locked.png^[noalpha", + wield_image = texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_trapdoor_full_locked.png^[noalpha", +@@ -542,6 +549,7 @@ local function can_dig(pos, player) + end + + ts_workshop.register_workshop("ts_doors", "workshop", { ++ use_texture_alpha = "clip", + description = S("Door Workshop"), + tiles = { + "default_wood.png", diff --git a/my_changes/gui/i3/progressive_creative.patch b/my_changes/gui/i3/progressive_creative.patch new file mode 100644 index 0000000..c0cc718 --- /dev/null +++ b/my_changes/gui/i3/progressive_creative.patch @@ -0,0 +1,13 @@ +diff --git a/init.lua b/init.lua +index 0a953e7..619952d 100644 +--- a/init.lua ++++ b/init.lua +@@ -12,7 +12,7 @@ local toolrepair + + local tabs = {} + +-local progressive_mode = core.settings:get_bool "i3_progressive_mode" ++local progressive_mode = core.settings:get_bool "i3_progressive_mode" and not(core.is_creative_enabled()) + local damage_enabled = core.settings:get_bool "enable_damage" + + local __3darmor, __skinsdb, __awards diff --git a/my_changes/gui/smart_inventory/textures/doc_awards_icon_generic.png b/my_changes/gui/smart_inventory/textures/doc_awards_icon_generic.png new file mode 100644 index 0000000000000000000000000000000000000000..97f2435d2c03c6a83efb82c5b0ff55698ef5752a GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE({A8>KPob3sp4%MK}vQ zB8wRqxP?KOkzv*x37{Z*iKnkC`x8c1Q3JUWX@|W)q4}OJjv*GOlY2Tlf1Y<>OlUNm zrW1L{qswi^(H=uX!~YvI=Y>7}G{5_+J~I#;-hTfKPh@Vj#744 zYw9J%u2?61)e<(Fow!XYImL1hn?m!NZMHo(=J;J;h^ad!&3$6qBQBpsu?}874@?^- zq&2Y#2+QgGFi|&or!Fy}B6h=qdmruBvAApz=U{Y;ShhgJIPeh@gYLF~{5h4It^u9O N;OXk;vd$@?2>>d@TxtLS literal 0 HcmV?d00001 diff --git a/my_changes/gui/smart_inventory/textures/doc_button_icon_lores.png b/my_changes/gui/smart_inventory/textures/doc_button_icon_lores.png new file mode 100644 index 0000000000000000000000000000000000000000..97f2435d2c03c6a83efb82c5b0ff55698ef5752a GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE({A8>KPob3sp4%MK}vQ zB8wRqxP?KOkzv*x37{Z*iKnkC`x8c1Q3JUWX@|W)q4}OJjv*GOlY2Tlf1Y<>OlUNm zrW1L{qswi^(H=uX!~YvI=Y>7}G{5_+J~I#;-hTfKPh@Vj#744 zYw9J%u2?61)e<(Fow!XYImL1hn?m!NZMHo(=J;J;h^ad!&3$6qBQBpsu?}874@?^- zq&2Y#2+QgGFi|&or!Fy}B6h=qdmruBvAApz=U{Y;ShhgJIPeh@gYLF~{5h4It^u9O N;OXk;vd$@?2>>d@TxtLS literal 0 HcmV?d00001 diff --git a/my_changes/gui/smart_inventory/textures/inventory_plus_doc_inventory_plus.png b/my_changes/gui/smart_inventory/textures/inventory_plus_doc_inventory_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..97f2435d2c03c6a83efb82c5b0ff55698ef5752a GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE({A8>KPob3sp4%MK}vQ zB8wRqxP?KOkzv*x37{Z*iKnkC`x8c1Q3JUWX@|W)q4}OJjv*GOlY2Tlf1Y<>OlUNm zrW1L{qswi^(H=uX!~YvI=Y>7}G{5_+J~I#;-hTfKPh@Vj#744 zYw9J%u2?61)e<(Fow!XYImL1hn?m!NZMHo(=J;J;h^ad!&3$6qBQBpsu?}874@?^- zq&2Y#2+QgGFi|&or!Fy}B6h=qdmruBvAApz=U{Y;ShhgJIPeh@gYLF~{5h4It^u9O N;OXk;vd$@?2>>d@TxtLS literal 0 HcmV?d00001 diff --git a/my_changes/gui/smart_inventory/textures/smart_inventory_compress_button.png b/my_changes/gui/smart_inventory/textures/smart_inventory_compress_button.png new file mode 100644 index 0000000000000000000000000000000000000000..66d967251239c50d81679be050d426f0f5c1657c GIT binary patch literal 362 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE({A8>KPob3sp4%MK}vQ zB8wRqxP?KOkzv*x37{Z*iKnkC`x8bsPEG5@(@ubdzI(bjhFF|FJJ~wxu!BI`{)>w* zax%4<>~r-}zMFLL>obnP#c9PYE6!Pl?Kq=*M}o()QCeB8_gdsySA!KN`I%4K{I6Ui zkvv6ISWpHVN!`&&MBrx19aeTS*4PV=qpBHfOk2 z>EaR+>Y8#)C55Pwi~qZ@$f&?|H56x%~Rhp8M$=x4#Dl0fVQjpUXO@ GgeCxcE0mJ} literal 0 HcmV?d00001 diff --git a/my_changes/gui/smart_inventory/textures/smart_inventory_craftable_button.png b/my_changes/gui/smart_inventory/textures/smart_inventory_craftable_button.png new file mode 100644 index 0000000000000000000000000000000000000000..43f95c5b25fbb48155b8da5e7120abe37263b03e GIT binary patch literal 442 zcmV;r0Y(0aP)7BLyywPOGP03B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00ACJL_t(I%cYY&OT$nU zhM$CF$u4czju)g$ySNzKIyebk90b8Z2)ODXbP-&IF5=|i63CJ@AUb49$8g8~fc%Fx z4kg#qgrpVU@xA9f=YxB!LBCf5jE5WkqUFj4z#8;><>U1+0G_)BAWCwk{%EiF@Tzgz zDxY4ypp*hYYfY5+jhOLpgIy6TDnOhTCK*5}MVuCmH~^dVnu^Zjwh)E_lkmR^+P+Z{+{VPGm(BguW#<;coXp1a;j z)>@N=0iL@XXLo%TnJl}Kvd&MA$~Hip7M;lkaLBJ~^EyYkeM-2Re|FwP=MoR`oaM^q kqJ{oGKihke)_>3W2b|M%_H4Vv;Q#;t07*qoM6N<$f{BQ=)&Kwi literal 0 HcmV?d00001 diff --git a/my_changes/gui/smart_inventory/textures/smart_inventory_crafting_inventory_button.png b/my_changes/gui/smart_inventory/textures/smart_inventory_crafting_inventory_button.png new file mode 100644 index 0000000000000000000000000000000000000000..b8af7bf14c8ce113f81ad8db1416f4364aef176c GIT binary patch literal 326 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPtr-UGv`ssq#3P2&r64!_l=ltB<)VvY~=c3falGGH1 z^30M91$R&1fbd2>aiF4go-U3d7N?VYIy--!cVJ9tH2hRtEa`dCqVUs`|2#n8^CZLV z+TkXh7th~+pWoQnc+lmge3)6Ll9tYJa+UA=rv8affG%h7boFyt I=akR{03G0U!~g&Q literal 0 HcmV?d00001 diff --git a/my_changes/gui/smart_inventory/textures/smart_inventory_creative_button.png b/my_changes/gui/smart_inventory/textures/smart_inventory_creative_button.png new file mode 100644 index 0000000000000000000000000000000000000000..d8322cfac6042ecdd72c8722365c613926781419 GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE({A8>KPob3sp4%MK}vQ zB8wRqxP?KOkzv*x37{Z*iKnkC`$J9%L0LgY&tLjLA;}Wgh!W@g+}zZ>5(ej@)Wnk1 z6ovB4k_-iRPv3y>Mm}+%qTQY@jv*GOlY2Tlf1Y<>OlUOxR9r0SdC{Wq)06)^K;ZKv z!|mGPCY_4XXx6s!eSg#1Ht&r1Z)5-j8P%l*NfnH2*WT@GN|ct?J~APG|9>Nv-LDe( znPa3TWbSF?DAwD>>vEjQO#exkZ(2f9V)~35Q`p2mms~iW&#>vU`u3+uUxnhBH)tLb zXY)BB6JfG(qtW49*EHqT2c@}Bm_6DoyP9!BgoB^Mj-2BL43@2e+%qN^vsupUoOtOC a4})i%TV#moaXp|n7(8A5T-G@yGywqWzH>JK literal 0 HcmV?d00001 diff --git a/my_changes/gui/smart_inventory/textures/smart_inventory_exit_button.png b/my_changes/gui/smart_inventory/textures/smart_inventory_exit_button.png new file mode 100644 index 0000000000000000000000000000000000000000..867a927e43c9d7a04f5a2b19ecfd349fe260a22c GIT binary patch literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE({A8>KPob3sp4%MK}vQ zB8wRqxP?KOkzv*x37{Z*iKnkC`x8bsPJQWfi~PfYLb9155hc#~xw)x%B|t6%gL6@8 zVo7R>LV0FMhJw4NZ$OG(DmzeomZytjh{frplW&V2QQ&Z4|8-;5rH+v1-hg1PlXYu8 zZt!e)(qdow?u4^vsQDfawuXKV#s%y$ywB1Z7<^fBbHWOQf1Xb$O%+iSzBhBG<9c7U zH(TF`cAiwNG5WwH{UGCpDi4E5@5cx?{*s>Q2QR*Tc5RwZ`{FCpCzgfZot9!HbM4nJa0`PlBg3pY5H=O_9x6@{2G>3*B@8_g=8~BB1)X|b8}PkN`PDj2Ir#G z#FEq$h4Rdj3IrO|dG6@1=?OXph5;M}QX3ZB`)F@w7RZ)xx#6^cT9W9aNsH?wR7~C-pSfh? zNyCRhKi--fGaDUCHBi4nJa0`PlBg3pY5H=O_9x6@{03$j#i<{FLb9155hc#~xw)x%B|t6%gL6@8 zVo7R>LV0FMhJw4NZ$OG(Dmzeoqo<2wh{frplWn;U8}PKwk4ZndmdV!RSwj2*?-P@_ zC9Iw+G~QX|ZTN0Ug4D?!TMwK#eEItm`9KcEg^D`)d%l11R+N@zC^)C6xsdV31qKGe zKuzWbHq))T&o^*4tc-fLmt~{su8==#w=#UFx#Pb)^X|$kb?bU-T7ZoAO271yX0v~N zw!PA0O|tT8&TRefHLZn~tL%f;nP%`To|t{-DBrQC3$FiW%k*SB;{5TwLEvkPdWIs0 VDr>8YGT%VH@^tlcS?83{1OTDTc*Ot! literal 0 HcmV?d00001 diff --git a/my_changes/gui/smart_inventory/textures/smart_inventory_preview_to_crafting_field.png b/my_changes/gui/smart_inventory/textures/smart_inventory_preview_to_crafting_field.png new file mode 100644 index 0000000000000000000000000000000000000000..9e52a26d52318060d687844e3ca9a66338761788 GIT binary patch literal 333 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPVBbyi(!*0J#AY)`RLn2C?^K)}k^GbkR1_tM%)Wnk1 z6ovB4k_-iRPv3wPy;OFf_(o3`#}JFtYbWm&JY>Mry8n1;YtBKIml_(u7k4EH_xWmE z3R=2k!D*J9iHa_&@o)afB*ZD7EU$VWxk=Q?fGeQ#Qt8}%nLUS8`J6bmEf%<{V&1TA zjI1ZvkaHa`ftc$T&QK&YY=hwm!G z&&+q!uN2R}pugg1fhXrqVF|ymg(tK83g_`;o!XYUUe#vv+`IeCjq}qrmAdL5oUl8! zDdqbG%i|hdA`Bs0JzXaGKGGEZkzy|<$h&OH&4=3!JQX;Ym>fbwmoH|Dlv%a*oMlu^ zdF{H)S?@waJ^%fBTAg4oUU?}h_kPv-*S|JBoOM9LvfKIXteYG?6LsG?xlB=76fdv8 z_u1NQ)?$^5x}Ua1%DlRKTm8>JSC`q2yY}v4V3;FQ&&(iq{k=iaMD?ow8|F>C!|#_Q z-?Jwo@5i62WegS?2{UVdJYB!d`d{UQV<#9c*mOC&@!fS;-FoxSvT%oI7C&y(G0eTV VP|l}nO*$ytJYD@<);T3K0RTyQsjvV5 literal 0 HcmV?d00001 diff --git a/my_changes/gui/smart_inventory/textures/smart_inventory_save1_button.png b/my_changes/gui/smart_inventory/textures/smart_inventory_save1_button.png new file mode 100644 index 0000000000000000000000000000000000000000..2c5144b179c5e32c018544b3bb4ae9bb9850156d GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)3Hcsu*1QFEJhfif|Tq zL>4nJa0`PlBg3pY5H=O_9x6@{L1`cGuLDRg=8~BB1)X|b8}PkN`PDj2Ir#G z#FEq$h4Rdj3mZ{ z)q`2XEY*KF`y8=~;FZ{Zx#9OujbCkci}o)Ue^>5(TmMhiUbel59v3-i<{4?oCa5h8 zJyGOn_9@jMZvGcX@0|x)F5l^lKNE3TXA4iT9lJc+|4&S-wuQ6Av=xoIU%rN0-}-qdq)9U}va35s%C=HipoUG`XG^#~eUD@O1TaS?83{1OS8jYFq#S literal 0 HcmV?d00001 diff --git a/my_changes/gui/smart_inventory/textures/smart_inventory_save3_button.png b/my_changes/gui/smart_inventory/textures/smart_inventory_save3_button.png new file mode 100644 index 0000000000000000000000000000000000000000..e26defcf9210a00349472ce89a3808667977f2c0 GIT binary patch literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)3Hcsu*1QFEJhfif|Tq zL>4nJa0`PlBg3pY5H=O_9x6@{08inYg11Fg=8~BB1)X|b8}PkN`PDj2Ir#G z#FEq$h4Rdj3f^o3<2#aa7!FvnhdBugI5RW2xZE$2 z+PPw-X1K?hGdowDWL&yt;(4`cd|SMV*044_e_Utf`?^lh+f&o*l<2b3<@>r{?C!{w zyK*l7^MNK|<<*SY{}2D$JK+kiR@#{an^LB{Ts5vkh@( literal 0 HcmV?d00001 diff --git a/my_changes/gui/smart_inventory/textures/smart_inventory_swapline_button.png b/my_changes/gui/smart_inventory/textures/smart_inventory_swapline_button.png new file mode 100644 index 0000000000000000000000000000000000000000..de67b187b3e62d02cf54ca2a1d04ad5ddedf558c GIT binary patch literal 360 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE(}*e@aWoE*MK6N1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPVBb%Tx$G*6QvOpo(%#er@=ltB<)VvZPmw~~#C^fMp zHASI3vm`^o-P1Q9MK6^dD1OG%#WBRKt19TXQc^y2wHQ$mA9#~^y*-UsQr#~g}u6n@WN6X9^p$4kfH*pVZD-2IRJ5E9yC s{$uJL$%q0?1x>LNC;1I*d#0qNGjIuY9Q|ng$PDCRPgg&ebxsLQ06TGdf&c&j literal 0 HcmV?d00001 diff --git a/my_changes/gui/smart_inventory/textures/smart_inventory_sweep_button.png b/my_changes/gui/smart_inventory/textures/smart_inventory_sweep_button.png new file mode 100644 index 0000000000000000000000000000000000000000..dc864630afe85f7cb97ed54f99f08892c89eba3f GIT binary patch literal 377 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE(}*e@aWoE*MK6N1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPVBb%U+v6x?F1yD#fGbEzKIX^cyHLnE7WngeFN=+91Omi)UZf-igG^W zk}#QNePz*vn1w>Ix4#LL2&9;uE)(~Va@#xi%!%zH8@klApMf{Bqhh32)00|99iSmIs?ZZ)Tl8_kZMxqNiIGBFYYCCmPOwxqj2z8&BMt7p>u7 zSoiex*)u#0E-w2*!`3Yk*#C47Z%2m@lksN%Rwjn)uCrLgBQ36cn=}9Ewb4nJa0`PlBg3pY5H=O_9x6@0;2k#C;prT6q3yhi70W-&&^HED*!P z#UsFV$!Vg=6_biq9tY9BK$oX;JkL1lvF@LEZu$Sext^0$I*pjQ=U*x1ZRj|m?^3^! zF=N&;^_5xgHO>c}-E8veLU9$llG402t9ISa<7jpIw9xAG3(m@EtBU!ubs3(1Y$@hr z$j+T#y*Tbj%ku57pRT>o&718sW5(K5I*XL>YOjt2k$ literal 0 HcmV?d00001 diff --git a/my_changes/mobs/mobs_mobkit/petz/petz/user.conf b/my_changes/mobs/mobs_mobkit/petz/petz/user.conf new file mode 100644 index 0000000..ed48ba3 --- /dev/null +++ b/my_changes/mobs/mobs_mobkit/petz/petz/user.conf @@ -0,0 +1,15 @@ +##Tamagochi Mode (Take care of your pet: fed it...) +tamagochi_mode = false + +##Shears +shears = mobs:shears + +##Selling +selling = false + +##Bloody Mode +blood = true + +##Capture Mobs +lasso = mobs:lasso +rob_mobs = true diff --git a/my_changes/mobs/mobs_mobkit/water_life/files/apa_patch.lua b/my_changes/mobs/mobs_mobkit/water_life/files/apa_patch.lua new file mode 100644 index 0000000..d14688d --- /dev/null +++ b/my_changes/mobs/mobs_mobkit/water_life/files/apa_patch.lua @@ -0,0 +1,11 @@ + +water_life.poison_after_death = minetest.settings:get_bool("water_life_poison_after_death") or false + +minetest.register_on_dieplayer(function(player) + if not player then return end + if water_life.poison_after_death then return end + + local meta=player:get_meta() + meta:set_int("snakepoison",0) + water_life.change_hud(player,"poison",0) +end) \ No newline at end of file diff --git a/my_changes/mobs/mobs_mobkit/water_life/files/api.lua b/my_changes/mobs/mobs_mobkit/water_life/files/api.lua new file mode 100644 index 0000000..78e30f0 --- /dev/null +++ b/my_changes/mobs/mobs_mobkit/water_life/files/api.lua @@ -0,0 +1,900 @@ + +local abs = math.abs +local pi = math.pi +local floor = math.floor +local ceil = math.ceil +local sqrt = math.sqrt +local max = math.max +local min = math.min +local pow = math.pow +local sign = math.sign +local time = os.time +local rad = math.rad +local deg=math.deg +local tan = math.tan +local cos = math.cos +local atan=math.atan + + + +local neighbors ={ + {x=1,z=0}, + {x=1,z=1}, + {x=0,z=1}, + {x=-1,z=1}, + {x=-1,z=0}, + {x=-1,z=-1}, + {x=0,z=-1}, + {x=1,z=-1} + } + + +-- pseudo random generator, init and call function +water_life.randomtable = PcgRandom(math.random(2^23)+1) + +function water_life.random(min,max) + if not min and not max then return math.abs(water_life.randomtable:next() / 2^31) end + if not max then + max = min + min = 1 + end + if max and not min then min = 1 end + if max < min then return water_life.randomtable:next(max,min) end + + return water_life.randomtable:next(min,max) +end + +-- +local random = water_life.random -- do not delete, this MUST be here! +-- + +--checks if entity is in a small water pool +function water_life.check_for_pool(self,deep,minr,pos) + if not self and not pos then return nil end + if not deep then deep = 3 end + if not minr then minr = 3 end + + local max = 16 + if not pos then + pos = self.object:get_pos() + end + + local d,t,s = water_life.water_depth(pos,max) + if not d then return nil end + local cpos = {} + local ispool = 0 + + for i = 0,270,90 do + cpos = mobkit.pos_translate2d(pos,rad(i),minr) + if water_life.find_collision(pos,cpos,false) then ispool = ispool + 1 end + end + + if ispool > 2 and d < deep then return true end + return false +end + + +-- returns ingame time, 1 = morning, 2 = noon, 3 = afternoon, 4 = night +function water_life.get_game_time() + local time = minetest.get_timeofday() + local hour = math.floor(time*24) + + if hour >= 5 and hour < 10 then return 1 end + if hour >= 10 and hour < 15 then return 2 end + if hour >= 15 and hour < 20 then return 3 end + if hour > 20 or hour < 5 then return 4 end +end + + +function water_life_get_biome_data(pos) + if not pos then return nil end + local table = minetest.get_biome_data(pos) + if not table then return nil end + local biome = {} + biome.id = table.biome + biome.name = minetest.get_biome_name(table.biome) + biome.temp = math.floor((table.heat-32)*5/9) --turn fahrenheit into celsius + biome.humid = math.floor(table.humidity*100)/100 + return biome +end + + + +-- returns closest enemy or player, if player is true enemies must be in entity definition: predators = {[name1]=1,[name2]=1,.....} +function water_life.get_closest_enemy(self,player) + local cobj = nil + local dist = water_life.abr*64 + local pos = self.object:get_pos() + local otable = minetest.get_objects_inside_radius(pos, self.view_range) + + if not self.predators and not player then return nil end + + for _,obj in ipairs(otable) do + local luaent = obj:get_luaentity() + + if mobkit.is_alive(obj) and not obj:is_player() and luaent and self.predators[luaent.name] then + local opos = obj:get_pos() + local odist = abs(opos.x-pos.x) + abs(opos.z-pos.z) + if odist < dist then + dist=odist + cobj=obj + end + elseif mobkit.is_alive(obj) and obj:is_player() and player then + local opos = obj:get_pos() + local odist = abs(opos.x-pos.x) + abs(opos.z-pos.z) + if odist < dist then + dist=odist + cobj=obj + end + end + end + return cobj +end + + +--player knockback from entity +function water_life.knockback_player(self,target,force) + if not target:is_player() then return end + if not self.object then return end + if not force then force = 10 end + local dir = minetest.yaw_to_dir(self.object:get_yaw()) + dir = vector.multiply(dir, force) + dir = {x=dir.x, y=dir.y+force/2, z= dir.z} + target:add_player_velocity(dir) +end + + +--sets an urchin somewhere but not in the center of a node +function water_life.set_urchin(pos,name) + if not pos then return end + if not name then name = "water_life:urchin" end + local x = random()/2 + local z = random()/2 + if water_life.leftorright() then pos.x = pos.x +x else pos.x=pos.x - x end + if water_life.leftorright() then pos.z = pos.z +z else pos.z=pos.z - z end + local obj = minetest.add_entity(pos, name) + return obj +end + +-- add vector cross function for flying behavior if not yet there +if vector and not vector.cross then + function vector.cross(a, b) + return { + x = a.y * b.z - a.z * b.y, + y = a.z * b.x - a.x * b.z, + z = a.x * b.y - a.y * b.x + } + end +end + + + +-- show temp marker +function water_life.temp_show(pos,time,pillar) + if not pos then return end + if not time then time = 5 end + local step = 1 + if not pillar then pillar = 1 end + if pillar < 0 then step = -1 end + + for i = 1,pillar,step do + + local obj = minetest.add_entity({x=pos.x, y=pos.y+i, z=pos.z}, "water_life:pos") + if obj then + minetest.after(time, function(obj) obj:remove() end, obj) + end + end + +end + + +-- throws a coin +function water_life.leftorright() + local rnd = random() + if rnd > 0.5 then return true else return false end +end + + +-- distance from self to target +function water_life.dist2tgt(self,tgt) + local pos = mobkit.get_stand_pos(self) + local tpos = tgt:get_pos() + return vector.distance(pos,tpos) +end + + +function water_life.dumbstep(self,height,tpos,speed_factor,idle_duration) + if height <= 0.001 then + mobkit.lq_turn2pos(self,tpos) + water_life.lq_dumbwalk(self,tpos,speed_factor) + else + mobkit.lq_turn2pos(self,tpos) + water_life.lq_dumbjump(self,height) + end + idle_duration = idle_duration or 6 + mobkit.lq_idle(self,random(ceil(idle_duration*0.5),idle_duration)) +end + + + + -- drop on death what is definded in the entity table +function water_life.handle_drops(self) + if not self.drops then return end + + for _,item in ipairs(self.drops) do + + local amount = random (item.min, item.max) + local chance = random(1,100) + local pos = self.object:get_pos() + pos.y = pos.y + self.collisionbox[5] +1 + + if chance < (100/item.chance) then + local obj = minetest.add_item(pos, item.name.." "..tostring(amount)) + end + + end +end + + + +function water_life.register_shark_food(name) + table.insert(water_life.shark_food,name) +end + +function water_life.register_gull_bait(name) + if name then water_life.gull_bait[name] = 1 end +end + + +function water_life.feed_shark(self) + for i = 1,#water_life.shark_food,1 do + if water_life.shark_food[i] ~= "water_life:fish" and water_life.shark_food[i] ~= "water_life:fish_tamed" then + local target = mobkit.get_closest_entity(self,water_life.shark_food[i]) + if target then + return target + end + end + end + return nil +end + + + + + +function water_life.get_close_drops(self,name) + + + local objs = minetest.get_objects_inside_radius(self.object:get_pos(), self.view_range) + if #objs < 1 then return nil end + + for i = #objs,1,-1 do + local entity = objs[i]:get_luaentity() + if not entity or not entity.name == "__builtin:item" then table.remove(objs,i) end -- remove any entity different from a drop + end + + if #objs < 1 then return nil end + if not name then return objs[random(#objs)] end -- no name, return random drop + + for i=#objs,1,-1 do + local entity = objs[i]:get_luaentity() + if not entity.itemstring then + table.remove(objs,i) + else + if not string.match(entity.itemstring,name) then table.remove(objs,i) end -- remove anything different from name + end + end + + if #objs < 1 then + return nil + else + return objs[random(#objs)] + end +end + + +function water_life.inwater(obj) + if not obj then return nil end + local pos = obj:get_pos() + local node = minetest.get_node(pos) + if not node or node.name == 'ignore' then return nil end + if not minetest.registered_nodes[node.name] then return nil end -- handle unknown nodes + + local type = minetest.registered_nodes[node.name]["liquidtype"] + if type == "none" then return nil end + return true +end + +function water_life.aqua_radar_dumb(pos,yaw,range,reverse,shallow) -- same as mobkit's but added shallow water if true + range = range or 4 + + local function okpos(p) + local node = mobkit.nodeatpos(p) + if node then + if node.drawtype == 'liquid' then + local nodeu = mobkit.nodeatpos(mobkit.pos_shift(p,{y=1})) + local noded = mobkit.nodeatpos(mobkit.pos_shift(p,{y=-1})) + if ((nodeu and nodeu.drawtype == 'liquid') or (noded and noded.drawtype == 'liquid')) or shallow then + return true + else + return false + end + else + local h,l = mobkit.get_terrain_height(p) + if h then + local node2 = mobkit.nodeatpos({x=p.x,y=h+1.99,z=p.z}) + if node2 and node2.drawtype == 'liquid' then return true, h end + else + return false + end + end + else + return false + end + end + + local fpos = mobkit.pos_translate2d(pos,yaw,range) + local ok,h = okpos(fpos) + if not ok then + local ffrom, fto, fstep + if reverse then + ffrom, fto, fstep = 3,1,-1 + else + ffrom, fto, fstep = 1,3,1 + end + for i=ffrom, fto, fstep do + local ok,h = okpos(mobkit.pos_translate2d(pos,yaw+i,range)) + if ok then return yaw+i,h end + ok,h = okpos(mobkit.pos_translate2d(pos,yaw-i,range)) + if ok then return yaw-i,h end + end + return yaw+pi,h + else + return yaw, h + end +end + + + +-- counts animals in specified radius or active_block_range, returns a table containing numbers +function water_life.count_objects(pos,radius,name) + +if not radius then radius = water_life.abr * 16 end + +local all_objects = minetest.get_objects_inside_radius(pos, radius) +local hasil = {} +hasil.whales = 0 +hasil.sharks = 0 +hasil.fish = 0 +hasil.name = 0 +hasil.all = #all_objects or 0 + +local _,obj +for _,obj in ipairs(all_objects) do + local entity = obj:get_luaentity() + if name then + if entity and entity.name == name then + hasil.name = hasil.name +1 + end + end + if entity and entity.name == "water_life:whale" then + hasil.whales = hasil.whales +1 + elseif entity and entity.name == "water_life:shark" then + hasil.sharks = hasil.sharks +1 + elseif entity and (entity.name == "water_life:fish" or entity.name == "water_life:fish_tamed") then + hasil.fish = hasil.fish +1 + end + + if entity and entity.name then + if not hasil[entity.name] then + hasil[entity.name] = 1 + else + hasil[entity.name] = hasil[entity.name] +1 + end + end + end + + return hasil +end + + +function water_life.get_herd_members(self,radius) + + local pos = mobkit.get_stand_pos(self) + local name = self.name + + if not radius then radius = water_life.abo * 16 end + + local all_objects = minetest.get_objects_inside_radius(pos, radius) + if #all_objects < 1 then return nil end + + for i = #all_objects,1,-1 do + local entity = all_objects[i]:get_luaentity() + + if entity and entity.name ~= name then + table.remove(all_objects,i) + end + + end + + if #all_objects < 1 then + return nil + else + return all_objects + end +end + + +-- returns 2D angle from self to target in radians +function water_life.get_yaw_to_object(self,target) + + local pos = mobkit.get_stand_pos(self) + local tpos = target:get_pos() + local tyaw = minetest.dir_to_yaw(vector.direction(pos, tpos)) + return tyaw +end + +-- returns 2D angle from self to pos in radians +function water_life.get_yaw_to_pos(self,tpos) + + local pos = mobkit.get_stand_pos(self) + local tyaw = minetest.dir_to_yaw(vector.direction(pos, tpos)) + + return tyaw +end + + + + + + +function water_life.isinliquid(target) + if not target then return false end + local nodepos = mobkit.get_stand_pos(target) + local node1 = mobkit.nodeatpos(nodepos) + nodepos.y = nodepos.y -1 + local node2 = mobkit.nodeatpos(nodepos) + if node1 and node1.drawtype=='liquid' or (node2 and node2.drawtype=='liquid' and node1 and node1.drawtype=='airlike') then + return true + end +end + + +-- find if there is a node between pos1 and pos2 +-- water = true means water = obstacle +-- returns distance to obstacle in nodes or nil + +function water_life.find_collision(pos1,pos2,water,objects) + local ray = minetest.raycast(pos1, pos2, objects, water) + for pointed_thing in ray do + if pointed_thing.type == "node" then + local dist = math.floor(vector.distance(pos1,pointed_thing.under)) + return dist + end + end + return nil +end + + +-- fast radar, less accurate +-- yaw-x to the right, yaw + x to the left ! +-- sonar = true water is no obstacle + +function water_life.radar_fast(self,dist,sonar) + local water = not sonar + if not dist then dist = self.view_range end + local angel = atan(3/dist) + local yaw = self.object:get_yaw() + local tpos = self.object:get_pos() + local tapos = mobkit.pos_translate2d(tpos,(yaw-angel),dist) + local tbpos = mobkit.pos_translate2d(tpos,yaw,dist) + local tcpos = mobkit.pos_translate2d(tpos,(yaw+angel),dist) + local tupos = mobkit.pos_shift(tbpos,{y=2}) + local tdpos = mobkit.pos_shift(tbpos,{y=-2}) + local right = water_life.find_collision(tpos,tapos,water) + local left = water_life.find_collision(tpos,tcpos,water) + local center = water_life.find_collision(tpos,tbpos,water) + local up = water_life.find_collision(tpos,tupos,water) + local down = water_life.find_collision(tpos,tdpos,water) + + return left,right,center,up,down + +end + + +-- WIP radar, not ready to use ! +function water_life.radar_fast_cols(obj,dist,sonar,rev) --sonar = true, water no obstacle :: rev = true array contains possible positions + if not dist then dist = 3 end + local pos = obj:get_pos() + local yaw = 0 + local box = {} + local counter = 1 + local rarray = {} + + + if obj:is_player() then + yaw = obj:get_look_horizontal() + box = obj:get_properties().collisionbox + else + yaw = obj:get_yaw() + if obj:get_luaentity().name == "water_life:whale" then yaw = yaw + rad(180) end + box = obj:get_luaentity().collisionbox + end + + local vec = minetest.yaw_to_dir(yaw) + local crasha = mobkit.get_box_displace_cols(pos,box,vec,dist) + + + if crasha then + for i = #crasha,1,-1 do + for j = #crasha[i],1,-1 do + local cpos ={x=crasha[i][j].x, y= pos.y, z= crasha[i][j].z} + --local cyaw = abs(math.floor(minetest.dir_to_yaw(vector.direction(pos,cpos))*10)) + local node = minetest.get_node(cpos) + if minetest.registered_nodes[node.name] then + local kill = false + if minetest.registered_nodes[node.name]["drawtype"] == "airlike" then kill = true end + if minetest.registered_nodes[node.name]["buildable_to"] then kill = true end + if minetest.registered_nodes[node.name]["drawtype"] == "liquid" then kill = sonar end + + if kill then + if not rev then + table.remove(crasha[i],j) + else + rarray[counter] = cpos + counter = counter +1 + end + else + if not rev then + rarray[counter] = cpos + counter = counter +1 + else + table.remove(crasha[i],j) + end + end + end + end + + end + end + return rarray +end + +-- radar function for obstacles lying in front of an entity +-- use water = true if water should be an obstacle + +function water_life.radar(pos, yaw, radius, water,fast) + + if not radius or radius < 1 then radius = 16 end + local left = 0 + local right = 0 + if not water then water = false end + for j = 0,3,1 do + for i = 0,4,1 do + local pos2 = mobkit.pos_translate2d(pos,yaw+(i*pi/16),radius) + local pos3 = mobkit.pos_translate2d(pos,yaw-(i*pi/16),radius) + --minetest.set_node(pos2,{name="default:stone"}) + if water_life.find_collision(pos,{x=pos2.x, y=pos2.y + j*2, z=pos2.z}, water) then + left = left + 5 - i + end + if water_life.find_collision(pos,{x=pos3.x, y=pos3.y + j*2, z=pos3.z},water) then + right = right + 5 - i + end + end + end + local up =0 + local down = 0 + if not fast then + for j = -4,4,1 do + for i = -3,3,1 do + local k = i + local pos2 = mobkit.pos_translate2d(pos,yaw+(i*pi/16),radius) + local collide = water_life.find_collision(pos,{x=pos2.x, y=pos2.y + j, z=pos2.z}, water) + if k < 0 then k = k * -1 end + if collide and j <= 0 then + down = down + math.floor((7+j-k)*collide/radius*2) + elseif collide and j >= 0 then + up = up + math.floor((7-j-k)*collide/radius*2) + end + end + end + end + local under = water_life.find_collision(pos,{x=pos.x, y=pos.y - radius, z=pos.z}, water) + if not under then under = radius end + local above = water_life.find_collision(pos,{x=pos.x, y=pos.y + radius, z=pos.z}, water) + if not above then above = radius end + if water_life.radar_debug then + -- minetest.chat_send_all(dump(water_life.radar_debug).." left = "..left.." right = "..right.." up = "..up.." down = "..down.." under = "..under.." above = "..above) + end + return left, right, up, down, under, above +end + + +--find a spawn position under air +function water_life.find_node_under_air(pos,radius,name) + if not pos then return nil end + if not radius then radius = 3 end + if not name then name={"group:crumbly","group:stone","group:tree"} end + + local pos1 = {x=pos.x-radius, y=pos.y-radius, z=pos.z-radius} --mobkit.pos_shift(pos,{x=radius*-1,y=radius*-1,z=radius*-1}) + local pos2 = {x=pos.x+radius, y=pos.y+radius, z=pos.z+radius} --mobkit.pos_shift(pos,{x=radius,y=radius,z=radius}) + local spawner = minetest.find_nodes_in_area_under_air(pos1, pos2, name) + if not spawner or #spawner < 1 then + return nil + else + local rpos = spawner[random(#spawner)] + rpos = mobkit.pos_shift(rpos,{y=1}) + return rpos + end +end + +-- function to find liquid surface and depth at that position +function water_life.water_depth(pos,max) + + + local surface = {} + local depth = 0 + local type = "" + if not max then max = 10 end + if not pos then return nil end + local tempos = {} + local node = minetest.get_node(pos) + if not node or node.name == 'ignore' then return nil end + if not minetest.registered_nodes[node.name] then return nil end -- handle unknown nodes + + local type = minetest.registered_nodes[node.name]["liquidtype"] + local found = false + --minetest.chat_send_all(">>>"..dump(node.name).." <<<") + if type == "none" then -- start in none liquid try to find surface + + local under = water_life.find_collision(pos,{x=pos.x, y=pos.y - max, z=pos.z}, true) + --minetest.chat_send_all(dump(under).." "..dump(node.name)) + if under then + local check = {x=pos.x, y=pos.y - under-1, z=pos.z} + local cname = minetest.get_node(check).name + if not minetest.registered_nodes[cname] then return nil end -- handle unknown nodes + if minetest.registered_nodes[cname]["liquidtype"] == "source" then + surface = check + found = true + end + end + if not found then + return nil + end + + else -- start in liquid find way up first + + local lastpos = pos + for i = 1,max,1 do + tempos = {x=pos.x, y=pos.y+i, z= pos.z} + node = minetest.get_node(tempos) + if not minetest.registered_nodes[node.name] then return nil end -- handle unknown nodes + local ctype = minetest.registered_nodes[node.name]["liquidtype"] + + if ctype == "none" then + surface = lastpos + found = true + break + end + lastpos = tempos + end + if not found then surface = lastpos end + end + + pos = surface + type = minetest.get_node(pos).name or "" + local under = water_life.find_collision(pos,{x=pos.x, y=pos.y - max, z=pos.z}, false) + depth = under or max + + return depth, type, surface +end + + +-- amphibious version of mobkit +function water_life.get_next_waypoint_fast(self,tpos,nogopos) + local pos = mobkit.get_stand_pos(self) + local dir=vector.direction(pos,tpos) + local neighbor = mobkit.dir2neighbor(dir) + local height, pos2, liquidflag = mobkit.is_neighbor_node_reachable(self,neighbor) + local heightr = nil + local heightl = nil + local liq = nil + + if height then + local fast = false + heightl = mobkit.is_neighbor_node_reachable(self,mobkit.neighbor_shift(neighbor,-1)) + if heightl and abs(heightl-height)<0.001 then + heightr = mobkit.is_neighbor_node_reachable(self,mobkit.neighbor_shift(neighbor,1)) + if heightr and abs(heightr-height)<0.001 then + fast = true + dir.y = 0 + local dirn = vector.normalize(dir) + local npos = mobkit.get_node_pos(mobkit.pos_shift(pos,neighbors[neighbor])) + local factor = abs(dirn.x) > abs(dirn.z) and abs(npos.x-pos.x) or abs(npos.z-pos.z) + pos2=mobkit.pos_shift(pos,{x=dirn.x*factor,z=dirn.z*factor}) + end + end + return height, pos2, fast + else + + for i=1,4 do + -- scan left + height, pos2, liq = mobkit.is_neighbor_node_reachable(self,mobkit.neighbor_shift(neighbor,-i)) + if height then return height,pos2 end + -- scan right + height, pos2, liq = mobkit.is_neighbor_node_reachable(self,mobkit.neighbor_shift(neighbor,i)) + if height then return height,pos2 end + end + end +end + +-- amphibious version of mobkit +function water_life.goto_next_waypoint(self,tpos) + local height, pos2 = water_life.get_next_waypoint_fast(self,tpos) + + if not height then return false end + + if height <= 0.01 then + local yaw = self.object:get_yaw() + local tyaw = minetest.dir_to_yaw(vector.direction(self.object:get_pos(),pos2)) + if abs(tyaw-yaw) > 1 then + mobkit.lq_turn2pos(self,pos2) + end + mobkit.lq_dumbwalk(self,pos2) + else + mobkit.lq_turn2pos(self,pos2) + mobkit.lq_dumbjump(self,height) + end + return true +end + + + +function water_life.get_next_waypoint(self,tpos) + local pos = mobkit.get_stand_pos(self) + local dir=vector.direction(pos,tpos) + local neighbor = mobkit.dir2neighbor(dir) + local function update_pos_history(self,pos) + table.insert(self.pos_history,1,pos) + if #self.pos_history > 2 then table.remove(self.pos_history,#self.pos_history) end + end + local nogopos = self.pos_history[2] + + local height, pos2, liquidflag = mobkit.is_neighbor_node_reachable(self,neighbor) +--minetest.chat_send_all('pos2 ' .. minetest.serialize(pos2)) +--minetest.chat_send_all('nogopos ' .. minetest.serialize(nogopos)) + if height and not (nogopos and mobkit.isnear2d(pos2,nogopos,0.1)) then + + local heightl = mobkit.is_neighbor_node_reachable(self,mobkit.neighbor_shift(neighbor,-1)) + if heightl and abs(heightl-height)<0.001 then + local heightr = mobkit.is_neighbor_node_reachable(self,mobkit.neighbor_shift(neighbor,1)) + if heightr and abs(heightr-height)<0.001 then + dir.y = 0 + local dirn = vector.normalize(dir) + local npos = mobkit.get_node_pos(mobkit.pos_shift(pos,neighbors[neighbor])) + local factor = abs(dirn.x) > abs(dirn.z) and abs(npos.x-pos.x) or abs(npos.z-pos.z) + pos2=mobkit.pos_shift(pos,{x=dirn.x*factor,z=dirn.z*factor}) + end + end + update_pos_history(self,pos2) + return height, pos2 + else + + for i=1,3 do + -- scan left + local height, pos2, liq = mobkit.is_neighbor_node_reachable(self,mobkit.neighbor_shift(neighbor,-i*self.path_dir)) + if height and not liq + and not (nogopos and mobkit.isnear2d(pos2,nogopos,0.1)) then + update_pos_history(self,pos2) + return height,pos2 + end + -- scan right + height, pos2, liq = mobkit.is_neighbor_node_reachable(self,mobkit.neighbor_shift(neighbor,i*self.path_dir)) + if height and not liq + and not (nogopos and mobkit.isnear2d(pos2,nogopos,0.1)) then + update_pos_history(self,pos2) + return height,pos2 + end + end + --scan rear + height, pos2, liquidflag = mobkit.is_neighbor_node_reachable(self,mobkit.neighbor_shift(neighbor,4)) + if height and not liquidflag + and not (nogopos and mobkit.isnear2d(pos2,nogopos,0.1)) then + update_pos_history(self,pos2) + return height,pos2 + end + end + -- stuck condition here + table.remove(self.pos_history,2) + self.path_dir = self.path_dir*-1 -- subtle change in pathfinding +end + + +-- blood effects +function water_life.spilltheblood(object,size) + if not water_life.bloody then return end + if not size then size = 1 end + local particlespawner_id = minetest.add_particlespawner({ + amount = 50, + time = 1, + minpos = vector.new(-0.3, size/2, -0.3), + maxpos = vector.new( 0.3, size, 0.3), + minvel = {x = -1, y = 0, z = -1}, + maxvel = {x = 1, y = 1, z = 1}, + minacc = {x = 0, y = 2, z = 0}, + maxacc = {x = 0, y = 3, z = 0}, + minexptime = 0.5, + maxexptime = 1, + minsize = 1, + maxsize = 2, + texture = "water_life_bloodeffect1.png", + collisiondetection = true, + collision_removal = true, + object_collision = true, + attached = object, + }) +end + + +-- Entity definitions + +-- entity for showing positions in debug +minetest.register_entity("water_life:pos", { + initial_properties = { + visual = "cube", + collide_with_objects = false, + visual_size = {x=1.1, y=1.1}, + textures = {"water_life_pos.png", "water_life_pos.png", + "water_life_pos.png", "water_life_pos.png", + "water_life_pos.png", "water_life_pos.png"}, + collisionbox = {-0.55, -0.55, -0.55, 0.55, 0.55, 0.55}, + physical = false, + } +}) + +if water_life.radar_debug then +minetest.register_on_player_hpchange(function(player, hp_change, reason) + if not player or hp_change >= 0 then return hp_change end + local name = player:get_player_name() + local privs = minetest.get_player_privs(name) + if not privs.god then return hp_change end + return 0 + end, true) + +minetest.register_privilege("god", {description ="unvulnerable"}) +end + + +--check here for antiserum group of eaten food +minetest.register_on_item_eat(function(hp_change, replace_with_item, itemstack, user, pointed_thing) + if not user or not user:is_player() then return end + if not itemstack then return end + local name = user:get_player_name() + local antiserum = itemstack:get_definition().groups.antiserum + if antiserum then + local meta = user:get_meta() + local score = user:get_hp() + + if meta:get_int("snakepoison") > 0 then meta:set_int("snakepoison",0) hunger_ng.set_effect(user:get_player_name(), "heal", "enabled") end + water_life.change_hud(user,"poison",0) + end + + return +end) + + +--new players are immune to snakepoison +minetest.register_on_newplayer(function(player) + if not player or not player:is_player() then return end + local meta = player:get_meta() + local join = os.time() + meta:set_int("jointime",join) +end) + +-- but not forever +minetest.register_on_joinplayer(function(player) + if not player or not player:is_player() then return end + local meta = player:get_meta() + meta:set_int("bitten",0) + meta:set_int("repellant",0) +end) diff --git a/my_changes/mobs/mobs_mobkit/water_life/files/behaviors.lua b/my_changes/mobs/mobs_mobkit/water_life/files/behaviors.lua new file mode 100644 index 0000000..61935b6 --- /dev/null +++ b/my_changes/mobs/mobs_mobkit/water_life/files/behaviors.lua @@ -0,0 +1,1367 @@ + +local abs = math.abs +local pi = math.pi +local floor = math.floor +local ceil = math.ceil +local sqrt = math.sqrt +local max = math.max +local min = math.min +local pow = math.pow +local sign = math.sign +local time = os.time +local rad = math.rad +local random = water_life.random +local deg=math.deg +local tan = math.tan +local cos = math.cos +local atan=math.atan + + + + +-- flying stuff + +local function chose_turn(self,a,b) + + local remember = mobkit.recall(self,"turn") + if not remember then + if water_life.leftorright() then + remember = "1" + mobkit.remember(self,"time", self.time_total) + mobkit.remember(self,"turn", "1") + else + remember = "0" + mobkit.remember(self,"time", self.time_total) + mobkit.remember(self,"turn", "0") + end + end + + if a > b then + mobkit.remember(self,"turn", "1") + mobkit.remember(self,"time", self.time_total) + return false + + elseif a < b then + mobkit.remember(self,"turn","0") + mobkit.remember(self,"time", self.time_total) + return true + + else + + if remember == "0" then return true else return false end + + end +end + + + +local function pitchroll2pitchyaw(aoa,roll) + if roll == 0.0 then return aoa,0 end + -- assumed vector x=0,y=0,z=1 + local p1 = tan(aoa) + local y = cos(roll)*p1 + local x = sqrt(p1^2-y^2) + local pitch = atan(y) + local yaw=atan(x)*math.sign(roll) + return pitch,yaw +end + + + +------------------ +-- LQ behaviors -- +------------------ +--[[ +params: +lift: [number] +multiplier for lift. faster objects need less, slower need more. typical value: 0.6 for speeds around 4 m/s + +pitch: [degrees] +angle between the longitudinal axis and horizontal plane. typical range: <-15.15> + +aoa: +[degrees] angle of attack - the angle between the longitudinal axis and velocity vector. + +roll: [degrees] +bank angle. positive is right, negative is left, this is how they turn. if set too large they'll loose height rapidly + +acc: [number] +propulsion. use with positive pitch to make them fly level or climb, set it to 0 with slight negative pitch to make +them glide. typical value: around 1.0 + +anim: [string] +animation. +The example uses two simple high level behaviors to keep them between 18 and 24 nodes above ground, seems good already for ambient type flying creatures. +warning: never set_velocity when using these behaviors. +]] + +function water_life.lq_fly_aoa(self,lift,aoa,roll,acc,anim) + aoa=rad(aoa) + roll=rad(roll) + local hpitch = 0 + local hyaw = 0 + local caoa = 0 + local laoa = nil + local croll=roll + local lroll = nil + local lastrot = nil + local init = true + local func=function(self) + local rotation=self.object:get_rotation() + local vel = self.object:get_velocity() + local vrot = mobkit.dir_to_rot(vel,lastrot) + lastrot = vrot + if init then + if anim then mobkit.animate(self,anim) end + init = false + end + + local accel=self.object:get_acceleration() + + -- gradual changes + if abs(roll-rotation.z) > 0.5*self.dtime then + croll = rotation.z+0.5*self.dtime*math.sign(roll-rotation.z) + end + + if croll~=lroll then + hpitch,hyaw = pitchroll2pitchyaw(aoa,croll) + lroll = croll + end + + local hrot = {x=vrot.x+hpitch,y=vrot.y-hyaw,z=croll} + self.object:set_rotation(hrot) + local hdir = mobkit.rot_to_dir(hrot) + local cross = vector.cross(vel,hdir) + local lift_dir = vector.normalize(vector.cross(cross,hdir)) + + local daoa = deg(aoa) + local lift_coefficient = 0.24*abs(daoa)*(1/(0.025*daoa+1))^4*math.sign(aoa) -- homegrown formula + local lift_val = lift*vector.length(vel)^2*lift_coefficient + + local lift_acc = vector.multiply(lift_dir,lift_val) + lift_acc=vector.add(vector.multiply(minetest.yaw_to_dir(rotation.y),acc),lift_acc) + + self.object:set_acceleration(vector.add(accel,lift_acc)) + end + mobkit.queue_low(self,func) +end + +function water_life.lq_fly_pitch(self,lift,pitch,roll,acc,anim) + pitch = rad(pitch) + roll=rad(roll) + local cpitch = pitch + local croll = roll + local hpitch = 0 + local hyaw = 0 + local lpitch = nil + local lroll = nil + local lastrot = nil + local init = true + + local func=function(self) + if init then + if anim then mobkit.animate(self,anim) end + init = false + end + local rotation=self.object:get_rotation() + local accel=self.object:get_acceleration() + local vel = self.object:get_velocity() + local speed = vector.length(vel) + local vdir = vector.normalize(vel) + local vrot = mobkit.dir_to_rot(vel,lastrot) + lastrot = vrot + + -- gradual changes + if abs(roll-rotation.z) > 0.5*self.dtime then + croll = rotation.z+0.5*self.dtime*math.sign(roll-rotation.z) + end + if abs(pitch-rotation.x) > 0.5*self.dtime then + cpitch = rotation.x+0.5*self.dtime*math.sign(pitch-rotation.x) + end + + if cpitch~=lpitch or croll~=lroll then + hpitch,hyaw = pitchroll2pitchyaw(cpitch,croll) + lpitch = cpitch lroll = croll + end + + local aoa = deg(-vrot.x+cpitch) -- angle of attack + local hrot = {x=hpitch, y=vrot.y-hyaw, z=croll} -- hull rotation + self.object:set_rotation(hrot) + local hdir = mobkit.rot_to_dir(hrot) -- hull dir + + local cross = vector.cross(hdir,vel) + local lift_dir = vector.normalize(vector.cross(hdir,cross)) + + local lift_coefficient = 0.24*max(aoa,0)*(1/(0.025*max(aoa,0)+1))^4 -- homegrown formula +-- local lift_val = mobkit.minmax(lift*speed^2*lift_coefficient,speed/self.dtime) +-- local lift_val = max(lift*speed^2*lift_coefficient,0) + local lift_val = min(lift*speed^2*lift_coefficient,20) +--if lift_val > 10 then minetest.chat_send_all('lift: '.. lift_val ..' vel:'.. speed ..' aoa:'.. aoa) end + + local lift_acc = vector.multiply(lift_dir,lift_val) + lift_acc=vector.add(vector.multiply(minetest.yaw_to_dir(rotation.y),acc),lift_acc) + accel=vector.add(accel,lift_acc) + accel=vector.add(accel,vector.multiply(vdir,-speed*speed*0.02)) -- drag + accel=vector.add(accel,vector.multiply(hdir,acc)) -- propeller + + self.object:set_acceleration(accel) + + end + mobkit.queue_low(self,func) +end + + + +function water_life.lq_dumbjump(self,height,anim) + anim = anim or 'stand' + local jump = true + local func=function(self) + local yaw = self.object:get_yaw() + + if jump then + mobkit.animate(self,anim) + local dir = minetest.yaw_to_dir(yaw) + dir.y = -mobkit.gravity*sqrt((height+0.35)*2/-mobkit.gravity) + self.object:set_velocity(dir) + jump = false + else -- the eagle has landed + return true + end + + + end + mobkit.queue_low(self,func) +end + + +function water_life.lq_dumbwalk(self,dest,speed_factor) + local timer = 3 -- failsafe + speed_factor = speed_factor or 1 + local func=function(self) + mobkit.animate(self,'walk') + timer = timer - self.dtime + if timer < 0 then return true end + + local pos = mobkit.get_stand_pos(self) + local y = self.object:get_velocity().y + local dir = vector.normalize(vector.direction({x=pos.x,y=0,z=pos.z}, + {x=dest.x,y=0,z=dest.z})) + dir = vector.multiply(dir,self.max_speed*speed_factor) + mobkit.turn2yaw(self,minetest.dir_to_yaw(dir)) + dir.y = y + self.object:set_velocity(dir) + + end + mobkit.queue_low(self,func) +end + + +function water_life.lq_jumpattack(self,height,target,extra) + local phase=1 + local timer=0.5 + local tgtbox = target:get_properties().collisionbox + local func=function(self) + local selfname = self.object:get_luaentity().name + if not mobkit.is_alive(target) then return true end + if self.isonground then + if phase==1 then -- collision bug workaround + local vel = self.object:get_velocity() + vel.y = -mobkit.gravity*sqrt(height*2/-mobkit.gravity) + self.object:set_velocity(vel) + mobkit.make_sound(self,'charge') + phase=2 + else + mobkit.lq_idle(self,0.3) + return true + end + elseif phase==2 then + local dir = minetest.yaw_to_dir(self.object:get_yaw()) + local vy = self.object:get_velocity().y + dir=vector.multiply(dir,6) + dir.y=vy + self.object:set_velocity(dir) + phase=3 + elseif phase==3 then -- in air + local tgtpos = target:get_pos() + local pos = self.object:get_pos() + -- calculate attack spot + local yaw = self.object:get_yaw() + local dir = minetest.yaw_to_dir(yaw) + local apos = mobkit.pos_translate2d(pos,yaw,self.attack.range) + + if mobkit.is_pos_in_box(apos,tgtpos,tgtbox) then --bite + target:punch(self.object,1,self.attack) + if selfname and target:is_player() then + if selfname == "water_life:snake" then + local meta = target:get_meta() + local name = target:get_player_name() + local join = meta:get_int("jointime") + if not join or (os.time() - join) > water_life.newplayerbonus * 86400 then + hunger_ng.set_effect(target:get_player_name(), "heal", "disabled") + meta:set_int("snakepoison",1) + water_life.change_hud(target,"poison") + else + local left = water_life.newplayerbonus - math.floor((os.time() - join)/86400*100)/100 + minetest.chat_send_player(target:get_player_name(),minetest.colorize('#fd4000',">>> A rattlesnake bit you. New player bonus of "..left.. + " days left. Catch 3 snakes to craft antiserum")) + meta:set_int("bitten",1) + + minetest.after(10,function() + meta:set_int("bitten",0) + end,meta) + end + end + end + -- bounce off + local vy = self.object:get_velocity().y + self.object:set_velocity({x=dir.x*-3,y=vy,z=dir.z*-3}) + -- play attack sound if defined + mobkit.make_sound(self,'attack') + phase=4 + end + end + end + mobkit.queue_low(self,func) +end + + + +------------------ +-- HQ behaviors -- +------------------ + + +-- on land only, go to tgt and remove it +function water_life.hq_catch_drop(self,prty,tgt) + + local func = function(self) + + if self.isinliquid then return true end + if not tgt then return true end + if mobkit.is_queue_empty_low(self) then + local pos = mobkit.get_stand_pos(self) + local tpos = tgt:get_pos() + if pos and tpos then + local dist = vector.distance(pos,tpos) + if dist < 2 then + tgt:remove() + return true + else + if pos.y +0.5 >= tpos.y then + water_life.lq_dumbwalk(self,tpos,0.1) + else + water_life.lq_dumbjump(self,1) + end + end + else + return true + end + end + end + mobkit.queue_high(self,func,prty) +end + + +function water_life.hq_aquaidle(self,prty,anim) + local init = true + if not anim then anim = 'def' end + + local func = function(self) + if init then + mobkit.animate(self,anim) + self.object:set_velocity({x=0,y=0,z=0}) + init = false + end + + if self.name == "water_life:alligator" then + if random(100) < 5 then + mobkit.animate(self,'roll') + end + end + end + + mobkit.queue_high(self,func,prty) +end + + +-- same as mobkit.hq_aqua_turn but for large mobs +function water_life.big_hq_aqua_turn(self,prty,tyaw,speed) + + local func = function(self) + if not speed then speed = 0.4 end + if speed < 0 then speed = speed * -1 end + + local finished=mobkit.turn2yaw(self,tyaw,speed) + if finished then return true end + end + mobkit.queue_high(self,func,prty) +end + + + +-- same as mobkit.hq_aqua_roam but for large mobs +function water_life.big_aqua_roam(self,prty,speed,anim) + local tyaw = 0 + local init = true + local prvscanpos = {x=0,y=0,z=0} + local center = self.object:get_pos() + if not anim then anim = 'def' end + + local func = function(self) + if init then + mobkit.animate(self,anim) + init = false + end + local pos = mobkit.get_stand_pos(self) + local yaw = self.object:get_yaw() + local scanpos = mobkit.get_node_pos(mobkit.pos_translate2d(pos,yaw,speed)) + if not vector.equals(prvscanpos,scanpos) then + prvscanpos=scanpos + local nyaw,height = water_life.aqua_radar_dumb(pos,yaw,speed,true) + if height and height > pos.y then + local vel = self.object:get_velocity() + vel.y = vel.y+0.1 + self.object:set_velocity(vel) + end + if yaw ~= nyaw then + tyaw=nyaw + mobkit.hq_aqua_turn(self,prty+1,tyaw,speed) + return + end + end + if mobkit.timer(self,10) then + if vector.distance(pos,center) > water_life.abr*16*0.5 then + tyaw = minetest.dir_to_yaw(vector.direction(pos,{x=center.x+random()*10-5,y=center.y,z=center.z+random()*10-5})) + else + if random(10)>=9 then tyaw=tyaw+random()*pi - pi*0.5 end + end + end + + if mobkit.timer(self,20) then mobkit.turn2yaw(self,tyaw,-1) end + --local yaw = self.object:get_yaw() + mobkit.go_forward_horizontal(self,speed) + end + mobkit.queue_high(self,func,prty) +end + + +-- this is the same as mobkit's, but allows movement in shallow water +function water_life.hq_aqua_roam(self,prty,speed,anim) + if not anim then anim = "def" end + local tyaw = 0 + local init = true + local prvscanpos = {x=0,y=0,z=0} + local center = self.object:get_pos() + local func = function(self) + if init then + mobkit.animate(self,anim) + init = false + end + local pos = mobkit.get_stand_pos(self) + local yaw = self.object:get_yaw() + local scanpos = mobkit.get_node_pos(mobkit.pos_translate2d(pos,yaw,speed)) + if not vector.equals(prvscanpos,scanpos) then + prvscanpos=scanpos + local nyaw,height = water_life.aqua_radar_dumb(pos,yaw,speed,true,true) + if height and height > pos.y then + local vel = self.object:get_velocity() + vel.y = vel.y+1 + self.object:set_velocity(vel) + end + if yaw ~= nyaw then + tyaw=nyaw + mobkit.hq_aqua_turn(self,prty+1,tyaw,speed) + return + end + end + if mobkit.timer(self,1) then + if vector.distance(pos,center) > water_life.abr*16*0.5 then + tyaw = minetest.dir_to_yaw(vector.direction(pos,{x=center.x+random()*10-5,y=center.y,z=center.z+random()*10-5})) + else + if random(10)>=9 then tyaw=tyaw+random()*pi - pi*0.5 end + end + end + + mobkit.turn2yaw(self,tyaw,3) +-- local yaw = self.object:get_yaw() + mobkit.go_forward_horizontal(self,speed) + end + mobkit.queue_high(self,func,prty) +end + + +function water_life.hq_attack(self,prty,tgtobj) + local func = function(self) + if self.isinliquid then return true end + if not mobkit.is_alive(tgtobj) then return true end + if mobkit.is_queue_empty_low(self) then + local meta = nil + local poison = 0 + local pos = mobkit.get_stand_pos(self) +-- local tpos = tgtobj:get_pos() + local tpos = mobkit.get_stand_pos(tgtobj) + local dist = vector.distance(pos,tpos) + if tgtobj:is_player() then + meta = tgtobj:get_meta() + poison = meta:get_int("snakepoison") + noob = meta:get_int("bitten") + end + + if dist > 3 or poison > 0 or noob > 0 then + return true + else + mobkit.lq_turn2pos(self,tpos) + local height = tgtobj:is_player() and 0.35 or tgtobj:get_luaentity().height*0.6 + if tpos.y+height>pos.y then + mobkit.make_sound(self,"attack") + water_life.lq_jumpattack(self,tpos.y+height-pos.y,tgtobj) + else + mobkit.lq_dumbwalk(self,mobkit.pos_shift(tpos,{x=random()-0.5,z=random()-0.5})) + end + end + end + end + mobkit.queue_high(self,func,prty) +end + + +function water_life.hq_hunt(self,prty,tgtobj,lost,anim) + if not lost then lost = self.view_range end + if random(100) < 20 then mobkit.make_sound(self,"attack") end + + + local func = function(self) + if not mobkit.is_alive(tgtobj) then return true end + if self.isinliquid then return true end + if mobkit.is_queue_empty_low(self) and self.isonground then + local pos = mobkit.get_stand_pos(self) + local opos = tgtobj:get_pos() + local dist = vector.distance(pos,opos) + local meta = nil + local poison = 0 + local noob = 0 + + if tgtobj:is_player() then + meta = tgtobj:get_meta() + poison = meta:get_int("snakepoison") + noob = meta:get_int("bitten") + end + + if poison > 0 or noob > 0 then return true end + + if mobkit.is_in_deep(tgtobj) then + return true --water_life.hq_water_attack(self,tgtobj,prty+1,7) + end + if dist > lost or math.abs(pos.y - opos.y) > 5 then + return true + elseif dist > 3 then + water_life.goto_next_waypoint(self,opos) + else + water_life.hq_attack(self,prty+1,tgtobj) + end + end + end + mobkit.queue_high(self,func,prty) +end + +-- slowly roam on land, breaks are taken with max of 120 seconds +function water_life.hq_slow_roam(self,prty,idle) + if not idle then idle = random(30,120) end + + local func=function(self) + if self.isinliquid then return true end + if mobkit.is_queue_empty_low(self) and self.isonground then + local pos = mobkit.get_stand_pos(self) + local neighbor = random(8) + + local height, tpos, liquidflag = mobkit.is_neighbor_node_reachable(self,neighbor) + if height and not liquidflag then mobkit.dumbstep(self,height,tpos,0.1,idle) end + end + end + mobkit.queue_high(self,func,prty) +end + + +--find any water nearby and go into it +function water_life.hq_go2water(self,prty,speed) + local pos = mobkit.get_stand_pos(self) + local target = minetest.find_node_near(pos, self.view_range, {"group:water"}) + --if target then water_life.temp_show(target,10,10) end + if not speed then speed = 0.1 end + + local func=function(self) + --minetest.chat_send_all(dump(vector.distance(pos,target))) + if self.isinliquid or not target then return true end + + if mobkit.is_queue_empty_low(self) and self.isonground then + pos = mobkit.get_stand_pos(self) + local height = target.y - pos.y + water_life.dumbstep(self,height,target,speed,0) + end + end + mobkit.queue_high(self,func,prty) +end + + +-- looks for a landing point on shore under air. tgt is optional +-- and must be an object, so it will start searching yaw2tgt - 15 degrees +function water_life.hq_go2land(self,prty,tgt) + local init = false + local offset = 1 + local target = nil + local start = 1 + if tgt then + local ayaw = water_life.get_yaw_to_object(self,tgt) + if ayaw then start = math.deg(ayaw) -15 end + end + + local func = function(self) + + + local fpos = nil + local pos = mobkit.get_stand_pos(self) + + if not init then + + for i = start,359,15 do + local yaw = rad(i) + target = mobkit.pos_translate2d(pos,yaw,self.view_range) + fpos = water_life.find_collision(pos,target,false) + if fpos then + target = mobkit.pos_translate2d(pos,yaw,fpos+0.5) + local node=minetest.get_node({x=target.x,y=target.y+1,z=target.z}) + + if node.name == "air" then + --water_life.temp_show(target,5,2) + break + else + target = nil + end + else + target = nil + end + end + init = true + end + + if self.isonground then return true end + + if target then + local y=self.object:get_velocity().y + local pos2d = {x=pos.x,y=0,z=pos.z} + local dir=vector.normalize(vector.direction(pos2d,target)) + local yaw = minetest.dir_to_yaw(dir) + + if mobkit.timer(self,1) then + local pos1 = mobkit.pos_shift(mobkit.pos_shift(pos,{x=-dir.z*offset,z=dir.x*offset}),dir) + local h,l = mobkit.get_terrain_height(pos1) + if h and h>pos.y then + mobkit.lq_freejump(self) + else + local pos2 = mobkit.pos_shift(mobkit.pos_shift(pos,{x=dir.z*offset,z=-dir.x*offset}),dir) + local h,l = mobkit.get_terrain_height(pos2) + if h and h>pos.y then + mobkit.lq_freejump(self) + end + end + elseif mobkit.turn2yaw(self,yaw) then + dir.y = y + self.object:set_velocity(dir) + end + else + return true + end + --minetest.chat_send_all("angel= "..dump(yaw).." viewrange= "..dump(self.view_range).." distance= "..dump(vector.distance(pos,opos))) + + + + end + mobkit.queue_high(self,func,prty) +end + +function water_life.hq_snail_move(self,prty) + local ground = mobkit.get_stand_pos(self) + local coraltable = minetest.find_nodes_in_area({x=ground.x-3, y=ground.y-1, z=ground.z-3}, {x=ground.x+3, y=ground.y, z=ground.z+3}, water_life.urchinspawn) + if not coraltable or #coraltable < 1 then return end + local tgpos = coraltable[random(#coraltable)] + + local func = function(self) + if not mobkit.is_alive(self) then return true end + local pos = mobkit.get_stand_pos(self) + local dist = vector.distance(pos,tgpos) + + mobkit.drive_to_pos(self,tgpos,0.01,0.1,1.5) + --minetest.chat_send_all(dump(dist)) + if dist <= 1.8 then return true end + end + + mobkit.queue_high(self,func,prty) +end + + +function water_life.hq_idle(self,prty,duration,anim) + anim = anim or 'stand' + local init = true + + local func=function(self) + if init then + mobkit.animate(self,anim) + init=false + end + duration = duration-self.dtime + if duration <= 0 then return true end + end + mobkit.queue_high(self,func,prty) +end + + +-- swim to the next "node" which is inside viewrange or quit -- node can be string or table of string +-- if tgtpos is given node will be ignored +function water_life.hq_swimto(self,prty,speed,node,tgtpos) + + local endpos = tgtpos + local pos = self.object:get_pos() + local r = self.view_range + if not tgtpos then + endpos = minetest.find_node_near(pos, r, node) + end + if not endpos then return true end + + + local func = function(self) + + + local yaw = water_life.get_yaw_to_pos(self,endpos) + if not mobkit.is_alive(self) then return true end + local pos = self.object:get_pos() + + if mobkit.timer(self,1) then + if vector.distance(pos,endpos) > 1 then + + --minetest.chat_send_all(vector.distance(pos,endpos)) + if endpos.y > pos.y then + local vel = self.object:get_velocity() + vel.y = vel.y+0.4 + self.object:set_velocity(vel) + end + if endpos.y < pos.y then + local vel = self.object:get_velocity() + vel.y = vel.y-0.1 + self.object:set_velocity(vel) + end + mobkit.hq_aqua_turn(self,prty+5,yaw,speed) + pos = self.object:get_pos() --mobkit.get_stand_pos(self) + yaw = water_life.get_yaw_to_pos(self,endpos) + + else + return true + end + end + +end + mobkit.queue_high(self,func,prty) + +end + + + +-- turn around 180degrees from tgtob and swim away until out of sight +function water_life.hq_swimfrom(self,prty,tgtobj,speed,outofsight) + local init = true + + local func = function(self) + if not outofsight then outofsight = self.view_range * 1.5 end + if not mobkit.is_alive(tgtobj) then return true end + + + local pos = mobkit.get_stand_pos(self) + local opos = tgtobj:get_pos() + local yaw = water_life.get_yaw_to_object(self,tgtobj) + math.rad(random(-30,30))+math.rad(180) + local distance = vector.distance(pos,opos) + if self.isonground then return true end + + if init then + + mobkit.animate(self,"swim") + init=false + + end + + if distance < outofsight then + + local swimto, height = water_life.aqua_radar_dumb(pos,yaw,3) + if height and height > pos.y then + local vel = self.object:get_velocity() + vel.y = vel.y+0.1 + self.object:set_velocity(vel) + end + mobkit.hq_aqua_turn(self,51,swimto,speed) + + else + return true + end + + --minetest.chat_send_all("angel= "..dump(yaw).." viewrange= "..dump(self.view_range).." distance= "..dump(vector.distance(pos,opos))) + + + + end + mobkit.queue_high(self,func,prty) +end + + + + +function water_life.hq_water_attack(self,tgtobj,prty,speed,shallow) + + local pos = self.object:get_pos() + local selfbox = self.object:get_properties().collisionbox + local tgtbox = tgtobj:get_properties().collisionbox + if not speed then speed = 1 end + + local func = function(self) + + if not mobkit.is_alive(self) or not mobkit.is_alive(tgtobj) or tgtobj:get_attach() ~= nil then return true end + local pos = self.object:get_pos() + local endpos = tgtobj:get_pos() + if not shallow then + if not mobkit.is_in_deep(tgtobj) and vector.distance (pos,endpos) > 2 then return true end + else + if not water_life.isinliquid(tgtobj) and vector.distance (pos,endpos) > 2 then return true end + end + local yaw = water_life.get_yaw_to_pos(self,endpos) + local entity = nil + if not tgtobj:is_player() then entity = tgtobj:get_luaentity() end + + + if vector.distance(pos,endpos) > selfbox[5]+tgtbox[5] then + --minetest.chat_send_all(dump(vector.distance(pos,endpos)).." "..dump(selfbox[5]+tgtbox[5])) + if endpos.y > pos.y+selfbox[5] then + local vel = vector.add(self.object:get_velocity(),{x=0,y=0.5,z=0}) + self.object:set_velocity(vel) + end + if endpos.y < pos.y-selfbox[5] then + local vel = vector.add(self.object:get_velocity(),{x=0,y=-0.5,z=0}) + self.object:set_velocity(vel) + end + + mobkit.hq_aqua_turn(self,prty+5,yaw,speed) + + + else + if mobkit.is_alive(tgtobj) then + + --minetest.chat_send_all("<<>>") + tgtobj:punch(self.object,1,self.attack) + return true + + + else + return true + end + end + if entity and string.match(entity.name,"petz") and vector.distance(pos,endpos) < 2 then + if mobkit.is_alive(tgtobj) then + --minetest.chat_send_all("<<>>") + mobkit.hurt(entity,self.attack.damage_groups.fleshy or 4) + + else + return true + end + end + +end + mobkit.queue_high(self,func,prty) + +end + + +-- hq flying behaviors + +function water_life.hq_climb(self,prty,fmin,fmax) + if not max then max = 30 end + if not min then min = 20 end + + local func=function(self) + if mobkit.timer(self,1) then + local remember = mobkit.recall(self,"time") + if remember then + if self.time_total - remember > 15 then + mobkit.forget(self,"turn") + mobkit.forget(self,"time") + + end + end + self.action = "fly" + local pos = self.object:get_pos() + local yaw = self.object:get_yaw() + + --local tim = minetest.get_us_time() + local left, right, up, down, under, above = water_life.radar(pos,yaw,32,true) + --minetest.chat_send_all(minetest.get_us_time()-tim) + + if (down < 3) and (under >= fmax) then + water_life.hq_glide(self,prty,fmin,fmax) + return true + end + if left > 3 or right > 3 then + local lift = 0.6 + local pitch = 8 + local roll = 6 + local acc = 1.2 + --roll = (max(left,right)/30 *3)+(down/100)*3+roll + roll = (max(left,right)/30 * 7.5) + lift = lift + (down - up) /400 + pitch = pitch + (down - up) /30 + --lift = lift + (down/100) - (up/100) + local turn = chose_turn(self,left,right) + if turn then + mobkit.clear_queue_low(self) + water_life.lq_fly_pitch(self,lift,pitch,roll*-1,acc,'fly') + else + mobkit.clear_queue_low(self) + water_life.lq_fly_pitch(self,lift,pitch,roll,acc,'fly') + end + end + end + if mobkit.timer(self,15) then mobkit.clear_queue_low(self) end + if mobkit.is_queue_empty_low(self) then water_life.lq_fly_pitch(self,0.6,8,(random(2)-1.5)*30,1.2,'fly') end + end + mobkit.queue_high(self,func,prty) +end + +function water_life.hq_glide(self,prty,fmin,fmax) + if not max then fmax = 30 end + if not min then fmin = 20 end + + local func = function(self) + if mobkit.timer(self,1) then + self.action = "glide" + local remember = mobkit.recall(self,"time") + if remember then + if self.time_total - remember > 15 then + mobkit.forget(self,"turn") + mobkit.forget(self,"time") + + end + end + local pos = self.object:get_pos() + local yaw = self.object:get_yaw() + local left, right, up, down, under, above = water_life.radar(pos,yaw,32,true) + if (down > 10) or (under < fmin) then + water_life.hq_climb(self,prty,fmin,fmax) + return true + end + if left > 3 or right > 3 then + local lift = 0.6 + local pitch = 8 + local roll = 0 + local acc = 1.2 + --roll = (max(left,right)/30 *3)+(down/100)*3+roll + roll = (max(left,right)/30 *7.5) + local turn = chose_turn(self,left,right) + if turn then + mobkit.clear_queue_low(self) + water_life.lq_fly_pitch(self,lift,pitch,roll*-1,acc,'glide') + else + mobkit.clear_queue_low(self) + water_life.lq_fly_pitch(self,lift,pitch,roll,acc,'glide') + end + end + end + if mobkit.timer(self,20) then mobkit.clear_queue_low(self) end + if mobkit.is_queue_empty_low(self) then water_life.lq_fly_pitch(self,0.6,-4,(random(2)-1.5)*30,0,'glide') end + end + mobkit.queue_high(self,func,prty) +end + + +function water_life.hq_water_takeoff(self,prty,anim,tyaw) + local init = true + local startup = true + local turned = false + local timer = 0 + if not anim then anim = 'def' end + local pos2 = {} + + + local func=function(self) + + local yaw = self.object:get_yaw() + local pos = self.object:get_pos() + + if startup then + if tyaw then yaw = tyaw end + --water_life.temp_show(pos,5,1) + for i = 0,330,30 do + pos2 = mobkit.pos_translate2d(pos,yaw+rad(i),self.view_range*2) + + if not water_life.find_collision(pos,pos2,false) then + tyaw = yaw + rad(i) + --water_life.temp_show(pos2,5,10) + break + end + end + startup = false + end + + if not startup then + if not tyaw then return true end + if mobkit.turn2yaw(self,tyaw,5) then turned = true end + end + + if turned then + if init then + self.object:set_velocity({x=0, y=0.5, z=0}) + minetest.after(2,function() + mobkit.animate(self,anim) + end) + init = false + end + + + minetest.after(4,function() + mobkit.animate(self,'fly') + end) + + if timer > 3 then + self.object:add_velocity({x=0,y=0.25,z=0}) + end + + mobkit.go_forward_horizontal(self,3) + timer = timer + self.dtime + + if timer > 8 then + local vec = vector.multiply(minetest.yaw_to_dir(tyaw),2) + vec.y = vec.y + 4 + self.object:add_velocity(vec) + mobkit.remember(self,"airlife",os.time()) + mobkit.forget(self,"landlife") + mobkit.forget(self,"waterlife") + return true + end + end + end + + mobkit.queue_high(self,func,prty) +end + + +function water_life.hq_fly2obj(self,prty,tgt,break_dist,force) + + local func=function(self) + if not break_dist then break_dist = 5 end + if not tgt then + mobkit.clear_queue_high(self) + water_life.hq_climb(self,prty) + return true + end + + local wname = "" + local roll = 0 + local pos = self.object:get_pos() + local yaw = self.object:get_yaw() + local tgtpos = tgt:get_pos() + local tgtyaw = tgt:get_yaw() --water_life.get_yaw_to_object(self,tgt) + local tgtspeed = math.floor(vector.length(tgt:get_velocity() or {x=0,y=0,z=0})) + if not tgt:is_player() and tgt:get_luaentity() and tgt:get_luaentity().name == "water_life:whale" then tgtyaw = tgtyaw + rad(180) end -- whales moving backwards XD + + if tgt:is_player() then + tgtyaw = tgt:get_look_horizontal() + local stack = tgt:get_wielded_item() + wname = stack:get_name() + end + + if tgtpos.y < 0 then tgtpos.y = 1 end + + + + if not water_life.gull_bait[wname] and not force then + mobkit.clear_queue_high(self) + mobkit.clear_queue_low(self) + water_life.hq_climb(self,15,4,16) + return true + end + --minetest.chat_send_all(dump(tgtpos).." "..dump(tgtyaw).." "..dump(tgtspeed)) + if not tgtyaw or not tgtspeed or not mobkit.is_alive(tgt) or self.isonground or self.isinliquid then + mobkit.clear_queue_high(self) + water_life.hq_climb(self,prty) + return true + end + local turn = 0 + local diff = 0 + local lift = 1.2 + local pitch = 5 + local acc = 0.6 + local anim = "fly" + local truetpos=mobkit.pos_translate2d(tgtpos,tgtyaw,tgtspeed*3) + local ddistance = vector.distance(pos,{x=truetpos.x,y= pos.y, z=truetpos.z}) + local alpha = atan((pos.y - truetpos.y)/ ddistance) + local truetyaw = water_life.get_yaw_to_pos(self,truetpos) + local realdistance = vector.distance(pos,tgtpos) + local ang2tgt = mobkit.pos_translate2d(pos,truetyaw,15) + + --chose right or left turn + if yaw < truetyaw then + turn = -1 + elseif yaw > truetyaw then + turn = 1 + end + + diff = abs(truetyaw - yaw) + + -- or chose straight ahead + if ddistance > 30 and diff <= 0.5 then + turn = 0 + end + if ddistance > 20 and diff <= 0.3 then + turn = 0 + end + if diff <= 0.1 then + turn = 0 + end + --minetest.chat_send_all(">>> "..dump(math.floor(diff*100)/100).." <<<") + --minetest.chat_send_all("distance ="..dump(math.floor(ddistance*100)/100).." yawdiff ="..dump(math.floor((truetyaw-yaw)*100)/100)) + + if ddistance > 32 then + roll = 15 * turn + elseif ddistance > 22 then + roll = 10 * turn + elseif ddistance > 12 then + roll = 5 * turn + elseif ddistance <= 12 then + roll = 2 * turn + end + + --water_life.temp_show(truetpos,1,3) + --minetest.chat_send_all(dump(minetest.pos_to_string(truetpos,2)).." -- "..dump(minetest.pos_to_string(pos,2))) + + if pos.y > truetpos.y + 1 and pos.y > 2 and ddistance < 25 then + anim = "glide" + pitch = -10 + elseif pos.y < truetpos.y - 1 then + pitch = 15 + else + pitch = 5 + end + + + --tim = minetest.get_us_time() + local left,right,center,up,down = water_life.radar_fast(self,20) + --minetest.chat_send_all(minetest.get_us_time()-tim) + + if down and down < 16 then pitch = 15 end + if up and not down and not center then pitch = -10 end + if right and not center then roll = 10 end + if left and not center then roll = -10 end + if left and right and not center then roll = 0 end + if center and down and center < 5 then + mobkit.clear_queue_high(self) + mobkit.clear_queue_low(self) + water_life.hq_climb(self,15,4,16) + return true + end + + if water_life.radar_debug then + water_life.temp_show(ang2tgt,1) + for i = 1,10,1 do + water_life.temp_show({x=truetpos.x, y=truetpos.y+i*2, z=truetpos.z},1) + end + --minetest.chat_send_all("Alpha= "..dump(alpha)..", Hight= "..dump(math.floor(pos.y)).." ###"..dump(yaw).."### hityaw="..dump(truetyaw)) + --minetest.chat_send_all("distance ="..dump(math.floor(ddistance*100)/100).." Alpha ="..dump(math.floor(deg(alpha)*100)/100)) + --minetest.chat_send_all("distance2prey ="..dump(vector.distance(pos,tgtpos))) + end + + mobkit.clear_queue_low(self) + + + if realdistance < break_dist+0.5 then -- steal bait from players + -- minetest.chat_send_all(">>> "..dump(math.floor(ddistance*100)/100).."<<< ###"..dump(math.floor(realdistance*100)/100).." ###") + if tgt:is_player() then + local bstack = tgt:get_wielded_item() + local bait = bstack:get_name() + if water_life.gull_bait[bait] then + bstack:take_item(1) + tgt:set_wielded_item(bstack) + end + end + mobkit.clear_queue_high(self) + mobkit.clear_queue_low(self) + water_life.hq_climb(self,15,4,16) + return true + + else + water_life.lq_fly_pitch(self,lift,pitch,roll,acc,anim) + end + + + + end + mobkit.queue_high(self,func,prty) +end + +--snakes +function water_life.hq_snake_warn(self,target,prty,duration,anim) + anim = anim or 'warn' + local init = true + + local func=function(self) + if init then + mobkit.make_sound(self,"warn") + minetest.after(1,function(anim) + mobkit.animate(self,anim) + end,anim) + init=false + end + local yaw = water_life.get_yaw_to_object(self,target) + self.object:set_yaw(yaw) + duration = duration-self.dtime + local dist = water_life.dist2tgt(self,target) + if dist > self.view_range then + minetest.after(3,function() + return true + end) + end + if duration <= 0 or dist < 4 then + mobkit.remember(self,"warned",target:get_player_name()) + return true + end + end + mobkit.queue_high(self,func,prty) +end + + + +function water_life.hq_snake_move(self,prty,anim) + anim = anim or 'look' + local init = true + local getpos = nil + + local func=function(self) + local getpos = nil + local pos = mobkit.get_stand_pos(self) --self.object:get_pos() + local yaw = 0 + + if init then + mobkit.animate(self,anim) + init=false + yaw = rad(random(360)) + pos = mobkit.pos_translate2d(pos,yaw,self.view_range+5) + getpos = water_life.find_node_under_air(pos,self.view_range) + --water_life.temp_show(getpos,5,5) + + end + + + if getpos then + + water_life.hq_idle(self,prty+2,5,anim) + water_life.hq_findpath(self,prty+1,getpos, 1.5,0.1,true) + return true + + + else + return true + + + end + + + end + mobkit.queue_high(self,func,prty) +end + + +function water_life.hq_snakerun(self,prty,tgtobj) + local init=true + local timer=6 + local func = function(self) + + if not mobkit.is_alive(tgtobj) then return true end + if self.isinliquid then return true end + + if init then + timer = timer-self.dtime + if timer <=0 or vector.distance(self.object:get_pos(),tgtobj:get_pos()) < 8 then + mobkit.make_sound(self,'scared') + init=false + end + return + end + + if mobkit.is_queue_empty_low(self) and self.isonground then + local pos = mobkit.get_stand_pos(self) + local opos = tgtobj:get_pos() + if vector.distance(pos,opos) < (self.view_range*3) then + --minetest.chat_send_all(dump(vector.distance(pos,opos)).." "..dump(self.view_range*3)) + local tpos = {x=2*pos.x - opos.x, + y=opos.y, + z=2*pos.z - opos.z} + water_life.goto_next_waypoint(self,tpos) + else + mobkit.clear_queue_low(self) + mobkit.clear_queue_high(self) + --water_life.hq_idle(self,10,random(60,120),"sleep") + water_life.hq_snake_move(self,15) + return true + end + end + end + mobkit.queue_high(self,func,prty) +end + + +function water_life.hq_runfrom(self,prty,tgtobj) + local init=true + local timer=6 + local func = function(self) + + if self.isinliquid then return true end + if not mobkit.is_alive(tgtobj) then return true end + --[[if init then + timer = timer-self.dtime + if timer <=0 or vector.distance(self.object:get_pos(),tgtobj:get_pos()) < 8 then + mobkit.make_sound(self,'scared') + init=false + end + return + end]] + + if mobkit.is_queue_empty_low(self) and self.isonground then + local pos = mobkit.get_stand_pos(self) + local opos = tgtobj:get_pos() + if vector.distance(pos,opos) < self.view_range*1.1 then + local tpos = {x=2*pos.x - opos.x, + y=opos.y, + z=2*pos.z - opos.z} + mobkit.goto_next_waypoint(self,tpos) + else + self.object:set_velocity({x=0,y=0,z=0}) + return true + end + end + end + mobkit.queue_high(self,func,prty) +end + + +-- dying +function water_life.hq_die(self,anim) + local timer = 5 + local start = true + local func = function(self) + if start then + + if not anim then + mobkit.lq_fallover(self) + else + mobkit.animate(self,anim) + end + self.logic = function(self) end -- brain dead as well + start=false + end + timer = timer-self.dtime + if timer < 0 then self.object:remove() end + end + mobkit.queue_high(self,func,100) +end diff --git a/my_changes/mobs/mobs_mobkit/water_life/files/crafts.lua b/my_changes/mobs/mobs_mobkit/water_life/files/crafts.lua new file mode 100644 index 0000000..5e5bf71 --- /dev/null +++ b/my_changes/mobs/mobs_mobkit/water_life/files/crafts.lua @@ -0,0 +1,558 @@ +local random = water_life.random + + + +if not water_life.petz and not water_life.mobsredo then +-- lasso + + minetest.register_tool("water_life:lasso", { + description = ("Lasso (right-click animal to capture it)"), + inventory_image = "water_life_lasso.png", + groups = {flammable = 2} + }) + + if minetest.get_modpath("farming") then + minetest.register_craft({ + output = "water_life:lasso", + recipe = { + {"farming:string", "", "farming:string"}, + {"", "default:diamond", ""}, + {"farming:string", "", "farming:string"} + } + }) + end + + +end + + +-- only one kind of meat if mobs_redo is present +if not water_life.mobsredo then + + -- raw meat + minetest.register_craftitem("water_life:meat_raw", { + description = ("Raw Meat"), + inventory_image = "water_life_meat_raw.png", + on_use = minetest.item_eat(3), + groups = {food_meat_raw = 1, flammable = 2} + }) + + -- cooked meat + minetest.register_craftitem("water_life:meat", { + description = ("Meat"), + inventory_image = "water_life_meat.png", + on_use = minetest.item_eat(8), + groups = {food_meat = 1, flammable = 2} + }) + + minetest.register_craft({ + type = "cooking", + output = "water_life:meat", + recipe = "water_life:meat_raw", + cooktime = 5 + }) + + minetest.register_alias("mobs:meat_raw","water_life:meat_raw") + minetest.register_alias("mobs:meat","water_life:meat") + +else + minetest.register_alias("water_life:meat_raw","mobs:meat_raw") + minetest.register_alias("water_life:meat","mobs:meat") + +end + +-- revive corals if a living one is around +minetest.register_abm({ + nodenames = {"default:coral_skeleton","water_life:artificial_skeleton"}, + neighbors = {"default:water_source"}, + interval = 30, --30 + chance = 5, --10 + catch_up = false, + action = function(pos, node) + local table = minetest.find_nodes_in_area({x=pos.x-2, y=pos.y-2, z=pos.z-2}, {x=pos.x+2, y=pos.y+2, z=pos.z+2}, water_life.urchinspawn) + local nname = "default:coral_skeleton" + if table and #table > 0 then nname = minetest.get_node(table[water_life.random(#table)]).name end + minetest.set_node(pos, {name = nname}) + end, +}) + + +minetest.register_node("water_life:artificial_skeleton", { + description = "artificial coral skeleton", + tiles = {"default_coral_skeleton.png"}, + groups = {cracky = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_craft({ + + output = "water_life:artificial_skeleton 4", + type = "shapeless", + recipe = {"default:silver_sandstone","default:silver_sandstone","default:silver_sandstone","default:coral_skeleton"} + }) + + +-- moskito repellant + if water_life.farming and farming.mod == "redo" then + minetest.register_craft({ + output = "water_life:repellant", + recipe = { + {"", "farming:mint_leaf", "farming:bottle_ethanol"}, + {"farming:garlic", "farming:chili_pepper", "farming:onion"}, + {"", "farming:mortar_pestle", ""}}, + replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}} + }) + else + minetest.register_craft({ + output = "water_life:repellant", + recipe = { + {"", "farming:cotton", ""}, + {"flowers:tulip_black", "flowers:mushroom_red", "flowers:geranium"}, + {"", "vessels:glass_bottle", ""}} + }) + end + +if not water_life.apionly then + + minetest.register_craftitem("water_life:riverfish", { + description = ("Riverfish"), + inventory_image = "water_life_riverfish_item.png", + wield_scale = {x = 0.5, y = 0.5, z = 0.5}, + stack_max = 10, + liquids_pointable = false, + range = 10, + on_use = minetest.item_eat(3), + groups = {food_meat = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + if placer and not placer:is_player() then return itemstack end + if not pointed_thing then return itemstack end + if not pointed_thing.type == "node" then return itemstack end + + local pos = pointed_thing.above + local number = water_life.count_objects(pos) + if number.all > water_life.maxmobs or number.fish > 10 then return itemstack end + + local name = placer:get_player_name() + if minetest.is_protected(pos,name) then return itemstack end + + local obj = minetest.add_entity(pos, "water_life:fish_tamed") + obj = obj:get_luaentity() + itemstack:take_item() + obj.owner = name + return itemstack + end, + }) + + minetest.register_craftitem("water_life:piranha", { + description = ("Piranha"), + inventory_image = "water_life_piranha_item.png", + wield_scale = {x = 0.5, y = 0.5, z = 0.5}, + stack_max = 10, + liquids_pointable = false, + range = 10, + on_use = minetest.item_eat(5), + groups = {food_meat = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + if placer and not placer:is_player() then return itemstack end + if not pointed_thing then return itemstack end + if not pointed_thing.type == "node" then return itemstack end + + local pos = pointed_thing.above + local number = water_life.count_objects(pos,nil,"water_life:piranha") + if number.all > water_life.maxmobs or number.name > 10 then return itemstack end + + local name = placer:get_player_name() + if minetest.is_protected(pos,name) then return itemstack end + + local obj = minetest.add_entity(pos, "water_life:piranha_tamed") + obj = obj:get_luaentity() + itemstack:take_item() + --obj.owner = name + return itemstack + end, + }) + + minetest.register_craftitem("water_life:coralfish", { + description = ("Coralfish"), + inventory_image = "water_life_coralfish_item.png", + wield_scale = {x = 0.5, y = 0.5, z = 0.5}, + stack_max = 10, + liquids_pointable = false, + range = 10, + on_use = minetest.item_eat(1), + groups = {food_meat = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + if placer and not placer:is_player() then return itemstack end + if not pointed_thing then return itemstack end + if not pointed_thing.type == "node" then return itemstack end + + local pos = pointed_thing.above + local number = water_life.count_objects(pos,nil,"water_life:coralfish_tamed") + if number.all > water_life.maxmobs or number.name > 10 then return itemstack end + + local name = placer:get_player_name() + if minetest.is_protected(pos,name) then return itemstack end + + local obj = minetest.add_entity(pos, "water_life:coralfish_tamed") + if obj then + local entity = obj:get_luaentity() + entity.base = nil + entity.owner = name + entity.head = random(65535) + end + itemstack:take_item() + + return itemstack + end, + }) + + minetest.register_craftitem("water_life:clownfish", { + description = ("Clownfish"), + inventory_image = "water_life_clownfish_item.png", + wield_scale = {x = 0.5, y = 0.5, z = 0.5}, + stack_max = 10, + liquids_pointable = false, + range = 10, + on_use = minetest.item_eat(1), + groups = {food_meat = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + if placer and not placer:is_player() then return itemstack end + if not pointed_thing then return itemstack end + if not pointed_thing.type == "node" then return itemstack end + + local pos = pointed_thing.above + local number = water_life.count_objects(pos,nil,"water_life:clownfish_tamed") + if number.all > water_life.maxmobs or number.name > 10 then return itemstack end + + local name = placer:get_player_name() + if minetest.is_protected(pos,name) then return itemstack end + + local obj = minetest.add_entity(pos, "water_life:clownfish_tamed") + obj = obj:get_luaentity() + itemstack:take_item() + obj.owner = name + return itemstack + end, + }) + + minetest.register_craftitem("water_life:urchin_item", { + description = ("Sea urchin"), + inventory_image = "water_life_urchin_item.png", + wield_scale = {x = 0.4, y = 0.4, z = 0.4}, + stack_max = 10, + liquids_pointable = false, + range = 10, + on_use = minetest.item_eat(2), + groups = {food_meat = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + if placer and not placer:is_player() then return itemstack end + if not pointed_thing then return itemstack end + if not pointed_thing.type == "node" then return itemstack end + + local pos = pointed_thing.above + local number = water_life.count_objects(pos,10,"water_life:urchin") + if number.all > water_life.maxmobs or number.name > 10 then return itemstack end + + local name = placer:get_player_name() + if minetest.is_protected(pos,name) then return itemstack end + + local obj = water_life.set_urchin(pos) + obj = obj:get_luaentity() + itemstack:take_item() + --obj.owner = name + return itemstack + end, + }) + + + + + minetest.register_craftitem("water_life:jellyfish_item", { + description = ("Jellyfish"), + inventory_image = "water_life_jellyfish_item.png", + wield_scale = {x = 0.4, y = 0.4, z = 0.4}, + stack_max = 10, + liquids_pointable = false, + range = 10, + on_use = minetest.item_eat(1), + groups = {food_meat = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + if placer and not placer:is_player() then return itemstack end + if not pointed_thing then return itemstack end + if not pointed_thing.type == "node" then return itemstack end + + local pos = pointed_thing.above + local number = water_life.count_objects(pos,10,"water_life:jellyfish") + if number.all > water_life.maxmobs or number.name > 10 then return itemstack end + + local name = placer:get_player_name() + if minetest.is_protected(pos,name) then return itemstack end + + local obj = minetest.add_entity(pos, "water_life:jellyfish") + + if obj then itemstack:take_item() end + + return itemstack + end, + }) + + + + + minetest.register_craftitem("water_life:snake_item", { + description = ("Rattlesnake"), + inventory_image = "water_life_snake_item.png", + wield_scale = {x = 0.4, y = 0.4, z = 0.4}, + stack_max = 10, + liquids_pointable = false, + range = 10, + on_use = minetest.item_eat(5), + groups = {food_meat = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + if placer and not placer:is_player() then return itemstack end + if not pointed_thing then return itemstack end + if not pointed_thing.type == "node" then return itemstack end + + local pos = pointed_thing.above + local number = water_life.count_objects(pos,water_life.abr * 16,"water_life:snake") + if number.all > water_life.maxmobs or number.name > 5 then return itemstack end + + local name = placer:get_player_name() + if minetest.is_protected(pos,name) then return itemstack end + + local obj = minetest.add_entity(pos, "water_life:snake") + + if obj then itemstack:take_item() end + + return itemstack + end, + }) + + minetest.register_craftitem("water_life:antiserum", { + description = ("Antiserum, cures snake bites"), + inventory_image = "water_life_antiserum.png", + wield_scale = {x = 0.4, y = 0.4, z = 0.4}, + liquids_pointable = false, + on_use = function(itemstack, user, pointed_thing) + if not user or not user:is_player() then return itemstack end + + local name = user:get_player_name() + local meta = user:get_meta() + local score = user:get_hp() + + if meta:get_int("snakepoison") > 0 then meta:set_int("snakepoison",0) hunger_ng.set_effect(user:get_player_name(), "heal", "enabled") end + user:set_hp(score+10) + itemstack:take_item() + water_life.change_hud(user,"poison",0) + return itemstack + end, + + groups = {vessel = 1}, + }) + + + minetest.register_craftitem("water_life:repellant", { + description = ("No moskitos for half a day"), + inventory_image = "water_life_repell.png", + wield_scale = {x = 0.4, y = 0.4, z = 0.4}, + liquids_pointable = false, + on_use = function(itemstack, user, pointed_thing) + if not user or not user:is_player() then return itemstack end + + local name = user:get_player_name() + local meta = user:get_meta() + + meta:set_int("repellant",math.floor(os.time())) + itemstack:take_item() + + water_life.change_hud(user,"repellant") + return itemstack + end, + + groups = {vessel = 1}, + }) + + minetest.register_craft({ + type = "shapeless", + output = "water_life:antiserum", + recipe = {"water_life:snake_item","water_life:snake_item","water_life:snake_item"}, + }) + + minetest.register_craftitem("water_life:beaver_fur", { + description = ("Beaver fur"), + inventory_image = "water_life_beaverfur.png", + groups = {flammable = 2, fur = 1} + }) +end + + +--muddy water + +if water_life.muddy_water then + + minetest.register_node("water_life:muddy_river_water_source", { + description = "Muddy river water source", + drawtype = "liquid", + waving = 3, + tiles = { + { + name="water_life_muddy_river_water_flowing.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 2.0, + }, + }, + }, + special_tiles = { + { + name="water_life_muddy_river_water_flowing.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 2.0, + }, + backface_culling = false, + }, + }, + alpha = 224, + paramtype = "light", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = "", + drowning = 1, + liquidtype = "source", + liquid_alternative_flowing = "water_life:muddy_river_water_flowing", + liquid_alternative_source = "water_life:muddy_river_water_source", + liquid_viscosity = 1, + liquid_renewable = true, + liquid_range = 3, + post_effect_color = {a = 232, r = 92, g = 80, b = 48}, + groups = {water = 3, liquid = 3, puts_out_fire = 1}, + }) + + minetest.register_node("water_life:muddy_river_water_flowing", { + description = "Flowing muddy river water", + drawtype = "flowingliquid", + waving = 3, + tiles = {"water_life_muddy_river_water_source.png"}, + special_tiles = { + { + image="water_life_muddy_river_water_flowing.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 0.8, + }, + }, + { + image="water_life_muddy_river_water_flowing.png", + backface_culling = true, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 0.8, + }, + }, + }, + alpha = 224, + paramtype = "light", + paramtype2 = "flowingliquid", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = "", + drowning = 1, + liquidtype = "flowing", + liquid_alternative_flowing = "water_life:muddy_river_water_flowing", + liquid_alternative_source = "water_life:muddy_river_water_source", + liquid_viscosity = 1, + liquid_renewable = true, + liquid_range = 3, + post_effect_color = {a = 232, r = 92, g = 80, b = 48}, + groups = {water = 3, liquid = 3, puts_out_fire = 1, + not_in_creative_inventory = 1}, + }) + + if minetest.get_modpath("bucket") then + bucket.register_liquid( + "water_life:muddy_river_water_source", + "water_life:muddy_river_water_flowing", + "water_life:bucket_muddy_river_water", + "water_life_bucket_muddy_water.png", + "Muddy Water Bucket", + {water_bucket = 1} + ) + end +end + + + +-- make corals to dye +if minetest.get_modpath("dye") then + + minetest.register_craft({ + type = "shapeless", + output = "dye:green", + recipe = {"default:coral_green"}, + }) + + minetest.register_craft({ + type = "shapeless", + output = "dye:cyan", + recipe = {"default:coral_cyan"}, + }) + + minetest.register_craft({ + type = "shapeless", + output = "dye:pink", + recipe = {"default:coral_pink"}, + }) + + minetest.register_craft({ + type = "shapeless", + output = "dye:magenta", + recipe = {"water_life:coralmagenta"}, + }) + + minetest.register_craft({ + type = "shapeless", + output = "dye:blue", + recipe = {"water_life:coralskyblue"}, + }) + end + +if minetest.get_modpath("unified_inventory") then + minetest.register_craft({ + output = "water_life:croc_bag", + recipe = { + {"farming:string", "water_life:crocleather", "farming:string"}, + {"water_life:crocleather", "water_life:crocleather", "water_life:crocleather"}, + {"farming:string", "water_life:crocleather", "farming:string"} + } + }) + + minetest.register_tool("water_life:croc_bag", { + description = ("CrocBag"), + inventory_image = "water_life_crocbag.png", + groups = {bagslots=24}, + }) +end + +minetest.register_craftitem("water_life:crocleather", { + description = ("Crockleather"), + inventory_image = "water_life_crocleather.png", + wield_scale = {x = 0.5, y = 0.5, z = 0.5}, + liquids_pointable = false, + groups = {leather = 1, flammable = 2}, + }) diff --git a/my_changes/mobs/mobs_mobkit/water_life/files/hud.lua b/my_changes/mobs/mobs_mobkit/water_life/files/hud.lua new file mode 100644 index 0000000..1b205ba --- /dev/null +++ b/my_changes/mobs/mobs_mobkit/water_life/files/hud.lua @@ -0,0 +1,82 @@ + +water_life.playerhud = {} +water_life.playerhud.poison = {} +water_life.playerhud.repellant = {} + + + +water_life.hud_poison = { + + hud_elem_type = "image", + + position = {x=0.5, y=0.8}, + -- Left corner position of element + + name = "water_life_poison", + + scale = {x = 0.1, y = 0.1}, + + text = "water_life_emptyhud.png", + + +} + + + +water_life.hud_repellant = { + hud_elem_type = "image", + + position = {x=0.55, y=0.8}, + -- Left corner position of element + + name = "water_life_repellant", + + scale = {x = 0.1, y = 0.1}, + + text = "water_life_emptyhud.png", +} + + +function water_life.change_hud(player,selection,switch) + local value = "" + if not player then return end + if not selection then selection = "poison" end + if not switch then switch = 1 end + + + local name = player:get_player_name() + + if selection == "poison" then + if switch == 1 then value = "water_life_poison.png" else value = "water_life_emptyhud.png" end + player:hud_change(water_life.playerhud.poison[name], "text", value) + end + + if selection == "repellant" then + if switch == 1 then value = "water_life_repellanthud.png" else value = "water_life_emptyhud.png" end + player:hud_change(water_life.playerhud.repellant[name], "text", value) + end + +end + + + +minetest.register_on_joinplayer(function(player) + if not player then return end + + local meta=player:get_meta() + meta:set_int("repellant",0) + local name = player:get_player_name() + + water_life.playerhud.poison[name] = player:hud_add(water_life.hud_poison) + water_life.playerhud.repellant[name] = player:hud_add(water_life.hud_repellant) + + if meta:get_int("snakepoison") > 0 then + hunger_ng.set_effect(player:get_player_name(), "heal", "disabled") + minetest.after(5, function(player) + water_life.change_hud(player,"poison") + end, player) + end + +end) + + diff --git a/mods/mobs/mobs_mobkit/water_life/init.lua.orig b/my_changes/mobs/mobs_mobkit/water_life/files/init.lua similarity index 99% rename from mods/mobs/mobs_mobkit/water_life/init.lua.orig rename to my_changes/mobs/mobs_mobkit/water_life/files/init.lua index 2dc625e..8b5a455 100644 --- a/mods/mobs/mobs_mobkit/water_life/init.lua.orig +++ b/my_changes/mobs/mobs_mobkit/water_life/files/init.lua @@ -6,7 +6,7 @@ ----------------------------------------------------------- water_life = {} -water_life.version = "210207" +water_life.version = "020201" water_life.shark_food = {} water_life.repellant = {} water_life.gull_bait = {} @@ -43,9 +43,7 @@ water_life.bloody = minetest.settings:get_bool("water_life_bloody") or true local path = minetest.get_modpath(minetest.get_current_modname()) - dofile(path.."/api.lua") -- load water_life api -dofile(path.."/compat.lua") dofile(path.."/paths.lua") -- load pathfinding if water_life.muddy_water then dofile(path.."/mapgen.lua") end -- load muddy_water dofile(path.."/crafts.lua") -- load crafts diff --git a/my_changes/mobs/mobs_mobkit/water_life/files/settingtypes.txt b/my_changes/mobs/mobs_mobkit/water_life/files/settingtypes.txt new file mode 100644 index 0000000..a28a034 --- /dev/null +++ b/my_changes/mobs/mobs_mobkit/water_life/files/settingtypes.txt @@ -0,0 +1,81 @@ + +# +# Turn this Value to true, if you want poison to persist after death +water_life_poison_after_death (Poison stays after death) bool false + +# all settings for client menu or in minetest.conf on servers + +# - +# I am a baby, please turn off the dangerous wild animals +water_life_dangerous (turn off agressive animals) bool false + +# - +# Sound volume adjustment +# 0.9 means 90% of original sound volume +# 1.1 means 110% of original sound volume +# every step of 0.1 adds/reduces 10% +water_life_soundadjust (volume adjustment) float 1.0 + +# - +# controls spawn chance of whales 10 promille = 1 % +water_life_whale_spawn_rate (Whales spawn chance in promille) int 100 + +# - +# controls spawn chance of sharks 10 promille = 1 % +water_life_shark_spawn_rate (Shark spawn chance in promille) int 100 + +# - +# controls spawn chance of Riverfish 10 promille = 1 % +water_life_fish_spawn_rate (Riverfish spawn chance in promille) int 1000 + +# - +# controls spawn chance of sea urchins 10 promille = 1 % +water_life_urchin_spawn_rate (Sea urchin spawn chance in promille) int 300 + +#- +# controls spawn chance of clams 10 promille = 1 % +water_life_clams_spawn_rate (Clams spawn chance in promille) int 500 + +# - +# total max number of whales spawning in aktive area +water_life_maxwhales (Max possible whales in aktive area) int 1 + +# - +# total max number of sharks spawning in aktive area +water_life_maxsharks (Max possible sharks in aktive area) int 5 + +# - +# max lifetime of a moskito (default 120 = 2 minutes) +water_life_moskitolifetime (Max lifetime of a moskito in seconds) int 120 + + +# - +# total max number of animals in an aktive area +# other mods might not care about this setting +water_life_maxmobs (Max possible animals in aktive area) int 60 + +# - +# turn this to true if you only need the api but do +# not want to have the animals +water_life_apionly (no animals please, I just need the api) bool false + +# - +#replace riverwater with muddywater +#in rainforest and savanna biome +water_life_muddy_water (muddy water in rainforest and savanna biome) bool false + +#- +# turn this value to true to see api function debug +water_life_radar_debug (api function debug shown in chat) bool false + +#- +#number in days where new players are not affected by rattlesnake poison +water_life_newplayerbonus (days for newplayer immune to rattlesnake) int 5 + +#- +#I really hate insects, kill 'em all +water_life_hate_insects (no spawning of insects if true) bool false + +#- +#Let me see all that blood - blood effect on +water_life_bloody (blood effect on) bool true diff --git a/my_changes/mobs/mobs_mobkit/water_life/files/spawn.lua b/my_changes/mobs/mobs_mobkit/water_life/files/spawn.lua new file mode 100644 index 0000000..bb46d6e --- /dev/null +++ b/my_changes/mobs/mobs_mobkit/water_life/files/spawn.lua @@ -0,0 +1,442 @@ +local timer = 0 +local landtimer = 0 +local dttot=0 +local dtavg=0 +local dtnum=0 +local dtmax=0 +local dttimer = 10 +local pi = math.pi +local random = water_life.random +local landinterval = 120 -- check every 60 seconds for spawnpos on land +local waterinterval = 40 -- check every 20 seconds for spawnpos in water + + +local function getcount(name) + if not name then + return 0 + else + return name + end +end + + +local function spawnstep(dtime) + + -- dtime measurement by Termos + if dtnum < 10001 then + dttot=dttot+dtime + dtnum=dtnum+1 + dtmax = dtime>dtmax and dtime or dtmax + + if dttot>dttimer then + dttimer=dttimer+10 + water_life.avg_dtime = dttot/dtnum + water_life.max_dtime = dtmax + dtmax=0 + end + else -- reset after 10000 steps + dtnum = 0 + dtavg = 0 + dttot = 0 + dtmax = 0 + dttimer = 10 + end + -- end dtime measurement + + timer = timer + dtime + landtimer = landtimer + dtime + + if timer > waterinterval then + + + for _,plyr in ipairs(minetest.get_connected_players()) do + + local toomuch = false + + if plyr and plyr:is_player() then + local meta = plyr:get_meta() + + if meta:get_int("snakepoison") > 0 then + local score = plyr:get_hp() + hunger_ng.set_effect(plyr:get_player_name(), "heal", "disabled") + plyr:set_hp(score-1) + end + + if meta:get_int("repellant") > 0 then + if math.floor(os.time()) - meta:get_int("repellant") > water_life.repeltime then + water_life.change_hud(plyr,"repellant",0) + meta:set_int("repellant",0) + end + end + end + + if plyr and plyr:is_player() and plyr:get_pos().y > -50 and plyr:get_pos().y < 150 and not water_life.apionly then -- each player gets a spawn chance every 10s on average + + local pos = plyr:get_pos() + local yaw = plyr:get_look_horizontal() + local animal = water_life.count_objects(pos) + local meta = plyr:get_meta() + + if animal.all > water_life.maxmobs then toomuch = true end + + -- find a pos randomly in look direction of player + local radius = (water_life.abr * 12) -- 75% from 16 = 12 nodes + radius = random(7,radius) -- not nearer than 7 nodes in front of player + local angel = math.rad(random(75)) -- look for random angel 0 - 75 degrees + if water_life.leftorright() then yaw = yaw + angel else yaw = yaw - angel end -- add or substract to/from yaw + + local pos2 = mobkit.pos_translate2d(pos,yaw,radius) -- calculate position + local depth, stype, surface = water_life.water_depth(pos2,25) -- get surface pos and water depth + local bdata = water_life_get_biome_data(pos2) -- get biome data at spawn position + local ground = {} + local dalam = depth + local landpos = nil + local geckopos = nil + local moskitopos = nil + local mobname = "" + + -- no need of so many postions on land + if landtimer > landinterval then + landpos = water_life.find_node_under_air(pos2) + geckopos = water_life.find_node_under_air(pos2,5,{"group:tree","group:leaves","default:junglegrass"}) + if not water_life.ihateinsects then + moskitopos = water_life.find_node_under_air(pos2,5,{"group:water","group:flora","group:crumbly"}) + end + end + + + if moskitopos and not water_life.dangerous and moskitopos.y > -10 and moskitopos.y < 100 then + local mlevel = minetest.get_node_light(moskitopos) + local ptime = water_life.get_game_time() + local mdata = water_life_get_biome_data(moskitopos) + --minetest.chat_send_all("MOSKITO: "..dump(moskitopos).." : "..dump(mdata.temp).." : "..dump(ptime).." : "..dump(mlevel)) + --minetest.chat_send_all(">>> Bzzzz ... SPAWN") + if ((ptime and ptime > 2) or mlevel < 8) and mdata.temp > 20 then --from 3pm to 5am or in shadows all day long + + minetest.set_node(moskitopos, {name = "water_life:moskito"}) + minetest.get_node_timer(moskitopos):start(random(15,45)) + local pmeta = minetest.get_meta(moskitopos) + pmeta:set_int("mlife",math.floor(os.time())) + + end + end + + --some spawn on land, too + + if landpos then + local landdata = water_life_get_biome_data(landpos) + + + if not water_life.dangerous then + -- the snake + mobname = 'water_life:snake' + local faktor = (100 - getcount(animal[mobname]) * 50) + if random(100) < faktor then + local fits = minetest.is_protected(landpos,mobname) + --minetest.chat_send_all(dump(fits)) + + if (string.match(landdata.name,"desert") or string.match(landdata.name,"savanna")) + and not fits and landdata.temp > 15 then + + local obj=minetest.add_entity(landpos,mobname) -- ok spawn it already damnit + end + end + + + end + + + --the beaver + mobname = 'water_life:beaver' + local faktor = (100 - getcount(animal[mobname]) * 25) + if random(100) < faktor then + + if string.match(landdata.name,"coniferous") and landdata.temp > -5 and landdata.temp < 20 then + + local obj=minetest.add_entity(landpos,mobname) -- ok spawn it already damnit + end + end + end + + + if geckopos then + local landdata = water_life_get_biome_data(geckopos) + + mobname = 'water_life:gecko' + local faktor = (100 - getcount(animal[mobname]) * 50) + if random(100) < faktor then + + + if (string.match(landdata.name,"rainforest") or string.match(landdata.name,"savanna")) + and landdata.temp > 20 then + + local obj=minetest.add_entity(geckopos,mobname) -- ok spawn it already damnit + end + end + end + + + + --water spawn + + if depth and depth > 0 then + if water_life.radar_debug then + water_life.temp_show(surface,9,5) + minetest.chat_send_all(">>> Depth ="..dump(depth).." <<< "..dump(stype)) + minetest.chat_send_all(dump(bdata.name)) + end + pos2 = surface + + end + + local liquidflag = nil + + if stype == "default:water_source" then + liquidflag = "sea" + + elseif stype == "default:river_water_source" then + liquidflag = "river" + + elseif stype == "water_life:muddy_river_water_source" then + liquidflag = "muddy" + + elseif water_life.swampz and stype == "swaz:water_source" then + liquidflag = "swamp" + + end + + if liquidflag and not toomuch and surface then + ground = mobkit.pos_shift(surface,{y=(dalam*-1)}) + local pool = water_life.check_for_pool(nil,4,8,surface) + + if water_life.radar_debug then + minetest.chat_send_all(">> A pool: "..dump(pool).." <<") + end + + if not water_life.dangerous then + + + if water_life.swampz then + + mobname = 'water_life:alligator' + local faktor = 100 - getcount(animal[mobname]) * 20 + if random(100) < faktor then + local fits = false + if string.match(bdata.name,"swampz") and liquidflag == "swamp" then fits = true end + + if depth < 4 and fits then --gator min water depth + local obj=minetest.add_entity(surface,mobname) -- ok spawn it already damnit + + end + + + end + end + + + --minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground))) + mobname = 'water_life:croc' + local faktor = 100 - getcount(animal[mobname]) * 33 + if random(100) < faktor then + local fits = false + if string.match(bdata.name,"rainforest") or string.match(bdata.name,"savanna") then fits = true end + + if depth < 4 and fits and pool == false then --croc min water depth and no pools - do not check for nil + local obj=minetest.add_entity(surface,mobname) -- ok spawn it already damnit + end + + + end + --minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground))) + + + mobname = 'water_life:snake' + local faktor = (100 - getcount(animal[mobname]) * 50) +25 + if random(100) < faktor then + local fits = false + if string.match(bdata.name,"desert") or string.match(bdata.name,"savanna") then fits = true end + + if depth < 3 and fits then --snake max water depth + local obj=minetest.add_entity(surface,mobname) -- ok spawn it already damnit + end + + + end + --minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground))) + + mobname = 'water_life:shark' + if water_life.shark_spawn_rate >= random(1000) then + + local bcheck = water_life.count_objects(pos2,12) + if getcount(animal[mobname]) < water_life.maxsharks and liquidflag == "sea" and not bcheck["water_life:shark_buoy"] + and not animal["water_life:croc"] then + + if depth > 4 and pool == false then --shark min water depth + local obj=minetest.add_entity(mobkit.pos_shift(ground,{y=2}),mobname) -- spawn it 2 nodes above sea ground + end + end + + end + end + + mobname = "water_life:gull" + local faktor = 100 - getcount(animal[mobname]) * 20 + if random(100) < faktor and (liquidflag == "sea" or liquidflag == "river") then + if depth > 2 and not water_life.check_for_pool(nil,2,10,surface)then + --local spawn = mobkit.pos_shift(surface,{y=-1}) + --spawn.y = spawn.y + 12 + local obj=minetest.add_entity(surface,mobname) -- ok spawn it already damnit + end + end + + + --minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground))) + mobname = "water_life:urchin" + if water_life.urchin_spawn_rate >= random(1000) then + + local upos1 = mobkit.pos_shift(ground,{x=-5,y=-2,z=-5}) + local upos2 = mobkit.pos_shift(ground,{x=5,y=2,z=5}) + local coraltable = minetest.find_nodes_in_area(upos1, upos2, water_life.urchinspawn) + --local nearlife = water_life.count_objects(ground,5,"water_life:urchin") + if coraltable and #coraltable > 0 and getcount(animal[mobname]) < 15 and liquidflag == "sea" then + local coralpos = coraltable[random(#coraltable)] + coralpos.y = coralpos.y +1 + local node = minetest.get_node(coralpos) + + if node.name == "default:water_source" then + local obj= water_life.set_urchin(coralpos) --minetest.add_entity(coralpos,mobname) + end + end + end + + + --minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground))) + mobname = "water_life:clams" + if water_life.clams_spawn_rate >= random(1000) then + local clpos1 = mobkit.pos_shift(ground,{x=-8, y=-2, z=8}) + local clpos2 = mobkit.pos_shift(ground,{x=8, y=2, z=8}) + local coraltable = minetest.find_nodes_in_area(clpos1, clpos2, water_life.clams_spawn) + ----minetest.chat_send_all("seagrass ="..dump(#coraltable)) + local nearlife = water_life.count_objects(ground,8,"water_life:clams") + if coraltable and #coraltable > 0 and getcount(animal[mobname]) < 10 and liquidflag == "sea" then + local coralpos = mobkit.pos_shift(coraltable[random(#coraltable)],{y=1}) + + local node = minetest.get_node(coralpos) + if node.name == "default:water_source" then + local obj= water_life.set_urchin(coralpos,"water_life:clams") + end + end + end + + + --minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground))) + mobname = "water_life:jellyfish" + + + local faktor = 100 - getcount(animal[mobname]) * 20 + if random(100) < faktor and liquidflag == "sea" and depth > 2 then + local obj=minetest.add_entity(mobkit.pos_shift(ground,{y=2}),mobname) + end + + + mobname = "water_life:coralfish" + + --minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground))) + + local cfpos1 = mobkit.pos_shift(ground,{x=-5,y=-2,z=-5}) + local cfpos2 = mobkit.pos_shift(ground,{x=5,y=2,z=5}) + local coraltable = minetest.find_nodes_in_area(cfpos1,cfpos2,water_life.urchinspawn) + --local nearlife = water_life.count_objects(ground,nil,mobname) + faktor = 100 - getcount(animal[mobname]) * 6.66 + if random(100) < faktor and liquidflag == "sea" and #coraltable > 1 then + local cfish = coraltable[random(#coraltable)] + cfish.y = cfish.y +1 + local maxfish = random(3,7) + for i = 1,maxfish,1 do + local obj=minetest.add_entity(cfish,mobname) + if obj then + local entity = obj:get_luaentity() + entity.base = cfish + entity.head = random(65535) + end + end + end + + + --minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground))) + mobname = "water_life:clownfish" + + faktor = 100 - getcount(animal[mobname]) * 50 + if random(100) < faktor and liquidflag == "sea" and #coraltable > 1 then + local cfish = coraltable[random(#coraltable)] + cfish.y = cfish.y +1 + local obj=minetest.add_entity(cfish,mobname) + if obj then + local entity = obj:get_luaentity() + entity.base = cfish + end + end + + --minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground))) + mobname = 'water_life:fish' + --local nearlife = water_life.count_objects(pos2,24,"water_life:piranha") + if water_life.fish_spawn_rate >= random(1000) and ((animal.all < (water_life.maxmobs-5)) or getcount(animal[mobname]) < 5) and (liquidflag == "river" or liquidflag == "muddy") then + + local table = minetest.get_biome_data(pos) + + if not water_life.dangerous and table and water_life.piranha_biomes[minetest.get_biome_name(table.biome)] then + mobname = "water_life:piranha" + end + + if depth > 2 then -- min water depth for piranha and riverfish + if mobname == "water_life:fish" then + local obj=minetest.add_entity(pos2,mobname) -- ok spawn it already damnit + else + if getcount(animal[mobname]) < 10 then + for i = 1,3,1 do + local obj=minetest.add_entity(pos2,mobname) -- ok spawn it already damnit + end + end + end + end + + + end + + --minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground))) + + mobname = 'water_life:whale' + if water_life.whale_spawn_rate >= random(1000) and getcount(animal[mobname]) < (water_life.maxwhales) and liquidflag == "sea" then + + + if depth > 8 then -- min water depth for whales + + local gotwhale = true + local whpos = mobkit.pos_shift(surface,{y=-3}) + for i = 0,3,1 do + local whpos2 = mobkit.pos_translate2d(whpos,math.rad(i*90),30) + local under = water_life.find_collision(whpos,whpos2, false) + ----minetest.chat_send_all(dump(under)) + if under and under < 25 then + gotwhale = false + break + end + end + if gotwhale then local obj=minetest.add_entity(surface,mobname) end -- ok spawn it already damnit + + end + end + + end + end + end + timer = 0 + if landtimer > landinterval then landtimer = 0 end + end + +end + + + +minetest.register_globalstep(spawnstep) + diff --git a/my_changes/mobs/mobs_mobkit/water_life/poison.patch b/my_changes/mobs/mobs_mobkit/water_life/poison.patch new file mode 100644 index 0000000..ff7ae48 --- /dev/null +++ b/my_changes/mobs/mobs_mobkit/water_life/poison.patch @@ -0,0 +1,41 @@ +diff --git a/apa_patch.lua b/apa_patch.lua +new file mode 100644 +index 0000000..d14688d +--- /dev/null ++++ b/apa_patch.lua +@@ -0,0 +1,11 @@ ++ ++water_life.poison_after_death = minetest.settings:get_bool("water_life_poison_after_death") or false ++ ++minetest.register_on_dieplayer(function(player) ++ if not player then return end ++ if water_life.poison_after_death then return end ++ ++ local meta=player:get_meta() ++ meta:set_int("snakepoison",0) ++ water_life.change_hud(player,"poison",0) ++end) +\ No newline at end of file +diff --git a/init.lua b/init.lua +index 22c16c9..8b5a455 100644 +--- a/init.lua ++++ b/init.lua +@@ -187,3 +187,5 @@ if minetest.get_modpath("farming") then + end + + ++-- Patch for a planet alive ++dofile(path.."/apa_patch.lua") +diff --git a/settingtypes.txt b/settingtypes.txt +index 3864685..a28a034 100644 +--- a/settingtypes.txt ++++ b/settingtypes.txt +@@ -1,3 +1,8 @@ ++ ++# ++# Turn this Value to true, if you want poison to persist after death ++water_life_poison_after_death (Poison stays after death) bool false ++ + # all settings for client menu or in minetest.conf on servers + + # - diff --git a/my_changes/mobs/mobs_mobkit/water_life/poison_hunger_ng.patch b/my_changes/mobs/mobs_mobkit/water_life/poison_hunger_ng.patch new file mode 100644 index 0000000..4a82fcc --- /dev/null +++ b/my_changes/mobs/mobs_mobkit/water_life/poison_hunger_ng.patch @@ -0,0 +1,62 @@ +diff --git a/api.lua b/api.lua +index c390549..78e30f0 100644 +--- a/api.lua ++++ b/api.lua +@@ -875,7 +875,7 @@ minetest.register_on_item_eat(function(hp_change, replace_with_item, itemstack, + local meta = user:get_meta() + local score = user:get_hp() + +- if meta:get_int("snakepoison") > 0 then meta:set_int("snakepoison",0) end ++ if meta:get_int("snakepoison") > 0 then meta:set_int("snakepoison",0) hunger_ng.set_effect(user:get_player_name(), "heal", "enabled") end + water_life.change_hud(user,"poison",0) + end + +diff --git a/behaviors.lua b/behaviors.lua +index 654fc5f..61935b6 100644 +--- a/behaviors.lua ++++ b/behaviors.lua +@@ -297,6 +297,7 @@ function water_life.lq_jumpattack(self,height,target,extra) + local name = target:get_player_name() + local join = meta:get_int("jointime") + if not join or (os.time() - join) > water_life.newplayerbonus * 86400 then ++ hunger_ng.set_effect(target:get_player_name(), "heal", "disabled") + meta:set_int("snakepoison",1) + water_life.change_hud(target,"poison") + else +diff --git a/crafts.lua b/crafts.lua +index 84703e4..5e5bf71 100644 +--- a/crafts.lua ++++ b/crafts.lua +@@ -340,7 +340,7 @@ if not water_life.apionly then + local meta = user:get_meta() + local score = user:get_hp() + +- if meta:get_int("snakepoison") > 0 then meta:set_int("snakepoison",0) end ++ if meta:get_int("snakepoison") > 0 then meta:set_int("snakepoison",0) hunger_ng.set_effect(user:get_player_name(), "heal", "enabled") end + user:set_hp(score+10) + itemstack:take_item() + water_life.change_hud(user,"poison",0) +diff --git a/hud.lua b/hud.lua +index bff0dd4..1b205ba 100644 +--- a/hud.lua ++++ b/hud.lua +@@ -71,6 +71,7 @@ minetest.register_on_joinplayer(function(player) + water_life.playerhud.repellant[name] = player:hud_add(water_life.hud_repellant) + + if meta:get_int("snakepoison") > 0 then ++ hunger_ng.set_effect(player:get_player_name(), "heal", "disabled") + minetest.after(5, function(player) + water_life.change_hud(player,"poison") + end, player) +diff --git a/spawn.lua b/spawn.lua +index 00b5afc..bb46d6e 100644 +--- a/spawn.lua ++++ b/spawn.lua +@@ -58,6 +58,7 @@ local function spawnstep(dtime) + + if meta:get_int("snakepoison") > 0 then + local score = plyr:get_hp() ++ hunger_ng.set_effect(plyr:get_player_name(), "heal", "disabled") + plyr:set_hp(score-1) + end + diff --git a/my_changes/mobs/mobs_mobs/advanced_npc/adv_npc_log.patch b/my_changes/mobs/mobs_mobs/advanced_npc/adv_npc_log.patch new file mode 100644 index 0000000..ed88070 --- /dev/null +++ b/my_changes/mobs/mobs_mobs/advanced_npc/adv_npc_log.patch @@ -0,0 +1,354 @@ +diff --git a/backup/npc.lua.bkp.before.process.lua b/backup/npc.lua.bkp.before.process.lua +index 6134e46..89db0d5 100644 +--- a/backup/npc.lua.bkp.before.process.lua ++++ b/backup/npc.lua.bkp.before.process.lua +@@ -72,7 +72,7 @@ npc.texture_check = { + -- Logging + function npc.log(level, message) + if npc.log_level[level] then +- minetest.log("[advanced_npc] "..level..": "..message) ++ minetest.log("info","[advanced_npc] "..level..": "..message) + end + end + +@@ -1995,7 +1995,7 @@ function npc.schedule_check(self) + -- Speed is default wandering speed. Target pos is node_pos + -- Calculate dir if dir is random + local dir = npc.commands.get_direction(start_pos, node_pos) +- minetest.log("actions: "..dump(actions[node.name][i])) ++ minetest.log("info","actions: "..dump(actions[node.name][i])) + if actions[node.name][i].args.dir == "random" then + dir = math.random(0,7) + elseif type(actions[node.name][i].args.dir) == "number" then +@@ -2086,7 +2086,7 @@ end + -- and other functions that are assigned to the Lua entity definition + -- This function is executed each time the NPC is loaded + function npc.after_activate(self) +- minetest.log("Self: "..dump(self)) ++ minetest.log("info","Self: "..dump(self)) + if not self.actions then + npc.log("WARNING", "Found NPC on bad initialization state: no 'self.actions' object.\nReinitializing...") + npc.initialize(self, self.object:getpos(), true) +diff --git a/dialogue.lua b/dialogue.lua +index f6968be..783dad2 100644 +--- a/dialogue.lua ++++ b/dialogue.lua +@@ -448,7 +448,7 @@ function npc.dialogue.start_dialogue(self, player, show_married_dialogue) + dialogue = self.dialogues.normal[math.random(1, #self.dialogues.normal)] + elseif chance >= 90 then + -- Check if gift items hints are enabled +- minetest.log("Self gift data enable: "..dump(self.gift_data.enable_gift_items_hints)) ++ minetest.log("info","Self gift data enable: "..dump(self.gift_data.enable_gift_items_hints)) + if self.gift_data.enable_gift_items_hints then + -- Choose a random dialogue line from the favorite/disliked item hints + dialogue = self.dialogues.hints[math.random(1, 4)] +diff --git a/executable/actions.lua b/executable/actions.lua +index cbb18aa..56db8a0 100644 +--- a/executable/actions.lua ++++ b/executable/actions.lua +@@ -1217,7 +1217,7 @@ function npc.commands.use_sittable(self, args) + end + -- Stand + npc.enqueue_command(self, npc.commands.cmd.STAND, {pos=pos_out_of_sittable, dir=dir}) +- minetest.log("Setting sittable at "..minetest.pos_to_string(pos).." as not used") ++ minetest.log("info","Setting sittable at "..minetest.pos_to_string(pos).." as not used") + if enable_usage_marking then + -- Set place as unused + npc.locations.mark_place_used(pos, npc.locations.USE_STATE.NOT_USED) +@@ -1264,7 +1264,7 @@ end + -- going to be considered walkable for the algorithm to find a + -- path. + npc.commands.register_script("advanced_npc:walk_to_pos", function(self, args) +- minetest.log("Received arguments: "..dump(args)) ++ minetest.log("info","Received arguments: "..dump(args)) + -- Get arguments for this task + local use_access_node = true + if args.use_access_node ~= nil then +@@ -1332,7 +1332,7 @@ npc.commands.register_script("advanced_npc:walk_to_pos", function(self, args) + if use_access_node == true then + dir = npc.commands.get_direction(end_pos, node_pos) + end +- minetest.log("Dir: "..dump(dir)) ++ minetest.log("info","Dir: "..dump(dir)) + -- Change dir if using access_node + npc.enqueue_command(self, npc.commands.cmd.STAND, {dir = dir}) + break +@@ -1488,7 +1488,7 @@ npc.commands.register_script("advanced_npc:idle", function (self, args) + else + -- Set interval + npc.commands.execute(self, npc.commands.cmd.SET_INTERVAL, {interval=obj_search_interval}) +- minetest.log("No obj found") ++ minetest.log("info","No obj found") + end + end + end) +@@ -1546,7 +1546,7 @@ npc.commands.register_script_function("advanced_npc:follow", "follow_player", fu + local player_name = args.player_name + local objs = minetest.get_objects_inside_radius(self.object:getpos(), args.radius) + -- Check if objects were found +- minetest.log("Objects found: "..dump(objs)) ++ minetest.log("info","Objects found: "..dump(objs)) + if #objs > 0 then + for _,obj in pairs(objs) do + if obj then +diff --git a/executable/helper.lua b/executable/helper.lua +index 438c980..3d2414c 100644 +--- a/executable/helper.lua ++++ b/executable/helper.lua +@@ -216,19 +216,19 @@ function npc.programs.helper.get_pos_argument(self, pos, use_access_node) + local use_access_node = pos.use_access_node or false + local try_alternative_if_used = pos.try_alternative_if_used or false + local places = npc.locations.get_by_type(self, pos.place_type) +- minetest.log("Place type: "..dump(pos.place_type)) +- minetest.log("Places: "..dump(places)) ++ minetest.log("info","Place type: "..dump(pos.place_type)) ++ minetest.log("info","Places: "..dump(places)) + -- Check index is valid on the places map + if #places >= index then + local place = places[index] + -- Check if place is used, and if it is, find alternative if required + if try_alternative_if_used == true then +- minetest.log("Self places map: "..dump(self.places_map)) +- minetest.log("Place category: "..dump(pos.place_category)) +- minetest.log("Place type: "..dump(pos.place_type)) +- minetest.log("Original Place: "..dump(place)) ++ minetest.log("info","Self places map: "..dump(self.places_map)) ++ minetest.log("info","Place category: "..dump(pos.place_category)) ++ minetest.log("info","Place type: "..dump(pos.place_type)) ++ minetest.log("info","Original Place: "..dump(place)) + place = npc.locations.find_unused_place(self, pos.place_category, pos.place_type, place) +- minetest.log("New place: "..dump(place)) ++ minetest.log("info","New place: "..dump(place)) + + if next(place) ~= nil then + --minetest.log("Mark as used? "..dump(pos.mark_target_as_used)) +diff --git a/executable/instructions/builtin_instructions.lua b/executable/instructions/builtin_instructions.lua +index b53b359..67ada14 100644 +--- a/executable/instructions/builtin_instructions.lua ++++ b/executable/instructions/builtin_instructions.lua +@@ -180,7 +180,7 @@ npc.programs.instr.register("advanced_npc:dig", function(self, args) + npc.add_item_to_inventory(self, drop_itemname, 1) + end + -- Dig node +- minetest.log("Setting air at pos: "..minetest.pos_to_string(pos)) ++ minetest.log("info","Setting air at pos: "..minetest.pos_to_string(pos)) + minetest.set_node(pos, {name="air"}) + end + end +diff --git a/executable/locations.lua b/executable/locations.lua +index 9605a14..6553b06 100644 +--- a/executable/locations.lua ++++ b/executable/locations.lua +@@ -548,7 +548,7 @@ end + -- furnaces, storage (e.g. chests) and openable (e.g. doors). + -- Returns a table with these classifications + function npc.locations.scan_area_for_usable_nodes(pos1, pos2) +- minetest.log("Bed Nodes: "..dump(npc.locations.nodes.bed)) ++ minetest.log("info","Bed Nodes: "..dump(npc.locations.nodes.bed)) + local result = { + bed_type = {}, + sittable_type = {}, +diff --git a/executable/programs/builtin/follow.lua b/executable/programs/builtin/follow.lua +index ac52b1c..66d5e4e 100644 +--- a/executable/programs/builtin/follow.lua ++++ b/executable/programs/builtin/follow.lua +@@ -55,7 +55,7 @@ npc.programs.instr.register("advanced_npc:follow:follow_player", function(self, + local player_name = args.player_name + local objs = minetest.get_objects_inside_radius(self.object:getpos(), args.radius) + -- Check if objects were found +- minetest.log("Objects found: "..dump(objs)) ++ minetest.log("info","Objects found: "..dump(objs)) + if #objs > 0 then + for _,obj in pairs(objs) do + if obj then +diff --git a/executable/programs/builtin/idle.lua b/executable/programs/builtin/idle.lua +index d7891d5..b7b6ddd 100644 +--- a/executable/programs/builtin/idle.lua ++++ b/executable/programs/builtin/idle.lua +@@ -160,7 +160,7 @@ npc.programs.register("advanced_npc:idle", function(self, args) + -- Set interval + npc.programs.instr.execute(self, "advanced_npc:wait", {time=5}) + --npc.programs.instr.execute(self, npc.programs.instr.default.SET_PROCESS_INTERVAL, {interval=obj_search_interval}) +- minetest.log("No obj found") ++ minetest.log("info","No obj found") + end + end + end) +diff --git a/executable/programs/builtin/use_sittable.lua b/executable/programs/builtin/use_sittable.lua +index 2ec7260..30565c1 100644 +--- a/executable/programs/builtin/use_sittable.lua ++++ b/executable/programs/builtin/use_sittable.lua +@@ -17,7 +17,7 @@ npc.programs.register("advanced_npc:use_sittable", function(self, args) + local node = minetest.get_node(pos) + + if action == npc.programs.const.node_ops.sittable.SIT then +- minetest.log("Sitting...") ++ minetest.log("info","Sitting...") + -- Calculate position depending on bench + -- Error here due to ignore. Need to come up with better solution + if node.name == "ignore" then +@@ -54,7 +54,7 @@ npc.programs.register("advanced_npc:use_sittable", function(self, args) + end + -- Stand + npc.programs.instr.execute(self, npc.programs.instr.default.STAND, {pos=pos_out_of_sittable, dir=dir}) +- minetest.log("Setting sittable at "..minetest.pos_to_string(pos).." as not used") ++ minetest.log("info","Setting sittable at "..minetest.pos_to_string(pos).." as not used") + if enable_usage_marking then + -- Set place as unused + npc.locations.mark_place_used(pos, npc.locations.USE_STATE.NOT_USED) +diff --git a/executable/programs/builtin/wander.lua b/executable/programs/builtin/wander.lua +index 866be02..b9aa741 100644 +--- a/executable/programs/builtin/wander.lua ++++ b/executable/programs/builtin/wander.lua +@@ -48,7 +48,7 @@ npc.programs.register("advanced_npc:wander", function(self, args) + }) + npc.exec.proc.enqueue(self, npc.programs.instr.default.STAND, {}) + else +- minetest.log("Walking randomly") ++ minetest.log("info","Walking randomly") + -- Walk in a random direction + local npc_pos = self.object:getpos() + npc.exec.proc.enqueue(self, npc.programs.instr.default.WALK_STEP, { +diff --git a/npc.lua b/npc.lua +index 88d7442..a1b16ae 100755 +--- a/npc.lua ++++ b/npc.lua +@@ -65,7 +65,7 @@ npc.texture_check = { + -- Logging + function npc.log(level, message) + if npc.log_level[level] then +- minetest.log("[advanced_npc] "..level..": "..message) ++ minetest.log("info","[advanced_npc] "..level..": "..message) + end + end + +@@ -1102,7 +1102,7 @@ function npc.exec.interrupt(self, new_program, new_arguments, interrupt_options) + _exec.priority_enqueue(self, + {[1] = {program_name=new_program, arguments=new_arguments, interrupt_options=interrupt_options}}) + --minetest.log("Pause") +- minetest.log("Interrupted process: "..dump(self.execution.process_queue[1])) ++ minetest.log("info","Interrupted process: "..dump(self.execution.process_queue[1])) + -- Check process - if the instruction queue is empty, do not store + -- Pause current process + _exec.pause_process(self) +@@ -1205,7 +1205,7 @@ end + function _exec.restore_process(self) + local current_process = self.execution.process_queue[1] + if current_process then +- minetest.log("Restoring process: "..dump(current_process.program_name)) ++ minetest.log("info","Restoring process: "..dump(current_process.program_name)) + -- Change process state + current_process.state = npc.exec.proc.state.RUNNING + -- Check if any instruction was interrupted +@@ -1215,7 +1215,7 @@ function _exec.restore_process(self) + -- Restore position + --self.object:setpos(current_process.current_instruction.pos) + -- Execute instruction +- minetest.log("Re-executing instruction: "..dump(current_process.current_instruction.entry.name)) ++ minetest.log("info","Re-executing instruction: "..dump(current_process.current_instruction.entry.name)) + _exec.proc.execute(self, current_process.current_instruction.entry) + end + end +diff --git a/occupations/occupations.lua b/occupations/occupations.lua +index 092f451..4108634 100644 +--- a/occupations/occupations.lua ++++ b/occupations/occupations.lua +@@ -387,7 +387,7 @@ function npc.occupations.initialize_occupation_values(self, occupation_name) + self.selected_texture = "default_"..self.gender..".png" + end + end +- minetest.log("Result: "..dump(self.selected_texture)) ++ minetest.log("info","Result: "..dump(self.selected_texture)) + + -- Set texture and base texture + self.textures = {self.selected_texture} +@@ -464,7 +464,7 @@ function npc.occupations.initialize_occupation_values(self, occupation_name) + end + + -- Initialize properties +- minetest.log("def.properties: "..dump(def.properties)) ++ minetest.log("info","def.properties: "..dump(def.properties)) + if def.properties then + -- Initialize trader status + if def.properties.initial_trader_status then +diff --git a/spawner.lua b/spawner.lua +index 9c06f3f..3d47a3d 100644 +--- a/spawner.lua ++++ b/spawner.lua +@@ -299,8 +299,8 @@ function npc.spawner.determine_npc_occupation(building_type, workplace_nodes, np + end + else + -- Try to match building type with the occupation local building types +- minetest.log("Building type: "..dump(building_type)) +- minetest.log("Occupation local building types: "..dump(local_building_types)) ++ minetest.log("info","Building type: "..dump(building_type)) ++ minetest.log("info","Occupation local building types: "..dump(local_building_types)) + for i = 1, #occupation_names do + for j = 1, #local_building_types do + if building_type == local_building_types[j] then +@@ -311,7 +311,7 @@ function npc.spawner.determine_npc_occupation(building_type, workplace_nodes, np + end + end + end +- minetest.log("Local building match after: "..dump(result)) ++ minetest.log("info","Local building match after: "..dump(result)) + end + end + end +@@ -323,9 +323,9 @@ function npc.spawner.determine_npc_occupation(building_type, workplace_nodes, np + -- - If count is less than three (only two NPCs), default_basic occupation. + -- - If count is greater than two, assign any eligible occupation with 50% chance + -- - If not NPC is working, choose an occupation that is not default_basic +- minetest.log("Current building occupations: "..dump(current_building_npc_occupations)) +- minetest.log("Result #: "..dump(#result)) +- minetest.log("Result: "..dump(result)) ++ minetest.log("info","Current building occupations: "..dump(current_building_npc_occupations)) ++ minetest.log("info","Result #: "..dump(#result)) ++ minetest.log("info","Result: "..dump(result)) + if next(current_building_npc_occupations) ~= nil then + for i = 1, #current_building_npc_occupations do + if current_building_npc_occupations[i] ~= npc.occupations.basic_name then +@@ -839,7 +839,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) + + -- Scan for usable nodes + local area_info = npc.spawner.scan_area_for_spawn(start_pos, end_pos, player:get_player_name(), pos) +- minetest.log("Area info: "..dump(area_info)) ++ minetest.log("info","Area info: "..dump(area_info)) + -- Assign occupation + local occupation_data = npc.spawner.determine_npc_occupation( + fields.building_type or area_info.building_type, +@@ -1094,8 +1094,8 @@ if minetest.get_modpath("mg_villages") ~= nil then + -- TODO: Change formspec to a more detailed one. + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + local meta = minetest.get_meta(pos) +- minetest.log("NPCs: "..dump(minetest.deserialize(meta:get_string("npcs")))) +- minetest.log("Node data: "..dump(minetest.deserialize(meta:get_string("node_data")))) ++ minetest.log("info","NPCs: "..dump(minetest.deserialize(meta:get_string("npcs")))) ++ minetest.log("info","Node data: "..dump(minetest.deserialize(meta:get_string("node_data")))) + return mg_villages.plotmarker_formspec( pos, nil, {}, clicker ) + end, + +@@ -1201,7 +1201,7 @@ minetest.register_chatcommand("restore_area", { + privs = {server = true}, + func = function(name, param) + local args = npc.utils.split(param, " ") +- minetest.log("Params: "..dump(args)) ++ minetest.log("info","Params: "..dump(args)) + if #args < 2 then + minetest.chat_send_player("Please specify horizontal and vertical radius.") + return +diff --git a/trade/trade.lua b/trade/trade.lua +index de535fc..56b814f 100644 +--- a/trade/trade.lua ++++ b/trade/trade.lua +@@ -451,8 +451,8 @@ function npc.trade.get_dedicated_trade_offers(self) + -- If it is, create a sell offer, else create a buy offer if possible. + -- Also, avoid creating sell offers immediately if the item was just bought + local item = npc.inventory_contains(self, item_name) +- minetest.log("Searched item: "..dump(item_name)) +- minetest.log("Found: "..dump(item)) ++ minetest.log("info","Searched item: "..dump(item_name)) ++ minetest.log("info","Found: "..dump(item)) + if item ~= nil and trade_info.last_offer_type ~= npc.trade.OFFER_BUY then + -- Check if item can be sold + if trade_info.item_sold_count == nil diff --git a/my_changes/mobs/mobs_mobs/advanced_npc/bugtrade184.patch b/my_changes/mobs/mobs_mobs/advanced_npc/bugtrade184.patch new file mode 100644 index 0000000..69761c1 --- /dev/null +++ b/my_changes/mobs/mobs_mobs/advanced_npc/bugtrade184.patch @@ -0,0 +1,22 @@ +diff --git a/trade/trade.lua b/trade/trade.lua +index 56b814f..6526b9b 100644 +--- a/trade/trade.lua ++++ b/trade/trade.lua +@@ -173,7 +173,8 @@ function npc.trade.show_trade_offer_formspec(self, player, offer_type) + prompt_string = " wants to sell to you" + buy_sell_string = "Buy" + end +- ++ ++ if trade_offer.item ~= nil then + local formspec = "size[8,4]".. + default.gui_bg.. + default.gui_bg_img.. +@@ -192,6 +193,7 @@ function npc.trade.show_trade_offer_formspec(self, player, offer_type) + } + -- Show formspec to player + minetest.show_formspec(player:get_player_name(), "advanced_npc:trade_offer", formspec) ++ end + end + + diff --git a/my_changes/mobs/mobs_mobs/goblins/goblins_nil.patch b/my_changes/mobs/mobs_mobs/goblins/goblins_nil.patch new file mode 100644 index 0000000..1e86472 --- /dev/null +++ b/my_changes/mobs/mobs_mobs/goblins/goblins_nil.patch @@ -0,0 +1,33 @@ +diff --git a/behaviors.lua b/behaviors.lua +index baac807..453807d 100644 +--- a/behaviors.lua ++++ b/behaviors.lua +@@ -669,7 +669,21 @@ function goblins.tunneling(self, type) + end + + function goblins.danger_dig(self,freq,depth) +- local pos = vector.round(self.object:get_pos()) ++ local self_pos = self.object:get_pos() ++ if self_pos ~= nil then ++ local vx = self_pos.x ++ local vy = self_pos.y ++ local vz = self_pos.z ++ local pos = {x = math.floor(vx + 0.5), ++ y = math.floor(vy + 0.5), ++ z = math.floor(vz + 0.5) ++ } ++ --minetest.log("self_pos: "..dump(self_pos)) ++ else ++ --minetest.log("self_pos: "..dump(self_pos)) ++ end ++ ++ --local pos = vector.round(self.object:get_pos()) + if pos then + local lol = minetest.get_node_light(pos) or 0 + local freq = freq or 0.1 +@@ -814,5 +828,3 @@ function goblins.goblin_dog_behaviors(self) + --]] + end + end +- +- diff --git a/my_changes/mobs/mobs_mobs/mg_villages_npc/bug.patch b/my_changes/mobs/mobs_mobs/mg_villages_npc/bug.patch new file mode 100644 index 0000000..9ff9c78 --- /dev/null +++ b/my_changes/mobs/mobs_mobs/mg_villages_npc/bug.patch @@ -0,0 +1,26 @@ +diff --git a/data/dialogues_data.lua b/data/dialogues_data.lua +index 8d1dae4..26dd4cb 100644 +--- a/data/dialogues_data.lua ++++ b/data/dialogues_data.lua +@@ -63,18 +63,18 @@ npc.dialogue.register_dialogue({ + text = "Yes, how can I help?", + action_type = "dialogue", + action = { +- text = "Could you please give me 3 "..npc.trade.prices.currency.tier3.name.."?", ++ text = "Could you please give me 3 "..npc.trade.prices.get_currency_name(npc.trade.prices.currency.tier3).."?", + responses = { + [1] = { + text = "Yes, ok, here", + action_type = "function", + action = function(self, player) + -- Take item +- if npc.commands.execute(self, npc.commands.cmd.TAKE_ITEM, { ++ if npc.programs.instr.execute(self, npc.programs.instr.default.TAKE_ITEM, { + player=player:get_player_name(), + pos=nil, + inv_list="main", +- item_name=npc.trade.prices.currency.tier3.string, ++ item_name=npc.trade.prices.get_currency_itemstring("tier3"), + count=3 + }) then + -- Send message diff --git a/my_changes/mobs/mobs_mobs/mg_villages_npc/patch_log.patch b/my_changes/mobs/mobs_mobs/mg_villages_npc/patch_log.patch new file mode 100644 index 0000000..b0c8e16 --- /dev/null +++ b/my_changes/mobs/mobs_mobs/mg_villages_npc/patch_log.patch @@ -0,0 +1,13 @@ +diff --git a/data/occupations/default_farmer.lua b/data/occupations/default_farmer.lua +index 673019b..b5452cd 100644 +--- a/data/occupations/default_farmer.lua ++++ b/data/occupations/default_farmer.lua +@@ -33,7 +33,7 @@ npc.programs.register("mg_villages_npc:farmer:walk_to_field", function(self, arg + -- Get plotmarker + local plotmarker_pos = npc.locations.get_by_type(self, npc.locations.data.other.home_plotmarker) + -- There should always be just one plotmarker +- minetest.log("Got: "..dump(plotmarker_pos)) ++ minetest.log("info","Got: "..dump(plotmarker_pos)) + plotmarker_pos = plotmarker_pos[1].pos + -- Search building area for gates + local meta = minetest.get_meta(plotmarker_pos) diff --git a/my_changes/player/fire_plus/extend_fire.patch b/my_changes/player/fire_plus/extend_fire.patch new file mode 100644 index 0000000..9146903 --- /dev/null +++ b/my_changes/player/fire_plus/extend_fire.patch @@ -0,0 +1,82 @@ +diff --git a/api.lua b/api.lua +index 013dae3..cce2937 100644 +--- a/api.lua ++++ b/api.lua +@@ -68,8 +68,27 @@ function fire_plus.burn_player(player, burns, damage, not_initial) + maxexptime = 1, + minsize = 3, + maxsize = 3, +- texture = "fire_basic_flame.png", ++ texture = "smoke_puff.png", + collisiondetection = true, ++ glow = 0, ++ attached = player, ++ }), ++ particlespawner_id2 = minetest.add_particlespawner({ ++ amount = 5, ++ time = 0, ++ minpos = vector.new(0, 0.5, -0.3), ++ maxpos = vector.new( 0, 0.5, 0.3), ++ minvel = {x = 0, y = 0, z = 0}, ++ maxvel = {x = 0, y = 0, z = 0}, ++ minacc = {x = 0, y = 0, z = 0}, ++ maxacc = {x = 0, y = 0, z = 0}, ++ minexptime = 0.5, ++ maxexptime = 1, ++ minsize = 10, ++ maxsize = 10, ++ texture = "fire_basic_flame_animated.png", ++ animation = {type="vertical_frames", aspect_w=16, aspect_h=16, length = 1,}, ++ collisiondetection = false, + glow = minetest.LIGHT_MAX, + attached = player, + }) +@@ -120,6 +139,7 @@ function fire_plus.extinguish_player(player) + end + + minetest.delete_particlespawner(fire_plus.burning[name].particlespawner_id) +- ++ minetest.delete_particlespawner(fire_plus.burning[name].particlespawner_id2) ++ + fire_plus.burning[name] = nil + end +diff --git a/init.lua b/init.lua +index f89a241..43cc4f7 100644 +--- a/init.lua ++++ b/init.lua +@@ -24,6 +24,8 @@ fire_plus = { + dofile(minetest.get_modpath(minetest.get_current_modname()) .. "/api.lua") + + local time = 0 ++local img_num = 1 ++local img_num_max = 8 + minetest.register_globalstep(function(dtime) + time = time + dtime + +@@ -40,6 +42,26 @@ minetest.register_globalstep(function(dtime) + + if fire_plus.burning[name] then + ++ -- change HUD to next image to simulate animation ++ --local img_name = "fire_basic_flame_"..img_num..".png" ++ img_name = "fire_basic_flame_animated.png".."^[verticalframe:"..img_num_max..":"..img_num ++ --minetest.log(dump(img_name)) ++ player:hud_remove(fire_plus.burning[name].hud_id) ++ fire_plus.burning[name].hud_id = player:hud_add({ ++ hud_elem_type = "image", ++ position = {x = 0.5, y = 0.95}, ++ offset = {x = 0, y = 0}, ++ text = img_name, ++ alignment = -1, ++ scale = {x = 100, y = 32}, ++ number = 0xFFFFFF, ++ }) ++ if img_num >= img_num_max then ++ img_num = 1 ++ else ++ img_num = img_num + 1 ++ end ++ + local nodename = minetest.get_node(player:get_pos()).name + local nodename_head = minetest.get_node(vector.add(player:get_pos(), + vector.new(0, 1, 0))).name diff --git a/my_changes/player/hbsprint/no_damage.patch b/my_changes/player/hbsprint/no_damage.patch new file mode 100644 index 0000000..81a4564 --- /dev/null +++ b/my_changes/player/hbsprint/no_damage.patch @@ -0,0 +1,13 @@ +diff --git a/init.lua b/init.lua +index 3e5ff0d..18f5150 100644 +--- a/init.lua ++++ b/init.lua +@@ -230,7 +230,7 @@ local function sprint_step(player, dtime) + local hunger = 30 + if starve == "hbhunger" then + hunger = tonumber(hbhunger.hunger[name]) +- elseif starve == "hunger_ng" then ++ elseif starve == "hunger_ng" and minetest.is_yes(minetest.settings:get('enable_damage')) then + hunger = hunger_ng.get_hunger_information(name).hunger.exact + end + diff --git a/my_changes/player/skinsdb/meta/character_female_1.txt b/my_changes/player/skinsdb/meta/character_female_1.txt new file mode 100644 index 0000000..65f809c --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_1.txt @@ -0,0 +1,4 @@ +horrible spring sdzen +sdzen +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_10.txt b/my_changes/player/skinsdb/meta/character_female_10.txt new file mode 100644 index 0000000..7d93f14 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_10.txt @@ -0,0 +1,4 @@ +rize +rexyGYM +CC BY-NC-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_11.txt b/my_changes/player/skinsdb/meta/character_female_11.txt new file mode 100644 index 0000000..02ab661 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_11.txt @@ -0,0 +1,4 @@ +alejandra +rexyGYM +CC BY 4.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_12.txt b/my_changes/player/skinsdb/meta/character_female_12.txt new file mode 100644 index 0000000..15db943 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_12.txt @@ -0,0 +1,4 @@ +Aurora (child of light) +WD/Ubisoft +CC BY-NC-SA 4.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_13.txt b/my_changes/player/skinsdb/meta/character_female_13.txt new file mode 100644 index 0000000..21419f0 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_13.txt @@ -0,0 +1,4 @@ +Xenia +HeyGirlHey +CC BY 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_14.txt b/my_changes/player/skinsdb/meta/character_female_14.txt new file mode 100644 index 0000000..cab1971 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_14.txt @@ -0,0 +1,4 @@ +stef325 +stef325 +CC 0 (1.0) + diff --git a/my_changes/player/skinsdb/meta/character_female_15.txt b/my_changes/player/skinsdb/meta/character_female_15.txt new file mode 100644 index 0000000..9c464ff --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_15.txt @@ -0,0 +1,4 @@ +Cloé +Sporax +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_16.txt b/my_changes/player/skinsdb/meta/character_female_16.txt new file mode 100644 index 0000000..a71d384 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_16.txt @@ -0,0 +1,4 @@ +Julia +nelly +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_17.txt b/my_changes/player/skinsdb/meta/character_female_17.txt new file mode 100644 index 0000000..48d6d28 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_17.txt @@ -0,0 +1,4 @@ +Morgane +loupicate +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_18.txt b/my_changes/player/skinsdb/meta/character_female_18.txt new file mode 100644 index 0000000..b7c0806 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_18.txt @@ -0,0 +1,4 @@ +Elf +loupicate +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_19.txt b/my_changes/player/skinsdb/meta/character_female_19.txt new file mode 100644 index 0000000..8427c9b --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_19.txt @@ -0,0 +1,4 @@ +Angel +nelly +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_2.txt b/my_changes/player/skinsdb/meta/character_female_2.txt new file mode 100644 index 0000000..ed3050c --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_2.txt @@ -0,0 +1,4 @@ +Summer +lizzie +CC BY-NC-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_20.txt b/my_changes/player/skinsdb/meta/character_female_20.txt new file mode 100644 index 0000000..1da2800 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_20.txt @@ -0,0 +1,4 @@ +Female angel +loupicate +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_21.txt b/my_changes/player/skinsdb/meta/character_female_21.txt new file mode 100644 index 0000000..b7c0806 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_21.txt @@ -0,0 +1,4 @@ +Elf +loupicate +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_22.txt b/my_changes/player/skinsdb/meta/character_female_22.txt new file mode 100644 index 0000000..5f2a90d --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_22.txt @@ -0,0 +1,4 @@ +Blonde Girl +Rin +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_23.txt b/my_changes/player/skinsdb/meta/character_female_23.txt new file mode 100644 index 0000000..dbc46cf --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_23.txt @@ -0,0 +1,4 @@ +bikini +anonme +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_24.txt b/my_changes/player/skinsdb/meta/character_female_24.txt new file mode 100644 index 0000000..83c4b7e --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_24.txt @@ -0,0 +1,4 @@ +White Music Girl +ElMehdiBen +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_25.txt b/my_changes/player/skinsdb/meta/character_female_25.txt new file mode 100644 index 0000000..d2b0a7d --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_25.txt @@ -0,0 +1,4 @@ +MLP-Fluttershy +julito +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_26.txt b/my_changes/player/skinsdb/meta/character_female_26.txt new file mode 100644 index 0000000..7209d27 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_26.txt @@ -0,0 +1,4 @@ +Flower Girl +julito +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_27.txt b/my_changes/player/skinsdb/meta/character_female_27.txt new file mode 100644 index 0000000..659e756 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_27.txt @@ -0,0 +1,4 @@ +Rin-chan 1 +Rin +CC BY-NC-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_28.txt b/my_changes/player/skinsdb/meta/character_female_28.txt new file mode 100644 index 0000000..6e11043 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_28.txt @@ -0,0 +1,4 @@ +Tahlia +loupicate +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_29.txt b/my_changes/player/skinsdb/meta/character_female_29.txt new file mode 100644 index 0000000..b1bc4c3 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_29.txt @@ -0,0 +1,4 @@ +MC cute girls polar bear +SAM7777 +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_3.txt b/my_changes/player/skinsdb/meta/character_female_3.txt new file mode 100644 index 0000000..0e9705a --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_3.txt @@ -0,0 +1,4 @@ +lisa +hansuke123 +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_30.txt b/my_changes/player/skinsdb/meta/character_female_30.txt new file mode 100644 index 0000000..c089903 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_30.txt @@ -0,0 +1,4 @@ +Blue Wolf-Girl +AuroreTheWolf +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_31.txt b/my_changes/player/skinsdb/meta/character_female_31.txt new file mode 100644 index 0000000..75300e9 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_31.txt @@ -0,0 +1,4 @@ +Pretresse +AuroreTheWolf +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_32.txt b/my_changes/player/skinsdb/meta/character_female_32.txt new file mode 100644 index 0000000..94c49e7 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_32.txt @@ -0,0 +1,4 @@ +bear63681 +SAM7777 +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_33.txt b/my_changes/player/skinsdb/meta/character_female_33.txt new file mode 100644 index 0000000..269dacc --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_33.txt @@ -0,0 +1,4 @@ +CreativeFox +SAM7777 +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_34.txt b/my_changes/player/skinsdb/meta/character_female_34.txt new file mode 100644 index 0000000..1ae55b9 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_34.txt @@ -0,0 +1,4 @@ +FluffyGirl +SAM7777 +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_35.txt b/my_changes/player/skinsdb/meta/character_female_35.txt new file mode 100644 index 0000000..8ba844b --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_35.txt @@ -0,0 +1,4 @@ +Nenha +SAM7777 +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_36.txt b/my_changes/player/skinsdb/meta/character_female_36.txt new file mode 100644 index 0000000..516dcab --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_36.txt @@ -0,0 +1,4 @@ +Abril +julito +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_37.txt b/my_changes/player/skinsdb/meta/character_female_37.txt new file mode 100644 index 0000000..71df092 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_37.txt @@ -0,0 +1,4 @@ +Custom Skin 1 +Rin0002 +CC BY 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_38.txt b/my_changes/player/skinsdb/meta/character_female_38.txt new file mode 100644 index 0000000..cf60f85 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_38.txt @@ -0,0 +1,4 @@ +Black Flower Crown +Rin0002 +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_39.txt b/my_changes/player/skinsdb/meta/character_female_39.txt new file mode 100644 index 0000000..d5cbbd6 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_39.txt @@ -0,0 +1,4 @@ +Name this pls 2 +Rin0002 +CC BY 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_4.txt b/my_changes/player/skinsdb/meta/character_female_4.txt new file mode 100644 index 0000000..81637da --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_4.txt @@ -0,0 +1,4 @@ +Ladyvioletkitty +lordphoenixmh +CC BY 4.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_40.txt b/my_changes/player/skinsdb/meta/character_female_40.txt new file mode 100644 index 0000000..e594567 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_40.txt @@ -0,0 +1,4 @@ +Lilly +Karelys26 +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_41.txt b/my_changes/player/skinsdb/meta/character_female_41.txt new file mode 100644 index 0000000..8a600f4 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_41.txt @@ -0,0 +1,4 @@ +Nani +Karelys26 +CC BY-NC-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_42.txt b/my_changes/player/skinsdb/meta/character_female_42.txt new file mode 100644 index 0000000..e424939 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_42.txt @@ -0,0 +1,4 @@ +Karita +Karelys26 +CC BY-NC-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_43.txt b/my_changes/player/skinsdb/meta/character_female_43.txt new file mode 100644 index 0000000..8f75fe9 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_43.txt @@ -0,0 +1,4 @@ +Athena +skindex +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_44.txt b/my_changes/player/skinsdb/meta/character_female_44.txt new file mode 100644 index 0000000..bb09d93 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_44.txt @@ -0,0 +1,4 @@ +Lotte +skindex +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_45.txt b/my_changes/player/skinsdb/meta/character_female_45.txt new file mode 100644 index 0000000..6658265 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_45.txt @@ -0,0 +1,4 @@ +Yuzuki_Airi +planetmc +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_46.txt b/my_changes/player/skinsdb/meta/character_female_46.txt new file mode 100644 index 0000000..c774203 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_46.txt @@ -0,0 +1,4 @@ +Raina +XrystalFox +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_47.txt b/my_changes/player/skinsdb/meta/character_female_47.txt new file mode 100644 index 0000000..58acf94 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_47.txt @@ -0,0 +1,4 @@ +Marisa +ZUN +CC 0 (1.0) + diff --git a/my_changes/player/skinsdb/meta/character_female_48.txt b/my_changes/player/skinsdb/meta/character_female_48.txt new file mode 100644 index 0000000..d1dd70d --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_48.txt @@ -0,0 +1,4 @@ +KittyKat_2 +skindex +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_49.txt b/my_changes/player/skinsdb/meta/character_female_49.txt new file mode 100644 index 0000000..c8b2bc9 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_49.txt @@ -0,0 +1,4 @@ +KittyKat +skindex +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_5.txt b/my_changes/player/skinsdb/meta/character_female_5.txt new file mode 100644 index 0000000..c26e2c0 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_5.txt @@ -0,0 +1,4 @@ +Mammu +hansuke123 +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_50.txt b/my_changes/player/skinsdb/meta/character_female_50.txt new file mode 100644 index 0000000..bbe5492 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_50.txt @@ -0,0 +1,4 @@ +Yuzuki_Airi +skindex +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_51.txt b/my_changes/player/skinsdb/meta/character_female_51.txt new file mode 100644 index 0000000..19b4777 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_51.txt @@ -0,0 +1,4 @@ +Black_MagicGirlX(1.2) +IFRFSX +CC BY-SA 4.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_52.txt b/my_changes/player/skinsdb/meta/character_female_52.txt new file mode 100644 index 0000000..40f1ce8 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_52.txt @@ -0,0 +1,4 @@ +LadyK +LadyK +CC BY-NC-SA 4.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_53.txt b/my_changes/player/skinsdb/meta/character_female_53.txt new file mode 100644 index 0000000..b042f1f --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_53.txt @@ -0,0 +1,4 @@ +RainbowGirl +unknown +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_54.txt b/my_changes/player/skinsdb/meta/character_female_54.txt new file mode 100644 index 0000000..1cdd1a0 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_54.txt @@ -0,0 +1,4 @@ +Inga +unknown +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_55.txt b/my_changes/player/skinsdb/meta/character_female_55.txt new file mode 100644 index 0000000..8a332e1 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_55.txt @@ -0,0 +1,4 @@ +smilla +ie +CC BY-NC-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_6.txt b/my_changes/player/skinsdb/meta/character_female_6.txt new file mode 100644 index 0000000..da5d9b3 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_6.txt @@ -0,0 +1,4 @@ +Jayne +Andromeda +CC BY-NC-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_7.txt b/my_changes/player/skinsdb/meta/character_female_7.txt new file mode 100644 index 0000000..a74dc10 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_7.txt @@ -0,0 +1,4 @@ +blue girl +lovehart +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_8.txt b/my_changes/player/skinsdb/meta/character_female_8.txt new file mode 100644 index 0000000..d946b1f --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_8.txt @@ -0,0 +1,4 @@ +Adventer girl +lovehart +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_female_9.txt b/my_changes/player/skinsdb/meta/character_female_9.txt new file mode 100644 index 0000000..b64a8b7 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_female_9.txt @@ -0,0 +1,4 @@ +BrightGirl +Malarif +CC BY-NC-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_100.txt b/my_changes/player/skinsdb/meta/character_male_100.txt new file mode 100644 index 0000000..1ec44f5 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_100.txt @@ -0,0 +1,4 @@ +Sam I +Jordach +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_101.txt b/my_changes/player/skinsdb/meta/character_male_101.txt new file mode 100644 index 0000000..937768b --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_101.txt @@ -0,0 +1,4 @@ +Tuxedo Sam +Jordach +CC BY-NC-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_102.txt b/my_changes/player/skinsdb/meta/character_male_102.txt new file mode 100644 index 0000000..8e81e63 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_102.txt @@ -0,0 +1,4 @@ +philipbenr +philipbenr +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_103.txt b/my_changes/player/skinsdb/meta/character_male_103.txt new file mode 100644 index 0000000..51733e2 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_103.txt @@ -0,0 +1,4 @@ +CaligoPL +CaligoPL +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_104.txt b/my_changes/player/skinsdb/meta/character_male_104.txt new file mode 100644 index 0000000..3740d21 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_104.txt @@ -0,0 +1,4 @@ +Hobo/Homeless person +Minetestian +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_105.txt b/my_changes/player/skinsdb/meta/character_male_105.txt new file mode 100644 index 0000000..0481e39 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_105.txt @@ -0,0 +1,4 @@ +Naruto +LuxAtheris +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_106.txt b/my_changes/player/skinsdb/meta/character_male_106.txt new file mode 100644 index 0000000..03c3665 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_106.txt @@ -0,0 +1,4 @@ +lordphoenixmh +lordphoenixmh +CC BY 4.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_107.txt b/my_changes/player/skinsdb/meta/character_male_107.txt new file mode 100644 index 0000000..91daeda --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_107.txt @@ -0,0 +1,4 @@ +4°district +Ferdi Napoli +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_108.txt b/my_changes/player/skinsdb/meta/character_male_108.txt new file mode 100644 index 0000000..6587603 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_108.txt @@ -0,0 +1,4 @@ +Gangnam Style +Ferdi Napoli +CC BY-NC-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_109.txt b/my_changes/player/skinsdb/meta/character_male_109.txt new file mode 100644 index 0000000..e6dcf85 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_109.txt @@ -0,0 +1,4 @@ +Finn The Adventured +Ferdi Napoli +CC BY-NC-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_110.txt b/my_changes/player/skinsdb/meta/character_male_110.txt new file mode 100644 index 0000000..f59d490 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_110.txt @@ -0,0 +1,4 @@ +Seth Rollins +Ferdi Napoli +CC BY-NC-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_111.txt b/my_changes/player/skinsdb/meta/character_male_111.txt new file mode 100644 index 0000000..6c334c0 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_111.txt @@ -0,0 +1,4 @@ +Jesus +Ferdi Napoli +CC BY-NC-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_112.txt b/my_changes/player/skinsdb/meta/character_male_112.txt new file mode 100644 index 0000000..4ea8c3f --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_112.txt @@ -0,0 +1,4 @@ +Renan123 +sou o melhor +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_113.txt b/my_changes/player/skinsdb/meta/character_male_113.txt new file mode 100644 index 0000000..9acdaac --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_113.txt @@ -0,0 +1,4 @@ +Finnzzin +João Neto +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_114.txt b/my_changes/player/skinsdb/meta/character_male_114.txt new file mode 100644 index 0000000..c70ddbd --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_114.txt @@ -0,0 +1,4 @@ +DanTDM +hansuke123 +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_115.txt b/my_changes/player/skinsdb/meta/character_male_115.txt new file mode 100644 index 0000000..84145d8 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_115.txt @@ -0,0 +1,4 @@ +Esteban +Esteban +CC BY-NC-SA 4.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_116.txt b/my_changes/player/skinsdb/meta/character_male_116.txt new file mode 100644 index 0000000..3bdbda6 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_116.txt @@ -0,0 +1,4 @@ +Akatsuki sasuke +bajanhgk +CC BY-NC-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_117.txt b/my_changes/player/skinsdb/meta/character_male_117.txt new file mode 100644 index 0000000..98ae9c0 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_117.txt @@ -0,0 +1,4 @@ +Notch +bajanhgk +CC BY-NC-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_118.txt b/my_changes/player/skinsdb/meta/character_male_118.txt new file mode 100644 index 0000000..63ee79a --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_118.txt @@ -0,0 +1,4 @@ +WindHero +HeroOfTheWinds +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_119.txt b/my_changes/player/skinsdb/meta/character_male_119.txt new file mode 100644 index 0000000..4ad399d --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_119.txt @@ -0,0 +1,4 @@ +Hunky Simon with Jacket +Andromeda +CC BY-NC-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_120.txt b/my_changes/player/skinsdb/meta/character_male_120.txt new file mode 100644 index 0000000..e752c25 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_120.txt @@ -0,0 +1,4 @@ +Red-brown-shirt-dude +Krock +CC BY-SA 4.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_121.txt b/my_changes/player/skinsdb/meta/character_male_121.txt new file mode 100644 index 0000000..e5dbeee --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_121.txt @@ -0,0 +1,4 @@ +Bangarng Kid +hansuke123 +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_122.txt b/my_changes/player/skinsdb/meta/character_male_122.txt new file mode 100644 index 0000000..28c53b4 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_122.txt @@ -0,0 +1,4 @@ +Oliver_MV +hansuke123 +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_123.txt b/my_changes/player/skinsdb/meta/character_male_123.txt new file mode 100644 index 0000000..cdd7493 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_123.txt @@ -0,0 +1,4 @@ +Nero +Nero3605 +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_124.txt b/my_changes/player/skinsdb/meta/character_male_124.txt new file mode 100644 index 0000000..d3bea19 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_124.txt @@ -0,0 +1,4 @@ +take bake the night sensei +lovehart +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_125.txt b/my_changes/player/skinsdb/meta/character_male_125.txt new file mode 100644 index 0000000..0964bb5 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_125.txt @@ -0,0 +1,4 @@ +take bake the night studant +lovehart +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_126.txt b/my_changes/player/skinsdb/meta/character_male_126.txt new file mode 100644 index 0000000..5107ae9 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_126.txt @@ -0,0 +1,4 @@ +dwarf from lottmob +lovehart +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_127.txt b/my_changes/player/skinsdb/meta/character_male_127.txt new file mode 100644 index 0000000..b2c9701 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_127.txt @@ -0,0 +1,4 @@ +elf from lottmob +lovehart +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_128.txt b/my_changes/player/skinsdb/meta/character_male_128.txt new file mode 100644 index 0000000..8b02cf7 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_128.txt @@ -0,0 +1,4 @@ +Sokomine +lovehart +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_129.txt b/my_changes/player/skinsdb/meta/character_male_129.txt new file mode 100644 index 0000000..2d859c4 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_129.txt @@ -0,0 +1,4 @@ +the 10the doctor +lovehart +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_130.txt b/my_changes/player/skinsdb/meta/character_male_130.txt new file mode 100644 index 0000000..9b7ece7 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_130.txt @@ -0,0 +1,4 @@ +Michal VonFlynee +Michal VonFlynee +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_131.txt b/my_changes/player/skinsdb/meta/character_male_131.txt new file mode 100644 index 0000000..a12f21d --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_131.txt @@ -0,0 +1,4 @@ +nman3600 +nman3600 +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_132.txt b/my_changes/player/skinsdb/meta/character_male_132.txt new file mode 100644 index 0000000..4c9cc82 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_132.txt @@ -0,0 +1,4 @@ +war-sloop +ange_black69 +CC BY-NC-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_133.txt b/my_changes/player/skinsdb/meta/character_male_133.txt new file mode 100644 index 0000000..82ef8f7 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_133.txt @@ -0,0 +1,4 @@ +Doctor Sam +unknown +CC 0 (1.0) + diff --git a/my_changes/player/skinsdb/meta/character_male_134.txt b/my_changes/player/skinsdb/meta/character_male_134.txt new file mode 100644 index 0000000..fe726b1 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_134.txt @@ -0,0 +1,4 @@ +Esteban II (Cape Version) +Esteban +CC BY-NC-SA 4.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_135.txt b/my_changes/player/skinsdb/meta/character_male_135.txt new file mode 100644 index 0000000..e9d8ee3 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_135.txt @@ -0,0 +1,4 @@ +Link +mastersword +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_136.txt b/my_changes/player/skinsdb/meta/character_male_136.txt new file mode 100644 index 0000000..4de2bf1 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_136.txt @@ -0,0 +1,4 @@ +NejWolf +NejWolf +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_137.txt b/my_changes/player/skinsdb/meta/character_male_137.txt new file mode 100644 index 0000000..76ac7da --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_137.txt @@ -0,0 +1,4 @@ +Lyoligamer +LyoliGamer +CC 0 (1.0) + diff --git a/my_changes/player/skinsdb/meta/character_male_138.txt b/my_changes/player/skinsdb/meta/character_male_138.txt new file mode 100644 index 0000000..6ada3a8 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_138.txt @@ -0,0 +1,4 @@ +MBB +MBB +CC BY-NC-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_139.txt b/my_changes/player/skinsdb/meta/character_male_139.txt new file mode 100644 index 0000000..8929830 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_139.txt @@ -0,0 +1,4 @@ +FisherX +I come from Norway +CC BY-NC-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_140.txt b/my_changes/player/skinsdb/meta/character_male_140.txt new file mode 100644 index 0000000..32f0161 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_140.txt @@ -0,0 +1,4 @@ +Onyx +onyx58 +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_141.txt b/my_changes/player/skinsdb/meta/character_male_141.txt new file mode 100644 index 0000000..51ea2c3 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_141.txt @@ -0,0 +1,4 @@ +vangleidson +Vangleidson Extreme +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_142.txt b/my_changes/player/skinsdb/meta/character_male_142.txt new file mode 100644 index 0000000..ba24f79 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_142.txt @@ -0,0 +1,4 @@ +Mr Business +Gold +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_143.txt b/my_changes/player/skinsdb/meta/character_male_143.txt new file mode 100644 index 0000000..313f477 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_143.txt @@ -0,0 +1,4 @@ +Pikachu Boy +ElMehdiBen +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_144.txt b/my_changes/player/skinsdb/meta/character_male_144.txt new file mode 100644 index 0000000..7f373c6 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_144.txt @@ -0,0 +1,4 @@ +chico blanco +daniel pereira +CC BY-NC-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_145.txt b/my_changes/player/skinsdb/meta/character_male_145.txt new file mode 100644 index 0000000..d22e81f --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_145.txt @@ -0,0 +1,4 @@ +Near +TheGamer +CC BY-NC-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_146.txt b/my_changes/player/skinsdb/meta/character_male_146.txt new file mode 100644 index 0000000..9f5f74e --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_146.txt @@ -0,0 +1,4 @@ +abu +anon +CC 0 (1.0) + diff --git a/my_changes/player/skinsdb/meta/character_male_147.txt b/my_changes/player/skinsdb/meta/character_male_147.txt new file mode 100644 index 0000000..9ab607e --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_147.txt @@ -0,0 +1,4 @@ +Male +TenPlus1 +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_148.txt b/my_changes/player/skinsdb/meta/character_male_148.txt new file mode 100644 index 0000000..ffe841f --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_148.txt @@ -0,0 +1,4 @@ +MCL 2 Skin +MineClone MC Skins +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_149.txt b/my_changes/player/skinsdb/meta/character_male_149.txt new file mode 100644 index 0000000..d9d26a9 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_149.txt @@ -0,0 +1,4 @@ +The Green Wizard +Extex +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_150.txt b/my_changes/player/skinsdb/meta/character_male_150.txt new file mode 100644 index 0000000..dd4160c --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_150.txt @@ -0,0 +1,4 @@ +Duke Nukem +unknown +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_151.txt b/my_changes/player/skinsdb/meta/character_male_151.txt new file mode 100644 index 0000000..72164b1 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_151.txt @@ -0,0 +1,4 @@ +Mumbo Jumbo +Miniontoby +CC BY-NC-SA 4.0 + diff --git a/my_changes/player/skinsdb/meta/character_male_152.txt b/my_changes/player/skinsdb/meta/character_male_152.txt new file mode 100644 index 0000000..859af30 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_152.txt @@ -0,0 +1,4 @@ +Scientist 2 +duckduck +CC 0 (1.0) + diff --git a/my_changes/player/skinsdb/meta/character_male_153.txt b/my_changes/player/skinsdb/meta/character_male_153.txt new file mode 100644 index 0000000..b5b1542 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_153.txt @@ -0,0 +1,4 @@ +SirYakari with clothes +SirYakari +CC 0 (1.0) + diff --git a/my_changes/player/skinsdb/meta/character_male_154.txt b/my_changes/player/skinsdb/meta/character_male_154.txt new file mode 100644 index 0000000..c4731e7 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_male_154.txt @@ -0,0 +1,4 @@ +SirYakari without clothes +SirYakari +CC 0 (1.0) + diff --git a/my_changes/player/skinsdb/meta/character_xcost_200.txt b/my_changes/player/skinsdb/meta/character_xcost_200.txt new file mode 100644 index 0000000..00b0098 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_200.txt @@ -0,0 +1,4 @@ +viv100 +viv100 +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_201.txt b/my_changes/player/skinsdb/meta/character_xcost_201.txt new file mode 100644 index 0000000..dc82402 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_201.txt @@ -0,0 +1,4 @@ +AMMOnym +AMMOnym +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_202.txt b/my_changes/player/skinsdb/meta/character_xcost_202.txt new file mode 100644 index 0000000..6707a11 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_202.txt @@ -0,0 +1,4 @@ +SuperSam +AMMOnym +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_203.txt b/my_changes/player/skinsdb/meta/character_xcost_203.txt new file mode 100644 index 0000000..a5093bc --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_203.txt @@ -0,0 +1,4 @@ +santa +jordan4ibanez +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_204.txt b/my_changes/player/skinsdb/meta/character_xcost_204.txt new file mode 100644 index 0000000..e7e2a72 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_204.txt @@ -0,0 +1,4 @@ +Golden Knight +Nero3605 +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_205.txt b/my_changes/player/skinsdb/meta/character_xcost_205.txt new file mode 100644 index 0000000..fb9a367 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_205.txt @@ -0,0 +1,4 @@ +Wii +ClotsPlays +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_206.txt b/my_changes/player/skinsdb/meta/character_xcost_206.txt new file mode 100644 index 0000000..8e8f0f9 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_206.txt @@ -0,0 +1,4 @@ +Batman +unknown +CC BY 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_207.txt b/my_changes/player/skinsdb/meta/character_xcost_207.txt new file mode 100644 index 0000000..ba1a8b5 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_207.txt @@ -0,0 +1,4 @@ +Sam Angel +WidDos +CC BY-NC-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_208.txt b/my_changes/player/skinsdb/meta/character_xcost_208.txt new file mode 100644 index 0000000..f8cdea8 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_208.txt @@ -0,0 +1,4 @@ +King Sam +Gabo +CC BY-NC-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_209.txt b/my_changes/player/skinsdb/meta/character_xcost_209.txt new file mode 100644 index 0000000..d1621de --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_209.txt @@ -0,0 +1,4 @@ +RoboCop +Malarif +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_210.txt b/my_changes/player/skinsdb/meta/character_xcost_210.txt new file mode 100644 index 0000000..d5d303a --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_210.txt @@ -0,0 +1,4 @@ +star war +edwar masterchieft YT +CC BY-SA 4.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_211.txt b/my_changes/player/skinsdb/meta/character_xcost_211.txt new file mode 100644 index 0000000..6bb67a6 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_211.txt @@ -0,0 +1,4 @@ +WW2 Reich Soldier +Guitarbro_ +CC 0 (1.0) + diff --git a/my_changes/player/skinsdb/meta/character_xcost_212.txt b/my_changes/player/skinsdb/meta/character_xcost_212.txt new file mode 100644 index 0000000..1680a26 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_212.txt @@ -0,0 +1,4 @@ +Soldier +jmf +CC 0 (1.0) + diff --git a/my_changes/player/skinsdb/meta/character_xcost_213.txt b/my_changes/player/skinsdb/meta/character_xcost_213.txt new file mode 100644 index 0000000..06dcc3e --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_213.txt @@ -0,0 +1,4 @@ +KyloRen +KyloRen +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_214.txt b/my_changes/player/skinsdb/meta/character_xcost_214.txt new file mode 100644 index 0000000..2a87a39 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_214.txt @@ -0,0 +1,4 @@ +deadpool +skrullox13 +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_215.txt b/my_changes/player/skinsdb/meta/character_xcost_215.txt new file mode 100644 index 0000000..a8e813c --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_215.txt @@ -0,0 +1,4 @@ +Ashley +loupicate +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_216.txt b/my_changes/player/skinsdb/meta/character_xcost_216.txt new file mode 100644 index 0000000..876d63c --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_216.txt @@ -0,0 +1,4 @@ +Male angel +loupicate +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_217.txt b/my_changes/player/skinsdb/meta/character_xcost_217.txt new file mode 100644 index 0000000..3151c12 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_217.txt @@ -0,0 +1,4 @@ +Police Officer +maruyuki +CC BY-SA 4.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_218.txt b/my_changes/player/skinsdb/meta/character_xcost_218.txt new file mode 100644 index 0000000..9872e9e --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_218.txt @@ -0,0 +1,4 @@ +Cap +Christopher Tamuklevich +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_219.txt b/my_changes/player/skinsdb/meta/character_xcost_219.txt new file mode 100644 index 0000000..95b9079 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_219.txt @@ -0,0 +1,4 @@ +iron man(skin iron man 2) +julito +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_220.txt b/my_changes/player/skinsdb/meta/character_xcost_220.txt new file mode 100644 index 0000000..e48e02a --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_220.txt @@ -0,0 +1,4 @@ +TheFlash +julito +CC BY-SA 4.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_221.txt b/my_changes/player/skinsdb/meta/character_xcost_221.txt new file mode 100644 index 0000000..b903459 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_221.txt @@ -0,0 +1,4 @@ +zm78(old skully) +zm78(experiminer) +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_222.txt b/my_changes/player/skinsdb/meta/character_xcost_222.txt new file mode 100644 index 0000000..b4ba922 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_222.txt @@ -0,0 +1,4 @@ +King Arthur +TMSB aka Dragoni or Dragon-ManioNM +CC BY-NC-SA 4.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_223.txt b/my_changes/player/skinsdb/meta/character_xcost_223.txt new file mode 100644 index 0000000..35ae998 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_223.txt @@ -0,0 +1,4 @@ +StormTrooper +unknown +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_224.txt b/my_changes/player/skinsdb/meta/character_xcost_224.txt new file mode 100644 index 0000000..952ad66 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_224.txt @@ -0,0 +1,4 @@ +Chewie +LordTrilobite +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_225.txt b/my_changes/player/skinsdb/meta/character_xcost_225.txt new file mode 100644 index 0000000..f1c1ce9 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_225.txt @@ -0,0 +1,4 @@ +Darth Vader +halucid +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_226.txt b/my_changes/player/skinsdb/meta/character_xcost_226.txt new file mode 100644 index 0000000..501ceef --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_226.txt @@ -0,0 +1,4 @@ +Ducky +Queen_HD_ +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_227.txt b/my_changes/player/skinsdb/meta/character_xcost_227.txt new file mode 100644 index 0000000..0acccb8 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_227.txt @@ -0,0 +1,4 @@ +Frodo +Frodo +CC BY-NC-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_228.txt b/my_changes/player/skinsdb/meta/character_xcost_228.txt new file mode 100644 index 0000000..2ea62af --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_228.txt @@ -0,0 +1,4 @@ +Man +unknown +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_229.txt b/my_changes/player/skinsdb/meta/character_xcost_229.txt new file mode 100644 index 0000000..4293326 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_229.txt @@ -0,0 +1,4 @@ +Elf +unknown +CC BY-SA 3.0 + diff --git a/my_changes/player/skinsdb/meta/character_xcost_230.txt b/my_changes/player/skinsdb/meta/character_xcost_230.txt new file mode 100644 index 0000000..28980d0 --- /dev/null +++ b/my_changes/player/skinsdb/meta/character_xcost_230.txt @@ -0,0 +1,4 @@ +LUCAS +LUCAS +CC BY-NC-SA 3.0 + diff --git a/my_changes/player/skinsdb/textures/character_female_1.png b/my_changes/player/skinsdb/textures/character_female_1.png new file mode 100644 index 0000000000000000000000000000000000000000..0bda6267b09c02121ddea85d58393fbec9c0215a GIT binary patch literal 1417 zcmV;41$O$0P)IFitB+&b&x6sC@M?n!VqQ1lvL`_ zs8gzr4eg3erWWiWmRhLlp=yy>tJCwm=f3B@=iUppYpZ<3(xdZzInVFB=iGCXzP=W} zi9|xpWCj#cmMv!!>cQJL)Y|xUwKi=;WiOBVzKi~o#$h;^O7m>`QUVA@0qgPu$Og=3 zjZgvYEC3k^mmWY=*h>%>9sq|jhqYYs6IVYN30b$l zOr!Gh`MvOTPnE!2(iX0!Pg%pV^g|MQ_>goU@#|DX8~(?l+&`0~` zy`i%Q@N{X?UB$dV`A45jQXb~>`HTgS&twb)okt%#K5xPrhRg5zb35V*Z&%sSm z8jxZDQ1wYE{EBLl{z;7g1@U*=af``e?JMUinP`E;)|L}CX=Cv!FaTFdvU@uScMmLr5ZiH zc)|3QD+LDt?dx$9+O5XZq!1y9mOoZZif93Z9s`JaUe^F%UIKt=2GCXnY}eG6JHL99 zGg}5wP!FZk_Z=mZ!=yxFLS-`f&Lg1tKScmj`Z*gmEXpfeUSZG(>e6yZmz7sI&#p$!I%j-KvD0c=Ry-0$2l*h&v zoe*UJ3;|;c)w(gMjWYl;UN`0;)T4~HLSX+xL zuhhcPq0=WgmI1&J@@#J1uDlO``=Jli764<`7&1|Cp8(9yKPQ7Q&8rRwx!k9If88$x zz>5Gf^4o!t007fmp54_ZU+$g^K(`gEH4+)B?31KHHod$P0YLZd4uFn`cznbH01Wgw z6+q2|`r_Y*Rs_Y9G)&t^m-!ivd9Tg9NyG(=^IUfB0kVCgy+bjTDqBOTv9bZ6O=4Rx z0N($|qtDRLCJFuc5M%(zbNDg#08lsg(<|Rl!@qu?4nVZE0|0w^bn3Ah z9eu3gFsTJ7w{AZR0YC)cjJTd!Bhew~9bkOwOWDxpLlM%49+$BlaM0QD94THN&kg~Q zE6hL|vb{q9?t3&qSlr@5A?8hnUvo6!df0pr0!-UCf(OMhFSZie?3^0yZUJ|$?E`3> zU^oPX0qA~>CACmDAUZqCd-P!y##*M*>*!<`EGAjjawNfWPqc zAE5u;(Xw@N|Gjp<2<4;~4v*{s76icNWjmK?EI)&#%d_?0!=K>62na4vr#HiqWSss- z7aEDj)kGprpR?t$ltLR{fuUF|Mk)G0*RI9rt^naYkSSi5Ebc??ExrX3S^vC28a@NI zdJAAs8yXxm203s3*(z@9rBG+3%jT_NjIt>%<1z&?grNDTZvlJN)~{FtV5>ENF1EnG XjE%A00000NkvXXu0mjfq|T~0 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_female_10.png b/my_changes/player/skinsdb/textures/character_female_10.png new file mode 100644 index 0000000000000000000000000000000000000000..aac13dc55b05c937527aeb74592a8d2a3b3f9b2d GIT binary patch literal 1198 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 SL}z^f0000DjvY^G$7>vCZ_4sSV#iJh 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 P00000NkvXXu0mjf7-jeb literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_female_15.png b/my_changes/player/skinsdb/textures/character_female_15.png new file mode 100644 index 0000000000000000000000000000000000000000..3194a39231077f005841c69d59b2cd48cda2529d GIT binary patch literal 1214 zcmV;v1VQ_WP)U!l95ak%GXadfk zK1N_%Iw%JncYHYy0{zj-85i0v*Pf&aT{c?uJOv$Pe9+pKmX>_L_qtzFf3%LF4?Y>_6N`Y<)pIm)>dIMK zG->$7xU_A$B*x>RBaU|g2Ve#Yt;ZqHIoK{D^7(u)LFtBzG$HB2;?p-S{Pv3gQHc;f z?$}44DC0}|C@nz)3_o=SlEcyQ8VeKjL7cwI}OL*!Z9vG#2eY4NK#G zR&811vTH0L~3IfVZ`^k-!ccKi_$mfU=f0v?f^l6;HtD zC$|YGG%rfV{(A!AZUKB61E~B&mN8xOYin!&b_?`>%9-KGX%e<`vvX#2Vv=l4i0*Iu z9{@n*KSj2f?GxH2Hjp4-v9HxSmnJ8a0Dz4ndJ$n2P%Z&BVFFw^uN(qw3^O=S#cW5R zZYA%4!FCcE(`{vC#mvmike0$RXwUOVV6)Hm;^HES&T%W709V;XB|yIMgJRq^H#bQb zcwb*1X^s>4!tWqPzgzTm93)7eK9-_XK+s-u5g>`sO`iEdF>VVB3tOH(3v&D$65RUw zdWla&2_KptPNWLZFP*u$!WPKo0xKZzr~m-{G5Wd$7;MCl(+w|HO#*xfa`K64kT&q# zFLDI{C;&5P$nx^C>F)0K<9rIhMo#wE4M5j&gJybq+6Mv~G30_OfXkncMXmr{{;sl@ z+aq!XXn+s~53q=@uC9{6#*ZP+MDSi^0nm-vF@x`L1_m23<*#JpmdM1wMoi{71`_(ma%SYqY>6O-ocD*9r6?Dn>gww6iI$cY zlTN2eU~9j*x!Lz&>%0bJetaVvH?oeQ3<+$+IQKR;MZzROcMWBI@UVG4*RdS++8hLa c*PdbX6G;WVICatL=l}o!07*qoM6N<$f;B2HuK)l5 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_female_16.png b/my_changes/player/skinsdb/textures/character_female_16.png new file mode 100644 index 0000000000000000000000000000000000000000..d7fa11261401242567b22b060ca323c887fe507e GIT binary patch literal 1118 zcmV-k1flzhP)VI=t)q66pLbtv?mpm zf=%0lNNLlaqaap_ic-;{_25Ya1uw0LT6^^-1wDvFiWc+ZzDd5x%w#v&{A@Qk5Z?cr z_g>z-*lID*F;(ss)9L)eE%nOm71F1x&5VvD7)Q61>ML0ed zoiO1t`@kHz7xrEtjw8ejpdhIrGVMj+)!Ne-JiS-k^W>Dyw>;?V62&|qSjn1v^e%U| zR^q5k+q@Y-$;(3yevzo%*(V$PU_%hT0A-%6=M}CT0Sb}|pmacX(9xO4A~|&iiUK>x zk*w|ua@jw4UO}Y;C@=(%fb=9FryBsrLr+MzAz!+0_`yD2LEZrr43Yo@kCMdIM{wwB zgf+H>c)TNL+nL-MNCLK?tswTXlC33=cYxKuBL_%0lBeKW!x5HFrPbmlTs9056K;MkjjpH1us$x^F-IBvcv3LX+A25|BNUw|ZoTo`+ZC_|9qK%jC= zbnm|(J|tL#uPi+iG$FE`j4Mi-o-Xr(&bx#Ajs}&Bed^U`B`yP#PvPc>;TMDH#>MX} zwE8K>G_g%vn^`jPmyOPTQ}{Y@>*dG1m}H&1=Z`D#ow^*B#WbG^+AGQ?k=FsbLb>!) z{~lpV#h~Qted`3TRuI<;KneC7?&NvSyfMEUnC}L)xLhkh|FIDB`~5uUa8oAvf52pgVE@CR9umCJLm(nbwe{$%Ywbr&kN23aSfK` z-NuNX8RSK@&XeUx8c>$Gjr#`9byu`UL-3?#Kfzy@i3wRMY4WmPl)=jx<$pD_>V%wr zbur&SXm@ozn%?N&re_Cv6-r8%tz{>;as(&=tCqKWgh0Ynh_zm>+ya!S-T}NQCcn@^ zA)rGA3E!CmSr+V_F1%;e3xI!KF96;ui)Eo7hkJb|ikVa-uX+I}aSS{?GQB9W9EnpG z$awg^2OSW*euKw$>Dom(Mn^dB0Q1Z7_``XjPx$be4)Fy^2qZ*qe;IeZ1CXo~3+tYo z;$&>FUuIk4ktgakX!kGkn?d@lX6eiWrsWZM>>zQ(x^LTNpaOOtY+=No|N4XTI<_=1 z;=O+Rh4Y1C7CCZYhtA?O>9=-O_9STOSYjIHmz|0pg*UbYC3hM0LPrC;IlrRtt$2!p k4WU13+o;*Hi@hHI1LE$D@n&IG>;M1&07*qoM6N<$f?t^dApigX literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_female_17.png b/my_changes/player/skinsdb/textures/character_female_17.png new file mode 100644 index 0000000000000000000000000000000000000000..210a17b92ecff01ac05c466ff31e4ce837c62874 GIT binary patch literal 739 zcmV<90v!E`P)Y7WOe+36y9=a^+zO5^GeKs@=x*ENAk6oR z2tW3DieT=TY3Pw!S5c{l^6yieLn-RS-vpNgWF0`(kia?fnxbLv*9c}!ke*&FF&EgjCBL!RhI{_w z(O1XwR)C*;!2D9iBFufcdptW$GU2bnubnIL#JJ}Mgh>P$a&^n0b$zA$8n8IK$zrbPVHks1k6bI zxchege9eb|br7n7&~+aJkURlNDF6U{_2Sul_W@ANhkynMZTuy{Zam*1EL#OUfAWwU z$7Fby5OW(!-N-l5lQ34J37?$y}C z+K2L5EbMpH8ohbry6}8^!Hm(k2n;^vK!ga3S^mc(;LX``>d7Z)Ob}6){$ns}z#k#T V3I!~rx0CF|82`<#JI*fSY8?#CmIM`oE@4C%k(UsXz{o=q5uH6q zpob225ju78*3Cmu7D7v~f=CAs3R-&WB0?akD3Urm?YOh^r^D=wGdpi*=IySoXg?5V z-h1DB-}n3eyl;nr57rm@biXxTNOUEca^#O2p=v8oZPZXpuu zBNB}2Y}Ygz_08x^!D@{QJX(6 zaq}Z%m!l=ZT?5!?(fi(B=!!N#MP%*9lg1{eCiI1+S-tDledg|sR@d6BC|IOqW%pj! zuU=jwmXB_M#4z^P-x`bA zs3Q_c#+#U%pVoatSeDSIIU=vvLj~jGG9W z3hoq;C71WF-2Q^(=MUDq`7G=#TVs}tES23X#Tz@1lrQkUiT3UkQ_DukG872Z2c&mb zusAqky)O=qAicX1_z-)s^Q-=aAbCH?Tu``J`@Om5C?MZH4LIhXzx?jWw6L@6S%3tk z-czBL=C-o-r;UVj-wFOFpxO#l8%$x&1Aw$Tgjzn1P_w(`l~#vP%SI3m8)9{>uO0LI zYh%_`*pL`D#?1aemWuvrB=riK8VT^l$s2w(ffxbNj&Wo~fhZ8|7_Uh6JuN8uV<_4& z?kSj&6vU$RpA`L|sS!ss_}v=iqNEyNl9Q1X&vk-QkH6{#I)yyi=Ho!gE;LCHJUEDP z900&>63L?{ZL}RO0yvh%p)6bPah`X~3!)f&^P0-1NToqc0gh!)S`Q*lA~IYAuzBMv zL4u+vP!#VvVImx2tUmx?O3zLz5Km!Q7P6TJhZ_a6!K-pm;|*g~>pdJ|plSIVA@FIX z!LdKbvJQjGjRIBGpsHGFiiK4FMHPTWfWz3s4J#FBVQ-RDU4yEZMu4V;OOm5S4PY3b zdjFWX;L+1}R2xP+#-VMJ+t;j|L$U8gron}tkJlVfollE@)3#*dGVNRZ00000NkvXX Hu0mjfc-iGV literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_female_19.png b/my_changes/player/skinsdb/textures/character_female_19.png new file mode 100644 index 0000000000000000000000000000000000000000..a185472b1ae80e48c3e550f2ea33aa3a20680da3 GIT binary patch literal 1195 zcmV;c1XTNpP)E_Y}A7X19(6bFCH{PIB23K9=sY7F9Z(~ z5&s0QXab4xMxy=!8qh>d40_{)A{QVYIH(|EwFpRBTle?2Z+Sc2cDHm%3ph!4X5QDn zuX%440?K9lm>Nt=lFG_}T3t)3%1{M?6Uo04owbgh>^>LlcQK8P9t! z{N+p&@}e9^oTCq(>TpQG8L_92)nvFu#p7|CsJgm3)w(uigO%gPTLy5t8wO(_{bBr0 z7~ULU9056y{>TQ5s`Gskwe8lPjsQm+hI8sOY};9^DQpj|hQtOZ2e-?rrIH&B9zd`2nXe!Z<`!Z+G&t z!)wsU!EnG>PQLmevk1Ji6TKyECsrOqX*Pz}tgHnWMNm2cbfCeH9mK_w>6iw4qQ&LP zcxPkVU`aE8+MqO$6wI_ZHVSEvAB@@)I!*@4n%i`Fn+;z3i25#q?e zAf?RvJ)+1)0AAaClXOde8l#!_%hN-)3la115ny8>!^{j*J~>Zh90@Ja!@3Bu($K>) z#E3AAO{dc8`Q59QidX~2jsOCVlrl_*nsDIR8IrCXG9bu`u@N*QI!4rhLzFRU!ZkF@ zwb4Nc#t(wzq*WCTA31_rWt7>8NsmpH6%^xV=xw*AA`?_K5Jd)7fbx37%Z zc(Dl_?a0foGgvi1N9>mUe+TTANawOMFg^RhcII;t=7Ki`V>Z<9T-(ppfc5i@8457^TJKi_-@0d^UjwDcS*%NWD$u zqH0%%Qtt@H%EKubi&gC^QbkMa5!~OUQlB4LA7a!pjrNGS>d18!`95dS7P5#&O-H!# z6zu?~7myJ~y0dcIA{V zT?B&TFfik{J~vGJt$g_IfLzKVx?Ts)J_b9^E8k}5LV6W1RLD#!Vq@V{{t`TA!EyGH z8Tkxa3|&wS$(O{#GB_hFL0ho!Jp;Jn>$>JMeqmvOjF)W?#`Dq8W%;@H-2qUJQ&?Bj z2@c~`#UCQ&$YVy<5Kb53vM-d!_b!0Q;S!^al>b@NN$R5bAv0!HPpQbpS2f{c@p7x^?n^`JNd|YV^S&B>wYmQwIeqatzR(8zs&FGbz0d3_ zHk7sr^!N9>Q)x_c+udWfFbP8>If@KN5#)?un3uWOBJFk+{s%*o274UoIUoQ4002ov JPDHLkV1mU4D+2%k literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_female_2.png b/my_changes/player/skinsdb/textures/character_female_2.png new file mode 100644 index 0000000000000000000000000000000000000000..76e141cce003f491918ab83088975ad44934cef7 GIT binary patch literal 1276 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 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_female_22.png b/my_changes/player/skinsdb/textures/character_female_22.png new file mode 100644 index 0000000000000000000000000000000000000000..d6855af220b5ed6f764cfb5258bd9e8282668773 GIT binary patch literal 3172 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 LNkvXXu0mjfry?gQ literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_female_3.png b/my_changes/player/skinsdb/textures/character_female_3.png new file mode 100644 index 0000000000000000000000000000000000000000..a1c44e16199b6758360d111b505c82025bb1f573 GIT binary patch literal 2854 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 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_female_31.png b/my_changes/player/skinsdb/textures/character_female_31.png new file mode 100644 index 0000000000000000000000000000000000000000..4b37bb8f98bd012b6ac81c68d07879c811ea41c2 GIT binary patch literal 2078 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 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_female_33.png b/my_changes/player/skinsdb/textures/character_female_33.png new file mode 100644 index 0000000000000000000000000000000000000000..cc56457d96ee85834e6938d311482de737b6c885 GIT binary patch literal 8304 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 YA4O~X%3yEkVbUzhUy#?F`|6gz0aXDH^8f$< literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_female_35.png b/my_changes/player/skinsdb/textures/character_female_35.png new file mode 100644 index 0000000000000000000000000000000000000000..a88dcb23d54733f846ea0756ced0cefff42ca057 GIT binary patch literal 8325 zcmeHNPiP!f82{e<*=9GpX^b9Ny=Jn(!PQlUN`d4c1t}cr&jg8K<&RwGHv%2BSg5twf5*H3KLH)zL@f?5)*f)< z%hPaU>2!-jj@Nx`2_W#CaLRM*@y6N`Z?Pmm1z5#v34$h_#*%<0V`!^63tQ(+)8ql} zFa~C!;07!B#bVLrHBw3|p$XtE zkKiAFC=G`xnumLNOi{p#;8nWBOD4O7O54iN1W=0?QpqxS40HLbSE2jZC(zs51Dl(7 zLj$KF^4G?OQjcV99sv+K2grMU0#7tudJirg$v`HPhFor22`(!0KQRXon1T5js2R#gLaKGN(@`bm2{sXWccpv%Y3Hx#%CgR#-FznL=@cL7z zbQH_igem~m$O`Bh183z)aMnh_vhjrc#BV+zDqEjYhcSF>@a)1DRp49i`)p(d z+E*0y2{`=VcQV_pU;X|wx2~$}AD#^KU%WC?6`$;b8c7?y5NI#!Q{C4Cyb6uH*8<;& zuP8Q-9Yss66S@ql&7yI|szF0$Vd;-z#6YEQfbrh63#AE|Crm6LE;8ZmJ@87@*KO`a4&lB&ar8Dtp0`{Rmz?W!MlX zH=zeSeIQ|KJRv2^h6H7RCK%KsGH_fI$qD0(%0oWj@F9jHh4u#C)|PGBRp)K10^;LU zz*C?k^T{Oy95lX*l0>HUwWQHGRjG5UgQA{LFNq!?N@3rLNeD$JT3eI?Oi)QJFMdUw zJc&dZWY-Q^XabrEN`Us3&G;0y$!9(i)uu`VXUV1Mpn<8R}7<=xQlb6671@T6!vesZ_n$qI*OFFJI28>;w-l zbEWB9aPO7M1l$vc*KjKh-RU$}+|K2AN$;XAJjgt+zN|xa+4jwYmxb6ZBene7bMKr) hixK)?fQn_)(?4_;V9uOV7S??q6=4kbD3D literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_female_36.png b/my_changes/player/skinsdb/textures/character_female_36.png new file mode 100644 index 0000000000000000000000000000000000000000..81627346202bba42a8f48f0d65c1417d4b1baac0 GIT binary patch literal 707 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 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_female_38.png b/my_changes/player/skinsdb/textures/character_female_38.png new file mode 100644 index 0000000000000000000000000000000000000000..626f3b832c4265679a9fe6357209bc975ac2a33b GIT binary patch literal 2144 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 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_female_4.png b/my_changes/player/skinsdb/textures/character_female_4.png new file mode 100644 index 0000000000000000000000000000000000000000..4900d5bdda19de757cce5c899057f25e358c63f5 GIT binary patch literal 1996 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 Z{s2+4%xA+I2ZaCt002ovPDHLkV1nY1?A!nV literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_female_41.png b/my_changes/player/skinsdb/textures/character_female_41.png new file mode 100644 index 0000000000000000000000000000000000000000..46ec82426b5542f0f83e2ddf9eac2817d0b6c410 GIT binary patch literal 3563 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 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_female_42.png b/my_changes/player/skinsdb/textures/character_female_42.png new file mode 100644 index 0000000000000000000000000000000000000000..3869c2d2f996ff16d7e423b96d2759a75a2e9121 GIT binary patch literal 1621 zcmV-b2CDgqP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1?oveK~!i%-B??1 zR8^DNrg}Dn)E5;{}b3CDfJ*Ehy7c+ED4x3QjRG zq9!I1eJ}=M6%#KtF+AXl(WozIjG`8zDcI%y_MGo@&7LzH#*)m)BrALE%h~6A-(I&p zo)_~w_Ev8nu%kezHJf4Z$zvAZ!7Qg{W_els^mjDu0@c`pK zP@gnFkpu#yb+`mz9HhnVU-9z*K@zA(^`l$>Bvd@WxDVtBYZuV*0Q$hgHTJX*7{CWN z)mi<9i2>RL0E|LcKz~QWQaS#_N;%T8LMFDZkfX_j47A)~Nr)r3;^(ym@KovF=ra%= zHbe|=thMseqst9ZkQ*ol=o8mOV4SHDE-=(uXGsAe|BE!JqdI};2(Q8Nv~@akiD8=5 z`)Vt4-%)lKV8GHrPW!qxcb>Le5Mlj~-Fx#2B<`nMl37tf(gp5Teo@wdF{C}NmB|xQ zcdI9-yLT5#JwbGa-#~V zipUb$C*3^HIhmRgE4=XqeVVd1Y4_IXW&<4)Dxy%*{;eZEPnUiV@bGg8iO{#fC|7W= z%=$9LXUpyac^|N{syg##R#HQ~k~+{UnK!aFx@&Pi7#To|t_z~{bI+!@SeXvJ#621>66g~-aQhFas(LgetV;&(me|%fJ87|UT*?sKF(Rd z>}O-PE!_gDylQXBP4(WAMfKjYTN;zQQ{r!4EB+&ECE5E-Apx~!ov{=vHC5HKqet^h z*0lfq z$2vLrekeA6oINL3PJI+gEFl2qKX`vm9=K2Z=2hZvT4OB0$OfY~nX&a|?ja-1Mhr22 zTVu{e3<>y19R$DWeZltcS?Yyx06JrU8#F-}_F(V>C=1N&f${U%*XH*JSOma;Y^*y! zky~rU%mF<6(Bla(CvU+4Xw$v9(>LHONa&aY5iJe57GogC%wLUwt#^Bt1PF8%NiG5C zYZ5egjF(D)CJ1^g0bN6Vvj3GsR-i*hPP{DX>}c3`=XKw;0QLb|3oF4W3(zFsc}Q4u zs1t{|lOVc@3ph-Xfkng;;QpD({*^B>^2@3DqDQa$_4L8eyxkZu-PvPJ5PnSpVBY%X zs7cVzhoE&lQ3N31(!?zhtOt|}lxzVP&x~3y7d{-8-={{b{__We1^@Gt0IWy8Wq&qp zbX5$|0^m|406K$UF$*Z>8X6GZrL&GDPg_U?A@LRv_#i&uhwgrv8K1P~cVX;U7~y$J zh|pNafQ8mggFg+Jyd10n0W53~1KcW)rXK~KbFPJG!s7_Qd@KQcLHMFUQ&kxN-r}2W z>(09*xF63fKsUhYLq`lKg#eg%luKajQV{vwdDkVbiGa4d=7SaV4GHsShXIe%gYM3| z{U`#y8=bHp5AXmDJq%jT-NB6^I>kj1aB-iBKW2})?CV7d;vWB*0FqFQfTrc1KtP5* zDZCJXIR+ghppOCu?x5F0XAOXP)&S7)EQLg%{p-b%5V#&MrpLO#LM;HGP{FZ^JG=ck z`6@kZ1>i9co$GWJh-dUX=kz$9WoktGb?2@yP5#lJE26F@u>>^K6uJOTo}vlDS`;?C z9z#b=n0{)9z22gIr|t1@409j>EeYaUUWw7?{ebJZ7oKs`^ySZUm!4~tI0F6!?!<6X TcQ4#x00000NkvXXu0mjf6WjOu literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_female_43.png b/my_changes/player/skinsdb/textures/character_female_43.png new file mode 100644 index 0000000000000000000000000000000000000000..fdb43e2bf6bee7442e9b465166b248715ddd48f9 GIT binary patch literal 8325 zcmeHNeP~-%6hCiGW*W?JNVKH3)O7W3u7uV8v~Iz^oK!2cwQw z5VWGWL2ZXy{}?J=9mv*g{#BhgKW2yR5Ja6-OE<>iWHoWc_`JWno!5JBUfxS=;)~#c zmwV4SzkA*}zx(kXNnT#Haz!k9OO%LW@y3QG(LNxq%E(;t*}r#Zr)bKzHLiP(Xx<52 z*6yl#3j~1T4a?SS30swwXU|#!7F6QcS`tzQrVP?Smn`q>EkPZMxyDwUDHI?GG~7q9v<29}7y zcLn5<=R*(Hxx(H#bllZmN=9D-cvjV+<2eoa~=t*huX<601a14%V+7Sb> z*bhPi6;7BFMRE`n_jdbQc`*qn9@lM)zLpq~xZ{VxjKw;)d=FI*w0LoIYoK$3+yWcB z-ldl|$7Me15{3awfBWDn`msML{gus8I`_>wI@r}Lb@eF$1D5^19goVb0G<8Mymm<5 z1MxfNACrfuB?OqD#5&g9l5qyO5#aW^`_YM$GH)&rEyQg+V@&^w*1li~kQpl^wKK>Z=IG^%TRg`*z-t}fS7CF2pUyMQt%;AA zhJf{g6QI`9+OkHfy$3!}%_Y?@I04xIrkH1f=?_x34ySEx&*z&={i(g$kdd!OoKv3< z&cnxtorAIF-kPj;&aO)cU0*2zp{gWy{!A@ z$8;T9q;`{LjQ!NE=}^=ykS{(XSb+_pD_J%`a*F85pY`Rv=hjUWy?o97rV~&Bh|N zvnC*sNNA~rLlv^v=Lf!b?43t`p*_uaQ#e#ciNpoRjt=8hBNG68AOyHAe>Fk1KR$6@ zRmqOrLE%3x;f+zVqZm7K1C39NX?CItNsPL6&oX!r zoA8>Zee!p-M%og`!fC z`oOA4^iQc$KYV=nQAM=YFCUGfBwB@hjAqhKVq$8pXPvowX5X1R_uOeF&UoO=dF-|K z-D{t7&px^B!R`6sbYe|{h|;;OgSV^pMpXx55%oLv+P)`M6Mtyyox6!LpP^bWY{>L0 z0Oba6+VNo68W@zIW&H3s=`1S8I#%CCf ztRNs{vMtHS!euTT2%G?l1q@T_zJ)Z6=?L zbP*~7fw}5VFj?tbxiJ9ExPJ2Zn}qs*D#ifdz?)yRX+~}P*}s=`MIUpJagoGjpXHs} z8UujSUIsyuhYZDwu-9BC2Elj;mQx*aEmhw6X3}6Ml9oPMLGnCOAp&vurG82!Q?zU6 z55#jYCQ~KGwE^;zxBH$DlFoVMc@P5mNB7(G$+qukyjY|+#)d0FfLx|ZjH}t9ymS2J zGf-(;vEF?>W3RpRN-E8kXsYlV^<^*8Ej;4Bl*@U@u_L4|#y|Zsu64OD^;w58*X6%& z>rK%bxpu&oc^(9D+RMXE-UT3UB*Ps6Me1YhXaC3-lWh$^NIJJVZo^+yKt$d8oEx9S zj2?QC!t1tc)V-T8agp=V2M`x01gDW)8*9@~NIKUWJ?prUR&6y1i~)I+b0^l3y=k1n zp;a_G)K?+rsju)%zL8uTZPQOkI+qEb5pI-&kc=#g&@yl;A6GV*`?~a#3#bl zdGv<&x`XAGwq~^a09>}s(hqg`%h))mGwAiQ75#*2&*+{8@>YZSd37cEfw-3;>wFYg5VME3LfN>>Wn}| ze^32+Ve+L+-h^_?Jp=IkH&c|1r*w701B|fpm6a5D%*kEBBF2MwN(CJCHYZ&k>0#80 zwVnaMyTi5VCu6li=JN}ys_0`*?h2MN9>jZL-xV4Z#wR)T8So9voX@m-2dD!lqE=tl^D(N)uNQ>TmjUrI3QR_Q uXhD^_Uf3XWFaP@R35DB${|gWVuP`4yFqymRz;n+4p1UPKc=YC7Py7qW1Ng20 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_female_45.png b/my_changes/player/skinsdb/textures/character_female_45.png new file mode 100644 index 0000000000000000000000000000000000000000..7357214d29c869c15b2d7dbd9cc3793f4ae52a39 GIT binary patch literal 8325 zcmd5?Yiv|i5T32uLc4S;P;2Nzt73{44G*nCETN?$#X!{{)>i^CM*U$h@(58QO85at ze1vFXjDd*JY9qcvQNqIpBL1LgP-=_H!_pG4v9{aYl3IE_-`t(MXK(ML(AF@??wP$a zXU>`L%$YOiwj1tScu!_VZUzx$R?e$g@q?h1eB5|&A;|b~P|wWFv_AXx?eiQz=wqL<<4!{l4hw;YOq@TX z0GJRLCiqlQAF&pW!(p8S0Lc8v7l50UlZ|mJIvC&~!)n9fmg9+`gcm>(lHupXNgV|6 zdPI1Q>I*=TauNg(;IPg^CeAmjEi!lQewOd9E+smih!%c0LSF&^%nJzOye@Ma-WPy^ z>s8mdGXe&Tfro5@+V{JUwb8RRrt^@2->g6=$sTzST3cH&q$>pio+*I5rOIsUQp1o{ zW-!zTOcKxWLVMDZu>t`^kfF4&-*uL#AhZS$Qdd2GifqKICrX1wKxvp;C~K zHji^21KjqtxlN-#)^Ntpnp(}{eqL-aI9_!ED|*;(`mD*AG-;A+9b^^kmYR&kfFv2Jou{;95IJl)JR6{O@tz&wIn_Vm;Ppl zgiZdf*)OlEB2~;7m|Qp<9sq=X-0IH5&izN7YYf;!6ac<&o`0$E!tO*w7tx(%0olXhXTEsEET6 zJVHn9Bd`|PSI8117$Y|~m$I_5k}fBmot@Oy*2Y?pV-j*%5k4*-FsFoRbAEbABQNO` znp*AIU)Kdcpb`{x?1~rjTO5@>Zq5q;(8IU@=Je^)MoLPGs}tx0-Ql7E01Vaep#=ut z5V3dVl7vf<9GeRp)Jv%$kbpK^APfLN2EZJ3ez0@av$kB4^gM&;kS!oK;S9!t%xm@S za~cj1g7!U+LFyjgOY^st^ZX>E%HX08ozi!1r{?Bnc1Yjz+|lK$q@;wMwQmdb&(F_C zFFwLVuEt}10OYhFWlz0sx5qgQ;NYX?=enIRSnzPot7t9yvt}-ZX4O&stQFQXXQqz6 zXgf%AwoSGYUMLjeH$>*Kmue*#DO*vwLB~!4o|6pG5{*VJC(+kS-!8`jc~P+8tvNJ( z*&fz0`CVT6NwRCIcTw90Gqa1J<($a@ge&6@W&h(vN;H&k#-1$2M*WN5(&+2LbpAva zO<8s4fCxY&$O;1t{FaD;4P7oa-P$0W|8&)CmM`9D0^z3Y^c*XsuSj#J0z_4Mpzy?d zxs^9ccyH*m$}L+@(u|kxV%d(zYRPE7K|Vxw}B zNr8~7RtD5^dS?SQ^`H?E8n{JpQ5-(-NBAciQTi1Q4QsbWuiDhyX&y6WP4iW%bd5F6#)0Dknhz zAr{Lq`Mz_e^GfEF0}#ghpZtdAziHkrY8Py!QCE!O)xV?fLuyY|Hpi(~b2;W8WAt|f z7$9vT4@14bo2{O6R+D$(HJ}iJ2~|(CC3~H1nos`LR}qr_f}Ip=sbr-{B%NDcdF4E0 z(P#>FMdbeIh?3p8|41p!K7m zIIAnFOBMgL-Ar{Ai?`>1w6rujdrF0>aySw(BLD#O_DAUI@#Cqtx7X?`jDCv9GqkXs zlas?ygUEryAUAy$+T^}7lEp9Hqa0DyHu4ZdQZyc-Gk&q5l4U z#|RL6XzQwL>DEm%I08oe6p+={CvY)5?%(=~0C7zE@a7u2@%dZW)Nh-ArfF+tvg0_{ z?F9WpYYtfY>A7Rr1|q;-soMLx{@%N+>J23<#{UAum7Jno@4xbeWAC1<$p0A6D(_xc KvAulB+W!EXX7Ygm literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_female_46.png b/my_changes/player/skinsdb/textures/character_female_46.png new file mode 100644 index 0000000000000000000000000000000000000000..0efe414c3dee2e5a54085d4e7add646e2430f687 GIT binary patch literal 1733 zcmV;$20HnPP)ahF28^*V$iVyZr1RE@f5Jf5tR49s8U(`Z{fT5**5o${wG!&{9ZfkP2)JtpkuDQ$N zxtpLl?fS6y&CTxZpG$k7{Xy87`M#N(@9%sw5fB1Nk}OdaVHgHPQ3L?iHVgv*5JcB? zT?qS){}RzK22m7!1>|}7FW=U6y`vlMG(r`?TbWmcVHk{7JT?j>6z9a6hUD(!o!@bX z5$c}VY}O*-HBAEmD2l=q;3+(zra>4ve1C@kfvoLrGvPfvz*jN`wc?aIWNmH1i?R#X_^*T2LPR^6LPtn zMe|fu?O0-s(gyi2zv&?1d0xNy?a;$OClM)t`khcj#2w50W~rS&F^T+%NzVm%KKDBO zpC3I8xm?Zyyu&S<&03)ggdj8r$e;u#7Iz8)j?MjCGhC!-uRdW05LIzx>1F@y}EQQXu9W~cs#lHv;_cl zql&s&!PT)EkdT2|$)3E<%U4^MA-;fV2Qe|__)?pca4%?CBOwEcN9=Y(3F|>y4S&%H4noPN>~# zeAjP%01({O6lGF(wj|Kaka((!eLOB*K82W=!kru6Gv4Ky$(EO)NY7T(jVd;7-evP# zI1+eQc<||0(486Z^r+SHJl4!A9?0|~7Ee3rW(6zd1!&)W9+(p%#S34dcox_gV$G~FCAqO?h9})pKK z9s8btd|mzIwh46011;7EfCbgU?Ikebcv?(MVYM{hRykWYD~QF@PA_m++*X2ntQ|yY z(|oM^J%akt39F@fENdG2`uYF>x0itOttMU5G$c#&z82-zC-_;BtnVji5RHeU5>yn$ z@!CUuKRVk?qbMOBN?^S3&dpc62_9G}FJMhf0k@lV1$hE}Edf|tskYMFQ2=jU{&k1? zZaUwm7+onZ0I-wJa)So|E?)vNN^@OBQD8PK2P~i~o(jDz#d-z-co$Xfu^_sy0yIs- z(9jUGH~{4Hc>uuR;2_*|t>NMn0)NF*ElG$@iHvM3fS_p_l6|fGq)e~7LS@oc0AKEU zzBuz^j?(ySumU!09ml+wMzlALsF;RXm_^U%Cy0t^M4$Tz8w#@y`i8bTADR z=Kz4kb!K=9g);~3Hdmw-3I$|_r&ym41K&#+3C7+X1a2$?)XI&1hMQp7)!{=K;P-N% z@Bk1koqZdRzWg!%HY)h_(--X}EW0+M_dqwD??3*+`-sKU%GM%c&nHFkgn@U zHnKU3RkMQ3@DyTV3O7&gZc##V+k`C;03;r6{vqAAY$|W(cb?g1o`=QEC9Ae z#WeoZe#UzG(dBFG7_6HW{POjikR%D2;VDFZ_y7QKXUpp-pE(F!*BuI5EzJY4y{CNU zpra1R3{N$0dp%FtyRDTQg5I(FH-5CgL?;CRfbb8n_*3ZZP|!5Zl4TjCQnQwJ-~MD- z1^~vx^FOoiOW(ye8Ruab1}m3?5R0c#H!E1aa0CEZAGo@&+m2_i96(m5wmSzTWC+jh b4^+Uvz5g*ZvG*5@00000NkvXXu0mjfA;mJY literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_female_47.png b/my_changes/player/skinsdb/textures/character_female_47.png new file mode 100644 index 0000000000000000000000000000000000000000..d61d3921b4cec14a6b29dc72f5cdfb48da59bfcc GIT binary patch literal 1922 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 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_female_5.png b/my_changes/player/skinsdb/textures/character_female_5.png new file mode 100644 index 0000000000000000000000000000000000000000..4c3eb3d0449ed351d86d71676fd31aa872d318ce GIT binary patch literal 731 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 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_female_52.png b/my_changes/player/skinsdb/textures/character_female_52.png new file mode 100644 index 0000000000000000000000000000000000000000..715fff0c9f671bd88b7632c09b10dc1b687793f7 GIT binary patch literal 1241 zcmV;~1Sb25P)82!T1JDF28jH=~Gf{{zUf&q*QhrBe7mrb!mn0^ni{K$!?j+a16mB3#uPYq#f(6^Q_? zfxef=F#w?fGUM9by20 zsp9e=xZ6G`M=37THR8&%<(HS2F*!1VK_XK;6{!>%fIEccTu5dW{#FP8Tb|D!9v)82 zr(;4G56FVBy1I(dpI^tHdn-nk=kHD7&TBuRzn^nJ`e5Z*Q69WMyDUR^S4s>5_(Ulb zX_lre0G4mARoTJ-SPtL)jR%}$09MHLAh6&s{`M+~o|=DvGvt9wtHe}lK) zZaFWmyz_v|N*NE}aaKy~0WhPK0q|iM=DILLnA$7=DZ~dB`Y^M*?YgjUQ7JRxrpcesbS}7dfX?lQdic(#FN(fx$G;CAl*PJGaFcXG&PY6uJ z-Wc;@XPxhv9z~oRJKWeTi&d4$%Lu@~7Qi#3N{}=>jp7VfmuK{?2 zmE|fBz;&y1+HcM(3qg?Z00#Hfu3h;2;X_OkVW8Il9O1`Ntqp)n7Qhh)g$S3tI$$XX z%pJfrg9EpR$gDrQb0>la54JW0%%i5QRY*MkJCY(N1Wwr3;X$o&-U2wm0IX8yJpeTe zfR$$mPI>l(H_K%Nw{C4M0PekZyfSVYm-^y&t%v6Tn6VWgD{|W2;Ay|PjT^gn<65m| zyvBI|E6*O#h4|0E1k+xG;*S>X;-3wICe(($|L-rHlm+TL4!W09%y^hu79xm~t2x0QU0awa*R=bR+&d1JJ4ReA>-Y2`gb} z035UcZaNQ;5(n$86#<9AKO6=YKo^zo3_!bXAD{o1Rn{r*zA*%b^4vO=orB;jzri|< z3$?AU1Q~*_XxeW+XoldYJ-^)*BDu=1WBvd0+T;HKo&-rh`9F?J00000NkvXXu0mjf D&Al=t literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_female_53.png b/my_changes/player/skinsdb/textures/character_female_53.png new file mode 100644 index 0000000000000000000000000000000000000000..7298777690ee6ff944974a41e39955829c41795f GIT binary patch literal 750 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 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_female_6.png b/my_changes/player/skinsdb/textures/character_female_6.png new file mode 100644 index 0000000000000000000000000000000000000000..1c5043d065d0533288dac375fa88e6864b3ec4c0 GIT binary patch literal 1232 zcmV;>1TXuEP)H;ZU^)KkZkVU1cX%fiGNgQKhz;O+P zq!c^YxFM!IVi3f*rBZ_0t`aH1_|ZtvL{Jwhll$eKLB|?TukCvSMxq|+lh2u%Yv1qZ znRDmbY-L)&-U8CC_M-*j{@zoEOUkz28yoF!D^%41sQMK!(DsS==gB<9DuCy+KCH$1 zg(&`CZh=xOpeg{AssSrA-{HkvuMovmR|C=!7oOeo;91m*%#>&U0QhS7!}rbB05-4I zfTi#ir0+VBiF6<{-ih>>6H7l{+8+SIjuuo>BUg?UNF6tOpQFxWAo;#MB4qZu>1Y(I ztE)oX$2pDJhAy;Vuf!1KJ~JlBFqxm|{=5K!84zrAad9y}mtqEEQ}_06YoKjg{)?X$ zi2Kc$XAuAuf*Am^VHwCS0XSSzp0At#1A%iZ0NA_=!R%I0w?KZtjLF*CTDkz*@54eA zQy&$%a@P_783K#@%`Sh^l=lm$b-^qEbqnMNhV4gDO7->iSX*1e8(%(x_HYo|A0ZJ_ zAB~l}o{h>7 zm8xwd_4`$o`~JkJ3z-SGIB+HIT*l+TIXnrT$CJ<{Ji2|>I;f9qwzu{Z05ZRFuL~=a zT}c1r!qbtQ2NR7L<^Scft!xxYUwj=33h1AeDNc?b8h_(jJp=&D+;Ly7V3PeWO z?2G9hA+ z#`}?t-9UEMC-RLspZ?tUVtuj$e@{A*)j!v#-S}sI02{MjeU2B|8IK_Vdd;O6t*t^7 zM_iu?8QpL(2(M$kUu+AIVFtkFivcLL4Jr6KB=)p5>^Za@Vfo3~N} z_GAmN8ChiBsNYCNH^4U}Syj%zwLNNd&qvwA`0o2vi<&9CyIYE$fb)0h}0QAXc z09GjgW*}7TAjGC*$>z(+=ts?-8jGC@W%H?tZe;ZHh&bBbaUd1Bx_uj1w(@5Obb9yt>kH|D9sUMfi`F{oWIBS+i+mB%Y0000T@v=afYs0~A*X=XC%bul3s|D0H&Z0!6tH&TdYub+5ymBK z8WJec>bubhnFU0G9+5 z@NGVk-53Gg-QB#at1H$HV_274fJkHoSOBJgG2lLMi@>@3-e4A(H1+{sfH~k9^?v}| z1#S}eh*4l1mJlI%QpmItroby-P16pUdVw#g@8g`Q@bgo;PP7mox- z@>v9ks)~S6SiLmYxQMtzYsLS)oPFCBcz=);YW@L)|IBB>~rf z=`yb_&1^4(ScaGu;F91-KC^(~JrrPXOxV*XYQ8JH8z;}l5gX)A_~)wNH^&&vOI@K#Ps{qgO-v}_j5o($OwF<~P1?+@trMmctSHHjG z)#aDG`e}*>&*{Sn7DZ791dE0gXd~KUAFNXwoOxOxCqmxe-!H($)lRt9bH9KENF)a_ z0dGPr0Y6sy`ub#S(IbE)^!D~@d;&%o=eL1;0)9XuDTw6YX1#4p0hlOB&?De^s3m9t z2-eMS3+UBAqk0bLqdCdy9Onwgp&FpM+nylaE*e(Vd#9Ez%nM!p2+hKLe(iE?GHy$i=7=8 zb*1FEs52zAwY3S9fV4g~I}(tTDE_iJ&aW_uU1zpu$D*jkPLv13?f9VF8`$k5eMv%V zYpcN3Hi;cgfesc=lzo!t1B6*;w`avDYO&MjgJGg{b>F3=Jw&rk#r0Z}kK1Wa2=g@}TXDo8Z) zGLn#hG=MQ`NI*zL_#yEDQ3FN{iKvOjXbAjJkM}#v*`6J4y9--3IXSa)W@hL6=FFKh z_gcvVd(rT^Y?{2Tke=H&hFU(4krjXTuB%|3-RA)s^k7da&gw-I9!_FG8FjFE*)fKd zT*A8EvRGfg{21#G=)lf7^v_=>iRfp-gL=CB zJZlYZc41!@4bsbwF?x<&OKq>msI4f;ML^TqrM^4>fC2o8w@U9IAus_8mNioA-eYwB z>fiJ`Q9A+G_psLBo*J3TqCtwFj=tH;g0j@}4w$u%^$*bu7Xil)?eGKukN~~(y>Zlh zx{8(`E@vWygun#Qw{MauT>tNPcSV4J7tsXtYdL3+`DBTUfQw&z=m|hpA0!BP@q#Y# zfYkWBMrT?yKWx#h2oU%fRd3UXcqjOblW6)BI?+?>s{qTm3vhQD&gFMjo=uNa_7=<*=w^>`g~Ciokdj<5&` zR?k#Q&MKtrPz8m`7f{*kEq66(5MUmG`e?lG0PnZGqjO$>dl3+{f8cXIs9jG^qP+w- z4a_9Z1d09#l4guBw-D@_h`{H3P`e3UCMF&t?e(dX$ioCE#xQdQ^CZzE_&Vn9ryUcK zb6vn|kh*;$610bjCkP2Bo8X(zRJrV)1VCGM4(|jwdDm_3l>mU&;3YN*$W^2IIepCd zr9I3HnzF(jd4Q8g_()|rJ4Brjfb#8(G4K`;*Tv*DNNKa7ES*W{D2S^?a{6f^62$;l z9^n^Qtj@D&TF7Euo@04mUgB*^^DXYHMfRgPzBw_!sj;;G z_4quxxMv!DwtW(7tE+Nv`2fJtuaolP<`Gq2WJo7k{|S>a?B zly!i^uS^%uzu^jmW_yrTIoxt(ZtxMf%5x)%E5rma)T zm(vTIc2W0-BD8IHn+u#S`<Ky1!dGdy|{s1 z*|>&kr^FbDOaNuc;J|*_Ad4=1RB2~mw^L!W{mHL?q>P4bl(YUE;kUxK8;hBQ9(ge) z0^g9i==ovJSh(t{DB=GFNHkhW)2G!s^NYo*y$L|HMxcVmQ6=ZMt~;u@7?s#g#RoA{HB@h zBmiJ;c&dv84PI=1@)j%dh(&9v?*xpG!3L2maBQ|MD2rVJkpv)IU2%KE1*Yj#6$e4N z(ZObJf$oE6(#F>P3?8e`;4{k@yiUaMJ?PRn!2me2W(9*35(GSCXk@9~Cd~%{7_<5}JlY9~YK+Sb-fBAa$_|D?`?dzQF?d|REhwAn9_4n4R_<^25o{e$NJfam{{=>Mkd|EKByvhn}F z^Z(5D|I~p0-HiX?$^Yb;|K!5|=FI=+(f{hE|LV#A?AibB$N%rq|M0T^@y-A7;Q#W! z|Mb8A^wj_L=>PWP|M=$r`SAbx@&Et-uRb#e00001bW%=J06^y0W&i*KPDw;TR7l5_ zREt*AKoAY(Sr)98t%=l7v5C^i8>*#M3K7aKiw%WXE%NyPzwplH(I@BVobFDto4Gr4 z=WY!nwmHU2CC=s&Z;Tq&cMgwEjcDJPwC}puN&JNUPc9Ii+c&W8dDuz(*#0|O-`O^v zGZ6&g?@);#43xq&;ed~mfcpRn@j(C_C8Y|~SP8F@`iDuy$A%y}Tqq@lkV^f326QYA zm$K9Cw51%&;MFta^#O#?qtm?uf*Ah-364{v`!CYqWDM$oan4?{J^5!Ap+Y(-lbHb3gmDGuIm{=@BZ=rhFWEKw7$8SC=xzY1dz+! zb#pla2-R=~-j-qfyni$v{}{TzTizb6??sB$0D%;_-KB@SrQMvOe8vIf4QPCTmjvLJ zwzm_>>k<^0e_DUITYmzVVypz}a@<$#hb|r3r3U+tXEoBsI5eFg%cy;+u4?sK^`LsN zKPZ`B7#YXT=WQpGth>m$(P&(aiK*TM0x*(yh??$2z$%VyI~CRk@JhE={{SGB>~?-g zH3?v12BRf_2k;@}q!O-2GsrNO$;{8cAkU_!r$7x$02o6XK{zPqE*Su{;h}#z+3f5* zx#_8?S_$9i5*AScqX1y=lJ2@oukn-uoREDxJ|_1S9^f1#+V;vK0CZ4%A7Ze0N&%YM z>NT2c^=6X*g3xvxdqpztMQPKbZAazAQwrdpo%#Nme?lIUkCOo4R4NYS#3@*3P_iS- zYs14p3!C-9fe6k5)oPu8*IG+BaI{fZbZ4AC2flxjjAP$F2H%`3d2vxbPwOQ|IXRUC zpyCX7!76H3tJiDz!{Ji4%H`G?kJHyg5-YZol;HGBu!=>?D!wn0H{X~RohD>?W23xA z&DZ^-dmB@b&E{zga9~=NX<7(|x87PNWx&K5tUw%U2>^yiM eg&FQTiT?`_E%JQT#p)mc0000 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 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_104.png b/my_changes/player/skinsdb/textures/character_male_104.png new file mode 100644 index 0000000000000000000000000000000000000000..2d6e508963c30f3556716756ded5c50036a6cf0c GIT binary patch literal 3001 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 RCldew002ovPDHLkV1jSe7_0yQ literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_106.png b/my_changes/player/skinsdb/textures/character_male_106.png new file mode 100644 index 0000000000000000000000000000000000000000..840ff1bfe548c293e1e4bc15626d2dd12a8951ff GIT binary patch literal 2702 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 IM6N<$f?AR%)&Kwi literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_107.png b/my_changes/player/skinsdb/textures/character_male_107.png new file mode 100644 index 0000000000000000000000000000000000000000..80c4537d7b41ea0e771346fa68d188dadd8963c1 GIT binary patch literal 1090 zcmV-I1ikx-P)Cq+Q7*Lzu+L>V;%=mjKVTm|Ad&8gof=$`r8T+B#_;0Y&C#$yQFgWEtVR|E+K+ zGG?t`8Un0DH!3;SLrIV6-=|K1R%{ek_ZgihFWaT?03QiNv)PQNr@zJD->kadXa`Xk zXL*mWPmh&`fGj0ZV08F?%>iwcBBz}9lrC)&B!bPgIQsB7{`vNS0|*E`&qvjDMGrCM6#oF_CfkOb6W zxS!H5mw;Bg zz3wGoWo6}r{QUg9t7m3rTpKmOacL}dlIUJJS`$q43Dxu#wt)4im|3r7i+bY zB1A3em(b%}OOl}bCAbF(kR$-wAbD6M0LBwMG|J=>AdN@8u(04Z_7QMtb~XjejkU2p zf;3?Eze`um@m6Bszd? zx*_`{kO+|wImV480haOF1LQo+dH(dtu^ig;J{|KKT!*RHKxbuNlA{s~ z1D~Nfxw6lfAT=3i%WFAnu8#zZfWcspf|&z2*>`2hN06nA9wT8s&yao02hy-S!m_Se z{a5J|1jy{qL`RoH611)@DQ_h^7$9#05|@=5e5cAj`KqLh{6zPWl10GA#>Ss(kXM_$ z60Jn2$MvSZhYNpO?k>GgKgG52k_1VBMIdV5|0Q7j?K_S57al8?;UBv@%K!iX07*qo IM6N<$g0zGDNdN!< literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_108.png b/my_changes/player/skinsdb/textures/character_male_108.png new file mode 100644 index 0000000000000000000000000000000000000000..90057f5b67c0fa68d915d32284d43a9aec8e6bd8 GIT binary patch literal 1202 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 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_110.png b/my_changes/player/skinsdb/textures/character_male_110.png new file mode 100644 index 0000000000000000000000000000000000000000..8833c600dc7208666d28149c1569cd25d6c425ab GIT binary patch literal 934 zcmV;X16lluP)K zk8Fvd=;7*q9y&(I+YzY4>1@}|bKbUd{myki_j6RLEZfPh?(n0uSt3znAi5vgEVB%uq(9;IGrd37)GL=AJtPXpV`U?P9 zDX_Uf@pHhA24UheStAmS|z!M#nfLi$_;5XkU2vr0@i+#Hu`_G#BoWRWche}`) zv|4Xm%c~7qs_~Hk>{@FPq9laIwb-?(>0Bjzy|?5K;Otd3H^}y)#N%w{3nY28xm4!a zKK6DL$DV#JHWrT+1t6Vywof$A_E;Y(Gz577NK8U90JgE0#Rog^-WDIzCc+U_k^oYf zPX-WO8Q@=@!yo``%=XCuvOy>-E8~(CfJ`RX_}g^L`BzUAJ9pq{yl{Ue2qgm`orzqo zNtJ8?NU7<|nwJFtS_oZ{vh>Ym<#_O-35U*B9J%h}XwHbkSz0DP*B5G1{1g7NnYz+2 zK>9J)E*5(S@ zsegaDl|VDX6#rwl3CD{a2+zm=66FdYWxL9Eg%=pD1(qHF8}wpML$UuS@>*y~HlNtf z%gf7Cid~C&`|;Uf$ar5i{dE8eRB-`Z_RGp90f~_>MC}(^g0~OYdI$cY*uIM2>t`ML2dPQH{j{v z6Dz#k9D?9(qw}2r8~D2B2LQ#c;e2%tVADz^VB(zxn>JnsXKo{+^DT(E+Yxh8IZWwzS>V?*?Ae?EB*$4w zyo;Rx_7zW8hjHpPBjTd3yi2TnNJ2F znim0x36KOp&Iu?w0I>t4Q?lXY>lGChX{FQYxH8?7O~nTA69PnKWp0W99RL6T07*qo IM6N<$g5GMe3jhEB literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_111.png b/my_changes/player/skinsdb/textures/character_male_111.png new file mode 100644 index 0000000000000000000000000000000000000000..d55aa6a88c7583db795be7338f58a9dda8303fb3 GIT binary patch literal 2793 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 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_112.png b/my_changes/player/skinsdb/textures/character_male_112.png new file mode 100644 index 0000000000000000000000000000000000000000..09bc2c314bffa0b21a7b5abe783d9d0b0fa4ad40 GIT binary patch literal 1491 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 P00000NkvXXu0mjfgRo~O literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_117.png b/my_changes/player/skinsdb/textures/character_male_117.png new file mode 100644 index 0000000000000000000000000000000000000000..d3c3aa147f48dc3d45bc6575c71f42cfbe588ff1 GIT binary patch literal 531 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 Dm4!v} literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_120.png b/my_changes/player/skinsdb/textures/character_male_120.png new file mode 100644 index 0000000000000000000000000000000000000000..8255a2b7f363fda7a72da0628ae84d1ecc5df6f3 GIT binary patch literal 1938 zcmV;D2W|L?P)VJ{6(uT>;=V{uiUI|SppLmeK9Z4_rcGM3XulK)np)P9I0f4DO9OQKP@uJC%Ufj0 zksLX8wbHgMQF8OOXdKCl;tl-;1^OHMCr-{8c@&DKEz4A3q7N9{nc=+QJLjHz=Z?p- z#pA@o$VUSx#Dd6&*%BRa;vr;1US!zZU16jnez;vxt_dR-Y(pl{j%>h(Y{CzC+Bcf^ z+iKi$PbScTbkI+50XWehGC?nag^>#Rk&AWU7keG_e9uMy4@!9ZfP>yQ${2XF8wc6{ zCFkL3+XSo@cq7|#k3*nNA^`WL7_w16GEpBKdb&W5=fWL$aQQgy&K|?PS=!1F?o9rT z{bP7|^#oQg4K`Fjy=__WMgd`ZzmqZ#1yI@*L^eWc2Yt}I8x7%}Ku;aP!z-t7zjA_v z3~eH%9^6)hwA_;mg;1c^_fr9dcmTyt$=_?hrvqMk{UlcYeiXN6==J#%xIZ_viIgXS ztR|b0<$$M2z2ymTLQHyzAiW(ysVjyerQiL{ zC`wd>%VY7@o(6e_K&DL!@T1%rX!wry(w^GeiABt~kkD^Ro;+5=+*4`_wY_-n z>x1`nc+JPEuMgI_uW=zBrRQ1T#OZD30<$LUV==_z(9h#h1rpb2Uhn8#?V+*uv}C9` z5fxAo0uLBPIf)4J46BwPK;Fwo!v=)L>RUqGn8@isp4Fej!Y9v<&qX^3By50KzjN~uML4)lY>~B zK8AlYx!q%tqyE~Ivi)&$*00T;Fl%fGsA&)Fr9G`Wx?kR9)RKz_)=O%tsYr4ZUfca% zFs;_MrXLfZj9q!q%3hv(z=B5LRxTaEfBySFWPb7+LxASh*W6m=v{|D$>vip+y=?L` z36O-m_EH2%CcOerk5W8{Bri>FEcoIHP_k0Swh1ih_ZctSa#ly#gR7^EYrjHuX zU(5{goIm=g2s&=w(YrR0YESL0_!kM~1W%eyl1zo9eC;L#Qla+NP=HNZ@|3(OFt(gs zn>mgf7mx6)A4K)^A50S|0>8pJtuf&+wXP2BVUwy=fbxQpp9QTGz@7*%oPhf0J3sw3 zzV-Usu(nt%B9qCOmd$3L$>32`#c!@ zz6aL+Yw9#Un?8fj=Y~zcX#&3e1zO+e}u4}rF$+hs+W z4WpD{nf={16lu#T-YE7${cT30XJqpG$g1=1v{>QbUM8e2I@CUzyop&y=Rz{}QtthKcyGy-40zV^KxR{*_j6fj2bpYLNM z0gnh-A{jfP0D)~}M}D+&{2UEn{xG(g)+;D@kup%?R`2dRb~Qb40W zw&1OOUI5K1V42>pj!^-$O9Z?)&iMaiJts&BUt11%ngSZxde1k?0Sc$>j<1caC%@_h zy-&L^-iK=>;o3PWfaCvr1ymLH7Y3O0dQ2`*LR>z72#Y2Z`ddE-X#7Fx`E6CeCj^+% zC-5p2upk0tsf4dp0g~W$6i_c=+4p&p{Aus=+v+$yP5CboutMQF6)~?9fFvyI6lkUh zl6?~UwVrLpiz;>R%#S^G=~=Cen5OaPv%|PC^C50t9yQ~YxwEFPCa;^==ee&VQL$ec zIZR@Du{^;LsK4#i*8TZ>-du)U*WDPa9Jcdn&3NZotN^WE9(nB2V}No_zt!IdKASmX z+O4bSDED4e&ix8=YG>c25)NVd%z)`vKRO6c?QO5V?iXkaUN=Flu|#N{-g9_`-IovZ zW*5Zk#W+g5>}dSf4`cY*{s`VIt@rKxfkG5zU4{4X4v-5Ot8p>u<2@l_##*cW)W5el zZfgBIS4U0%W@Q++uZ)M-#J%T-qsZ)LI4`AwaKPsc|VvZ`98+{L7 Y0zpZEkPdzfi~s-t07*qoM6N<$g43e5&;S4c literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_121.png b/my_changes/player/skinsdb/textures/character_male_121.png new file mode 100644 index 0000000000000000000000000000000000000000..28c64d9079fbe45bedadf23c20f4820f30f2a143 GIT binary patch literal 1524 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 Qpa1{>07*qoM6N<$g7GWlQ2+n{ literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_123.png b/my_changes/player/skinsdb/textures/character_male_123.png new file mode 100644 index 0000000000000000000000000000000000000000..664f961a2dd69ddd1516ca4d96d5f6cd9d3d2804 GIT binary patch literal 1689 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 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_125.png b/my_changes/player/skinsdb/textures/character_male_125.png new file mode 100644 index 0000000000000000000000000000000000000000..9ded60470e40e72a2267aa758041f12487b7ca75 GIT binary patch literal 1210 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 FV1he3%envn literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_128.png b/my_changes/player/skinsdb/textures/character_male_128.png new file mode 100644 index 0000000000000000000000000000000000000000..6bd9175fc56c6a57696545b973c9d9c8af502b27 GIT binary patch literal 1839 zcmV+~2hjM5P){ zEFKOyZJjF~4Lfn97cD|2NNPE5o<4xNJ$0!f5dcAXtv`6J^z-vCT7f%oqJUF0CK?Ms zAOIaWQZpkEL3pHpQ#m;t06cP~HfWX~5DO?84JH^1EgcRmAP|&eMB>}jGGL20X_r18 z03#O(FkFO6DhenY3zla{NPe+Id#^QRl2nAXI&Yt1LM}rh0W(!}?(FM39RNRmvp7IQ zNm5fXO<`r3#`N;>M<)j`U4|h*U6*Q4*2%seIaD7!SS%h9B0yiqx2JwkG&pOTQ-ifv zhPQuGG1b!0fmk|@T|PW=nKnH^Mo33eSXnrdafW#ZX{HCFK?exC?=F-N`F*595qhx?dzd>V<0|To_1Zo ztC%-$n9RJcZALISL`+VAvm--eJ!XWvrIER*n_oXFT8OwuL_JwKBEYk#idi|XnuoWr zsXk3yNk%XZvr#VJY;@#Lb8vs6AaIBt@L}7Kq!of^dVX~;6 zJV;M7W{Xl}cR)l#MI{7CLpexkf=gp{I#6auU2{BboHkQ%Jyvc{X@WI(s5*3?Jzsb| zYnC2IXfA7*H(Gs7Q&Ti`rbJ(ID^YOR*VZadYUtwKJ2)}0gKS_uC8l;-KPnYaPDM#s zVL)bpJAJZCRaq-MNJ3X+MIsJDDiW=GVz-5IxPol4e{w+~43=_Sz>t5Ze{HXOXEI%U zJY#=KTVyO|k>}#w9V#>>R(>~alr>_3+|tTpkhe%}h#Eav6OSsu0000CbW%=JLh&vV zNF-ip!5jzx^?n#q000BhNklQK;Un7spk85N5lRdI>xUUIl?(%fMU;hY zK?Z;U83rf|0|6hOC=?KFfRvQ5m$JE|qllV_m$vX`)w6f9j3V}P)VvYNS? znwt5`2P$6XYRW3YAOoQ3f}jB^_QJ|)UgFAXce_8l?!IrXEbgVIENrg=OBaM)VCSGB z<)u=`)5G)eeSb$sor;%~ii4dLEL{-c1t}BvoRXFv-o8)$eY`v^B{}XUKtWi#Ai@AU z`{XSCpvG5k#l+rp1$y#lCEMG90uhof2#0}`Ltwnqs!-F$cfGwY?wPtRcZv^mkWzuA z3xWn18#@_$FYpYl@eB&BaXYdzG-kT@G;b$kV^L7L5H%($A?fJr>nH*NOi%_21fhV7 znF}n=3j{opk~|m&XzA-~p%?&3&Ts=b8JM_W21xSoNMab^r=ydO&j40-Hcq$!lIRAo zaB~Y<>!7*-k{u8(U}I+mi5tu`-~~DW)e91F@~VPHHr4?WNfJ7Gdip{_Lb3+hmR**X z+A=`4kc>7jZ}gvk--T{wXFDf28-T<>EP9ZH0w4v=yfOy7+PnfF z1GKd#Oq?=>SEz0G+NG&L7ho7LLta(OKf~2fK1ISt$KOX*KtPtaGt8p>NhdFut^ITI zr2pS|h4!vnHs9Gm2CECSR%BYc$S;;q_g|zZAS){yVi6f0{;WL&$OIZN`Pc6spKs^# z=cdh>1q?!detsSxK=ndKrnQ88l7y?4pE^*FKw0GT`s#@M9YDhb!ft$N{n~VA&l-My zNgg>K9)3w|2B_<&3j)31YU8I4(sb?C@qN?F&QEM8+06DM$a&jmJ z$jhs%tINxqNd)Nm>VfK-1ty3#{$9_Vs@pgwRI$RP~iU;t?bX@t=d5)!3`MiXsOi-Gzifsw!i da|u*GBLLA5C3kdD+DQNa002ovPDHLkV1iqQ>gE6d literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_129.png b/my_changes/player/skinsdb/textures/character_male_129.png new file mode 100644 index 0000000000000000000000000000000000000000..232c8ece83ae402db91e19915a5cb55bed2b38b9 GIT binary patch literal 997 zcmV)ccnLB9du{KNo2$CTbmanhgrv>xzHpl4i%*AN8}>6ObueEIjsR^-%C&vzXovK(^_ z=>buYoH?#17XUvuQUE-HUhS(2U0LLH&ZF*E>RE#|))eqGD4gxL&fMQ|?4ubFN^`Oy zb$c-SX9ZyF_dFefaS#RI-L3gz9Qy(Q9WDSeMx-86WZt<0P)6~bJ6;)3ro&Up0XcU7 z%A868@bhplbiaKV3M>T!09=@BGB?WOk_-1P`2Oj6_`3Tve0jef_O~C0H>+2R=%HVC ze&f+{s1nx?K_7EitJAM%p>O1Xx`A|@K;!^$dU_g8PENv3yB#*0&Dh7>r~&A#EsY+4 z-PiY`@}+CrQHEgv8l0z5009ka)IWcDBP`6lih@4ouvVv^&SURb0C@XiEh>j$0AN@K zH~?e-0ib>e`ndpbAM6}S3II`35MKho2;n<7vmS+!Qp%?C9FcJVFjrO=u$B_6Ddh>C z0>C~+LB_d8E~V%c6(TYU0{aet8bkwNJo0|4)hcQL9pXNmfexNY3D(?s9aE3$bbqn| zP~|K4KZfO%oqs4w%5t9rMjZqIl!x;G0eu3%eKeT;lyI*)?~HKgxz2ARx2p0GD4uIK9~9?OjHv@4RRn#`>xP1m1;E42&r#5)l+^&ezcE(h z)wopc(DhVK6WpqN_rjWfCzOLg`4M3mNXAMZ@cn$-SKcjP7&eItCdc9s4_UljSy0^aW%_)N8{(r-7d?268 T<=c(W00000NkvXXu0mjfSii?X literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_130.png b/my_changes/player/skinsdb/textures/character_male_130.png new file mode 100644 index 0000000000000000000000000000000000000000..137d2e4a786cb8355b9adde22bbe46330b26bdbc GIT binary patch literal 926 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 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_134.png b/my_changes/player/skinsdb/textures/character_male_134.png new file mode 100644 index 0000000000000000000000000000000000000000..6de2fae5a33fae686fca9bf13da447fcb7db9007 GIT binary patch literal 756 zcmV4B+RtFSX>E0XVLXKLmIM zVD>Elo{oM60DvSt0RZzNfaw|k(*R%@=Mc#40-pjvpIzV>0Hji!dv$VPBIOYSuWiQz zP%>qi$mImDJX0qGzyd+v4F|y6>Nw63;~o$T%%K1Zb;er(I?DrsJTr{QlJ5!NeX=|c z`rogM#$3IZzg%BWPZ|jFEEm_2HeGVXWB};F!8}ZHM%Ni$*8zl5j+o>M;Mvcag<-D4 z>NWN!)TwV=3zdX#s$FhG69i?%xX^{%uxz zuF`#VZA!{|1F#0h5HS0?o;J^`fDLJRImF8;wbAOXrKqd=noV4BB18h}V_YXDu%TL8Qe z&@(>@fKqn%07OH9K^+P}hr-}FAeY%Au^UNn(PWrQf};Si%)cjq$SyES5-gqZO9z)e z+h0k14$$Ts0GrJwv9{Z7OS)XkI|+Jke%AL|UU{UguB!oXIMe|2%T8DIT|p(`jS`ZR mrT#AhFG5@gZ=>EZ82S&?u<^`w1zPg}0000KP zXn07hV^v~xkaC1kpL{Tjfp4XSL&|q+n2T+(j5>sorK*l&!JJ3Iq;a*ToVcrp(W_9* zt8&Y|nBKmG=EPd#!GYz)Y}v}f+|8l)*^}|&wg3Ae`1SJE1zolP0004WQchCSwA+UJmIn|bXinH=Wa z=X)}YqZBV`x>y8$m2DwaW&9AWL#?F_jcby;6ltP7FPl#%!|A;I`JT(i5CDA@5G5~Z z5h=AD4kyFmG`j?Zk6{>I2Luth5U4rK!-ef7K$E_>3Q$p6BuU`Shm-mA7l4$=ftLI# zzy~1-0&hE+OsA7y07Cx{!1q+70wj?L^UE9vNdR^o5O`xhP=2}H&bQn0qKup|DFkD` zSYAX$oW=nGeD5};Vk~@btY}q{4j&)27SMM&iJ)=_CPVBatD)g}I9a^Jf$#ZotQ7j8 zNC6wGBE`C(Lz0Ve@ERr9@jcFjluRE1+Cb#cPm`=H>$<73Bn2T-o=Os074@Hlm839= z*R+5g#TXZY!1T_5&9rz)vMi3PDvq=A*pfjKp{z^h1=Waj-~ItR7>mY8rB&l^7PA%5@oPBADyC#yAL)w9Lx-W7X6v z0Lqg3VH~L>N)~~KBSvO;k?{qH49p1#TvB4m1DtH*Z>6s5GDRV_A{}S)w0)8X)Y* ztgJ3Z-9TY=r*j6F)^fSbr9_q(0zGw~K;1ILc>&NML*F`iuo;@eIS5EI`v$;B%knpX zM5{vo9D==^PM6ehq%Terh;MFI{Qw|TRHW^2YE8N}v}Nt`%|?We7$3(*)BgPzY{MJD zU8XTo-|}Ke1^{YGt%ZA2(#>_-@by}^m!PoBJ*3~4lDkqPBj_KF44)IY4&6@?a06M_ z@Z{CnaPkO%{r+jcU+wpB(iPM@fWY7xu*vfrIbY6ZGkUDst1mRoc31%1KYcu{_M>Mg zBLrj>BaLY~-%QZYH|yn>Yy{o^TAK~2!`S}m>F|0#n(gx4Zj)1Pmg_uU=O@77Ezj|r z@7{K;2pSW|wk#VNgstb*YIQ&QGdn=u-snTm{BQ;w^8E02I0>c5c92us#3jbr`eF6Y z!{~0-gLDVot~0Q@9dpn#&TVU<1#HWt#Wd|($2M&NfTnH7c^*C7kM26N!Js!7+#IEI za|Ymy-G0bxXmBcsFsf5-rT$^e1N0Eg88h}Qs! z*Z_*y0FUDUkmMK{86F=VB_$;(Dk>@+5HuwhKQA6iI3`s=E?r18U`sb*O*v&yD`-+Z zYgIsPS3+`JNOWB_bze(_Ye18EOrnQbq`|qdmS?le#J-1T!KHP=)zHL`ZpxQ+(6oio zpncNc+}Nsy;I)tA>geggne6oP@5Y_>`}+R={?iza;s5{u0d!JMQvg8b*k%9#0$)i) zK~zYIomGpLnlKPuO10H$ZEGv61lLtsA1sKdydwVpXYCzAa0R2s=FDNp~RJ2m-!29 zeu$GSOX7oyK-1gZZd=#>n?N~a3Og_Wzk8TK7BK_^@Zq&H*uSBmyv7X}fZtq;fqgYl z+^Eep4hO-#6BK{mviB3hnp$b%s#Rtwry@@ znZ<28PS_EPFb1=mUraHy>Vsky%dGgo*oh?x9_$cX85WuNq#4(*;dNep(iS?0?p@wL zc`R9$Xeui|wVU|%DX*FeolCfly#GzXa2^QKt>e2q=NC=ou2&15Mq7Dc8>O7)(#v&v zrx*=Iz|ZpDAd+)`O9k5cJ{W-UoLBR1e+vg@XG8jTAJhhejFX1iG2R z+I81Nu$avji`CjC;ae@-?ZQu6dY8o_s-iBm59V`p&vQL6fMNx_N2QBWJq$mm5xvXn zqGYHZ{@Yton~J~-0xtjqDAvFSfFWYreEvcJO5%=!V80LcU;u>+{9Y*N8s;~lAms&3 zs#H)mMT0jEVl3wK9 z85v(i4P+6iJBoIvftIfb>e7UQmSMIo6;O9bJTXZ8J1c$K37sUa@Bjb+07*qoM6N<$ Ef;Cl@A^-pY literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_137.png b/my_changes/player/skinsdb/textures/character_male_137.png new file mode 100644 index 0000000000000000000000000000000000000000..16787787edaf7f8c32a5bf37ade03158a64a7573 GIT binary patch literal 1016 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 N002ovPDHLkV1mK#9UuSz literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_140.png b/my_changes/player/skinsdb/textures/character_male_140.png new file mode 100644 index 0000000000000000000000000000000000000000..6ddb8ae8efda538ada7c9eab996167920826d2f0 GIT binary patch literal 520 zcmV+j0{8uiP)I=Xp$$yY(iSOM$Tp0Fu$4uTIqJ zGJwOV4nXx8a0kGSLKOg{BDjBj5>>oGSfqBv(LRn3#jGja@VQ03 z6H*o_?O;kwf>V5zN4;;Gp|C-p#;vbIfP~|Us{vq;FBsbH^LqdQeQ03*?YR->YFV{7 zfY{3pcbD!w7yi!Y(QME%qNpRlD?18|@#~Go=rPcCoC8@L04|;uL5PL!bl-I+@i=Az zd;|MZjLs?XY2Xzl&G$?$T~n`bdH`UU*9(6KP#FLU!FUX22N3*F+qTg-DmJ(8`#%66 z=4`bfNzKFNN@gG-Ba*q4aVG%KFdKfG2H?L%GaCTk)l~D6tN`dZI&U@rW6J`7jzRbq z2`yV<3+UELzyD#+4@Ruqxa7HuE4tk$X(wrcB3K~(giB7)!zDGG|# z7ZC-uQmodBwp6RO;^jd~p|U8}RnfZL(rtG)o1{r5$;|QlPjc2tOeWdvf^G3YnA@2% z=ljn0fB!!djT$%M*QNN?Hs2A96_06+AJKY`wQX%8=r|P8G)n0@we!AV(3tCzi~R$+ zoQ~1mdQWI(a_2MwcSIt>4TUIEC{P%ngW)haj8+ITaBkOyPC$P+EEsgASfn^sK9SFp z84QwxV-v*enwq+>70`O{l?t-Koj>jqrxVJX|2ng5fDV`DIo98v=u%ls0nuk0z@cev>OYvA_U_JBUl>3 zDWVp*$=~SbjDVQ}_w<*u6^EljyEZ*5@M=tPh=jJXsSGDOH4K4zagH)~7PzNxodzww zF$BS5wCgf05h1<{2|`J%-C#F;e@y}uU*q=JVK^-k zGCkSseiD%`t7QU;Uyw+ph~n#-TYXgs{YwGW1o$oUYzY`>Z>NuwN#Am{Rhg~Bi&6pa z2LYH&5Sc54MNH#oa><;_(E?VRHw3&=PiZAX8~SyW`mX4yIS22xmJlZ%OQ z>u+nLJoZ1&X6KZITkw*U1<(*)iaIcU65Bj}5j;Bp!{!ujvg!H}zyMWa68Z*TE0OZ< z7Db~2G8ik>+vM^8Muw>QIJr} zEE<`jufg1Gn&LnvLyur(w+;_WtS?-7CB1a^EUmUIdZnX-3~Y7IeV9}so2^jS;*k;G z@edt3B(|?zODU`>|Gxd~sfzn&`u$@Ho`aDF;Mzq15!l9~QR*8X_a)#q#I*vS27yNpJbi8vkW40p{`IQ>o}$9& z2@-jmg7bSwkIy4#`2+M@Z?7z)$Jwp{faT_3%O5cozz~;AOq@RiT)lX)`1#neiV1TF zT!Yno=Jorjn4aQtjEt`N^u&GJ=|=#45%PDj&A^3IP(Ts;tcVU6Qxw-4DPYb+U~uCm zp$A;*Kx}5SISNN2(iqa|6s=mditf4RUawEm#*G`vagjo(`%vBn>90#x)B3(Xih>yK>+R3`wa)WcEb&b{cTx;SDaU8kpz*Qt0q(YA5GKF1310#`&-lb{sf1f1r)ahuj}GkvAb zGOiUGn?L!aLi$o6SXm~8Noa?0zS7?>=kw6MeFPJh*BLzjR<2y>uYk^rdd2+CP8v(_ z>i^TaJK+g|P(=(Apw97j*|KGg38-9hqKoHslc9$wm&@ZF zKTVN{g)RCD6O40#1L`5f$ zICfAoXUH_!giyGku5{fDSx8shGN|~LpE)DV&pUBeK<4|UM3Yd#&Q#3a{Ck6(a6R)+wC2}1=2wgqI2D8`+@>ifmIihBvDTmw3!_Lf(%j%n9eUbAkxCt;D2t*pyUeGs0iy_fA*um9VeE6_5DX%0)M@MBASh^HOh<4=2 z5n8x#A@%f>KCCFY)-tc^>v#4XFE2}Lo4N!LtzdKb8#17!FFbQq$^ZZW07*qoM6N<$ Eg1L#(KL7v# literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_142.png b/my_changes/player/skinsdb/textures/character_male_142.png new file mode 100644 index 0000000000000000000000000000000000000000..b262b1361e6ac52ae13672d6dd7a4de78727826a GIT binary patch literal 27251 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 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_143.png b/my_changes/player/skinsdb/textures/character_male_143.png new file mode 100644 index 0000000000000000000000000000000000000000..905c89a9860139734af65cea951fd53e610c94e8 GIT binary patch literal 8325 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 YFPjyWr?W$^GXMYp07*qoM6N<$g3+iE;Q#;t literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_147.png b/my_changes/player/skinsdb/textures/character_male_147.png new file mode 100644 index 0000000000000000000000000000000000000000..93563989580324581cac10eaa5a91c427eaac724 GIT binary patch literal 901 zcmV;01A6?4P)067o8=&K2l_nO4V-n|G)B{ptiksc002fl!)YT zauTX)vt?PX*QHpQtAo{27_Eh=elm_*5!U(mUnpU$)#7J>>-Fo4Be(e#Kx-v*{UZS4 zZnrN!eVvd0rIA(%q5ce@l(y3Rroo#OoDxn5BmOL6EuA(($zK3|FCzprQV97r@HlH{ zm2^;0NbQW`OsrJ87FH>1p~;c@aW={tYmmRPsHJmCYKeYwwKZ^^coFY78zHgLn5_Y% z6lh6w75dUBA?ru^zCUiakMHZToP2Q2ue+M6=C)FxuZ46k^*_!UmA9fcdTU7Z5?r*U zF-`&DZ3-66XRHDOk|_hdP@5Y3Q5dj!Ct{&5(1d2Y5f;59Yb~?@s?cxC$Y+8wD`%8( zj&FlTLs;vK+pl+w!DG;_Q-Jw+4!rL1-q&;a4*sQ?!Z3^tZ2yiShVvQkVVtIMxC6{U zIL8!T06aFP_&^Sk^AFJjcpQd%K*pwcer)$c=(GkTimIdcl3tfpK& zXw3khAQqpO6XPc$EUbPE1OzG!Fk(EHee)e4Gjtl6LBe`win(Ke)$gM(oPeEn2L3+= zc}8vni@h?yhLrohFo55qa)GEnu~FMJZQJ;kP7e)I#{+yPo5U=plpo0i&Dq={Jj)i3ekvLUQ?c>wU)9kyd?HXbb9NVJ!%#CueOw`|tk zd!{O}eeXG#_`^eTABK@hu@5RJ2caCG0)&nq>K_0l&=VHHggs&gr&G5=l?rYQFuIL# zcuJv*MaTxoDRqT-Ov8|9GZY$^s6#NuvK$$NZWpWJB82jl;y9wA%V`~VM~Y0Hy#3R!0{9|`}$00000NkvXXu0mjfYEy{n literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_148.png b/my_changes/player/skinsdb/textures/character_male_148.png new file mode 100644 index 0000000000000000000000000000000000000000..8bf839e71531cf95085289defbbbed4b7dacb23a GIT binary patch literal 626 zcmV-&0*(ENP)qAY_|{l^=Dm&EFYPlBq~0-4pR%6ozS1j!o#EL&ERF_JtNP_l@O zh5G`CwkZ%Icnk$D!b<^7NdS5Qfc`KkFX_e$1e%qNqPfn=w*<6Cgg_VrOD98KA8<<` zBygkkUr12aI2zW=jc(u4iof}|_?R`Jf^ zRbU@5uL0iUxp6j<&T$4Y1bdyoX#OR@f#5-aLNIe4dH2zxiYdjIbKKjKO%l!Gv0p_r z6d!H?3ChskuG#j`tT@0`#CccV0mS$KfIBE}JVJ!BU{Dv2fIA46;iUx8n`-OIJ5XV* zQfn3I0ueyb4*;*s!3bTU0YX}53*)s9`i9US16tEIrZB*oE^{o<2Gn!F$a##MAe07B z?Grby8!)@dLjc1YKsSJpAZm4$KD2It5&-IxN1#O7=%Oa%8$twNsHt8)0{X}Xg7FHC zZS-a}@`!Ml8bp8i83{sfn5>|qusb~00qApfj?vNKcH(C48kQGuU+CgDKBxZ!+2|am z{`e(A=j4S+GhM29HdjJHcW3J%FBxY)H{;Rjy*CC|9G5Zy!I!Y}f5(O{1$(Yz#{d8T M07*qoM6N<$f)@%2a{vGU literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_149.png b/my_changes/player/skinsdb/textures/character_male_149.png new file mode 100644 index 0000000000000000000000000000000000000000..860b4bd6d4d9fd362ba14d9a463c6110e9d4eafb GIT binary patch literal 2401 zcmV-n37+txcNHea!CcyzayA_uc#5Id^t;X1fp1=I(u+ zdw%Epea~~or2%bxd^}uQTB2sNDfjt&o*c)KYn*Y^>vi%xk6hPHeVfT-s8*{PT1VTy zeS27~R#W(j1MJz^*>#QY4(iZoG(@;!u_%CH7|Ia@0kzw0>4R%bDx1wFU-$R}2>?)`P!Mh6z$5?+0daduP-fozSgGZ4uNg+2R4rX3jrG7Y(OPK8#I3Ov9I!rfZlt@w>HcL zfCD$k<#K)TH;n*|1DJ$HUyT8HZfp8Iw||p1qp7cV<6};nP5{yl(j0;vfK^~j0A{%n zX4tPG`*13iIe>s}{B;vBHZ~T5NeBq0HI>1{002OcfU{~Hee|83j`Teyif>@Hd>!H) z##gd1KHj4t!b7`SOZ37A35t)o>U?4{!e02uT z8B7cZgu*@E;X8mSD854lXs#zTBvmh7O z!0U&Pe$ettEEkIlSqK`}QsXDXFSh&kI?p&MVx zSA1Bt;435Dg$C~7o6UteI(_;ywO?f;ZwVl&#dAnI^ zTs09o*~ol@wxPd%_aXAzEpf-dYtw~$?lcIFx{}$xf2uF@ZYImMcDrM) z1kJ&J-6%Wke|nk@+;9 zrkw`uf<>^3z-srsmjzFsJ}VO7HT_iCXq-?q`lm0A(%nx?Q$BWCJR_$gc&mZIAp~n0 zafqGi+8@o*zYe{VuDt6F(V)74*7eWspQKxU6%i7)dk0T@%Wdpkk@dCe?UYd6_x<_| zBp~nt5iIpEALZ+8j!m+R+{}?Y!`8uFRq#$37ex{fkS#g%kw<6g*uhEKdE3jWy!(#> zleG6xm9nF}+|9A3p|n=yecRqWN^iY1n<63Y_wf#OH7%41iE}T(E9X_{B%K-%1RY9M zX@zp0{`iFvy6ea^4ON(%Of;d;4}}1`jlP}z-(w333~ZKs1~-0ZHKsMVnstD#jfhOc zbyjH7CTy3e@A$xZ)U0v=GuBmSjO1zYjb`c@zVFsJNb}2svx}RQsgBgeNifQBhRPR> z5D*06$~!+Ckepncl5z-mKJEG098DkIO}jq(iU@?o&5b`_;<31Uk&7apS7wN-v07&s zm^*^uvWyV|!bqHnEX1MmjvUqAY^5xr+vm{-eFqYdaic2DEpS=L0{s5=GVObEnhNau z$SRl%2+-AAVqRk-G1aU!RIi2?N*vjVwH$h=1)O9@=DF`o(2c*SOB_KTEUM6t!rpOU z%g&0;Z%241UR!j1)5`+Ps_OulDNj~~-~ZG!h9gTq!+eL$u}5uCqni ze=`OvtRVT>3cD|bNB%;*E~6dayEfjN>#Q2XFba^zGEMn8&2PuqhzTWFN*JBpd@<5w ztWo0{=_f+7b-13}_x(TuApFz=Z>1jE!ncFSQGfmEd`}OWdf?Qu4NcuNUEn1yR%A0X zGs*7?x=Pe0wbFvO5Kc`O@4v$dCV~I00000NkvXXu0mjfWGk*1 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_150.png b/my_changes/player/skinsdb/textures/character_male_150.png new file mode 100644 index 0000000000000000000000000000000000000000..e6210959086c60215cfb0ca7825d3c99c645b9cf GIT binary patch literal 1001 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 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_152.png b/my_changes/player/skinsdb/textures/character_male_152.png new file mode 100644 index 0000000000000000000000000000000000000000..d11693731cccf8e05c5aa6a3dd896a7c276c969a GIT binary patch literal 1021 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 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_male_154.png b/my_changes/player/skinsdb/textures/character_male_154.png new file mode 100644 index 0000000000000000000000000000000000000000..75687b4baa5391d6e2a0154749095b3fd0391676 GIT binary patch literal 1730 zcmV;z20i(SP)_vUrQ!*>tOdwKIRlc}caVF$iU-kUcwzwhV$ z-k%8}4hOCfjMDs^K2lE4cYOa2v3v$l02&16iG)Q-!ev2=l7t$O#(w{22f*S$0oWnn zfdB<8O7;L2rB49h@87;3sj&kfocTsyI|M)hgb*Sc7d8IN9RTzmT(ULadvIy&09+Fj z7^Tk+VDG1IYytfF=-ZDDVAA6msgDle)%}b3>(}or_3Hk`Lz@E#Aq0&<>VLAs3Bb#H z3wU+^BL4W{>mj|ow{W-s1oNK+h7*7{jca(KfKd> zV6{K{uJ(11dk!itt?9V71Hc=m0QjYmzu$D-CR2a{tO2Z&Ve|Yl^r0Zc=U&+lPBg#= zZM6grfw2H6UUSX>8W1(u;L1A$z<{<1f(XLOq?kqAd-zxw0BRNm00o@zcyPkwVfD1k zdQrIF)Wc2(3y$w;o;U;0KX!z&2*JW6``sWz8N~-rR#tF)ZEXO-VjFB{$~7^8f7hmg zC$i-*B4mGCEqWxD=0VI5p4|oj{2Yr7Cb)k2?b92BY*`gDWXHm^5CmPTT@w>HzP1Lk zvciUeWA6z7@I=NxKYqagIPDQ8JsuEKu;9*o%0Ige{JzS}Z{AtJ=A8w+eR_jwlu2_Y znL!_Oxl9o3dQUtymuo}q`1>b49?XP7@O!<81cUg}?Z!+fgh`JF$6PKPbGZ=m`!Prh zSnKW68zumR5N4YHZGyKWfNTh5t}XqLIh0*n|Csc6Odmv-B?;H1Be*3U#VzS5u1iPQ zbu!fJRL__3rg3es&T{~GnX1folYa2P9vF2g4XlbdC~fVJb!j}mfiENd2_#mo-YG0?v9^D zKA#VPKmdV206w4Zg8_&;LJ@$S4*Gme)1WBI{}TY8HHQws@At#!^Nl?OMgb7hpEu<6 zd|lTuJ3GsU!Po#IkqD-zrx6SWF+DvEzD#9Rjzl7eMx*#jl1!rG-l})g>GV*0r;NyE zvnJ`f&P1UpiULJZ7+hV~S$o4U&~CR;uh(H1hN--lf|MiCB&5e|nDi9{gFGH4w& z91e#O3WZoX8jV6x6vSdNoF@Y_=g9y74}w37?VSMdW~|Ix0iY0cU1x?jHa1YN*G=XP z!vK+G8R2jkilRW4WyIrgB$G)fih`-BDFgxm24HGx3gK`VnM?+{t|K0gvzLoOP}91u zn}CSz6-5~enwAws85=;oUT22e?Kax&HVngHFbI7?u~>wz>&WNxD3wYm7K?~RqnMeQ zK`NC(B9TBW7DFPDz?m~=aPHhWrK{9>~T5|P#~mGC@@3iav9ZX6&EgC!2J9? zOQTY$gj1(ZA(2QRkx1b5>C>oGD#&KD=yW=0wOVMkTIh5-CUv`ACcfUOJzux?dJmeW zVej=GR8_^+?lx3aMRUCgRaLRHykt7ldfJZfdD{Ct43f=eQK?jzp?p4%YPE`Txy&ZI zTrP)`Cr?6_WyE4Jl*?t*YBl6?IjE|NR;vY7Rnh5mpsFgm-7YjuL$B9^rfKMOI?yx? z-EMbed+|)~<00_RdHDE|Ed))|u(i8AH0z5Xh%C!&(o$8GEj_7Jip~16EJK!MR@QZ$ znWrXrQ&whpQ&#OMEWW*}szdvbt=(;OyWIm10h;b22s#u9KSNUhSN(om_4^SF2H|$Q z;q`jq^?KoUyWw`b;qPDb`~9YrrlM&qrgXR4HMQgGd%YeLf8V%s2%ql!WXOg9{bT3y z;Q2D!^Rxda`g?!zy7+BCjnYh@An5P^ Y0Hq3}peq_XcmMzZ07*qoM6N<$g7ptF{{R30 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_xcost_200.png b/my_changes/player/skinsdb/textures/character_xcost_200.png new file mode 100644 index 0000000000000000000000000000000000000000..f7fa1cca0ec2ed2073cb4f870e73895cf760533c GIT binary patch literal 1896 zcmV-u2bcJXP)zH=8WR#2ovtf2Jb9TONxRdGo2nu;^_w zKqaQ1=DW<-NdSW*SHYyIh@$bD2mstg~FHS0k2RM@T%DNEAqzcAwbkvo#_J# zu}=6)j&(`|w}O3rB0-Ev1==;uxW?L~6JyjEQ)PI>d6jZ=Mi(yNLet2xg)Wo^sUs7l zzvXDBD_0l|4Kd{%!MN4o(Ickz^Trhbh7YGffZ=3Ch#F%l;yTk?bm9aIUqRHfE+$YK z@r)FqQXzK&!Mk@EojHT~h6#xiWB2bz4IOT5q;z=z_DVqjzY?H9hyde8N1FxFd0Bb1 zINus4URPYs$1Ej6A)PwKZ1;q~1OXmCWVCG?Q{%Pc9&+dq6LaGN!0&o-yGi+qY{k z@zUYLjILc{Vouv}Ub!y_q$+?We?D0OZr;=az`%N8Bu@2{U?{HpYka)W63-qxrb!#Z zz3<&)DoM({LHfV}M#qmcA(|9yViF8bBM<2K52um@VJr-~aRWw`i*Nv;4+EtW$c`QP zPQX64swg1b86x6DAqEKEy2U7ZjW)#INSb&StrY9UGCAE4NU;pMMLbHQWHyH&>({e{ z9)ObtS$X1;{O#LOf->8B{WxQ8`B$ zUsK8vCgb_#~g#IA8US$6B+Y*sh`R6htq&tq7umD791z6 zAumfFQ4+BR)c_?C2@zzR&yS8S7ReLU12K2Y%9r zix;EB?c{-~sw%OMo7)&m0K9j=9(aISo16fBS^(~5fAIbnHUTzp{H8?EdBPb2T7-s% zhH>)fJKYxR5CU*>8MCIkHLezKmdFk804Kr9%1UZ&Z6%W*P`o^VOA^S}*ViX6z+*+M zUm@(s0fV{<@DRZ~vN7UV8=zeir2pndhE+e7p{V2M>tn{&eXSo&a(1LIv+~u7mrB zLLq@z0>E={LqxlB<;v7TK;yYXfUP=2cnQ=w0w-uUV8Ma~D#mw;oB z2@ilM(L5ksxw*MnkVWjH55U88-zfl+F80vRBov^VFItPTq)2uv^u-wa+A%i}CljX= z`}Q%~v4bB%SoZt-`5}yO@kc(VfdM&=Jkr_84`{2r13-Y0k!3VEIE5TAq{v)W?L&@8 zARzjGs<9s1ydI0FcBTaw9%gj*tR(;70f>Fd@jb_n9Bmx@K>8S6y~@k;Qz^j6$X1Sh zVm_e&Pxz1g&hbc*iZnKgyFc1ziu}(US5Ra1Go776q)42b;%P@~@5j4%Y4ke2FAdD4 z+5(H-oo`aTKbzXC3#g;oPaQP@YOl$s8Z(Dh%+03vb24eoeEH{0n|}^%Y+6b!z literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_xcost_201.png b/my_changes/player/skinsdb/textures/character_xcost_201.png new file mode 100644 index 0000000000000000000000000000000000000000..3be6e56a9ae3f72b35d94dc4486a8f9a854e0d8b GIT binary patch literal 647 zcmV;20(kw2P)cn-{L&y;nh-LBK7wOIW>-> zN)V>H=q&(zeO_|$JI(WY>jCIFj?rjzcfIuhXk<7X-mU9a0H_m!9)PzG!LDzErQ>)! zW~%LWTT<%xhr=Py2~Vg^r_-oX_up(b`F$XqV_D8-v*NS$0BD|?OeQ4=odVFw4zNpr z9l+1phL_7_2F>U5{BytGm!vgY#{?FOMIlULwOVEC^*Xy=uZ3}(;~J#nq1|p5l^u_J z;JK*T=X>|71ONsf0RZ8lXgvt$m=r_^G_RB7ct|E%NDb&%8YBST*VZ2b5HgsmdlTd& zzdt^*%da8Uta$=}>D%pANFjKDZHN3R0JJ?PfOCDg2f!N-)A~F8ZVlpJXYFMjpkvtL z6pc{G00@&I0Gh{j9czJUH`paWqX<9NaL((EGe7~*oOVD6fSSQXLI5xp*A>4Bh8+M_ZmjN1r z3IMV%LLPwH9gqSLt9v070$_Inj%V_F%RtSA05p0JIGs)zlmftU=kvKFP4>`MXCZjI zhHisi26zCN0TzJ1C{+d!GMK8v1eS>1-t--TVW}|i9biMPPvP~piJlHXGlF5L0jaOe htZSx(_WxG__yJCIQ+ynFSY7}C002ovPDHLkV1lch8j=72 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_xcost_202.png b/my_changes/player/skinsdb/textures/character_xcost_202.png new file mode 100644 index 0000000000000000000000000000000000000000..ca8b1f1b93ef3d0ec2a57bd5b964550d0af3a535 GIT binary patch literal 2509 zcmV;;2{QJHP)6#5&IxN7YV|cah^sju?0?isN>JR@(fL03uP_gpoXx%;!r&eX+@{YH0z2F_x zuYD7Tx6VV|=K1|P*&T?HT?5ETJLNwYw9#&(0K#q23DK%ms95)FRAtY{rGj_SlJyoE z*SvwIB^l@_T#V!SEBY*Webs~!d)Yb9knwqZ~<9y_<4^)`%x76 zu|A_6DqlMxb+R9d-aDdQtA<{8CJ5Gfi_G9S!ZLIE|w9 zO-ZrhhY41skFpaZOn7aA8`DS2^jt{?PLI*V5C*_YDU)K;!9}gpZz7=?f`7Y=QDRC= zre_|SBV1Hll8Gt94ggcqLX^~Nm8c|;6BFXhc#dd3ZM2mltjFXeD<%dkA}#)V`yBpv z_Y%gFPO9I6aef1mTrr|1aBFlK6^EJT%mBMyEf`>@v*U>+VpJxuy;MlKz6?7626CKV z@CCO)jJqD9{RDD0W2_S|_)R$9RDuWBTJY7?WBB*=7CgMxiZ8Dm#e?f7ks5Et>l3|{ z5>`y26iIRF1u$vxCL|G%GC9wwz-hsZ;#A|6_l(3k0|7MrgAM_}6CFp3ssAE5HRE{) zzP{SH{RPgdY+b1_a;Zbw^9F8+4$i0A}tmq8%BLUn?jXYo<4hw2N{ zUPtNXU?9{=w}>Gih8+Mda$|_Pucx}i*WQ(*d(l~!hl{_@!=;9NTy8AHv64+_+rJ&n zIm?8ctk{O*W!dPg&%-Cj_u|vjHB<{s#0Cq-`^{Ydu<%C_M_l`u_WUKuA5h$F{MP7^ zHv~E3bKr>E4u^j;oPh$=8jU?9lD#LX1}qmEOVE(B9Ch0kp?=#!g!U)Zs4#V(3NKel zm{uX-C<3GL5lkT9K`|H&B%vpXcb)~PrjlEDJ-pR0#)r+NwQch=)(`EQ;c0FJyX zem7i!e7F<$4jq8jAnvwT<4#)@t{pAudf{}6`t(`}Gg~FhYLk$8mezI&8AoWpdhh`J zwPq>qeRL2v$oX&n(1d4_0i0Ftu#(0NmccNU-2q*?fF`>CoT-2zM}Cm=T;7HurMK-nG4+n-{5I-AeQQ zDi!PnDulmaxUdfEvJKlt(vKwKtc^6xtx&F^RBuw0*ocC-2@NEzvRY>j+)8S*k>AD2|8h%nOK7>*=gz#DE-C zFP%XH;7*{5ofz!8cT!8V6AL^^`)R+N04SjDu$%5{#q+cxCGwohFO^F@91a)WXC2mM z8@ByE03tnOVKzAumT7zU*MNaM#w0Fe4Mi@M-TX%zDU=P@JC5tV~|GoU*Fti!r&!?r_ZKnMh80M`|Ju?nsx)!+fJ zdsYfZJV}-0R2_Vy8blYcd6rY*`z<+}En1={X`c|;zlj*JR)FE4PLWnf)w@I)V$y?B zpV99Q3hS^g+pul-d>v@?!)pMa^V17zWHhUXzyK<29Bp>Uo6JVlus9dPEWaz5;qYaV zqr`yZ10>Z{6E?si&qJ(>?RLVlnCAORifXpPfWC@g$a#Jy7?7>lux&U1eSz`4HDDqA z-Mu7x6b6Lr4Pf$HO^)P>{8pk|BN)L^XJ=&sfS)rnm?5Ggh|Z8jY{(LMJZ&EhGL(bq z`<_(waO#I%IQ_9M+k|RBe=Hb?2nLouVZaap$ax%nVgVI9jy9(Or-$raFD62cKBozT zqm0UBq8M@%IjVg{pnLlZ3G1*f+k`WqI|~L1Ky%T0T&muTf3=n3%l5J!wgc({9A!=c zUrPOx7p6kU0LZ>gf(5RGJ&#j>fJrD8_pIZL%MnrJ>Kh(`{%FlQtjjjt84xM=|4iQ& z_vpjt{`vYI`=?7*)1 zrTsIYyYPRnwN-7$r+bG5th z^~FO1l&1zDEiDaGrcA-inKLnG&Ya$pV6qG2;$*x!E)J;yN3Y5s{+o4Jmu=WKlKwf0 zE<1m#r5rbom*I;u`-S75ohZlWtrfU=Xa`#OA8eY7@X3)q__$^>PVL(!_F98mA_DM# X_)3Nj$*M6h00000NkvXXu0mjfgJ81S literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_xcost_203.png b/my_changes/player/skinsdb/textures/character_xcost_203.png new file mode 100644 index 0000000000000000000000000000000000000000..cc7c131dafba31ae02a2bc0f734bd331be682cc7 GIT binary patch literal 1228 zcmV;-1T*`IP)$DG|?>jm(@`yp4I1vHh1+>5PUk($GuY~301U=(K1W@e0 zx)s*f*N+H*H01SNNIL6!fC|9hj89yE?d|QT0LZJ`KFO;HD#U*;0LgMKusHEWkOJ)O z?PW25^yBgXyA$YIz;Y`qD`9hUGcZ0@0kG|nG;G}lNi>GK?JIe^9dZ}2qgwdYo+3!$C`G+*nm`TDJjmkJnjafHpqpMe3k{mmGzUqn*3P1}x+s(07{eoRcH z?dw!jL?~OUA~& z1>n=iw_$5*DlC%TP|jdW!NVc1BUot+I!OH0|YS4BXblarHK41h32 zVY-sQ>W%sl1Db9L+kE}j6KHB`Dia5N%rexaK?+20nE`nKhnm&Z)f7)ICMjSqE-r@o z`T49IzQMPs!%h_vCTR+hdXqyQ^{EiBk!A(3`9>_~GF}DgeYN6ku*{F2nTnbV?MJ zVqf3c*-6vk1rR~Y#snyWH>#EZ$yu^xzO^D0<>zi+1iouD8Yy5mn~Pk4KKJ$JK-aTd zoJHBok(>lWS63JNR{sR32NDW^2BeWv0$_bm=-ypN0DCk>pSrudOZTtR?TZRm^#BAb zz;StiJrYv@5uv^SdKwegs^kH>HUO=h0#*7~IO0XeQG1xMhYEro01~Bv5B_F%i zdhp%=Ja3Klxs(82r|c`NZCpEOFCfg<+oF!9^{_J2EjC3pJtk14C#Tp5d1;okHmm|r z1f+SL^aLrBR%U9J_5i&$dUMp~HxnT?1(d|Iwlm?;>5i!T>tjaju|s3)o$OCj0kFSg z|71*XU$yx>6R7QMMd5I_Km7W7BgNdn^<17;M+}y15xke8Qa8yu@H&lj5N8<*(2T4H zZ_Bjzeb_NkN=*TEHP{?AyBf#d;=G1g2jRJOY!Otqw?qluX1&)V+Aa40+qu|N7DH@K z+d6Dr=CLFPD~j5s)&L8x0RsaAxwXJUY*ailMFj2PiMHPK%&qT8dL+NK9-tle_GkT9 q2eB1N#RB-9j<>7K%{ycK8=@Ut$*Ba$a%(00000w85PeB)8#gf@LXkj}rnIGnx);|4e}Y8NZE-1x8xg^+I}wWub>+s5^cT2LEb6L= zU~y+~V;9oygkE!Qa;}r`MS3f@2PMKeOFjOx&%do-@T_(NV_63hvtS*#U{|g@?m#`}N9zU=C}gQYllo5AChI zr}X_f+BZ*00A$z*pdTlm0O8NcB7mij&p9*!KA(1Xd&2zc_6w&@`v*)+Ot|s!aW^?R z>4kQ5K+CK9O}Di+@7JNFV9ojt%bN6q`-e3teH&{pric8Uuzv!&LITR=vL~Tdt9czG zK+eOiv%X}m9f$zsr?nUSmL%mPKncMoNx_3|&9q#lQprUC9h2+qr#YQPK$?G$mFvr< za6K0Rx_%P;!s0?8pjxf^G-#f0nh~;q>XgbNCX0X&Q33q<eBSAo^#j z6*t|Q_NTx)qC7omxvS@-eT)DJTm~stP4ZT)fwH2HumpjAvWr z(ZZ6O0KKU!Kl)`v0?|3jQY8u0bNelW)}FFt>lYy@Q3CLxza&L&&QgX32he`cP7P@5 zd(ts0HTH7{^g;doQ&s)ukYe2d@Ns8n#|zpY>v!0nJ!s0q00000NkvXXu0mjfZ34?g literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_xcost_205.png b/my_changes/player/skinsdb/textures/character_xcost_205.png new file mode 100644 index 0000000000000000000000000000000000000000..68198c07df1a114357ac703845b6a72b2de2a9da GIT binary patch literal 1447 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 z ztp(|n62O-y7=mY{NnA7*QQx(Q6+ztyfHEGwH$c$)Y3Em}PECDpGTTu{Uh1I`*oxwVD=8U%VbLY-c{sw){aSc^F z0uWivc}_6e@pxPr;~ei<3qnYdLHL&uQ4-MG+h@1QRLlkh)1t_218+o0QCMC`@f~WO@?g*?-D>$<-{fuuxr;Y*}HeIaq!?lgZ>BsL4eC< zhqM4v;tEvr-Lz8x_vv)TNriwG!9Gomkg6b_jH>LZ0IdhC>bNHvHsGi&UF@@qU0nAv zbx0J?0f|IHqt80Pdjg=0wfH&;u%ea%)wSrTQO2wRR&1^MNp%!>0!4(B_QJ{ARZebfYD`jr-dU90a3d}5?~kvaGol0 z)528=$MfgUYot$}JSpqfuQxVt-fYn49M=rDS4ZOsH4;F(4S>&dGFfD0m$w9Io>Vw{_n*6V84X_@dpX~?X3yxJpS^)!@9O&#R_BN#*GGj&gsX{ z$3Xy3gLeMKH685ScB5pCYhQYgy*f9hz3~~7o$PYGTmN5wEqzD!NY8t}kiNf6R4Bk2 osQ5erOGihC(b?IlzWX`+Ul3ESXaxq%iU0rr07*qoM6N<$g5ruGtN;K2 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_xcost_208.png b/my_changes/player/skinsdb/textures/character_xcost_208.png new file mode 100644 index 0000000000000000000000000000000000000000..1c8d831b19d8975dd81f9fb7cbee2d9d4df80921 GIT binary patch literal 1525 zcmVJHTs;#Y!Z%A8EH>8Pw!}0vi%vp|?+1;Tm2u$+J+_`sV?m54EzV1vUQsTJK9i!pn z)ilr&rT$}4O0`#0rlXcJCu%9%Sx32F7ir_}96ep0rN4ff|1W-?r^sPHMp)T?RzBHQ zNh7TE$cY+C9j~Et@hTc>tD=n`=V)W)ny2tD*O`z70ov$0^aKnZs}yA?PSw*?cS9cI zUG;1kAmAG1?k~`jTVK)I!sqmdkKFy6N5cXVy!vTgajQHq$;furdIUW9mi}CsrM2sy z2-cTpJS#W~769MJN?YY$KUq&>U3HZ000G~~YAXS&^B>ddjn6y_;Mj2J2}rh9im#7x zz=PtWyy__qilclz++HIVfEcj;!!$ivxauqkmhuV%zz95GGGk}t`p8SzASB62wW!3ZUTVB zK8`0qk_jB|s--u$##sI!k|zmmd;QTn5dz9J?jABGMGgzz*Hj_J4itjl541+*+{^vA zXN;8@KN(}eV;lgXcs2DjRtRCp6aa|mX|ABN{7k}s7ZgVU)x&)tIKk*`sh|{(!MarF zQh=~Q?VUUqG$uZdLT8v)IO`WWqA&+LDS}u5i{yHhaM8!%C#EVzNeg&QdF+<1PVVSJ-{Wwl;*p%BNWvnC##8Ziw$fDWp93GLEV4 zCLsVo8;ANm>I6K4XOSHwK(<8l&>#x3K~9_dFvBZ9$?@Q~ zg|8*BK~W86)&i^*=s5cD44zfL$2*7Op7}#@4Ukjp_ZQDJ&`A6K5KzdXw$fbO3xF9G z8Umi@z@~~?0#pHoO8|i4=sc5%cWDqECoiHnq)u`k}z4JiX682gRYBq)=oP2C|JVlc+X#(!9tkC1tRqI%>6 z0-pI_74yeeqrGy0T@!#w-IrQ)y!}u9tU}s;B}-$55`eRkX#4aXxL=9NJ7jj)H?6oBzh@40mGc0Dd)|XW|B>;$;N*#Kx)7;PwTQ=fZpSi-G>LB!i}*UDV8cikbP zLItg?D|8_NTtf63D-Qy+&m}C31%&b6_IKcF8QE0o&WkHTy7(Ng}pWDIaC zy`92!1?y630oH2V09Kj+ubSLOz@u9pIsPs-PXO;wu`S;>0*XP?;BMZ5EjRu?VU_VG zdW(SXz0Y?tJ}1}c*FL@0dL$?a9u5Nh-|V@2H$^#^_tpoPMLEmgY5&hO&fd=&ZyRnu bj0WLfeG&t&yr2@500000NkvXXu0mjf%_YA! literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_xcost_209.png b/my_changes/player/skinsdb/textures/character_xcost_209.png new file mode 100644 index 0000000000000000000000000000000000000000..c9f6cc8a6ee2e19ae8d841f3d3cf52945790ae81 GIT binary patch literal 890 zcmV-=1BLvFP)dLPA1CL_|hL zMoCCWQc+P=RaIA2RaaJ4TUuIRUteJY0AXKWV_;xqWMpe=Yj19Dbz)6=dU||&dwqO- zetv#~gM);Nnv9H$jF+s9l%kG}jgJBVkdKd(k&%;O7G2=y9?2%LqDI%7-LyfD_Ur6fOF0}XGwCpd=DT%9|M%-M*)uj$O<6e46xM} zjI3(-9>8301pICRSm%Y&lALlgZ*aVhvc;Q}yc=E6b}6ni|Yz4-d0hQv=Bp zBU`H0my1D?dBH&02ArP045(rh@e!1ZHcCPla*~~0XkM&Wq?c6zNC@J-j-E->s=qp% zg(+vX-)R5}dJTZ%;5q?oI2d&Upfwzfra00o0JOI>f?|Q`7E}hE`|8;6)#ut2`R#39 zm@?c=r+56Pa+mY{62Kyrkc51nX^%1Y#-K^Y>kNRat7X7+72rJ)&KB|w93VLu6F9O1 zcYf|(1(X_pH=c9gKx?+<4 z07R%TxnI*ikL^zb=2+%6w3SirGP|#8b+0z@-7~190KP1(G$kk>EG6a3HF;*#SN0JONOHYo)F=l=_hJ zj|&I<=GFl}IoRRz(gHN&9bx4(wLV4HtX0a^HHc%b0q*rNJ2=+VNG#RhKbLg>3Q1<{9 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_xcost_210.png b/my_changes/player/skinsdb/textures/character_xcost_210.png new file mode 100644 index 0000000000000000000000000000000000000000..ae3c0228c744aa383e1c5245a1bfaf82c78b5508 GIT binary patch literal 1037 zcmV+o1oHcdP)v}w{>iih6(GWj6hycWTNida1fDpdT7cfE+Q?V+|sA+~~-ZV&kqJ&1~8 zOG`{y_ZfVKcVA|9k~AGreBohcclJ-7-@Nlqw@DI+=Pz2>&+bt{2($|e3)$?s*-|AZ zjI9qJGaYkt4^4aT{*!Ee{!*z<`u+j{_7O0TeoO%D0|3k;P94DB-X~`U!~&2xA}Roy zhG7UmVlDxizI^3|QS>DsXP&c809X<+Ge85tl86F;voDtbG9eZKIs4H8z$DBP0FGm3 zz}ouT!tCQXdIspNF!mB4gj2}?`QYvCZKGbVXV1M}eq~$s<#`#Ko9~QV(Q35{tt((u zo8_?_0|0%U?|%IpKqEjza`oD+tlfTZw>AmGWmE!@#_!x+GJUo@hgt9$#~4zZKW^#4 zQ=9J6xHh5zpwA`3XYia{Iy!?eW&l7EK&3Kfg(NAHyjB80D*@6r%*Sr7?8XMcQi*&(w= zK8w3TnQRf1#Sj4?5X{!=b)(wklX0qLMCofjxrcKkdppA|7yg0VAv9U_Vdu1Hw z-w{wFFOpI`&+iS2KfIdnE>a<*mHhpXE{xODQ$~FQ(Et!-0AL&fh%x}sM6G5d&*>Nz z03o;l43rTxt_1*)et|R}0^rgp0dU>Bo_AsZgrEUP^C1A8PRFPp0K@830k{n6alJ$! zZJfuDs|KK^xHPEwKLTJBOTcCJuLgjb-q}r!XdHc493S_*05EoRcxY8`)NS?m?E><8 zC#$H&8Y`9p0*Rv12nsX_N{Yy)B}r4-#Fw_YIDQHw9s{vpn+Ko^-XR;_ z0i+1Q6TrHM^N%~0V|+{F%EYnsYbG=9c>ZtB%$#O2A&=5-k)bO>L#Z>BOO?>~_0v0{ z&+qja$@a{$KQLP>m&o8!s#Ylp0m6?jA8fO3p)UmhG+}xKoolpTDU)$-fsg=#lnMYN zh|P~KbW5uQpvEgcvLWaKguNa3JaC$IhJLCdz_^x(0vmv`N&u{bZw3IH$KjazEg-Hz zUTt{@N&vVHRqk7Q09`hLRkp+{%LcLU2mD((J|gwFB@R9N5EKxsEr33i-;uY3dB*)Z z_iGB7$Pta&`@(EIgVrptFN}3eD#&c#1$wE z=;A8GmQWag(muLQj1+Mz82WYIpms^&u?Je$9#ga#(18E0&!#ZepP%1IX&&-;JQl;KmG=0( zJ!@vC;aC!2N$*?`{e!s`2`YenE02sH=b$kPWs|*5= zdZO)wqMD7WxdD`SpIGL3a(>3IuCAz1DA>PIN1Go6382$BpkC*#4FDy+1qcApcL3Pu z$xGdIF>eIHE40H_JxU}*RdIWJVdINLP{uS(N>Yg*f-4We{ZwC9$SH1eEAV-=^N@n% z9^d18bImVypm6~3J161*P~3e?QY#5yu9PDQRD_dV)p^8%2~W_`yB z>WivG07wWZCzFX?_X2>Z3Yh%z0l=y~*t&1)-sWAq?zf^|M&mG_7yy)R^Fbk|Hvj+t literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_xcost_212.png b/my_changes/player/skinsdb/textures/character_xcost_212.png new file mode 100644 index 0000000000000000000000000000000000000000..79ebca101d79bd7703bf6659aa13b3bc73e11b99 GIT binary patch literal 587 zcmV-R0<`^!P)0UKRNojmJiE@Ist$KN&!HP`Czdy01BlS0B~?t0NA_+0Ke-UfOVum z8vvlz0Jvqy%_4m-nW8~~VgPg{h&>vBB?t{9N>r5e;bOHScI{k!f{XzGgqX1`DdlKKFda$(8~_c317H;x4W(a93MBym%A9d75dRSf7W#6* zYbyZv4UIu3NcziIf2)pLW}Inm8HNBzc}a7cGjH85xS9V|VcG+zq10VlGZd;f82d8@ zUJ>ZqpDF;l@mV%2ZCP8vSdPtH%8+jrmENKNgm!rD&p@9;^y#llf>e$zGi(hTZZE~d(UPVtHyD(a6fC@WYa9a{KE%R{b%e041jyMGEPhXZ z3YG74GQibZAzkpS>Em7DVW4KF1KnBev!Rz=GyVFeqOXFHKKR)BOBAi3ScIVxrK|(NP*38)JY+EP!gCk9A!3 z?M+Nf5FmDxe>1Nc!VZfsy{Y#3SjT03o0^&;U}k293n%|50~|gPk4ga5J}=_G-#?~5 zpP$*rRo6?-5w^|e^O3K&m#V6&sHUbSF!;R;aQF~IPE-PPb#>9;;2@2UkJIGjBm*2i z?DN3Sp$A+%eeY#}!zbc)*W=!@`y*!8FU0+RKl%IniQc{q6)&2XeTX3kxl0zHyStl) zhldw+5I)RR%(b|Y)j2}dKi`jDE;J=2B~bDt z1023kEV^di=YPF( z`*m%l04SugvXUVR)3L3J!TNv>h?f^|*_t8CH~V$%6%jzZJ%)Egb`Fr`$6NpmorKP1* zQBlE1R-v3Y!iL+(L9WObcC5Ftw6rwJ%*)J{I^7Helu&|H;4tP8shOo`?a68rl z;D3gJ)(Z^rzk`mg6aX(d+1c3)@zSGX$65fqK)m$m*eU`30~r8}_cra(8~^|S M07*qoM6N<$f`pGZ)&Kwi literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_xcost_214.png b/my_changes/player/skinsdb/textures/character_xcost_214.png new file mode 100644 index 0000000000000000000000000000000000000000..b8d889e31a4bab836e18068abc05001847bb7384 GIT binary patch literal 3397 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 b+2X$eHtBa7ZoofP00000NkvXXu0mjfcWqng literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_xcost_215.png b/my_changes/player/skinsdb/textures/character_xcost_215.png new file mode 100644 index 0000000000000000000000000000000000000000..8e834b6ea838d904e06846138398ac971ea5d881 GIT binary patch literal 871 zcmV-t1DO1YP)3&*%8` zQPcCt_S6Ij{--o0Fk$lqHZk-D53U9fHZ#!W38}$lX8qbPjKtbQav6YZAaX3SGXG|% zU;BlDfq{YH)72FW3=9kmeA~q#f}2`bvfd!*Dpi!7!ZR^YxWvSvZ(t zpMima0VDr?y0r@>ZEtpTLy?bu%78b|e!9AXqUwoHJA!EQbv(-$u59ljN&jd|a5Ml$ z0|2!aSg`g2N}gSJ8JgEVy<*_w6JubQbOA-fq))H@^YMwn<%2YCVDt`QC4OPk9JqLY zT?&R6wiYFN6PM746FQKSllzZcF8GwbBrgTPJc&!3k56pK*8l{w04`6GH_bwK+3kEdd#)Z2dF=vW%G}U*AfG||vIWCaof8bwS1b?#pnHO0 z+MRsLhs5yZcVr70qOOo-&b)kairn$&0D}Eg=LDRseZ_*|s_qHeRf8E<-!nYbIRVGG z0D6|7Hpo($$Z%B`68kXBz`($8RrdrW3(zC>@dW^(fGML=AS~0##}K1gL+H@228`Ip zR|V2K6)-R`Fhr?NWca`cDg2^TCt`MoQSwb7WWYmi{R)Bxb8w;w{Dp`m=}lzly9^2S zB3+1uW`7$n)x%1Ah6eoRQYj^1v;<+EMF!e8Aa%x74Z}Ap3X4X004ynA3*(CDZ&5%002ovPDHLkV1g0Cfn@*y literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_xcost_216.png b/my_changes/player/skinsdb/textures/character_xcost_216.png new file mode 100644 index 0000000000000000000000000000000000000000..459b52375fa71c9b42a39438922de32444f501d8 GIT binary patch literal 1138 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 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_xcost_219.png b/my_changes/player/skinsdb/textures/character_xcost_219.png new file mode 100644 index 0000000000000000000000000000000000000000..17a675c58a80bc35f6c594fefde32e1b7b660d35 GIT binary patch literal 2625 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 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_xcost_220.png b/my_changes/player/skinsdb/textures/character_xcost_220.png new file mode 100644 index 0000000000000000000000000000000000000000..7440d6c4185f3b1b9f322240fc601e46a3cd996e GIT binary patch literal 2256 zcmV;>2ru`EP)b)$it*{t*F*&@U#as_OJ~N(P>l1 zw7$UhGRmaBOd9G$H&CQbS`n=n1Xv3t86~9;S(3)A#IfVrj&Eu^*VnmwxV|^{UMF!{ zwQINUOODSy|GvNf=ftIH8f#&w>jAARwn$8@*!oj>fvJ=ax#*!iQUV~6^#j;`Kbd&P zwdMx5818xlg8qt0zCj8AP)HYvi4{`$3PFE`?HdM@nqpxX6XeJ~n;3i(o9m*wK;y87rtOfEPcy zWVV0%^iBYN{QI+J-(bfUvmJ~@Xlx1J$n)KF)D?ggR^kQ>GvB^(k+GvAX8Zrf1puDf z(qnUl`FNf}y2y(kU1HaB+h}YFgrz8QGW5tdRp3yYo z>9lRF_ZFk9RY&Ze`rww<3GQR%G6y^!Tj#;{b`B>J1pO7_bLkZ)8bpn`ohuYnhZ6~& z+S0gc9RasKQ`lU<&?@M}+@gv)hpBl3R!eZAQ<7{}U?pE$M^tL&|F>ZifN^j`5b9*S zhP)NgT#ih5Iqg}ATd`UlQAq1CW#&(hY2HWxcPNB68l_?D@2<-&3KxHcbyIO226Bz(kG|r82{Al>lpu(J~_pQn>N)wR4Ol+MCapq=Ht3Rt%0;-|0$O= zc*0fqJVhZMC-?q=wJ#_uAou_&kL)c*33c^ z_L;&nUZSoAD+(a!*G*S0dQh@On+w!KC{Q-%Ctv%px}JR-!vzdj+Xf0VLlopVSF=}G z$SubdBb&rTfaMbV>_o$g>(qnmtmQ7?@9yNx_!IzpTU)uB&-3omJ@yG%{YtELbl{qq zL5u9Pk-tkG2VhndX>$}&lGn?q?{1r^8v-+8MuQY!dP*^U+gQ)Qs3cKICIRRd1Trn% zw%8J#o1`QN_$w8LRh1uQvunl#H^A|7nSCA)rO7yhfdD6qMP5%P84Lsn1Be4r%lY0^^wsF;OMxubA^L%CfnZbzQ*xX1$~Ih$4GiTj`V}zUKAToX<5g zLs8RcEELuy0Mj}5RSTh$#Ug`&0Cz?rP%70}KupsMq5+SGVO6aW$|H(G&f}rs#9v6h z`7lYK_3?L^{^d7$L{UgO(pGnP^(VBha2P5TTV*;?wJeXKFs!O9e6~ePfCOK=0bi>jKzkDT5939cyX=pvkepY%Yh^(ZM#^o)N6kA0YYW z!?=3iphap%dHOqMzcs^vF3fXPftIR!qpFN43jKn>z?ZsFC*uI-I4hhku#n3!>(}2R zLmTSe^;Wh3gZxSxB>jF`fw#+L+%A_%$eP+3HI3fOeawIGJPLa8(parHt*I*LuRxv5 zYLJIzfy*Ve}0R*825j=RljaCiUl>$t1_qE@xqUd{agr7Kx8{|8z__?x!@ z;E8r~{0AS`nBb((M?Y}>?`bnfPn`M}Wv`cWl?vUC7%(f#$W@IQuBB=kvZisdP++UW zmtRjN=@$fcq|>~*LJXK(Y+yiGf8pg;vPJWU(O#|aDJEr#Ntr;aeyDv%`Z)a)J$pEV zp*k72r8Q60C#~e=q6Z^MTQxS|@$hyvD|HX;LX~Cnv1D}5X_lUu1K>dfVw%8W<|>8R zJPmCko1 z>!WWlIJArSlV@xP?s@DU^IgGt5waFy272e_)-HrpOE5FqR`O0b`^I0Xuuuvj7bAoM zWs3FabdBNDtvd6O8e%=6D9Jpg=Fn}?TM z7$I3Rc2<_**%9#jIbk6@{H*?8rnav8h|W!tY3U|9HwnOwZjsT+yzNnSp(K#V`bmUB eBrQcxRsapgGx79cjifuJ63*i zu|UAj0I-pf^9+E@8IRQf+}aN-+_7#g+dH$To;{gC9lgWZ-D5datJg72^ zWqdXIL*%5?RxFJ<;~^Y5_aU}vpW|jUh9<>}W<7?8wAOCq4u?S^1DHKKj8rNuQmSDr zqh;=!NLrMam6Vlw5IY8Kt_BmkviUjx<)UEmIR*xWD$rB9#jO}JnM|JLt+8cw_v-3u z7Sv;`qvIe81pKVJx|&s2S2IeztTi%FaYhL0F{Y|Jn5OvzQ7TjsX-lDssNm#zLWm$& zQJ_Tzm@^(Kr~<92k;}6FF3p$E<$SXp9S0eu-h6Dcb1V?>fBC&a5S;Ol2{c(rxwPe* z=4s82&{`t{j00f@LM4~OE>+1TY-?ly>fOIX*VEXyZ#Q)P-?(+_0~|ei5QMlfK7JRv zo`(9f7cm|@yI~Ttx+kR+hGD=%JkV1*2qDmZ`4ZMg?s+h=)EB_#NjPr=Y(jPFl+s*hMWdN;&Sr!1U zupQ}b>w6oiR2qAmw%}`D|1Y9%^x_-MU%~kJT_}oIJUba4ez-IQ2M8g^7@52gYHLjj zw9M6DJb1Ri^2^K1Vyz)1y_NoFq3db%^+s^- zFF@d>tN8Qe=SU=GkVwp6>P$P7{%4Umef6OL@OV5XOD!xcn0}Y78xEf+n(w*g<*ecH zc)-9wJocVoWDGcp6doooXql^lud4+!HzsVYVeK7wZ9u7a-70BbomB!cz>E zc?Q3J{e7fTX=wT<c8F#}EWLDPH)g?_d1W<%e1aW6{yd}9D+;P&m76x$EB28;gHT0PSZvLDyIXWGm7EDa0pL{E zJFg)+Jqq^QKLG%;+3fmf{yv+{!sT*_dF~uDbKilg?tsGq zJo)5SEG&GA`>R=GKKzG}DHCnyk)ycnNg?<9yXZV}6o34d1NSe+;c~fz)%hB?+l|%L zRjjS8VRd!2Kq;5Yg)i2=02p8x#?MQ7oHp1i$SbJFOhU5RtSC&ZjR|LA>zE7=r2hGnf)L}GA<)o{$?z}&4ee+S^&mQ(4>@N%RI)oP6(+g0Tt#af zgb?;1b_{`r_Oe}_wbjgIGNJ(C^Z&Z?T{Mj?;lTYBbaWg_c7)K|LD9O@DC#ZHOk(_*_lt{bj&+9rgE)Flhxq+*AzVHn6{GNRv> z=Xq~`{rdYzCg(9UbQu@@Pa)T~(`0$sdlILwV*B>(P!t7Or)v4zscOd=b>P6J*OzVc4vVD1NA_YA#dz z+e8>7*WZ8d-bZp7Y-@eV>J=Z0R~d$Z==3O>BxQL$ZM9Z05Ud{ZmfD9v@(S*Z4d<)B z5*y$ptgh!fLLQFI0B-iZY~ml;qHAkwMcux>z8;H>b}6S= zDzaY1p0OT!e3?q~@9XbBVmkV!lrp#5ZQ2u;wSWJ9A%Fe8GzkXv7>iDiiYhHSJ(@ql zk`R@V=cLCOJo)Pz1t}<K)d&_mf8nJQG{n$h< z2y*#bw{FGa;$nFcj3|EO4u=s@{NVS_cnE|LD9V-sl9O|{9Ye3ItQ7EqVHj|^T=06m zwxs2Zhv4gKLDSe0X1;gM6dHzM6c8W)oH_FYtekuUor&K-eWgptYHVy2UFN2ao%tUN zJUn=nCcCKJW&MZ7>-93P*IP6U_#YYau~wh-zn%e6wOqbhB%7tNs_L=?X*a|iVpCd0#+YO6!j*b?@n r{$px-f00000NkvXXu0mjfQ|w&R literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_xcost_222.png b/my_changes/player/skinsdb/textures/character_xcost_222.png new file mode 100644 index 0000000000000000000000000000000000000000..8628fe2aa676461a8587874175e93ac2fc54128c GIT binary patch literal 1050 zcmV+#1m*jQP)X)0&zm>z%~((jRbq?@!obSy4+~%T++tajP$^m&sf*@dU^Quu+Y;Kh?F}M972#hOSgmYDd zPXckc>+NZw@)oFy5;>q&oVf$y$;LV0wC$I2K$%2VC+f6+<~iV5fI7=Zsj$xX`{BD% zsD3}}i|Lqu3)DXO{37`*z5tY|%*3!PD>oF&$mgNo58Fl~-9H$l=|%${3-|%Jrn31( z@>%?;9B^=Oz+^H>^;wq1;O12t?|lnQPfT~zELdJn%j7xD^E|qAL&A_M%jilX6#;ny zYHKq^=Q%?Eh_cD6XuRinbh};Qd7c93cDt4IC2{P4Udg(($CS`b|9j_&Y<6$O`UE2Ndv9 zhbxo)Qs;o?hu;J6)hF)*@a{*Sl@UuBGDScUEX&HgAeGf&vVR-_rd2j!Ub!rhJQFp^ zWeZCwRj1RT)oRh{blBL~c&bq;hQp!pxT=&=y{-@sdVAsi?2e z0gH=^DD~9o!{N|4KAx!V0^j#>UAOY@oyQtIe)QmY^)I~q>dg91JOX^*&y4^nCAjWP z`gG_K@UW6LSkU*p4k;x`eyi0=jlaCU4#1nSfNh7{K-1&;i89-vDm|p93EQ zw?HN7zNSZ~m#*Ic;6g+{)N;ftb^jAwirSs1z0~XBI1cT0n`X1g-rgR~W|OyE7bzw2 z28ta}gypIqSb)k7*pJ#|1o*zs_V#vaoRl&Z0cD}D_(`Ld2(WE?$^mh5eBmQNL=)99 zZxwj%A|S2;SrH(mWH+h;FKh(FRX~Sc1egrRdp-o}#3b))hYh|lJF6>uB}rC@C>ya6kv=Bfh2pT6WZ zAsGGo2d@K@dw;Qdbj0}X4y(ZU?hY%HF{5AZvwH44qo41y^6wD`KmNu_!POh!KQ<0y UB0!B;p8x;=07*qoM6N<$f>3q-4*&oF literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_xcost_223.png b/my_changes/player/skinsdb/textures/character_xcost_223.png new file mode 100644 index 0000000000000000000000000000000000000000..a2053adbd222cb0c45ac24179ccd8ca67c444475 GIT binary patch literal 2720 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 Dc!Pmz literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_xcost_225.png b/my_changes/player/skinsdb/textures/character_xcost_225.png new file mode 100644 index 0000000000000000000000000000000000000000..c55b7f0f62add3a671063eb617b9bbb09cffa569 GIT binary patch literal 2757 zcmV;$3Oe6~~V!u6^ghzSr0DglE8J#>8Oogt3h&7$|};BqTLW6IxnzjH0ToB2{^4nukdF z4#`8G`vKZik*cZ{Ria2$9;!a}p$ctL=<52dbN1mF3^sOJj7q80M z^D8oc>biXQ2XC41j4hqHu^|Ay_}$7Q2l@Q{85{faV%qwDe6VlR00jN27Nu<&fQ6;& zvV7rY2*CWQYibcIa_P#qHUz*we{)Ul|LL~e`}B=R4)oDgvMYX-w8ZA;I@)Ur&@oHsW(di;z$f9>0=Vn8~bdjte0d^(f!0r<;Xp>X#; zd)MCob>~g_{QZ;i(KpKe_lM`??uRGj-XCwufByQ8JPiOE@CbyW!EaUnr2v4?6O(7v z{4dGa_=3d(;=;_Fp9Ko_OLk=rAJ4c_B zwvK+IF^9RVVJ$qOJY54MECkR1iEqZAIRL}E#)LMwvroo5AH|b*4`hEdznmLve|k|9UWamq43#U(M;NzIGSgidAvIpVGeU0 z2=HKzgK3HquEs-f7j3IJ;9$L4t*gT|aF0PuKtZX%JER4S{rLBZzI^Ue4g`#X}mKAEy~{=ly}CSq*?bA)r8S13Wz6C*3;ZMw;U87K44WI z#0(Vp0xperAFSB={0H`EnL8sL?LDFPX|=V94O!^A&$ewb^G}#@sFhLHl{RZ6*TsuMaS0TKeY3ZoLW3D!^5K*OY+7aKaa;#W)V*&nW0Z!CpU65?=?AJCZeFJ;t^wLGSaQ>Q~>op(q&KNZ2v~~1`L6o?F zPdnFPe-|{Nu^03D2S&AiIA|bVyLwZOj86&HKw!%kN(MqU*I>M8#ZsH4JSV5}BR+Xb zv!--P03QI-LP3S^?Af7ty`)igf0(*J6*EmFG8#3rcF{St?tc zU$#S19y5=3#-K5$p;!*<3=YX*NmGCV2rgbg;~b=}?w%pLivapJUwd6n%r056Lu$>} zH(F#bsNm&hzrJX2Y3@O6GJ%y&!DJvP-3Nez03Tu@j3y?}7@8Cd)zz44t!gA^>5D^S zcC6cbU^)aK9#5#Inxwg0{ZRfcYywPwA$4 zrCTcWDubY9^?J%burn!FUEv1ItEi|9OJvvhB}T-KClV@PN)Ji=h#SwBUc4o*z4}8t zG-J@1!(7&&WqzSyvK$)F0fBeMpdkn`BHCjC0Et_%4>7~_Cb;&{8;Y$GDWN^(=L@bW zQR#YfZ1p@$J8r+R^HzAUF)_ep1jb#>4iI$~%#y)jGokikwJ{U0cdp8WL=#h!^Rj&A zvVq1JH0Cguy;ytb@X1w|BTIXM-$TO%(R?hp_|PLbXK?_q#`W&vzS&Lkcpq$n9vA}YnM`Hj0C_hi>p3*&~TMYOw$(B8v8jEr#00000 LNkvXXu0mjf7vNUy literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_xcost_226.png b/my_changes/player/skinsdb/textures/character_xcost_226.png new file mode 100644 index 0000000000000000000000000000000000000000..a7b573974eab2a577f929a0440fafdd75bc9b36a GIT binary patch literal 1005 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 literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_xcost_228.png b/my_changes/player/skinsdb/textures/character_xcost_228.png new file mode 100644 index 0000000000000000000000000000000000000000..a0cacbd9e1d4b7bb453450a13e327cea0c3837bd GIT binary patch literal 597 zcmV-b0;>IqP)9SzkwQW9^hYL`opN$`2B2y)$4UzCM|)n?1;!RULEa7kZZdLy zo#(A98w0Ua7$IARs1r&K*G50GJ5;6Ua}=w(nuxJ#aF=F5YuO*ur?&&37=mKi3joxu zVE|B6uRStP!vGfj-T-uAfV${lwL5F`Jl%UrQz)8fpL-;%Y!B>Sf~{568SE2R0l?PG z@!Y*r&my?DdjOXtSZq(V091W!sqg&=Sp=X2f{kcnb~yKuxA(L-&TRgD=NEy30Qgi; z)MqSUAm(|i<9_U-0VR|>q7%RsaOgm9+sD00000NkvXXu0mjf}&PXo^rCbd~u7=WVw^_OzC2~qAfG7xp^p2TkNKFL{n%}RO(yfcH}l@S-|x+v@9nNj z>(hn?RdlBbYx~nn2S!rOr6|QdZvWa6*4bk_Q{K1?Dwx`X#>~%RK^uLrEuWlAtETs* z9aRHp<6KYBMjvdL!=(*lJ=HnZcdk9dIur`AP9=5?(CD*%k0Nerks~WGoPW<-qz(*{ zAesaX9&Lyw0dus-sbu|X7jJGMVDco7>|_F<5`SiGL0tSNL4sSqD31>9nnnNoc_#M! zGu{6ttRw=GCHC|0 z4o@J#`ZrhHyrt`@ZvSz*a_cYpjr@y~v_q;Q7zh6PR!@5vi~mH5pzW|?UqKo?Y&QMvF>tLrQCheD z)IG0+@`~qC(X+K=W26%M3Y6H^?@=THAhZr*?RF8`9<<0*Zk(RZYtZ8%7>^=pYlMvtyN(}MWW<1A z^TL@7G^n~u-?`cd`^dXLXf6xhl3>Bh!i4aKlQaAa72=@((uX0sdu3tVh6qs1VebkW zypSX||1~2Wa$!mqy=Anq0A=Mwr0PM&o)gi9TSR4qEOn4ju;DgtutnZ0u zfZZuM0!_^TIRe;ysTXJJ*T#W=oFf1qouN7dxIhPtNhWa<%3|tLdZ*xr6oegZo65)l{NMrK^(!iw2()nl3GyGrh|()+==VlXcPw5`uWa5;EqjJ&+ur&(aJt>p^;y7H9L^_x zokgmm4MDql-7?k_#+OrRD8zy``d(O6NpEagMUy5*8Hg;vl7L!p_0!S>@Y?^(w>K%H zavSwpcbSh4vIiuz%8oJ-h#_my>%*F{agnkx;r|6lI9y88rcCnJ7mY?z6M$-sLIsUi zmAt=o-{IYrEZQb^yQ2V#odUu0pHa);+vH8-3|P6bj$;hz z;%IDa9^5A&c6|r8Ph|;Op9O5i;i7_S4UGYEdC`5E7_o`nrY6olK%*@+0z{0;@kp@# zNb_SA1q}YDiCI+hbT;q)u9AMVc*O(oON%{?=MFsvP?xM>tlOpcp|%|}Sr#y5_j?dAsAtSS)ANBZ z#$YVc96Nq-Qa+^(oy*`CW_Bi*K7#O{g@E5Y;{gc(m{mAAjsy)}Y)!ehxKM9Lt0IYj z5eznn+yX~+_XKUROCiz)NGkD$vt47IsyoQwvHJ|ZYY~Hozg)x+4|;fv zU;rF4u8Khl2?8E6Ahg8ux&K#OGI5x6>+AoSY0D82A831T(62!$g1W7Xql~lu+Kz0&Ki0VKqYXhD oeUeG2CsK#dhwlYqw}7qu4^BX3%bcK+d;kCd07*qoM6N<$f;m77FaQ7m literal 0 HcmV?d00001 diff --git a/my_changes/player/skinsdb/textures/character_xcost_230.png b/my_changes/player/skinsdb/textures/character_xcost_230.png new file mode 100644 index 0000000000000000000000000000000000000000..f2eb220a728507d90e06bb7a2f54b19207d91cf3 GIT binary patch literal 555 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QfUD`A+A80SL~u282o2o_om~E*OT z1{|$(Yvt1eOfr05{oen?K_S}OJG%btR~c`O@7yY}Yki`F(;tO+ym#uWyJ+69M)M!f z2eq5#D@@P4TEK8b*6ElI%Z+?ag&3|5Gqd}8@`bXS7UI{scg5+=4oJb$mwhSl*ZNY zI*UPs;naPW1O3W83>It+zN`F;zXnPgh&iwpl-}#p{Wa*24z&3T~ z;{A4gJM8yePj{G+9dv%$f?syQO}iKLPv$`Mcw$DDL3qLLDs&yD_Ytj|k!_-!A z6nyhEOaJ}rLQU(9yp|TNv3)+~nC%dI!Z$8+r1`HLxfVxFYV T#$BnvIAHK}^>bP0l+XkKh9K!U literal 0 HcmV?d00001