From bcbdcfd2b0c52d24c11cd3e1c5b2deac6a15af2f Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Sun, 30 Dec 2012 22:06:11 +0400 Subject: [PATCH] Initial commit --- COPYING | 674 ++++++++++++++++++ blocks.py | 282 ++++++++ map.py | 131 ++++ mapper.py | 53 ++ textures/air.png | Bin 0 -> 123 bytes textures/crack_anylength.png | Bin 0 -> 1076 bytes textures/default_apple.png | Bin 0 -> 283 bytes textures/default_book.png | Bin 0 -> 292 bytes textures/default_bookshelf.png | Bin 0 -> 597 bytes textures/default_brick.png | Bin 0 -> 626 bytes textures/default_cactus_side.png | Bin 0 -> 763 bytes textures/default_cactus_top.png | Bin 0 -> 682 bytes textures/default_chest_front.png | Bin 0 -> 769 bytes textures/default_chest_lock.png | Bin 0 -> 871 bytes textures/default_chest_side.png | Bin 0 -> 714 bytes textures/default_chest_top.png | Bin 0 -> 628 bytes textures/default_clay.png | Bin 0 -> 613 bytes textures/default_clay_brick.png | Bin 0 -> 271 bytes textures/default_clay_lump.png | Bin 0 -> 210 bytes textures/default_cloud.png | Bin 0 -> 118 bytes textures/default_coal_lump.png | Bin 0 -> 933 bytes textures/default_cobble.png | Bin 0 -> 744 bytes textures/default_desert_sand.png | Bin 0 -> 627 bytes textures/default_desert_stone.png | Bin 0 -> 517 bytes textures/default_dirt.png | Bin 0 -> 962 bytes textures/default_dry_shrub.png | Bin 0 -> 450 bytes textures/default_fence.png | Bin 0 -> 539 bytes textures/default_furnace_bottom.png | Bin 0 -> 731 bytes textures/default_furnace_fire_bg.png | Bin 0 -> 313 bytes textures/default_furnace_fire_fg.png | Bin 0 -> 865 bytes textures/default_furnace_front.png | Bin 0 -> 651 bytes textures/default_furnace_front_active.png | Bin 0 -> 826 bytes textures/default_furnace_side.png | Bin 0 -> 731 bytes textures/default_furnace_top.png | Bin 0 -> 731 bytes textures/default_glass.png | Bin 0 -> 978 bytes textures/default_grass.png | Bin 0 -> 794 bytes textures/default_grass_footsteps.png | Bin 0 -> 856 bytes textures/default_grass_side.png | Bin 0 -> 567 bytes textures/default_gravel.png | Bin 0 -> 591 bytes textures/default_iron_lump.png | Bin 0 -> 936 bytes textures/default_junglegrass.png | Bin 0 -> 672 bytes textures/default_jungletree.png | Bin 0 -> 751 bytes textures/default_jungletree_top.png | Bin 0 -> 865 bytes textures/default_ladder.png | Bin 0 -> 395 bytes textures/default_lava.png | Bin 0 -> 772 bytes textures/default_lava_flowing_animated.png | Bin 0 -> 8715 bytes textures/default_lava_source_animated.png | Bin 0 -> 3481 bytes textures/default_leaves.png | Bin 0 -> 451 bytes textures/default_mese.png | Bin 0 -> 203 bytes textures/default_mese_block.png | Bin 0 -> 482 bytes textures/default_mese_crystal.png | Bin 0 -> 417 bytes textures/default_mese_crystal_fragment.png | Bin 0 -> 212 bytes textures/default_mineral_coal.png | Bin 0 -> 952 bytes textures/default_mineral_iron.png | Bin 0 -> 1614 bytes textures/default_mineral_mese.png | Bin 0 -> 488 bytes textures/default_mossycobble.png | Bin 0 -> 988 bytes textures/default_nc_back.png | Bin 0 -> 317 bytes textures/default_nc_front.png | Bin 0 -> 378 bytes textures/default_nc_rb.png | Bin 0 -> 206 bytes textures/default_nc_side.png | Bin 0 -> 231 bytes textures/default_paper.png | Bin 0 -> 242 bytes textures/default_papyrus.png | Bin 0 -> 664 bytes textures/default_rail.png | Bin 0 -> 507 bytes textures/default_rail_crossing.png | Bin 0 -> 555 bytes textures/default_rail_curved.png | Bin 0 -> 545 bytes textures/default_rail_t_junction.png | Bin 0 -> 542 bytes textures/default_sand.png | Bin 0 -> 732 bytes textures/default_sandstone.png | Bin 0 -> 772 bytes textures/default_sapling.png | Bin 0 -> 358 bytes textures/default_scorched_stuff.png | Bin 0 -> 233 bytes textures/default_sign_wall.png | Bin 0 -> 617 bytes textures/default_steel_block.png | Bin 0 -> 219 bytes textures/default_steel_ingot.png | Bin 0 -> 207 bytes textures/default_stick.png | Bin 0 -> 182 bytes textures/default_stone.png | Bin 0 -> 558 bytes textures/default_tnt_bottom.png | Bin 0 -> 161 bytes textures/default_tnt_side.png | Bin 0 -> 186 bytes textures/default_tnt_top.png | Bin 0 -> 264 bytes textures/default_tool_mesepick.png | Bin 0 -> 341 bytes textures/default_tool_steelaxe.png | Bin 0 -> 927 bytes textures/default_tool_steelpick.png | Bin 0 -> 322 bytes textures/default_tool_steelshovel.png | Bin 0 -> 216 bytes textures/default_tool_steelsword.png | Bin 0 -> 317 bytes textures/default_tool_stoneaxe.png | Bin 0 -> 931 bytes textures/default_tool_stonepick.png | Bin 0 -> 365 bytes textures/default_tool_stoneshovel.png | Bin 0 -> 203 bytes textures/default_tool_stonesword.png | Bin 0 -> 301 bytes textures/default_tool_woodaxe.png | Bin 0 -> 927 bytes textures/default_tool_woodpick.png | Bin 0 -> 307 bytes textures/default_tool_woodshovel.png | Bin 0 -> 203 bytes textures/default_tool_woodsword.png | Bin 0 -> 255 bytes textures/default_torch.png | Bin 0 -> 252 bytes textures/default_torch_animated.png | Bin 0 -> 1441 bytes textures/default_torch_on_ceiling.png | Bin 0 -> 245 bytes .../default_torch_on_ceiling_animated.png | Bin 0 -> 1302 bytes textures/default_torch_on_floor.png | Bin 0 -> 282 bytes textures/default_torch_on_floor_animated.png | Bin 0 -> 1355 bytes textures/default_tree.png | Bin 0 -> 706 bytes textures/default_tree_top.png | Bin 0 -> 843 bytes textures/default_water.png | Bin 0 -> 710 bytes textures/default_water_flowing_animated.png | Bin 0 -> 5972 bytes textures/default_water_source_animated.png | Bin 0 -> 5170 bytes textures/default_wood.png | Bin 0 -> 387 bytes textures/heart.png | Bin 0 -> 308 bytes textures/player.png | Bin 0 -> 212 bytes textures/player_back.png | Bin 0 -> 201 bytes textures/treeprop.png | Bin 0 -> 483 bytes textures/wieldhand.png | Bin 0 -> 384 bytes util.py | 14 + 109 files changed, 1154 insertions(+) create mode 100644 COPYING create mode 100644 blocks.py create mode 100644 map.py create mode 100644 mapper.py create mode 100644 textures/air.png create mode 100644 textures/crack_anylength.png create mode 100644 textures/default_apple.png create mode 100644 textures/default_book.png create mode 100644 textures/default_bookshelf.png create mode 100644 textures/default_brick.png create mode 100644 textures/default_cactus_side.png create mode 100644 textures/default_cactus_top.png create mode 100644 textures/default_chest_front.png create mode 100644 textures/default_chest_lock.png create mode 100644 textures/default_chest_side.png create mode 100644 textures/default_chest_top.png create mode 100644 textures/default_clay.png create mode 100644 textures/default_clay_brick.png create mode 100644 textures/default_clay_lump.png create mode 100644 textures/default_cloud.png create mode 100644 textures/default_coal_lump.png create mode 100644 textures/default_cobble.png create mode 100644 textures/default_desert_sand.png create mode 100644 textures/default_desert_stone.png create mode 100644 textures/default_dirt.png create mode 100644 textures/default_dry_shrub.png create mode 100644 textures/default_fence.png create mode 100644 textures/default_furnace_bottom.png create mode 100644 textures/default_furnace_fire_bg.png create mode 100644 textures/default_furnace_fire_fg.png create mode 100644 textures/default_furnace_front.png create mode 100644 textures/default_furnace_front_active.png create mode 100644 textures/default_furnace_side.png create mode 100644 textures/default_furnace_top.png create mode 100644 textures/default_glass.png create mode 100644 textures/default_grass.png create mode 100644 textures/default_grass_footsteps.png create mode 100644 textures/default_grass_side.png create mode 100644 textures/default_gravel.png create mode 100644 textures/default_iron_lump.png create mode 100644 textures/default_junglegrass.png create mode 100644 textures/default_jungletree.png create mode 100644 textures/default_jungletree_top.png create mode 100644 textures/default_ladder.png create mode 100644 textures/default_lava.png create mode 100644 textures/default_lava_flowing_animated.png create mode 100644 textures/default_lava_source_animated.png create mode 100644 textures/default_leaves.png create mode 100644 textures/default_mese.png create mode 100644 textures/default_mese_block.png create mode 100644 textures/default_mese_crystal.png create mode 100644 textures/default_mese_crystal_fragment.png create mode 100644 textures/default_mineral_coal.png create mode 100644 textures/default_mineral_iron.png create mode 100644 textures/default_mineral_mese.png create mode 100644 textures/default_mossycobble.png create mode 100644 textures/default_nc_back.png create mode 100644 textures/default_nc_front.png create mode 100644 textures/default_nc_rb.png create mode 100644 textures/default_nc_side.png create mode 100644 textures/default_paper.png create mode 100644 textures/default_papyrus.png create mode 100644 textures/default_rail.png create mode 100644 textures/default_rail_crossing.png create mode 100644 textures/default_rail_curved.png create mode 100644 textures/default_rail_t_junction.png create mode 100644 textures/default_sand.png create mode 100644 textures/default_sandstone.png create mode 100644 textures/default_sapling.png create mode 100644 textures/default_scorched_stuff.png create mode 100644 textures/default_sign_wall.png create mode 100644 textures/default_steel_block.png create mode 100644 textures/default_steel_ingot.png create mode 100644 textures/default_stick.png create mode 100644 textures/default_stone.png create mode 100644 textures/default_tnt_bottom.png create mode 100644 textures/default_tnt_side.png create mode 100644 textures/default_tnt_top.png create mode 100644 textures/default_tool_mesepick.png create mode 100644 textures/default_tool_steelaxe.png create mode 100644 textures/default_tool_steelpick.png create mode 100644 textures/default_tool_steelshovel.png create mode 100644 textures/default_tool_steelsword.png create mode 100644 textures/default_tool_stoneaxe.png create mode 100644 textures/default_tool_stonepick.png create mode 100644 textures/default_tool_stoneshovel.png create mode 100644 textures/default_tool_stonesword.png create mode 100644 textures/default_tool_woodaxe.png create mode 100644 textures/default_tool_woodpick.png create mode 100644 textures/default_tool_woodshovel.png create mode 100644 textures/default_tool_woodsword.png create mode 100644 textures/default_torch.png create mode 100644 textures/default_torch_animated.png create mode 100644 textures/default_torch_on_ceiling.png create mode 100644 textures/default_torch_on_ceiling_animated.png create mode 100644 textures/default_torch_on_floor.png create mode 100644 textures/default_torch_on_floor_animated.png create mode 100644 textures/default_tree.png create mode 100644 textures/default_tree_top.png create mode 100644 textures/default_water.png create mode 100644 textures/default_water_flowing_animated.png create mode 100644 textures/default_water_source_animated.png create mode 100644 textures/default_wood.png create mode 100644 textures/heart.png create mode 100644 textures/player.png create mode 100644 textures/player_back.png create mode 100644 textures/treeprop.png create mode 100644 textures/wieldhand.png create mode 100644 util.py diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/blocks.py b/blocks.py new file mode 100644 index 0000000..89f5920 --- /dev/null +++ b/blocks.py @@ -0,0 +1,282 @@ +# Taken from Minecraft Overviewer +import sys +import imp +import os +import os.path +import zipfile +from cStringIO import StringIO +import math +from random import randint +import numpy +from PIL import Image, ImageEnhance, ImageOps, ImageDraw +import logging +import functools + + +bgcolor=(26, 26, 26, 0) + +extension_alpha_over = None + + +def alpha_over(dest, src, pos_or_rect=(0, 0), mask=None): + """Composite src over dest, using mask as the alpha channel (if + given), otherwise using src's alpha channel. pos_or_rect can + either be a position or a rectangle, specifying where on dest to + put src. Falls back to dest.paste() if the alpha_over extension + can't be found.""" + if mask == None: + mask = src + + global extension_alpha_over + if extension_alpha_over != None: + # extension ALWAYS expects rects, so convert if needed + if len(pos_or_rect) == 2: + pos_or_rect = (pos_or_rect[0], pos_or_rect[1], src.size[0], src.size[1]) + extension_alpha_over(dest, src, pos_or_rect, mask) + else: + # fallback + dest.paste(src, pos_or_rect, mask) + + +def transform_image_top(img): + """Takes a PIL image and rotates it left 45 degrees and shrinks the y axis + by a factor of 2. Returns the resulting image, which will be 24x12 pixels + + """ + + # Resize to 17x17, since the diagonal is approximately 24 pixels, a nice + # even number that can be split in half twice + img = img.resize((17, 17), Image.ANTIALIAS) + + # Build the Affine transformation matrix for this perspective + transform = numpy.matrix(numpy.identity(3)) + # Translate up and left, since rotations are about the origin + transform *= numpy.matrix([[1,0,8.5],[0,1,8.5],[0,0,1]]) + # Rotate 45 degrees + ratio = math.cos(math.pi/4) + #transform *= numpy.matrix("[0.707,-0.707,0;0.707,0.707,0;0,0,1]") + transform *= numpy.matrix([[ratio,-ratio,0],[ratio,ratio,0],[0,0,1]]) + # Translate back down and right + transform *= numpy.matrix([[1,0,-12],[0,1,-12],[0,0,1]]) + # scale the image down by a factor of 2 + transform *= numpy.matrix("[1,0,0;0,2,0;0,0,1]") + + transform = numpy.array(transform)[:2,:].ravel().tolist() + + newimg = img.transform((24,12), Image.AFFINE, transform) + return newimg + + +def transform_image_side(img): + """Takes an image and shears it for the left side of the cube (reflect for + the right side)""" + + # Size of the cube side before shear + img = img.resize((12,12), Image.ANTIALIAS) + + # Apply shear + transform = numpy.matrix(numpy.identity(3)) + transform *= numpy.matrix("[1,0,0;-0.5,1,0;0,0,1]") + + transform = numpy.array(transform)[:2,:].ravel().tolist() + + newimg = img.transform((12,18), Image.AFFINE, transform) + return newimg + + +def transform_image_slope(img): + """Takes an image and shears it in the shape of a slope going up + in the -y direction (reflect for +x direction). Used for minetracks""" + + # Take the same size as trasform_image_side + img = img.resize((12,12), Image.ANTIALIAS) + + # Apply shear + transform = numpy.matrix(numpy.identity(3)) + transform *= numpy.matrix("[0.75,-0.5,3;0.25,0.5,-3;0,0,1]") + transform = numpy.array(transform)[:2,:].ravel().tolist() + + newimg = img.transform((24,24), Image.AFFINE, transform) + + return newimg + + +def transform_image_angle(img, angle): + """Takes an image an shears it in arbitrary angle with the axis of + rotation being vertical. + + WARNING! Don't use angle = pi/2 (or multiplies), it will return + a blank image (or maybe garbage). + + NOTE: angle is in the image not in game, so for the left side of a + block angle = 30 degree. + """ + + # Take the same size as trasform_image_side + img = img.resize((12,12), Image.ANTIALIAS) + + # some values + cos_angle = math.cos(angle) + sin_angle = math.sin(angle) + + # function_x and function_y are used to keep the result image in the + # same position, and constant_x and constant_y are the coordinates + # for the center for angle = 0. + constant_x = 6. + constant_y = 6. + function_x = 6.*(1-cos_angle) + function_y = -6*sin_angle + big_term = ( (sin_angle * (function_x + constant_x)) - cos_angle* (function_y + constant_y))/cos_angle + + # The numpy array is not really used, but is helpful to + # see the matrix used for the transformation. + transform = numpy.array([[1./cos_angle, 0, -(function_x + constant_x)/cos_angle], + [-sin_angle/(cos_angle), 1., big_term ], + [0, 0, 1.]]) + + transform = tuple(transform[0]) + tuple(transform[1]) + + newimg = img.transform((24,24), Image.AFFINE, transform) + + return newimg + + +def build_block(top, side): + """From a top texture and a side texture, build a block image. + top and side should be 16x16 image objects. Returns a 24x24 image + + """ + img = Image.new("RGBA", (24,24), bgcolor) + + original_texture = top.copy() + top = transform_image_top(top) + + if not side: + alpha_over(img, top, (0,0), top) + return img + + side = transform_image_side(side) + otherside = side.transpose(Image.FLIP_LEFT_RIGHT) + + # Darken the sides slightly. These methods also affect the alpha layer, + # so save them first (we don't want to "darken" the alpha layer making + # the block transparent) + sidealpha = side.split()[3] + side = ImageEnhance.Brightness(side).enhance(0.9) + side.putalpha(sidealpha) + othersidealpha = otherside.split()[3] + otherside = ImageEnhance.Brightness(otherside).enhance(0.8) + otherside.putalpha(othersidealpha) + + alpha_over(img, top, (0,0), top) + alpha_over(img, side, (0,6), side) + alpha_over(img, otherside, (12,6), otherside) + + # Manually touch up 6 pixels that leave a gap because of how the + # shearing works out. This makes the blocks perfectly tessellate-able + for x,y in [(13,23), (17,21), (21,19)]: + # Copy a pixel to x,y from x-1,y + img.putpixel((x,y), img.getpixel((x-1,y))) + for x,y in [(3,4), (7,2), (11,0)]: + # Copy a pixel to x,y from x+1,y + img.putpixel((x,y), img.getpixel((x+1,y))) + + return img + +def build_full_block(top, side1, side2, side3, side4, bottom=None): + """From a top texture, a bottom texture and 4 different side textures, + build a full block with four differnts faces. All images should be 16x16 + image objects. Returns a 24x24 image. Can be used to render any block. + + side1 is in the -y face of the cube (top left, east) + side2 is in the +x (top right, south) + side3 is in the -x (bottom left, north) + side4 is in the +y (bottom right, west) + + A non transparent block uses top, side 3 and side 4. + + If top is a tuple then first item is the top image and the second + item is an increment (integer) from 0 to 16 (pixels in the + original minecraft texture). This increment will be used to crop the + side images and to paste the top image increment pixels lower, so if + you use an increment of 8, it will draw a half-block. + + NOTE: this method uses the bottom of the texture image (as done in + minecraft with beds and cackes) + + """ + + increment = 0 + if isinstance(top, tuple): + increment = int(round((top[1] / 16.)*12.)) # range increment in the block height in pixels (half texture size) + crop_height = increment + top = top[0] + if side1 != None: + side1 = side1.copy() + ImageDraw.Draw(side1).rectangle((0, 0,16,crop_height),outline=(0,0,0,0),fill=(0,0,0,0)) + if side2 != None: + side2 = side2.copy() + ImageDraw.Draw(side2).rectangle((0, 0,16,crop_height),outline=(0,0,0,0),fill=(0,0,0,0)) + if side3 != None: + side3 = side3.copy() + ImageDraw.Draw(side3).rectangle((0, 0,16,crop_height),outline=(0,0,0,0),fill=(0,0,0,0)) + if side4 != None: + side4 = side4.copy() + ImageDraw.Draw(side4).rectangle((0, 0,16,crop_height),outline=(0,0,0,0),fill=(0,0,0,0)) + + img = Image.new("RGBA", (24,24), bgcolor) + + # first back sides + if side1 != None : + side1 = transform_image_side(side1) + side1 = side1.transpose(Image.FLIP_LEFT_RIGHT) + + # Darken this side. + sidealpha = side1.split()[3] + side1 = ImageEnhance.Brightness(side1).enhance(0.9) + side1.putalpha(sidealpha) + + alpha_over(img, side1, (0,0), side1) + + + if side2 != None : + side2 = transform_image_side(side2) + + # Darken this side. + sidealpha2 = side2.split()[3] + side2 = ImageEnhance.Brightness(side2).enhance(0.8) + side2.putalpha(sidealpha2) + + alpha_over(img, side2, (12,0), side2) + + if bottom != None : + bottom = transform_image_top(bottom) + alpha_over(img, bottom, (0,12), bottom) + + # front sides + if side3 != None : + side3 = transform_image_side(side3) + + # Darken this side + sidealpha = side3.split()[3] + side3 = ImageEnhance.Brightness(side3).enhance(0.9) + side3.putalpha(sidealpha) + + alpha_over(img, side3, (0,6), side3) + + if side4 != None : + side4 = transform_image_side(side4) + side4 = side4.transpose(Image.FLIP_LEFT_RIGHT) + + # Darken this side + sidealpha = side4.split()[3] + side4 = ImageEnhance.Brightness(side4).enhance(0.8) + side4.putalpha(sidealpha) + + alpha_over(img, side4, (12,6), side4) + + if top != None : + top = transform_image_top(top) + alpha_over(img, top, (0, increment), top) + + return img diff --git a/map.py b/map.py new file mode 100644 index 0000000..673d92a --- /dev/null +++ b/map.py @@ -0,0 +1,131 @@ +import sqlite3 +import cStringIO +import zlib +import array +import os.path +from util import * + + +def getBlockAsInteger(x, y, z): + return z * 16777216 + y * 4096 + x + + +class Map(object): + def __init__(self, path): + self.conn = sqlite3.connect(os.path.join(path, "map.sqlite")) + + def getBlock(self, x, y, z): + cur = self.conn.cursor() + cur.execute("SELECT `data` FROM `blocks` WHERE `pos`==? LIMIT 1", (getBlockAsInteger(x, y, z), )) + r = cur.fetchone() + if not r: + return DummyMapBlock() + f = cStringIO.StringIO(r[0]) + version = readU8(f) + flags = f.read(1) + + # Check flags + is_underground = ((ord(flags) & 1) != 0) + day_night_differs = ((ord(flags) & 2) != 0) + lighting_expired = ((ord(flags) & 4) != 0) + generated = ((ord(flags) & 8) != 0) + + if version >= 22: + content_width = readU8(f) + params_width = readU8(f) + + # Node data + dec_o = zlib.decompressobj() + try: + mapdata = array.array("B", dec_o.decompress(f.read())) + except: + mapdata = [] + + # Reuse the unused tail of the file + f.close() + f = cStringIO.StringIO(dec_o.unused_data) + + # zlib-compressed node metadata list + dec_o = zlib.decompressobj() + try: + metaliststr = array.array("B", dec_o.decompress(f.read())) + # And do nothing with it + except: + metaliststr = [] + + # Reuse the unused tail of the file + f.close() + f = cStringIO.StringIO(dec_o.unused_data) + data_after_node_metadata = dec_o.unused_data + + if version <= 21: + # mapblockobject_count + readU16(f) + + if version == 23: + readU8(f) # Unused node timer version (always 0) + if version == 24: + ver = readU8(f) + if ver == 1: + num = readU16(f) + for i in range(0, num): + readU16(f) + readS32(f) + readS32(f) + + static_object_version = readU8(f) + static_object_count = readU16(f) + for i in range(0, static_object_count): + # u8 type (object type-id) + object_type = readU8(f) + # s32 pos_x_nodes * 10000 + pos_x_nodes = readS32(f) / 10000 + # s32 pos_y_nodes * 10000 + pos_y_nodes = readS32(f) / 10000 + # s32 pos_z_nodes * 10000 + pos_z_nodes = readS32(f) / 10000 + # u16 data_size + data_size = readU16(f) + # u8[data_size] data + data = f.read(data_size) + + timestamp = readU32(f) + + id_to_name = {} + if version >= 22: + name_id_mapping_version = readU8(f) + num_name_id_mappings = readU16(f) + for i in range(0, num_name_id_mappings): + node_id = readU16(f) + name_len = readU16(f) + name = f.read(name_len) + id_to_name[node_id] = name + + # Node timers + if version >= 25: + timer_size = readU8(f) + num = readU16(f) + for i in range(0, num): + readU16(f) + readS32(f) + readS32(f) + + #print(id_to_name) + #print(mapdata) + return MapBlock(id_to_name, mapdata) + + +class MapBlock(object): + def __init__(self, id_to_name, mapdata, version=99): + self.id_to_name = id_to_name + self.mapdata = mapdata + self.version = version + + def get(self, x, y, z): + datapos = x + y * 16 + z * 256 + return self.id_to_name[(self.mapdata[datapos * 2] << 8) | (self.mapdata[datapos * 2 + 1])] + + +class DummyMapBlock(object): + def get(self, x, y, z): + return "default:air" diff --git a/mapper.py b/mapper.py new file mode 100644 index 0000000..aa1e715 --- /dev/null +++ b/mapper.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python2 +import os.path +from PIL import Image +from map import Map +from blocks import build_block + +# name: (top, side) +textures = { + "default:dirt_with_grass": ("default_grass.png", "default_dirt.png"), + "default:stone": ("default_stone.png", "default_stone.png"), + "default:dirt": ("default_dirt.png", "default_dirt.png"), + "default:tree": ("default_tree.png", "default_tree.png"), + "default:leaves": ("default_leaves.png", "default_leaves.png"), + "default:wood": ("default_wood.png", "default_wood.png"), + "default:cobble": ("default_cobble.png", "default_cobble.png") +} + +blocks = {} + +for name in textures: + top = Image.open(os.path.join("textures", textures[name][0])).convert("RGBA") + side = Image.open(os.path.join("textures", textures[name][1])).convert("RGBA") + blocks[name] = build_block(top, side) + +start = (5000, 5000) + +canvas = Image.new("RGBA", (10000, 10000)) + +map = Map(".") + + +def drawNode(canvas, x, y, z, block): + canvas.paste(block, (start[0] - 12 * x + 12 * z, start[1] + 6 * x + 6 * z - 12 * y), block) + + +def drawBlock(canvas, bx, by, bz): + map_block = map.getBlock(bx, by, bz) + for y in range(16): + for z in range(16): + for x in range(16): + p = map_block.get(x, y, z) + if p in textures: + drawNode(canvas, x + bx * 16, y + by * 16, z + bz * 16, blocks[p]) + + +P = 10 +for by in range(-1, 2): + for bz in range(-P, P): + print(bz) + for bx in range(-P, P): + drawBlock(canvas, bx, by, bz) + +canvas.save("map.png") diff --git a/textures/air.png b/textures/air.png new file mode 100644 index 0000000000000000000000000000000000000000..2efced3b31c9ad98db89e3a5849232f614045aa6 GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#4v(AwyTTUnb!tE%DNh&25RLQ6fByfsXVz@!Y;-YLl^AmP!bJv#&|GHO`Ff&@ QfT|cgUHx3vIVCg!0H+%rEC2ui literal 0 HcmV?d00001 diff --git a/textures/crack_anylength.png b/textures/crack_anylength.png new file mode 100644 index 0000000000000000000000000000000000000000..499783982d553bfecbc596175b492dd0f2346a32 GIT binary patch literal 1076 zcmZvaTS$~q5XZ+YwIp5ZA+bWNP6dWN`A`qqZMU2fSwyIZS|XA%8?t(dZiHqLRIo!m zWCj&>p{O2|fi%0QU7+X&J`HRnl0`)YU7&|fvm3;&+Xv^IIUi@v??3-JM^Yfk(&CjZGCe1m(?5CLW&0z`2CJEWij!oUQCfX;5pNXx`~5oH!4MkMDvvl0m+TTG;gVgaJsY*M|7 z3JVhx5;}C^g_TJN867$HOiC!|*pVkxJK@lyOXjPNp`l1BkeL55&7Z$m(~=+?Khr$# zMU_P?5sB;stC9#ZTTH5UzXhmjv-271y?A965=JJ|%U($Zg{=N&nLm;a&{WTz@_s2wnG6;bk_aF)^Ky1%eJg}MsFi`S)UKSW{!DkFD ztzSFvY0Z;@fznB>jj#J!W4|e%UnlRBzYS>^H?DMeo+{`1b5pVfMt)bzRL*KkhzT(%n;7aUrm}q5thr ze#ND5Zu6pJb6NseURPaI+&)k>Yu=Ad16h?z8v8rix|=&YkH@Fv#sjB=cVgFeHBMgK z9`EfBmmTQ4dh_SHoEha&3@!`@cNU+Uda$jgH2X!*p3*ArDcKdBA9;2A%>FI0D?`hE zpD+1RPYb@BqWLp&QFK GwEO`}y7WW< literal 0 HcmV?d00001 diff --git a/textures/default_apple.png b/textures/default_apple.png new file mode 100644 index 0000000000000000000000000000000000000000..ad03a1812bfdd97e3c795532444c3a87be310b53 GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMpdfpR zr>`sf9d1csR;k=M{?C9yyF6VSLo80eow$+fkb#J+f7V6Eg2_t1I3F#4kyify;QXTE z!Vk6Rx`ei`D{lVyd95keyz%EJa_Nf=QXvL>4nJ za0`PlBg3pY5H=O_SORIEGl9PEL@>IN;&oSg&%qUSfB_ zPkXmTybjkocrNfJsx0|IqP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW1_J>KEte|7$^ZZX=Sf6CR4C7- zQq61Aa2S5_%bTRBSzR$8Oxw#ktsn{=dYK1hc-f@`Jq&vAQkVp9$~^3%;1IkCK_-Yy z{{TTz4}P#BC?RO4;$ea^u~tzlOJ`!+^q0g#Yn>f};B$I;-mi!Ed4+S+qr`|ezq=uE zCIeB!t4CqT;435|qQrnEO9WChO(jVoZF6#=fNO8|;SYp>R~QS};^K4D zuuQ`OaCL{}==omBDckDBj-Ge){Ib17nVs8zq^<)<7bo%P_rP?qoV5Yq@X+}Ej}MO@ z3<1!)ENj(k@ybNJGSMr|4JUHLU4@;^reV#O*nElkjWyfN>6xcC zfESbFqpE$eJ~vpqdFh0W2Y51g7Qg{OO{VGYt;e&MPj(uPx#32;bRa{vGi!~g&e!~vBn4jTXf00(qQO+^RX2m%rv9x0I1-v9st1W80eR4C6) zQcY_VK@fda-94SzthfoeB_7utMaU0O^#2%)iVC6TxtT<&5N_{2`?b60m z!cCj0bB>v^>bkD$I`6%zW;MDu9P)pxOf-)1#-r^&?>+(uB9<~c#xdUA z+qD@7pi>pqq}qv;W!b3~%!VjC0YE_E3wsfx00a)O;k^eio6S;60LrrL_xn{=tz$GqovLGQQW8}HmY0_o zIRVhuqtC{gdQ_La(ik(J&zadd=e-XhRMpwWwRHgXsP13sw{1&1*RN-}q?-NIF>XEC zIo>}2;FyC*!5l=!G2VIe(&hF`5YmNCS^%3v~?h{$X@GuEuFt@V1nNi&g7Vv3;+#uyR#2VdVlqF0AoI{*Lx M07*qoM6N<$f@VJsOaK4? literal 0 HcmV?d00001 diff --git a/textures/default_cactus_side.png b/textures/default_cactus_side.png new file mode 100644 index 0000000000000000000000000000000000000000..395dd0d64ffde7c81d97de2282d412c8a7e9a4ca GIT binary patch literal 763 zcmVPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RX1P2Tt6WL#Ml>h(&jY&j7R5;5; z)6HvLWe^7N-+51NZtiEUw~0wwU084-f}pq(1dGrnHdcEme$a}FI~Tg>!i5ShLEo3=) z&hc}FcAvWB(yLLJqI1V>VmW5xR5a7)+c%@|%^OjBNIpfD(;X&&!14#FaC?@u<)|)` z7f*ar=q+;OY$2O@NPXACH2XkR@#n7$m)PB+cYrX>_1{^zCn>pcl}3ZVuMoP6ga%ce zx`dqWooV(~CrPeKI>VHMuV09=jLrc%h7m0 zZJ|9NOwpZBM^;T(I~KKi=@!O2WX=24ix1KqkWF#zGQ)!j@YVCti3qb@vs+n9}0k&KlOi`4m+!GYd9`ORN=^p!&P;}5Ye&K34+4&Ilf{_zXL th4jL=2-kjN@o;*i$$xBLX8rWK{{bz%^p}YWO~?QM002ovPDHLkV1mYHU;h9A literal 0 HcmV?d00001 diff --git a/textures/default_cactus_top.png b/textures/default_cactus_top.png new file mode 100644 index 0000000000000000000000000000000000000000..60a193c4a811d0890d52ac24bbcc21f3784aba7d GIT binary patch literal 682 zcmV;b0#*HqP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RX1P2Tt60TT80{{R5JV``BR5;5` zlRIlwK@^3*nKS2{`^Zh9qP?w^{sa*b6(b`kHz83X!PY|mfmT+wDhWwQjHnZ_Nt53H zVv%6(Bj+&>i+w=-E}R0qaK=Q%b#ldT22{K@N>*P7%JnaD)neymZ7CQlK;7zXRz0g^pT)Pq!WZTtf8t zqa|N}hwrTf$wOO#Z(#F|BgGEy`WsRT5~OA#ra_m!0Q+Od^1dZA-L!O4E9Pj_pheLc5;I zl99xN6h-o_*A`u!2(`6COR)&$2sVyoxnh9&OoCILO33z?WxVwn9KUn?1u9Av5Y%ZC Q_5c6?07*qoM6N<$f{uA5cK`qY literal 0 HcmV?d00001 diff --git a/textures/default_chest_front.png b/textures/default_chest_front.png new file mode 100644 index 0000000000000000000000000000000000000000..47b7771baee292ab32b66304cb7fca3d6514fb72 GIT binary patch literal 769 zcmV+c1OEJpP)@EHqpy8Uw`)n zR$GTp!p-dhtw1TzO0jMuh12*bWJa-U68po9CM3=lfs3Wbx*XdXzJ%54g*hfDGKDw| zC_w0BhBgX53T+hP^G5aZ5^G(~>)Vc7;|>Y1270AKQsQ#y$(_YnMH?d4Xkvu3tA^c$ zCVG#m&VLfWdWOw=#89JchPEXrO{gx>HYYY~bY2qcB}gRtihOHKiUIrR$8WfN@`T>7 zkHkdQDRE^%Xj|6*&M7(t7k{2H+#3BFz&{k>f7?q%}fH7B=s zog9yxOs7*hJw26^lM|WEX7a(v$(@mtcLr8&kDT1SUdTVceJj@2D+;T)HSPjX`@}Dg zS4^iQ ztrXT}*sR;Kd(_XM?L=Gb9waeXLb(u$;y(&v!_&bORQ?% zc<&B>&300000NkvXXu0mjf-4tG$ literal 0 HcmV?d00001 diff --git a/textures/default_chest_lock.png b/textures/default_chest_lock.png new file mode 100644 index 0000000000000000000000000000000000000000..f5346f48b9ed1c44d55bcc42c14e529ab57d78cb GIT binary patch literal 871 zcmV-t1DO1YP) zQ#!!~A&9WlG?Y#_ngr5VbM4CyG1^$FAgs>S&oz#k zX|Q&@!NdDUeE!28ckT=r>}R}n?F%06XRLPWob5I_y;S4OVuG(KRDSTIRHJ=NlHy%~ zHZeDET<6rwZ{wUJ%Q8Bh4&Qxxg_mBr2;%WoPBPOac!#%k1TO+27-Tw@?p(~M^psU# zp=EJi@Bt2vCd{W6rQm4na9)^g8vZyaP$ohB_3aySd+#RmD?Q?Ro#FmH@?wI|3!Zvz xll!-RVRV$UxN?kqIG`Mlsn4_lVgAHP{sX)EYd)dc5eEPO002ovPDHLkV1iDZm=*v4 literal 0 HcmV?d00001 diff --git a/textures/default_chest_side.png b/textures/default_chest_side.png new file mode 100644 index 0000000000000000000000000000000000000000..5665168c9534ec8d426775e36a166c93b6b984cc GIT binary patch literal 714 zcmV;*0yX`KP)UVrea)e3OCzKOf7M7@)}X)e{nVF8o`qS0yv8%Fjps6 zXRc1YCmOf6#F$#%IZZsdSYSX5u<8?T#_cxKrbvpyTq-drwZhfi#Q8?4IU~dMkDhn0 zi0z76Ml?2P>_L<=+@i6iPJ6WNspA&BQu9Fj-~y|K_~M6W+`fFt>f{KoMziQieMgyR z_W!Ku79BT#TygT~A!VK!Haps7PfUs9M;FBNw?5$0&%Pw#xI0q?m4h3?p&yFV2f=}L zb{0wKn!q>TJtO9EM;C=B7fS%fY!q{%3b{IcqYSgLXcQIU?_FWlD!<)KxH~Em=##Q& zlpxS2C906Z0VApqRp_Ep%~`d|J{wWN&4?NT@t)Znj=De$LJ(myRsezu=FU`%CMrn< z6(ObuZI(y;S8Y__Krt1=95!Pm1!1a(n7Tuk6m!R{pk>?xP^y!wF%^UR9gG5`Po literal 0 HcmV?d00001 diff --git a/textures/default_chest_top.png b/textures/default_chest_top.png new file mode 100644 index 0000000000000000000000000000000000000000..b4e8a1253d23487a4efba00237e89ee53583b27f GIT binary patch literal 628 zcmV-)0*n2LP)sQoyPb~{|xo0|mO00S2?VERO zqF_!x?yLr9Ntl~c8kjrRr;)iDw~KKxDjz<+Cu&UO=Dd71p#mbHA{=sKN=j+Y5QP0| zTt69Dt1;~=zxSD#M&kC#bE5JHZU)mJcv3(BXFCLPb4qh^bDBBkuHXL={>osDwxm*p5n67^4z{FeYUP!VrbI^g(km=3=P8prA3K zH814mm^n)^nsxE^YonPHM5yMR49eP^&G}QJs$vc)bQccUShWud+G}GJ0Adi@ z>ZmH&AdXwKEca}V4Jv{Pl;*g@TJ5ne(s`>00we`@M@0gsN!boc5ZELos*u9*RTZKN zQ&gHcr=xNxMpVJgh#CU%*lZ4GQ@;lhc1!z@inCT@h)Pl+2*fm?!^zpBcw_A3H%Yr? z4!fmw3!6WLlqo6A!K|WnIRH?bQ=0w9y9X;jWS|(;;6C?(Nx>}>B`EbMS}|uXj*T#v z4&1NCQtU{vr?8n*t*;YtC!6!-$AP)_xL%A(^{&aE)%bfT2ykDV=5Vtsq##Hfk-M)S z{pR~;wwG6gG_wBvMJXA}E6-lOX7}?Od7e4ByrL{S>N=A)=lzddzTh9l>roRlG<<3R O0000Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW1sn(m2F^1>Q2+n|_en%SR4C6q zkxOnPF$_d0iTbqKZNLtk`yVB@36MB(+-mDDauxz+$wh(n>WPn!4*;;%T5I=xmr@EL zh)5~5@B8ENaL%1hC#^LR{r>)9@4b}5%prtr+rGcQt+mcMBC^)Ly}gYwnE5ykM0Czc zV~jCojL~~X#LMNfEQ@oll+t_m-UC2u&00Ig007y0mr|ZiCu2;Ek%(f9wboJ!0C?}M zwch)mpPyRmvMe}zd+(V!r6hz1At0jG+BwI}r4&Sbe}6Bf5Rnu@AR;qQbgeZa_TH6J zM06Yn5h3E|=Vz@ICkFtGF~%6y+7JRW=bVi(Qc7m_-k;CsoHGEVlyHo397k)dlrqMc ze9Wwrsnp~nl)`=Ag%ESW|1i^ct(AxXAcQdWx7K9u{q=ga z*0k2Q+igmfQqHh3hKPg^x7%&oHYugtwryS4ZQCaIwr#c6S$&RMYhBlM-}fmLuh(m9 zO(~U9(pod~R58uWVzt)G<)V}V0Ljc#r&3Bv`FK3M_q}&x%=vs4LRf1j`V7nCIGl6y zzTfXDrFC6juUD-V0Ep;%y=tvP2!DTn&*$?W^X_;XQ#;Q+00000NkvXXu0mjfk1-eJ literal 0 HcmV?d00001 diff --git a/textures/default_clay_brick.png b/textures/default_clay_brick.png new file mode 100644 index 0000000000000000000000000000000000000000..8ade8ad99af08a741f6ea734cdd22507496d0372 GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRt!3HF+tk*dLq!^2X+?^QKos)S9Kq#-M`!r?MdsNd7YF~s6@ za)N|p!mPGq|1+he{%<^KD0HdA*XH#xUbj7L4=#0_RS+vOk*ohHbS^D1At7PLx^@5l z+bb)3N(J)l`2Ek883>v;El^-KYu=FQV#vUDf%njI!PSf>*!KSUE4^H8`}g;f$sZ*h zJRT>-yj`sfZB`i$4%x%!rWFB&QaoK8Lo7}wCrGd|^Gg(Z>O^jOV&5Yx zEPU8w3*!l?i;QN?5e1t2YJZyr#w94Z7T4DPt>422R<+SA*|Z_#tOT2hnVHd};F{;> xWZ4!m3r=TSbjh)##N^tFm|Z2B%2$Jx7`FaU%KpTr(hana!PC{xWt~$(69C^6KP~_O literal 0 HcmV?d00001 diff --git a/textures/default_cloud.png b/textures/default_cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..24091a37722e5918880372acee3b414c1c2a8d77 GIT binary patch literal 118 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|%*9TgAsieWw;%dH0CG7CJR*x3 z82FBWFymBhK53w!q^FBxh{nX^KmY&RGix?|z~N(s^dQ)R}0t6B!Co^whKH#ZtVD70v?FgjsSYC&NT z4mB+-2&m_YqM@ai?>1 zDOHn$=AbE96jFT1Ye}Jfb_>jhGL#meE3yZag28gDH^MMD)v|Lc$T|mKgUVokQlvP= zAbC8*TxbI3v$YUgWX-q-Kj+q+L+PhWev*?Bwi zVQOpS!jqf#&b)uHbL9H1?&P)SRW7b8}0c z<-A`m0jR2aBp{)xY9s*q>kqVTivZ3!=JPpye?ZTo zML>iQBR&MaY+4Fc*SwfciSd5)86t^MK-D!TU5B&wAOfJ3qR|?y6h+fCkP=!eKGo+0 z&RR^{j)F>2mL==;8d4&qL~(g_#p_qEkWBDCKpOoIKvR!-IBN+p0ne!HWpYs#uZDK+8)0u=B24fGoX8BYKo0*%(d5#P)VfBpRrrp;lqN3e*DdGNte zoGq99zuN&&R@EWp;61NTPiZEG7t<-jFyNiT7=!l?Yb^l9N!KAy<8jt9Uo6JJQew4Q zQ4W!diwh>rxWcQ|6(aC344iZwg?EmLF#t@AA;yTeV;-k(-q2KFCX>TxKVLLwEky{C z5aQwTQ^k1C>T*RnHz2}%HY3JJ0^DYUdHx({E!m=5ptM4%QMs9zgV@>Gzi6#lU0!l_ zevY*kXDx`}tYu;h#qWRoiKf2;O@n%LyS6;ype_bY0`UC(Cn=kB>P& aU-A(il|;KwjHWyQ0000Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RX1P2Tw9AeEn#{d8V1xZ9fR5;5u zkz11EMhpbAfNoNn*Y1SR8?_&_50F4rmj3?hPpgZ)07DNm95@XF zY(oUHSrYagmNme|*CT1UCfim3v{uXl$@G9&p@!I}5oRy(w9sxQ!P~WHw{O!swAY5` zq+v2d8Mdbx172PrA_3@{L=ReuZ8M=}`c(*%Ya)qi!L}8brTF*^`fD=7+`cCLeMPPF z&#$6p(AGuRMu5lJx1NLbl0fminHhzrc=>GHejUuiEG4#4LC$pj05gZ_|SgN>3uR0cO^eRd`bgc6QW>FBryuMBUr=yxER!_?V#-$ z>^uB;H&ij7V#+X$5+Z_Q7t`kL0#e|b%;)5O1nqG%mtJi5Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RX1P2Tm4K38fOaK4@mq|oHR5;6R zlUuUeAPj~-fiO;bPN&^T7tmF8*?mo$7=xe>7#z=3FP^ci|0Y>}{ru7Hi=$T9N=0al zit71arD6cQvZ1T?;Zec&A)(P)qaoab^2`MQC-D6ianA9~J8HFYj|#xo+XBGv$94ib z_`7ESa_#E2va@){$D$~}Gj;Uw3{F^svK_2z=mhHly5&M^jX!(A<=Q6lV9B-dNSQS# zYfz&42{r)NpzNif(F==qwl(Nv8B73=)Ga)p+f*2WCj^fsYa}~7rc7{hNj%p!-v!mP zaRjfQF|g%AR8Oilo4Gcu8M{@oxXBCh0KdsIrU?8k*|RxTE13=NdZ=^fZ=Ii$YFf(}O zGUcAv*JbByRDpyM)n63k+DOIF_u=uu_=&25f0JwP8JOYZSmTs$h3HPeoAUPv1EgZK)~4T)N6JPFo}v1+8zKS%-V0kPI0yd#)%4}L07jw)00000NkvXX Hu0mjfi9zV! literal 0 HcmV?d00001 diff --git a/textures/default_dirt.png b/textures/default_dirt.png new file mode 100644 index 0000000000000000000000000000000000000000..380ee37826cb27f3a12cba31c95e6a9745f22f41 GIT binary patch literal 962 zcmV;z13mnSP)9DkcZt>x=*Z13yVbK~y-)1;JZSBV_=9;rIJy+L@M~n6|V)TPTO^;*t$<35jmp zH5$!s;=R#$NWAdQKj6h)d*L7PcbIHevnP>Qpd1RN2TEaj7~1I!Gvo7!AHMi77>{k# zv>qa(tB7BoKMKl)H0pV$hoUHm-+%ftP!*qpdXG#xiQ4U3jI9aFr5xS%72?IWp9a}f zl9zAyNhD`bEpy04tIJ~EAeD$Ay91k8G>YQiad_NBN&&6jfQ7|5Cetb6=V#l2?>MZM z@*JME+1@PTI6g<`U1lOWa(y9<=T4d0Hrb@kj22>akb?3(n4Q~ud+B452ZAf8MzolLMD7uR<&;tAp!Jl(m6`1R{2LA}*uV|kwUwHA?( zV7pSl_I&nEdZ<|=%1Oh=9NZF*D15M#=cHvab{ryMiMm&9^3~%CmJ?9FfRknqUDI$K zpT}EeWLTB#9<^y-4XDC`qmiVhmDnak`a}$?NUAI zP{?u3S({=mMItO&Tgp%_WzjWBSb{ELG@ju3KFw~Qo@t>-$^Dfai*rfT=GA}) z_m+9Jdx|~1qp)CbYgxpiI!pN!p68**BJ{3CRL?p*+9-2)-o?Bb5!1tnZ$91#6a*1H z#LiY3EiCx!T^(!cu$W0QwjCxDhwJ_=iFllmJw*zT0u(7wi}_iMgwAkaVfHOf8(o4x zkWR#@U6@D#ssiyD4Rg>ZYozdj&GiLZ-9D-c{8#JX2Vi6jMiUn;6egF6v$i}(^|(!G z-XNqZ>>sz-c~~a!JYK##LI@Cly!b9~Y==&7!2W56WK3f|H_PjPPmw}^00lvOMx(Nl kr_nNzs=}S;lQZJ{4=DV2T3uF%@Bjb+07*qoM6N<$f|>%pX#fBK literal 0 HcmV?d00001 diff --git a/textures/default_dry_shrub.png b/textures/default_dry_shrub.png new file mode 100644 index 0000000000000000000000000000000000000000..450d5d96a52b45dc236520bacaa0fc7abe3ada94 GIT binary patch literal 450 zcmV;z0X_bSP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RX1P2r{DRq)BJOBUzR7pfZR5;7s zlA&+HKorJ*M_8H}W?Hk%H38hnWCaR4#Fo@f@HZ@JgIq|L%wq^*jvx?i=1?p{(_{ij zYG`qqVM-uEw;RUyaUMTawlBJ z!ZtG*gnI!{(I$}V&74-dPP5SwfYiyhnH9La&VfL#CPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW1s?%42*8A&2LJ#8tw}^dR5;7c zkw0(KP!vax?dRBmkQAG!NGT}lz<>%W5)uPak&qA)Ux6JlF*7i+AoXjoAXZoyU;_!1 zg|ed{k>I2v#f}@l=YNl(RosSV>cXAxJ@?+bkdv>#bqen>=~C zed1xyAKlYoln_QUl*)Pee#a01zbBd%D@QmAfn2)n-G@&&ZXL&U5yGx6Snr-eTP0-{ zl0=dhkMHUqgCTk9(Dns&x51a*H?Cj1O1wWKj%TDG;G^NX@Vr?v9WuMaq=CC@R3$?-Odape6*CW%BxC|1g6oFqpq^voqG6)i#~g3p5*N zdD|Nw06e=uTPE5BjOAi=q@k5ylqJStp8z=LT|t+MvQ(gprGVR88zfQ@#WN;=`f@YJ&>4Qa#d+Vy5DkK#!9ThMz@1w+ zj_K(K5%IpnEK;1&6xSZ1Gs%Pdo5ys|0gHNe`nyMxRF#EbPaoA?0Y)LN#az#u-uT1} d7Ipt0^%oDf&+9E}8chHI002ovPDHLkV1kTAvTw>QaA;8<*}~=t3f>5qc&B=A);& zYPzOw-MaU^E_#^7yL&lso^y`+@%wMfVzD5LV2wd3#jx7}kh5Tn##jeMh;b(8L|xYa zhzR!W$vJaMc<<2KFvp09FwZm3o_x%2zyHN@xr9=%-ZO=OwH5&9J$Bo5IOm8l(liab zVIZf(YPF)>Tv1gOec$7}N5&CKL1~Tmo-BecrI2$5V7J?0twm|g#pNZ-)smDmi@Iix zk)y*E1+dm4B3x}Y*bo8$);a2G!P(gvRaNoj^Jo0|_nH@>$t15Qp)S*@0P0b__^B7{J*Z1xP^o%fW|(e*t>Yn-)| zQdrbAZ~i&u@h1=X@7)E)SmHEctU+r-IPdV@VTWPh`uchgB_%=#%=3)Dx#8&O2xBdh zg}!fZqssO!i@5wo(wB#&o zw_6TYtGmL*I8)a(&N=KCPaomELn)2Y3hx|BDO3^GC#QST#xTW5yglzdAq2*8#IE0O z0Pt0Xi16_KF;!Ku*<7HsX4vgGJUpc9dx{8ERWVHyeb?=`5T=Pz3S$W5oLOtlgAecV zH3bV+lqek`Z<5Rc}ppU;pXNpwm3~V=MWLLZHx7u{{cAUfRWPZZyo>u N002ovPDHLkV1f`gW61yj literal 0 HcmV?d00001 diff --git a/textures/default_furnace_fire_bg.png b/textures/default_furnace_fire_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..1272e101e5f5fb5e3c78f21f4e7bcf40c1c60c12 GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgf4Q*#L2(>w<>RSTlaYFmWY$#R`~Q4>GskuB;>9a|_PZJzxiK1x zR!D}e_;Bc};X=u#b&Z9q&Ez*NEX4~i5|4&)EAxV3ZVowB*%f-Vj%Q(YlJYeyOnByNHZ1#N863)AF-LgxDE1UEGNeiwZ>=w literal 0 HcmV?d00001 diff --git a/textures/default_furnace_fire_fg.png b/textures/default_furnace_fire_fg.png new file mode 100644 index 0000000000000000000000000000000000000000..fbb19df7438f6c806af40f6357bd0b28761c0169 GIT binary patch literal 865 zcmV-n1D^beP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyh& z4*(X+Ro>PB00QAjL_t(I%Z-y=Xp?so#()1eZ)5W2&1dt`q)SqX^p#aBL+h-Jj(sqY zsW^5wh9csPH$yhYP!OhqUU;{QO{56h#2d9Ja|0R7iZ)>cW{G#?m}CNWKu z<3%Z2=D>4xc+TND&vW2`*Qldm4@bkESK;y>aHkXbKccaegRzuj)m$A6nR2eMpjLp3 z{YYp zP(IQp05gxK0cd=&R(yUZn%*R|J_vw45hnh2g2v_^w8+Jb0?16w5!>R!yC=frr*28C z3oJj$ijy2lQIw$PWe9JK zVFZK7#7FY)jR%CcucOsheL-LbJm}+P+Nll?)AxyfxE{6Rx?)&Z8VpeAUxJ)Qqtj;a z^k*#22GLz{wBn&R1i<_ut2#a%TSv$L#Etgu?+PF{_YlK!(QWfFeQT0-wF1d*vc*ZX zhzHGX*pTCI2|%S%rkR;1c|4~8znEg@y{^~m>_KxGODRlQI zap*DN7{o?PiqR6;lTk6F0oW2p^R(y+3PlsvEOb%%v&hzO_EDW4BlojHNqSgr|B+?$ z&^GXv;Zl}oA4G9jQMfh*8%&TG`CAismweFc;M$p++Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyh& z5Dq3}btkz100Ik1L_t(I%axH$OH^SPhOg&6@0oOJXcJ-)DV1iakx&%msvi&pQ4kS9 zP>UjH(?;5~h#)9hwd-%V=z~_G(TCZ`Xj5Z>O&)EWnKN_d*qQUbZ;PUpf^#jO#r51b zw_Lq)*$of$(wWUN^YJU<2~nd#e{VOl#S%&>wAPFa?qTY69%Brh*(`m%-OLqBsAe29 z{i#S8R;kr$l!Jgcs*@(G;0%@WGEo>J&S0=4X+mF5H-+y3En`q=nvx`|6u$jr^ynbX zMo6=|LRMR5KTK0zD$%T$S^2d{RI6}gXfIzD7HK63T5II|*)z`bJ$z5-(2B$RwsZ03 zJ=Ws!{V`@fmuR*e0Aa0;oIZ8ZDJ&gYQLU62e=$WXO<9lYm(H;el(8uMOa^&)_m<0b z`e?h#g&TL+2=~UWk=dNX%XFYiOI3W=B45a}Q6}HLXUDF7L=-xXA|jK}E=k{x-kC(5!ZHwC~9DxLYJ!{BGR^C^w)3+q6?d|SZx9NW5fqCJJy z!tg*3h2k963f4M|bsQSn&*YnVl=5(>|99PtV>bC2>WvDbKmi92?4}gNIOp*6-+7Hy lR4OYd?PH83Z8>x%!yi=c`$nc~jr#xq002ovPDHLkV1i+FAo2hJ literal 0 HcmV?d00001 diff --git a/textures/default_furnace_front_active.png b/textures/default_furnace_front_active.png new file mode 100644 index 0000000000000000000000000000000000000000..10ffd1fa2973e0570fff53369687e45d17246d55 GIT binary patch literal 826 zcmV-A1I7G_P)l#Mu(U_G0*?))JJn% z`n`f5YXF>%sGVnZ_UY!Bk0APF(8Z!_Vfc-X% z&GGfrDR|^E;*+jG>X1bFL@LFoZdZvq9+p(-S!kSvZ+x&G9fk)FLG28q4KB0LW~+2ulx6GkB&WgzQKhuiuDR@R1<87M6< zmCQi?9w@v7*}EXsAi2f!J)bjqU;@`SkwGVhRG|&KTk!7&9)_M_NMo=DAq5`q@{Y3j z@#i(#A&AdDeotFg!gt@FB`Z7h_Xv7(2`cW8YKbW!V+x$MB8*HFSsYKWYv^7g1@ipL zI+m%~HME;MZnrUX%zcGk${X7VA;{Z#f{xF#6C*4wuOUR1ekGAI2cbgxK|t2Z;I?vTw>QaA;8<*}~=t3f>5qc&B=A);& zYPzOw-MaU^E_#^7yL&lso^y`+@%wMfVzD5LV2wd3#jx7}kh5Tn##jeMh;b(8L|xYa zhzR!W$vJaMc<<2KFvp09FwZm3o_x%2zyHN@xr9=%-ZO=OwH5&9J$Bo5IOm8l(liab zVIZf(YPF)>Tv1gOec$7}N5&CKL1~Tmo-BecrI2$5V7J?0twm|g#pNZ-)smDmi@Iix zk)y*E1+dm4B3x}Y*bo8$);a2G!P(gvRaNoj^Jo0|_nH@>$t15Qp)S*@0P0b__^B7{J*Z1xP^o%fW|(e*t>Yn-)| zQdrbAZ~i&u@h1=X@7)E)SmHEctU+r-IPdV@VTWPh`uchgB_%=#%=3)Dx#8&O2xBdh zg}!fZqssO!i@5wo(wB#&o zw_6TYtGmL*I8)a(&N=KCPaomELn)2Y3hx|BDO3^GC#QST#xTW5yglzdAq2*8#IE0O z0Pt0Xi16_KF;!Ku*<7HsX4vgGJUpc9dx{8ERWVHyeb?=`5T=Pz3S$W5oLOtlgAecV zH3bV+lqek`Z<5Rc}ppU;pXNpwm3~V=MWLLZHx7u{{cAUfRWPZZyo>u N002ovPDHLkV1f`gW61yj literal 0 HcmV?d00001 diff --git a/textures/default_furnace_top.png b/textures/default_furnace_top.png new file mode 100644 index 0000000000000000000000000000000000000000..c86782a2147130bb2b12644fb767e33ad5f4b1de GIT binary patch literal 731 zcmV<10wn#3P)vTw>QaA;8<*}~=t3f>5qc&B=A);& zYPzOw-MaU^E_#^7yL&lso^y`+@%wMfVzD5LV2wd3#jx7}kh5Tn##jeMh;b(8L|xYa zhzR!W$vJaMc<<2KFvp09FwZm3o_x%2zyHN@xr9=%-ZO=OwH5&9J$Bo5IOm8l(liab zVIZf(YPF)>Tv1gOec$7}N5&CKL1~Tmo-BecrI2$5V7J?0twm|g#pNZ-)smDmi@Iix zk)y*E1+dm4B3x}Y*bo8$);a2G!P(gvRaNoj^Jo0|_nH@>$t15Qp)S*@0P0b__^B7{J*Z1xP^o%fW|(e*t>Yn-)| zQdrbAZ~i&u@h1=X@7)E)SmHEctU+r-IPdV@VTWPh`uchgB_%=#%=3)Dx#8&O2xBdh zg}!fZqssO!i@5wo(wB#&o zw_6TYtGmL*I8)a(&N=KCPaomELn)2Y3hx|BDO3^GC#QST#xTW5yglzdAq2*8#IE0O z0Pt0Xi16_KF;!Ku*<7HsX4vgGJUpc9dx{8ERWVHyeb?=`5T=Pz3S$W5oLOtlgAecV zH3bV+lqek`Z<5Rc}ppU;pXNpwm3~V=MWLLZHx7u{{cAUfRWPZZyo>u N002ovPDHLkV1f`gW61yj literal 0 HcmV?d00001 diff --git a/textures/default_glass.png b/textures/default_glass.png new file mode 100644 index 0000000000000000000000000000000000000000..ade0196fe64e00c80496c9bfc914645d5b472bd2 GIT binary patch literal 978 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GA|hzm>B|mLR^7@ z%a)v6w&dK(WhYlGJF{xV*~N>mELwDR$>J+(*WTK?_3n-x_jc{Nf8fC5BS#(|JNER< znHLu?zPf(>&7C{%?%)6L@Zra&Pd~kW{q^I=pI^WJ{{H>fj~{=2{rdao&%b~F{sRpk z1*0J_m_r~WI*bSCKE{$DzhDN3XE)M7oFs2|7lsa2Sq~tGv%n*=n1O*?2!t6g-L3lr z6l5>)^mS#w&CM^YBGzz7?t<8 literal 0 HcmV?d00001 diff --git a/textures/default_grass.png b/textures/default_grass.png new file mode 100644 index 0000000000000000000000000000000000000000..4e1f0f1be0ab0f1cb6a622c5ee4851b5cdf3b13c GIT binary patch literal 794 zcmV+#1LgdQP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyZ3 z4Jj;&0fblp00NpxL_t(I%LTz{a^pk*fYGlvskL}bDj6Wd6er*!+=k;)@FO$CBo!x? zB}?j^_rxE6{$8qD5mF+hgi?yIMxK7XC&kS5Iulajcx?IibVh1P+g1SBzCz!ol`p?M z;(g}(^BV%mc587wifRK%N(($ zrtcb3N_2gN)f$;o;lI;Btt)!lvhRDQ(czcC-EoVMaDKm%e1udW74~h<__-iNK^8K# zF{GH$MiFD=?d`(q0)1~uF(Z_MBItJwF=y7*Ln#O$(0BVDlprU;G_JT9IqWvrwqp2P znC6vz-{RNEI(woE)Qw_y=$I}mx@s%N(IEl1W?YO+W(HAMW{+PZ=1$RW4C@k*O7Qrw zC+Ezvdi2}N1=|^F+j2MxC=J7~@b}9ro2}*BZ;v1)%Pp`j4go|Lm~R0sC7L22OK!J? zsx}BA+3q@QTcNe2?F>Rfl9FXw@jl>OVp<$AB;IEjcANd&|?;1IJ?vsql6h zIQ{sbstsSi-BB6E_vd%cuOlUco~D`O{gzY`2@n!O^au$>72F)qM)A*IC-%FJs%|(O zHOmrseYv7jhLj2jLD$s`*O@}b)&^56+OFX?I)?KN?;~wj)7T2B6HRN8&U?J~gp}|x z0wAU2bQ&* Y1DCRQ3Tg7HM*si-07*qoM6N<$f;F{brvLx| literal 0 HcmV?d00001 diff --git a/textures/default_grass_footsteps.png b/textures/default_grass_footsteps.png new file mode 100644 index 0000000000000000000000000000000000000000..57e063d8cf729a82c24c700bd49a025feece82fd GIT binary patch literal 856 zcmV-e1E>6nP)nNT&6CM~ioNX7-8FhKjkTh-N`24*rR6mg zIxq~B8DJO&y!pHROt&67?G78s!2`pj)O$2R)f&z9jd-yn@m6ccfKEyU8bekht4G4u zV)hL7Mp#wXAd-kr&#GnR+M3rvTaxb&>;$?0zEnNwC~7}2>rEBjmW9R`_JUgv;&MxD z2_WEd`xk>^p;m88-nqbwf6{mFUs3ex-cFmOCh^sI+-yS;7+g&RC&a)|JMVT5coH2# z09Pc=;ez$C(9{S!F%w26CPEgK{JvZ+p24TxTp=ezlQx6(RITb`hCHyjqCuB&U|WxK-#LaVr_ zoW~c7NEno2;eY)?`&cm=W;J5R4h?=>x0}ObAIi zxlv#Lu>FZZw8bd>%TK>Oef(cEPQtL=KSNOr32TZ$yB$_jxYrxmf|lfNjbW(ha_A^8 zP3o4H&$ibVP+!Q;PeWy)g;E@N^dy$v6ZcPYQ;ROAnTSVuifIegqp{kzvXd#-cz0hs z&XvTo$$VrM!`eutCSKra*EC8}2BNVaGwGgb*vJiBHV7h+{GqIkbw20~`aDdKe)Ycq zXEUmUB^H)~`Oi`+mvQ>APRqEqv4SJWmsIsxQo0!8kA>mSiNxQ3?M_d@upt^hvUrJ4 zZ4H+Kmhz!|A0S_|YF@%Q)ca?K^VdTC5E*rt)zgqGGSS_|S2 z96IPwt7`=@1#!|rm-Y`R2o~Hr7j$%yb`TV#4nlDhqC#m!B?e7R8}FLS{rEaGh;&h? zgZP4Hd4`A22Ocq6%*oh3gP+9M?S9$W8T(~3adSW#mO}kYz~X$V$Zq1|-COuGMPA+J>0?XiIIt{>>15~D*61Z!tu!hrL{8li*JPHPQvSe(i$De z16J#R#h!^Hmk!E9!zRvF6FU&-K3LrbLWhW^qs5adULfemnApo3)H5owvW@TraYLfK zTv)x4N~m(>@%u;5msV%wCzq86Yqz59QP$s77XYpSqSZj(m3%+{0C8eGE6tubo*$A( zwV^gcj7S7mfzTB+T$k#)Lw+PhC<8VdK6(>8FJPnUqL>HT@IN|q=PWb@Qn?s)+a(hE z)GM|7+NKxg`%Rp$4W8V4{qWWNyTy3gKz;{9*Wkj{UO99!y#&m5721n~XVQ0sU=Sz( zQQ-X4^ig^0a_`x`W9f0=G{D%EJ}HEl`_rn{-}#*X(+^aRkykBc-dF$t002ovPDHLk FV1iQ|{|o>C literal 0 HcmV?d00001 diff --git a/textures/default_gravel.png b/textures/default_gravel.png new file mode 100644 index 0000000000000000000000000000000000000000..f08666ad9347cd736071d5cfb2ce951f956ce45c GIT binary patch literal 591 zcmV-V0Y|~WEQD@c`Vf7AK0x2YrAyc2Vyp}W7j-e(G?eKKp&6r7{JWQeHW>nxV5IFVh~sWJ<^l_{m< zbT+q5F`dnc2n{F^k^a&WX_mK|!n-(se0tu7QQNXxP4V+rY@31`^)$;LpPpMyfo2V6 zh-k4~ZNrF&l#<&p>bg#xNM_M>oqn%F|DGxltv5SJVY)0UB}*LyL{$0w=_7ie@P{5k zr6gd$IyRZk=K8~*eead~`(Y3DV!4vX6IdBFYFqX;jEou?M*Z^YdNLkW0)N0PFg{MC zZ3>*F8D@c%Aka#$FyjxsuIqp`2Ejc}+Z0+^_@DYVjPQ{-kzj~T{Gq46dpl4{8b&?v zy@TA}-re8c-KSZeW_jRyo15?;_aB1y-+zS6!a94QYZ`H*UKF`Jo{A!m6WO-x{XyEM zkjGQtdtbhO+uVe0%T`Lt<4Heji8RX*6A^~BExRakkg-hxR%w5`T?RBY)^=fHN77a82bkPsSr=!7Tit2Oi8~z1dZPtR%Zwu9yW7AvvAR d%S-6G&R?|RF*S&NQ40V7002ovPDHLkV1nn54afih literal 0 HcmV?d00001 diff --git a/textures/default_iron_lump.png b/textures/default_iron_lump.png new file mode 100644 index 0000000000000000000000000000000000000000..edb931018b41ea9b8c5090f6cfa38cff69008b65 GIT binary patch literal 936 zcmZvaKWLOe5XI+=iUgylRX7L%SuE^C5z$JyU5t-20=0dLZ zYV6ya^YrhyA~GiP7Z+!88@&;|C2|+l=k8`k5`e0fQe4DDC;|}`DVa6$%U#Tb6hKs^ z{O^#9n;3-F1?^JIHMAHZ`RrxQ8EcP6nOJ zZGS0MlY{1%!e|R7N9G#2b6-ra;rDOFgVq+b1KL>2VaBAV1H7i zIK?1&Jj7gR0_L-|5PC|G1ogg;$9C<`U|E~z7EixhZcXkPJ2-hwKX>l^o!+|i;lcaa z=e0MDPqkCGmfEkr{F!>(ecinC4KF+KtI@u(@Z;uHY^})p=JEYMH@goHJ^Fffb>&2T s>h_D1_4@~oUVqxU`?mXib@EB)aBZV~e()ri+n`6JN%O zFJHyPi7zRRd!n0&mwOwQ60#pWi8&7S=l{oJn30syMK!7CKS<|c+d4FIyV z{AUsM9WHGdF74+A>TJWHIPv9AiE-jfV^|0PPRA=8*W}Js-hj|Op;F;lbAwS#7bEUE zU5t8Y)ErH%I<|Cvw{-^q*sjhZh`e4i;wVmhDO4xfqxH#i-ysCRcU3&8Oj08o+P7{7i`d*rrthj3|2b=fo`Y)B|= z=5}=!)SYboxo1UK#w;xnL>_|3!}@bCthpiU-MuH>EO_s6!U&4ZO|*4~@2`T{CZY&3 zsWM%RWR*8eI#;8vV@pR6d3;y|-*HWxj#spGhq0yeU1(Wa@-5W6yJ+hUSz11kcgQXv zl7q-&zBH=z{Z$}b+H!2^y#)H!ySoS?4~}axiE-jfEnM2taZLb^8yH(U#+HsMZ+fzl zD(cwGa=5gm3X`OyqQr-~16f)=ZehDR3u3;lJ2zt8)Ap*<_vkb9o%#^%OfGui$)s(3k%5VW zJs4-eH3)$YAkgkg{XXfpUw>#c?Dp{yQMI@4hkw2MXqkHVq?K(qmQ!mr4U5(;&R=Sh zUNiOkPeaJd0yM(-w&2C+`is+~n|Oz$N(c^6Q5|t!S+?D9tdh{}o@1=ae$P@WV!Ht* zc%5ac1`<jsr?y;Hm>`*`d7c%5VUXcw zGFPpBG@DnfXdl_8A$MG-;G}|ELzA{CD<%E%{kt^DvX}u?X_BEuxY>l$$@D*rWKTDm zE}Zl{A|uVH3rSct5{HqZC|HxQBuQS=ZJ5$n+LIv&tE;)RI~r&wB#{RjM;ihYW`+^YdA*GE+50hKMMA>lKP~1g8sZ5Jxpd4 zvhL}?shdD5en0wG(cJYiNf*2E-74W*wt*MDmw65>m2AiO{f`f`yU(Oz1|fKxr^^Rq zVBrP+beVp4tm_83{QIALe{dT*Ky^0gzP-6h!1v7OHNMGT+Ytg^&YFWH@D2P$*PTG!%Z2|VTY?_&>>pKu(F|oAmXMl*iYU! z8QVa-i&C675NEKHs&lsDrS06jt(P@PHA|W__mkrfWn~4QKj8UZ-uDv*kMFaDVjkI{ z@$TSvy!FvASJ{1c2YVjcieb0_$flFbO~*NZF~Y-#-Xrw>0mSb97YW|c%a6atkVQxwfS|3)t1@jB6M1s>nGhdWzzu5WEbuW!b%#}ELE|KZD{kD%A+Xqty? zGR5p)lhm{ZNKK95Z(omP+{FCM*NcB}m8J@vzU@KO)GV^KK<;v!*|`j(qkrP7Z9sH| zNnQ$5zt*B;78h5zR^VUZq^-eAb^Ue7s)S@IM3PY=1qV;P^Z@`z9=(rDGL6lbBN3ik z6xbA*e4$9!<^XQZB>vL~vf(0?RSA7N#mk@muykbXk0{$zH<|D>cDDz4pl1^wfAur# z+Ui)hx)!NS!B$m{AgPot$FY>yvTlx^3Q_H^q_x>cBA!C-xTOKLnB(T#19+PQI1MkN ztRgzfaJGoFi&gO9(2`)FuN%#0L-*<2v-cI`%DNhMJ$8~KEp=oIF-WAyCKKc`d16;G rj1K>{EW!DSaf0nZvY7;D2A}0W>pv&|VICnM00000NkvXXu0mjfnxmvk literal 0 HcmV?d00001 diff --git a/textures/default_ladder.png b/textures/default_ladder.png new file mode 100644 index 0000000000000000000000000000000000000000..11056359df244d768e3aa827f5de09feed10aabe GIT binary patch literal 395 zcmV;60d)R}P)Px$MM*?KR5;7UlEF#>Q51&1duJS-29h9YQAkU7QM+Emmk12nxop)Y0yjZELJ-w6 zw6Appp=C6ds5wr~=)H5>L{!2^wD8{@`1ttG;lO9=m6EBJi-sAgmW!rdDSdJFZ=klb zVLaC+XG;hDQ2zk zeU|()Qw>h`wv18f2mqH7b4HGVIm|29Y$+%-FdqlEjGg%Ds%h$n`zO0cBB z%ZYTs;n~BSZ*aW3X}ugS3Hz9y!0b%DQLC3>4K}9CvsWIC{9?&O0IhW pVWbg45Js9p-bxo7UHt72J^%*@kP&HWYm)!~002ovPDHLkV1h?Jt1tin literal 0 HcmV?d00001 diff --git a/textures/default_lava.png b/textures/default_lava.png new file mode 100644 index 0000000000000000000000000000000000000000..9cf9fa81afa4f33cff9a8b4b1109cc767cbca6f2 GIT binary patch literal 772 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
XkA=Nl4togvEtc#1_&v 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 Hu0mjfFEda< literal 0 HcmV?d00001 diff --git a/textures/default_leaves.png b/textures/default_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..d0258eda0b6b14281789026453e685172228530a GIT binary patch literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE&CtRw<5@DZ6)j=64f@4fc7g^*iRQ zQ`0w!%oCHiC3yO5(xIihS+;+cExjqh&@p#=(!Dd+kN-}uv5e&vi8xZJ4U}QH5Ni8s zli|5&#s&_CC((~erYqR%tOSZcgmWw*y|@#-oU zkyM%bEk0*$!!`)P^kx#*MKJ{g^r0=LqRaI2VHYY+WkwIz9j(>gtA z;f;@s&u>}me5K%?7l$CjCne#sR6U(j#_nqT$yZvo3A?zeeg2U5{P%wm51ZLc+~;%s zmNkgqkl%jDX5QNq7y4#&e13F&{=a1v`=&l*-ScA4)Sru9TnyS{pXZt`^wNIf=ch_9 rTNUTO6MA89ajp6<*PC+-O4aNQ6D030`+IsjC@wr*{an^LB{Ts5?Mb^^ literal 0 HcmV?d00001 diff --git a/textures/default_mese.png b/textures/default_mese.png new file mode 100644 index 0000000000000000000000000000000000000000..4c876cdc57e2f061fcd3ff3ebe9bc4c26e08487d GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|%*9TgAsieWw;%dH0CG7CJR*x3 z82FBWFymBhK53v}o~Mgrh{nXZL7qYf3^V@mw7e=I?u* wcgxak^2HMQv>FVdQ&MBb@03HZMp8x;= literal 0 HcmV?d00001 diff --git a/textures/default_mese_block.png b/textures/default_mese_block.png new file mode 100644 index 0000000000000000000000000000000000000000..307eea24e82920c7eefcf4683b820404b624d01f GIT binary patch literal 482 zcmV<80UiE{P)6%jiZkDcYA>$*iebhHn%vwQaYX4aW6 zC`)b`Wl5_n>G#ETIseS@Si;ceM@KffTE}Dg{tXxKJl1P~S5uvwkR||CWnVpgctfNG zbUeEm-zQBNjsONdTb#wrV#1N+TL2d*)Sg9=6ovNt{QSY5e-(mm4T#uMSBN6A48W;@ zyCZ1Th_6aWAK literal 0 HcmV?d00001 diff --git a/textures/default_mese_crystal.png b/textures/default_mese_crystal.png new file mode 100644 index 0000000000000000000000000000000000000000..34fba2fd607f6b96b1eb150633669377fdb19f4f GIT binary patch literal 417 zcmV;S0bc%zP)Yo$sJ}pq5JeD0BX%C5Gq0j}tZmV1HLw

o5;7<7+N{kqMDOsb3}ssWCG(c^n1w~V|EHq0ZOA0meUlHB)D(JP5~n? zVyyuj)2R^0LEz>(ksk>FSb3At2;x{tQy5$&@~gLg|8S^(`k6ifA?t~UIT}%A00000 LNkvXXu0mjfCqbU> literal 0 HcmV?d00001 diff --git a/textures/default_mese_crystal_fragment.png b/textures/default_mese_crystal_fragment.png new file mode 100644 index 0000000000000000000000000000000000000000..496f4bc24ec56b1c2317a505577121e3aada6253 GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#4iBGz9Iw?yo-071Vow*x5R22v2@;C=>gTe~DWM4f DEUiio literal 0 HcmV?d00001 diff --git a/textures/default_mineral_coal.png b/textures/default_mineral_coal.png new file mode 100644 index 0000000000000000000000000000000000000000..3ff9692fb483347662c6b1aa37ff7214d1bd125d GIT binary patch literal 952 zcmZvaKWJ1z5XQ%xsD!&2!&3e#v|D=LT>M87T& zL9kFyh#)#jnj98E44QNzLprfEimfotyFj?h^TF=UK6du^%{O~*Z1iNUe^);d)nuf8 zHrMUN*tR9-J%8d7QH91%HygQ)&WO$uxr^d+cQXT^sv^S7PGm$NQX(PZ%qsnICo=*_ zl|+dDcgV?&3#PQLpFnwWJ16WcR|-nQmShxQ@)`u2EA;f;;$< zbJXixZo5k&$HS|?W@7&K z^o@x#`}oO~m#sIg!*?!!{MNqusEXgyFD}$tL#GD&XmZET0eb%S)A;iI@_~3Z)tLLR z|J?2`$L_AoP9EAheDjsOUR@e|IQ4Ymd-eQ6d*$oG-}fWe-fdmb%7 literal 0 HcmV?d00001 diff --git a/textures/default_mineral_iron.png b/textures/default_mineral_iron.png new file mode 100644 index 0000000000000000000000000000000000000000..51b15d95da3315794e1bd43d8a47b0de6f1609a3 GIT binary patch literal 1614 zcmZuwe^As#6kp{|e#?(AgfUS03aEuzn1?CM*&VnFr-(Nwe~1W~BrC+Bf;yt-4}MPM z6VpPIniLC!(pU%#wLpX8hlXe9$|3$hCk>TL6Y==Ahcga{JF~lQci!92=Y8JWti`Gj zdmDEfgpfU+uUNu&NAt8A#aBA_yV? zBZOiM+$Mx!Ou2zE<142sGRi1WAV4s|0v4!9fdQce0~Uw?A`nI}#R3RKB$#mz0gG4| zh-d5-G)(DWKmza*lk4*WmUA&9bNu1ri6UhTDCL2e5bgnt5lS%tw+UnXeQsdJ_$r9Q z*o#zTz$l@BfpEScGQudP!1Ev?!;JF$u*i7c=IEhdT$#amT)>x*ytpq=ITa2(06$DQ zG*mf$9Gr@|$RbcifMNmyCP-kfXpK10L2@HP*((tks7Qce!fOCXAVbqN_XvoTFu;^o z4kN!E3F z>_;x=(i1mnjA^X}>?q#*xhf;&>eY*K`9Y}5%$8YI-TloWINT-fN$J0*lZvh{2%n{` zRL_>Fe0E5GQXSe5nsC&!_dwS@@A!34&{g9%QLXTl9Xu(^$S~e?dXWBfM4hFw|M$1e;%=Hb{ZIc=(` z+u5+497r z+)Q`(_Ec?ET4S9?=UY>lNA*WjFT}m?QIwvnjZyrV0s3>hLyKIW=H{Z*-(_F)J|A^w z`?Uu3ryKA2)RtFt#QBeF&_C@pZ(SO9i{ga{)bEr6D;cT zR@FOse4kyir?c^Pv+I3#w>dwcGY{19DblFvJLB!!48MdWcrSR{Ie7W}Ca0z91h(2Q zu;qNmmdT?_Tw=;_{tQx_7%Q>!+qX3zMX!wypS*v1_1yfgmw%XZBr{>F-#gcrkC1HZ zkCuMdYJ2nS*#FA6sGPNV$@UXgtk|5j@5q=clZWw<#MPrjm)_NRxiLb!J*+oIx?iV! zwB~SI0?1p=CaWC(Dmxvrab^9Nh0WcaHOEr^ZhWSdXx;1MM(StbWws|yRx8)Mt9?&f z*!}T^3hUJ8zFD^d=2Zkr$4i}O-4AwEcFf!!I7V)lk$O33&s;CBO(t)ok9vc3H?+n? z`+5~E>gy@~HukZvi_NKr*NiFa`p@ir99G}iVfW{_h1<3ShFt!`N^PHMt(M1EM9E}! zn=P8Bl_lLV%-y|YWsvDJ-~7>THoFpS`)d6i%2)558fj3rUpX5njq<*6d~I2H_ocLp zh7We^pLwpnFKE|#2VIV?r}{yn)ghamB32|LE|E-zk-+`4XMd`ei+W!G`nFE#p literal 0 HcmV?d00001 diff --git a/textures/default_mineral_mese.png b/textures/default_mineral_mese.png new file mode 100644 index 0000000000000000000000000000000000000000..2be9944b5b9d378c0ee5169860689364e7ee0a29 GIT binary patch literal 488 zcmVP)}>VuXT<0004pNkl`ot|S+7d*!Sl8=J97?mX5hJS zJVo=u>D}0P!sdN)hCWtj0A{)9t9~FTtX41@uH(1J3v_#1ST5o4AhdD0f3`%R3iY^CaA*IRgFu^R)ZvQga8JEx#9lwF)9>*rfDckuon8g zlrQthV2nj9{QgtYG_mo?S@Liu#YIP_89F(Y2g&;beqMY&MxSc+{M>4`F#rF5G)5O+ z(I3m$c$T9-e;HlyjQ$>y4^swST`4dX+}%dXy}di z@aFY;X|}c;RaGMbs*3mE{f&ZbVRUy_*xM6|i)hWxAbNf9wly$!&Sf;j%yOf3UE!SY?r^Ox2|)=VP?eUdY8OvVML)ccyC3f$w2vt-oYr+s eRS9wN_18GS_ zK~y-)1;I;9n*{*C@&DJakFT$bR{uJ}WeIX7bdK3aCJ`M2gR!mbFC;T5g7N}b zvQ*R)bjl1jm*cF)lgM%iyUWIq>j~=32Gv%QX`M_G%9;IdNUN% zG;7*f4n9JB?4?f3XP%|5yUS7jkX*J(Pbkr8!{nrc zNJOGml`t6$WV*jn>7=navJ9QFkSnO@k`G#-X-tP-q28?E^ymru78wbgWPHh4{u^On)PNZEg<_&$rKRP_MY_Xt%*!DKYjHN`P>dWhq5#+d97XqDZ#>_N8HO7t41Fo_0y4<-5W`!%d)7w^6Y zi9I)>UQbO`5o{?sCtbvPQ;0pkU40JnE#@cOj0K_`Y=!XIMhSYu zl)Ag<&4=iu26}(dOSara)%QpwlK^<683NHg%u<(cujg=g#*l|M&`Re?7jN;*#9LGi zKanq)(3L7}eEtC<(I|GCjnUCjre|fg6AjeEi-f{H(4dt)2f(YBr%;qCi;s>Wbad$M z#f_LmH|TVJ>Be>JY82USN0KBSzp%&psu`ovNUoHj(^t?*7Cn;A zL%CSykL?vaLq?92UHV!VZ-0TX`(aA@A8Ij3V7;M0%Rk;U<#Ki{780o(`eOcUW7=V+$I1_Ush|K|ppm5N*alOs&>23O#a# zBAtqi>&)LA<%?XsGR=5&08cc@jh{=*KNVtf#!oWdL<5qEB>w{+(rdGIX~ty$0000< KMNUMnLSTYix65b% literal 0 HcmV?d00001 diff --git a/textures/default_nc_back.png b/textures/default_nc_back.png new file mode 100644 index 0000000000000000000000000000000000000000..febd7384af439fa038cf63387b20ad4bc8c55cc6 GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9F5M?jcysy3fAP>{XE z)7O>#4mYO|tLT~^`S*cBcRXDjLp07$4cf?c$UtCkn;-8F*>h#51a^tV$R25$U$}Zp z^e1^%_Hf4+Dw0N}<=^BtSz5H1WlDMPRo(g6_TJ-rs=Lqr{JQhtu3O96RZbffAD_yy zYx>I9^QNoj1m2#`lJPYxBuFdMLxSN*?=LZiQ`wyzJ%-0$M$dmC_$lj8(YeK+H4`-g;sFmUq(f)NOid`2myw-|JS(kkwW9`x@cUMMldGb=qWVO!C z6D?xfM5E3)t0aF42|6aBWVUMKW;av4BOgqf_H`8KfD8Zt literal 0 HcmV?d00001 diff --git a/textures/default_nc_front.png b/textures/default_nc_front.png new file mode 100644 index 0000000000000000000000000000000000000000..53b02d174806e1bef10c8f3a8ebd134543668ae1 GIT binary patch literal 378 zcmV-=0fqjFP))gOs~zv`%)%)*sJq@$?2Dt$CDpaT@>#O=+zGFmsHts;bT7#$MW<+HPB_$$M{% z2_XQON+QN+jPc%6MMv_&jxh>UTIIG$Gcb5Wob$k$g%?sE3f5 z=gU=YN$?F6fCgQ!-K$7y5ni*y=s7pizMw(ZpzAw13?wCRuvQTkYEcvth}B@NY0dJM z=h~1;p=F1}sok~|XtZGW{N-QwMgCW%wxyiMmE)pRoStOQ`K-NRWaVZPi!_22LP Y1IvzxzLTr{asU7T07*qoM6N<$f`$5`{Qv*} literal 0 HcmV?d00001 diff --git a/textures/default_nc_rb.png b/textures/default_nc_rb.png new file mode 100644 index 0000000000000000000000000000000000000000..7183e69867ab0e9aa896fd2811910382eee39d6c GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9F5M?jcysy3fAP>{XE z)7O>#4mYO|tF*U+(+!|duBVG*h{pM3lSkdj3alF*OzKE}c6=SPevS-{Qr2< zA;#&GWmYUbC^wz0`ch89pZ>$by*rvjr@Juo6}qv-94y%&*Dhb+VIY%nAkmq*Ok0NU y!3SnN&Pk>*A{E`S%zB;e|GPG1A5d-NW?*FVg^rFKbLh*2~7Ze?n2f8 literal 0 HcmV?d00001 diff --git a/textures/default_nc_side.png b/textures/default_nc_side.png new file mode 100644 index 0000000000000000000000000000000000000000..0a34c8bef9eab2e5431188bd5419f53b6032f2f9 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9F5M?jcysy3fAP>{XE z)7O>#4mYO|i;#BvXqhCw2B_~Sl*teKOE1_KW*=C{aZ^EU&Z~kOZ3`Kv zuilX1P{yn$D8f4G5sBOpnxe|3UqGpq5|2kbi2Y+CQ!i#?*A a&+z$#hVld+)vZ7mF?hQAxvXvL>4nJ za0`PlBg3pY5H=O_SKve#96}gV#iqlw;Px#24YJ`L;wH)0002_L%V+f000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn( z5+^Py;5`Ze0013nR9JLFZ*6U5Zgc_CX>@2HM@dakWG-a~0005+ zNklayHx{WP?nFUETy^cj zjkpxFS`<`pCvH^qpAf+ZE_@fJlSy*#agmvuo2>GYlk+{!2f&RF2W9!`K4JV^dp9SS zU(R@Z{r!Sme6io-D{p4y!t=fWXn?#dsVY19PB-Z=7#1GqWkFt49;b1Pbq)YC8Hgh7 z2L${8fL5A(RC>I!YaKW37(HGT1JFw|1~OL3#6Cn*0bvr3#k~bL~ zU7F$hw;#Z707hj=8HB2pVpKG^V`8kUkD>t-iqhJaqf`7;}U%38DzLvsiF4v7;d&wKX-Qyt>M+`A2sR4FsO1BsMP>QH=Y0vFZJmk+TIik y)grLYlBK3uuqDkf!5M*8b)5)dEwZHJL;nw$c-KC6wVzo40000Px#32;bRa{vGf6951U69E94oEQKA0ia1lK~y-)&6B@N98na7zxU=j>tw-1NU+dC z$R7|iDkRvYlN13FYq7KtBq?H-#uQ1DLLq{r2&pX$1_VLKkH%H8P!L5{QJk!+E9*{n zX7{~$DP}X0Dv+e`l=mJ!?mgTK4J|D%+M(e=%O5l}JZP7e7gL`C`1G$_s@G%;@gRCt94BK9S=tc{8B`VrwD5XzZ8-yC%%tU5AEa0 zZ%GDwheg^NfZc;4K{aOo$Uz8D5~8}Lreho_z)O6&E&n=Y@L{qqCC-d@S?->n;GR+yChoegbuB)%daag-!qf002ovPDHLkV1f&}+gAVp literal 0 HcmV?d00001 diff --git a/textures/default_rail_crossing.png b/textures/default_rail_crossing.png new file mode 100644 index 0000000000000000000000000000000000000000..98464057704a84ab9dfeac63f13e9b1af8d6f1ae GIT binary patch literal 555 zcmV+`0@VG9P)Px#32;bRa{vGf6951U69E94oEQKA0nkZAK~y-)rIO1_TTu{)f0KKoRRR_lqV;bm zr9MLUuEdQf>aH763q==-RD)0`2t`A5A%f3E>!UtMqfi%uOLtnqN=hSIF*o-pii$|c z>ty({&l`wmn9nC&tD zH{AA?^Bi{ARl;OvDH8~}ISS4$W0-b1*|(SCzIB!H`>z{h1AxD~y6j~C@EDu^AQFir zb^-#M{vfve8te*TV<#xNKLOpG!k0OXZZF(EopQ4kgia&yEa^1#>zHD30}NnbSxBzm zt5e1?UWF6L&&!s%F#la8LLGMC{;szre zHPGi3)H|ab;?J8O#A-SS!%Zm%xl t#n10DZ{q#v_X+}p%soCq9-m0t(KTmX;6MA&eM$fT002ovPDHLkV1jh{_{snP literal 0 HcmV?d00001 diff --git a/textures/default_rail_curved.png b/textures/default_rail_curved.png new file mode 100644 index 0000000000000000000000000000000000000000..62afa3d2b81c4dc6f85275ea6de89ffb43a1be8b GIT binary patch literal 545 zcmV++0^a?JP)Px#32;bRa{vGf6951U69E94oEQKA0mey0K~y-)y^~K!lW`cwKfi6gPR1Y?nzVF- zL=q2^R^-8Bdg>w+Aq8Qg{Si8hC?ObxLVpgHC@34dc#&995Eu+Rb&64R=o+CI6;86b zcguHwo(|)kdubEB^xS?Ae811<`SXMS84s_Wl*N0er8?(0h{2Cdo#5qZ5(89B)PBW@ zm1O~lMq-w{I;gPCNaFW;xIOnt)otPaP=|E+nrP{NP!YzTzf=I@=Z}lWt?fMn!!Rmh zQ)q_AeTYH_F*VOk^mUQM1u{%N8#a0vw^6wU^t5@eIF8V}k&^XrY=El>H z3LrGtF5cF|WrFaPPMI3+mU<+Q;;Tx}8tB;^ixX!Az$geVr=v`8_kvH(-JB;HiE*jx z8+xutNlFYq`CuUl4YteCBQ6@98t*nbtSy-MZAKE8)6TCMdY=pOS*XikO-TO1mzFFTjQ;6NB jK=T98eWHb{kCW;zgEX_2=&9K_00000NkvXXu0mjfyq^6z literal 0 HcmV?d00001 diff --git a/textures/default_rail_t_junction.png b/textures/default_rail_t_junction.png new file mode 100644 index 0000000000000000000000000000000000000000..9985f63cd49ce29f636e72fe3b168fe1b6bad236 GIT binary patch literal 542 zcmV+(0^$9MP)Px#32;bRa{vGf6951U69E94oEQKA0mDf|K~y-)m6J_KRB;r=fB$)ZUZZ_L8#mDh z6@df|6=4fE5w?gnGRPpb3DLkd89|F;KxiSMsTeWLFzblP3<84zTeORaAX>G1evpBZ zito*PZ+!2znCAKQ)V#}c?>U@vxflLbd1_KRGHGFt>d2&}JT)23X@FNxS|T8K|Du>W zf$aq-AQaGsqPiAh>I5I>YjeZB7o_jycclS7eVe2GTCMTZTI6t}W^vi)P=lu81vDlN zTtCF|0yuISfb;1A%4tMxj8MoIDZL(7an|d$3;E(ETJI_k< z$)hy2^+&|Iv#pDc74UsOBJUKbUWquctv5#@UnJG=gE!f$vM+&+%UoEhVEtZZ^j=E# z<)B_8@21tS1&5VYm*T_A@?Qd5a}SPN%643=`4w_~mn2pod;8q3IR{FXvK=4Wsch?M z0N3>*Ak#d@tw&cRl#n~mzD7=l-dgHG`w78Z{|SI?mw4R&!oj4$pVca@sbf^UfaC## z&ZnO@-9dLxSNt73pO}tB6-YGzQ!7f@7Fn{_D9_f&A70#Lcw$EFddg$(XV=9PVk8up gr)tl1rU{tgFLW2g;W?8CasU7T07*qoM6N<$g8pIiBme*a literal 0 HcmV?d00001 diff --git a/textures/default_sand.png b/textures/default_sand.png new file mode 100644 index 0000000000000000000000000000000000000000..2a484569bdb6f456012598a06c99603055ba5637 GIT binary patch literal 732 zcmV<20wev2P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyZ3 z4H5=z2%@$C00LY|L_t(I%RSObZsbM~h2cLU2eJmKdQeF~x9rRLYQB&!VL)gNrDBoE zoV{SftJpon`y%9@zyIpS89uKOqrz@yXdPQnok#5)@6+b9xDfqzxjoZ|)#u?U- z@K!M@giujq*&P(47VjD%RBG4^EE!c*YVPz>5j8-g_s()%`StIF znntY^Dx^8#2W1?U(i>mTJ8W1o!)OpI2$d2u*GmRb9?pAGZ1~aQ1_LPCA?D2K+m5hg ztQ)ops!D5(dCqi%hwlST!S59j0r@?F-aBE*8>q7N>$#F{iFvAg`@X>$6+{G4hcyZc zB^Kr>Gks>pQL*Z`3xp-}`fK6w>4=(!sDsiF=eBAU)+zD+wt)3K-U~RzwzW{3aJe;p z{Be)5+Xvm_l1JTQ!cswKyaeR-J~_nx0Wcbmbb5@N<6s8y_2Qf#y? zJpXw_tU;Vb6~T)WCergt=k|INcAZg4=Dty?3aaRSlVNtAtd!T@%*0P1YIk zgZp3Ecm+{Zg_<%sR&pvVp%Fty)bRX#WD_)sltL<Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW1sfMI6;LOBPXGV{mPtfGR4C5{ z!E18bH~;`(OP2f$et=CNWJ^K{G-;>P8}#>{aZl6C3N>(IRF3nVOcihLMV#DDE)GOzgR96 zDKXX{1ZkQ;sD@!ko5u4zP1AxPXifw{MXBn#s%u866e3O%+qP%3SzZ)U%BE??5F*VqXD_u7XL*GW*G)peVV~p`?wWf@&*Xz5x_pe1+Rh5cV z#Jg_4j}b<;WpeHU)lsA<53dkHP19P&eBb~5`+4zhxmvx@hQcrm!XWS*=jYQe#uz)D zo}ZpCFD{i%wu}khA%tAV$@6^BA7ojITGnDsGjx402yEMWdHLn}ZXCxdQu~&lw7kp< zLQaE0KpQ%JGlh&X!!!`a^@;5Fe_Gz1**!vt>$nIZ+qPTIgD{-W=f3Yp+X$Mb>GYiD zbmA?~i@dHYP1D-8MHu9r4r`&@DWK42PZ!4!i_^&o3sgN;nEdtMmgcT( zy2!-%;p8pF7k~MmFs2o&qjnLKaRo%)jeh1I-ASTXO^HLGmdiJ` zs)k8ZCbU#qvfQitdGbNVl4EV&yxffLH3H8P(-RUB{Z*vNHD>b1fDKOgr#IllhB stW3@to;z>O@BqP_-{zopr06KJ<5&!@I literal 0 HcmV?d00001 diff --git a/textures/default_scorched_stuff.png b/textures/default_scorched_stuff.png new file mode 100644 index 0000000000000000000000000000000000000000..9ced2fbe89e84a0abf5ca13f71c10a0b3b11170a GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf4nJ z@ErkR#;MwT(m=s(PZ!4!i{7(Aw|N^Bc=kx8CrU3%m7ccJUaVj2!iQ90r^Y+Y%n!~l zom|)Ll3BBU4pYMIlOi=fAyZ{}=IGoMZIBXd{JTfxa{^CC8{e+VMfdi0Tv)gvX{GPZ z)z$Y4E=g@Wwjk*7F5x9tOqZ+M98qYlWvJS;YO{IJ(;$YV{|-G*blK-~%Cl78x&8Ie aRy{$3__d~{M>YYS#o+1c=d#Wzp$Py!<5X<` literal 0 HcmV?d00001 diff --git a/textures/default_sign_wall.png b/textures/default_sign_wall.png new file mode 100644 index 0000000000000000000000000000000000000000..d5c6dcd35295220c56a5acdaee68250b7a4a445e GIT binary patch literal 617 zcmV-v0+#)WP)1;*yGS>|L2#&TDWYJ7f(S(@R2>yZR}q|? z9K}UT(Qeg2aMAkJ*dS@DL0U*sYtl0x_nkWj%?bVo`cA*;<$3u%@Xtp8aE*0Wt7Zvy zPoZx=L5d9npjER-v0=1o7J#k%5?zTDlAH#hv*)ZJ0H~z}_s-l^%$7w>GZ-5iV53mR ztOe;k1f9VM&zAG_9|>dCTQoJ3TMMrc0)v9DjbiE+2jUT2)8gHGh1E<2ORb=Ow<&%7 zLC_J|=MNBzyF?^BDqkBdr=G}hK?l}oS32BOi*fw z-b@joZ(x#;x`|z2qp-w|E}$=e;pFiUhVmDIrsRmqAV&o* z-kc{8lsSEBgqiDelp8K*W+%BkKf#ULSJ>Q+^P%YXz96;_$AOAr@$~LJY{O<{ZHLv& zeWG0s*_F450fG9PHTKvR>2Aj>@BzrFOXMpq#a)r2A<>d#diH9>!#aKYB@PdS=}#U+ zbS)fLC6x@LDY-ucf-k|hs=??`g3PBT&6a_(sngN2khV-h{yL6jva9;|Tz7E4nJ z@ErkR#;MwT(m=slPZ!4!i{7O{2L%r(a4epuobrFA%wgF#r{yjsyfM|coGdV9^;WYt z?5k!*zW>|7lkkvf!yylbB^8fS4+y0uWffSRGdq}Bp1I)2rH0PO%%=s*9$h&gyjWw| zqUsM%)y0_g=W##HuAjFe^7)QUK7UjKHa?!ao?AI3p;xPWsgF&bdcRw!z)$O$K!-4R My85}Sb4q9e0IR4^OaK4? literal 0 HcmV?d00001 diff --git a/textures/default_steel_ingot.png b/textures/default_steel_ingot.png new file mode 100644 index 0000000000000000000000000000000000000000..f6c9414e781fd31cc2a437620e2b6887424b6b59 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRt!3HF+tk*dLq*#ibJVQ8upoSx*1IXtr@Q5sC zVBiDF@f~5Ds?8@26fE>~aSXBOeLL|Y=K%#C*7+9>&N*gjgn=ROCNZsrnrC`pX>$m8ylWdpQ{PmNOjSNl6v%HBHD~dPG;CRcYeP zZs`c;RZ?BY%2<_V)o)~*_efAlYVFo9p>}6@-JQ&3-fXgu1zOJF>FVdQ&MBb@0LfuQ Ah5!Hn literal 0 HcmV?d00001 diff --git a/textures/default_stick.png b/textures/default_stick.png new file mode 100644 index 0000000000000000000000000000000000000000..2d31797f00678eaf60a7c84536b20b3e30d743d1 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf4nJ z@ErkR#;MwT(m=roPZ!4!i{9h}i6Vt-VNdJVtUXmPF~2qBtp9vFSHWZz_s{#P??3$2 zVZ<;!Z4u9bs|a?q0H~<%r%*fv^Y5+D&;eU{S;2%t(Iy z{NW;khydX3e13l7?%)nUF(ah}z}CgqFG5gNM1-6(s>)?udFVRkKYsvFRdgJ;i?weY z#|9E!US0s``+-sn$BBKRw z^>QH$L)`YP(*fczaF`}?&J6@0#mIfd7zruee%>><-!-K~-}k(}zLMt|2S!zL&IA$R zy%ccp${`KIwtvoz_VscB;Gyf9Gmj~4E<8Owk#lYgRJE}>91b^KN@+by6*SEAjJr4C z0M6$#0DnI|c<4I1t|P_>?v4IFDC~&4NP<8OO)>i_oCs!ytt*1CuImk;nDKGF0?^eQ z?3eFXQdO2^VXWU!%s5Qb7M5yP&Y5YNs<_VabZP*PmEG^-2@wd7DQ$j>v`MN;DTSp9 zyJzCQ_TYta95=g)QHr(0z06k3Rsf!#zr*eZkms4OKO$9S&Uwp&JE|kglD~i*k4N51 wxd|&mIKRDN#c&|T;r58~+%(yl{an+a literal 0 HcmV?d00001 diff --git a/textures/default_tnt_bottom.png b/textures/default_tnt_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..8ba2fca0be5b58ab656f61743204358e8d8152f8 GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf4nJ z@ErkR#;MwT(m+9HPZ!4!i{9jz#S1^qXXN6$yW?QO@`VQ-xaM~@0)b@=2s7$Ag7{7c uW*k58Vg3fAI}NQN_Wf-KGbDH}8vxDda%<*zA(RC)j=|H_&t;ucLK6U;Lohf1 literal 0 HcmV?d00001 diff --git a/textures/default_tnt_side.png b/textures/default_tnt_side.png new file mode 100644 index 0000000000000000000000000000000000000000..d9a2bc4ebee1e8046f98d7fd48deb545b7aa4896 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf4nJ z@ErkR#;MwT(m=r&PZ!4!i{9jz#S1_FKh-PE0|M_QBqZLLm`Hd$G&T(2XlrEb`40sC zqT&WdMu!Z0`gPiUdAk@5+7+xhA{F&aD-J&ZN=vjo_`+o8{DHBHd19f7W^f(@gTf`7 V-v-t5ZGrYMc)I$ztaD0e0ssynH*^31 literal 0 HcmV?d00001 diff --git a/textures/default_tnt_top.png b/textures/default_tnt_top.png new file mode 100644 index 0000000000000000000000000000000000000000..a84ffc9af486b0869b64c649700eafb6aab959e9 GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf4nJ z@ErkR#;MwT(m=sgo-U3d7QJUDALMOO5OAHptF>YY*SR=fpEpfnJ-QL>o#E%BS?}(c zp4c3j_+;CACj0pYXP#WHNcL+f=ZHvNaZ%U7{Ci39f77gz?n5F>kE>Gt9y>U*w2`-9 zlUvND`b=A3jvUcZ!Db1c~6CPz3 zO$fU){o!$TRrZfBe;cK24mjg@#-THb???Ck1q=VN_VO>g7J2Z!yvKt?_Cba4!^IGvoZK)~RT#Q%7MKkgGJ zIGlLMtn)(3Z=3O-=hNIw1?DGOs3x!(8W^3ymlU#dRK}Y9|#}>vDY@952Q!4)a zFk}XT=I(CpE;%(PwmDDdAG>h%>d_CszGk=O7H>8@+%1E$K10avvQR6XaE8g6bhf>3DDVqtW`pwxoG zARKC1SP)Rp6GcNyo$o$IQ?pSZ$U|oObAU}P6*>8B^CHZhW|^o!o}fF-l*}0Jd4C4# zo^y$o`mk`i!Kg&)WjNf_m~|jr-LgIn&$_GZCM=y9<)wj#$ZYNbHKioD#S=ci$aQzc`Ye)#BPE4SccL9bVc@nQqU~7dLs;jQ!P8Ef~>Ro8dRG7Ns;0d zgXHlLbD;^C&(=cdDM1oce><~Bk7aOMyVq71w(qT-*&pt`yC1&>^Cx#7{`_*`pkm!kUN*=UJn1PZ)|kFZC-vb{F|+Ke(v#Gn~lvE3$gQR{>Rn5*Mp~9 ew?6HEUOF#wWai4?{pqjYE1WJaci&uJTmJ_m__J03 literal 0 HcmV?d00001 diff --git a/textures/default_tool_steelpick.png b/textures/default_tool_steelpick.png new file mode 100644 index 0000000000000000000000000000000000000000..1d5a2d1c82c79d676ba3e68295f95259387c7d55 GIT binary patch literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=DinK$vl=HlH+5kiEpy*OmP?kEj5TK|{a=1EA1(PZ!4!i_=RdEfi{U5NP`!%&fxA zCc)IC@1PKsA$I@3qt!o|ezS;OR*QGY^{}wow)F(hoW*xu&d+-{|L*_WH(CEpc_rt2 z+2cM(lY^z{3l|rmFD~#i)7)j4w(aC%k;*5XJJ)UeU2y1Mm5ScU{9l$om#X)_DB$(Y@N5El Ojlt8^&t;ucLK6V5T!5hf literal 0 HcmV?d00001 diff --git a/textures/default_tool_steelshovel.png b/textures/default_tool_steelshovel.png new file mode 100644 index 0000000000000000000000000000000000000000..ed8413846005dfb5d02ada350a4e2c088c566cc8 GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf4nJ z@ErkR#;MwT(m=r~PZ!4!i{7{AHgX;@;Awq$|9b3eL8q)zJ!ZA)6dwPDOKqCjKXUET zYPaOL7`v)@k5|)o&Vxr;@&iM2=X-1BKet-2YFdz!OU7Ep3B`O2{qY|puCs3qlP(uj zJoe&uLUh{gi|S>m(P`1kmot93_jXNv$NqD@|Jj&h4jtg$%4+#_|D2f`Kvyt$y85}S Ib4q9e0DUM+nE(I) literal 0 HcmV?d00001 diff --git a/textures/default_tool_steelsword.png b/textures/default_tool_steelsword.png new file mode 100644 index 0000000000000000000000000000000000000000..6a82931f9bcab87c59f351524e6030b2814e89ba GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sDEfH31!Z9ZwBAbW|YuPgf9i8EEwdU8C%u9P4*8TkS^fb@q<^Jg^ zrxaK z6XP|X>E@=$n5-_ZE!8%AU-p))T{a^k+?^xO(1 zM16V&!{Icd^fCkC=Bzr9Vc}JuWmMfw_8_dB>F1S!$H;2#5w)ZgxQ8EcP6nN;ZGS0E zlan5x8>j}+81h<5XrJ8zkD&~sCm4q60Yx!bZu3T%j-YvU&IDEG;A=1$>`#f5pg5$C zr+5fmz$Z4#t@Y{F#>}7B`}>Cr^Y_oTcU~<#c=B!fN_%JX zQm4Z=dwW~kcgALF{O)$I-~D)dV*UK`ZfpD3;la~;^B*2R9Dna~`QlkCXI1~s-n?+* f%f+|PU+$bcB?sSI`gP*xj|OQ=D~s>i8(aSX%Pp|1 literal 0 HcmV?d00001 diff --git a/textures/default_tool_stonepick.png b/textures/default_tool_stonepick.png new file mode 100644 index 0000000000000000000000000000000000000000..71ff0b558602649e9a77a92659ec804f796ce2b0 GIT binary patch literal 365 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=DinK$vl=HlH+5kiEpy*OmP?kEj5*viEv+O`y;(PZ!4!i_^&o3j_=fNlaGr{k4A0 znllH0py2zv*tR`;Y}_XCG&FW}bo^hmXc5np=-YaS_T$&r z?1~;i6NX4*pPZvzqCGr7us#3&vG+_lvl1UXJ3ITw-UfeTW@hHY>tc6HOx%0WsVgmJ zU4y%5Rf(XNyoQ;zX5l||ZS#p)#%v0=(=-?u!e-=a2L4vB28IHIr>mdKI;Vst00Z)m A^Z)<= literal 0 HcmV?d00001 diff --git a/textures/default_tool_stoneshovel.png b/textures/default_tool_stoneshovel.png new file mode 100644 index 0000000000000000000000000000000000000000..ba5243101a1180a6f5f07f0fb791dae2c1e9416f GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf4nJ z@ErkR#;MwT(m=snPZ!4!i{7^rHu5$Y@UZBY_&ktH?KOGx(9p4nJ z@ErkR#;MwT(m=uUo-U3d7QIU^EAkyO5Mg_;zooEgW~$KPBX3yPHA3$&^{08-)|o%x z64u|m!_%$l;Dk=8yatUd-)*MZ(`~QrdGdSm_ghTd-Dg>yIPT8v>{$Ekka4)EV_Tk%?I{rmiH&!b}M*B&k?-1RTuCeUjPp00i_>zopr05S$~;Q#;t literal 0 HcmV?d00001 diff --git a/textures/default_tool_woodaxe.png b/textures/default_tool_woodaxe.png new file mode 100644 index 0000000000000000000000000000000000000000..3daa4af72bb200b80ad57b1ee801d21ee1115c71 GIT binary patch literal 927 zcmZvav1?R85XOgSL=OT-3OTe8VG*=35EL7g92a#^&Y*{dAS4KOpEg3Y(n~-{>1P)k z@ei=Dm`X%Z3$aieEv5*>!pcTd*^Kip5bo~zV0UL9JNx_Qn_XMzo}X$QXo$#^Ug%uO zwONh5dvZSXCzeEZ$-<@Hd~RbfVz5N+qWaw3%t!)I)l!O!m0ys4H}$A_7d22d5H1nGdOGGoA1Edy20Ii-f18;u|oTC`XgoiHf1 zpfCuBniduW)bm8q&@#w(AET++Fc9PpGyU1drk0AF{JMD&=1#LrR3J~#9cD^q4EMZ0 z19i{2L`{8IINe}WBK0yHZfeXr5Uy@npN41MRrV+>of+n(fjh`-?lv{0BzSwlf&=f2RDL&@4q|hO|1?FQJN(;~x*#kFt^6Uz2wae!bE8BCUIWw~ls?&oqCp kJemIa;N|l>z1h#rG2xPUpLw7wyHBfAUJKAOHXW literal 0 HcmV?d00001 diff --git a/textures/default_tool_woodpick.png b/textures/default_tool_woodpick.png new file mode 100644 index 0000000000000000000000000000000000000000..7346630499682172b807b517dd91f115da701f3c GIT binary patch literal 307 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=DinK$vl=HlH+5kiEpy*OmP?kEj4Ur_I8~&p@FAo-U3d7N?UF76=#|l3=Zq`ae-s zEoaw3k4cOt4tREc-aoI;=46}U0~4R7xAwcZ6B{}wF#dj5o1T)8kWlgaA3w91Gl!LL zY>TMt|=!QKRrtqz%A+6t vUQEiT(|8tWo%t0XI^(OoYv$ZZZ+I9~=LQMQH;8))^b3QhtDnm{r-UW|z!i8; literal 0 HcmV?d00001 diff --git a/textures/default_tool_woodshovel.png b/textures/default_tool_woodshovel.png new file mode 100644 index 0000000000000000000000000000000000000000..649ab4c38a79fb48376ed13949ae5e182d328cd0 GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf4nJ z@ErkR#;MwT(m=snPZ!4!i{9jf1p)>_t1ozVezxz~`~F_}4!cD>1woJg=r$<2J4TiHs2smVcZ- rp=!=7PqxLg+I!O2*sjF5@i8!{=NsfmUUzv2w3xxu)z4*}Q$iB}C{jIg literal 0 HcmV?d00001 diff --git a/textures/default_tool_woodsword.png b/textures/default_tool_woodsword.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c6be3254274acdd5a95665a580ad68dcfcb50e GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf4nJ z@ErkR#;MwT(m=t5o-U3d7QM*{3(PNwB>s(mu>9kF&(6>G%s?Q#a@O6oQzZ3bD>=lK zZ!wgdJ#YUvF#!Zr!asjC-!Iu|#4tatiA~^APh!I|j@R{UY;0|>^XrU-7SC*C^j6pv zttp&p?596rk>ql2peZL7ELZjqFm7XHt&{q%59BN8>YgoldCGZ5`3K2{MxgMmUdo-U3d7N@UH z+Q@s@fQKc%$vv^{p_W-tcH0)lIl6bMB#WneD=zU==i(3u%cJ;<1% rbHw+D@2bcHKQlh(zg1iHZ{Iz!TsL27wjDrcFfe$!`njxgN@xNANZwpv literal 0 HcmV?d00001 diff --git a/textures/default_torch_animated.png b/textures/default_torch_animated.png new file mode 100644 index 0000000000000000000000000000000000000000..ca1668c718830c6ce22ebf8652a116da7202ef68 GIT binary patch literal 1441 zcmV;S1z!4zP)EK|00009a7bBm000XU z000XU0RWnu7ytkO2XskIMF-pl5eF0q>-YLh000F*NklF;I->}7?!l@fw~(aJW7kxf46u0uY{qFt zx}*ae*BgmDVNE7IZCX=9Sx4|leqRzwAcBuyYNf1l@JKdKkQHb(WSjPht$ka=V%oc@ znX;b3Bh3b*7irJw|*1$vwsvhp1PV`(8h+qi@T{6UcE=E!5!z~)y&tBVUz>D*RwPxsR++t%~rZAD#?SiRs=NUUCv{R7E^-0JoR1~DGE z%->VGU?Es|5*5w6v*&@KX$!+27ogIq`TGZfmGLc$6V86+>S12LDusd*3ES zxlOfI3k3W@ZIKucX8k0_1G^{4bdm>>2RyoasQX{{{(mM>w_zEa)(OG>f!$6n^8j&0 z003#P7i#S&oc1gHkqm#`PRi^sF+jv0=*9Ypia#mVPn7;Z@*uaeoO)l72ezB!9y`R( z0~Vh_I_ibXah13RsHkselc)Qj)%pMt9xOBJsZ*qX5D6y{l>GzAgC|$+bGyWN;B-xr z(=teweXID6bHsfOYPA{KH^1bM;>S-mkoW#265>H)buo3dR`c^96iguyj!GU#9z2P< zck3`se7Bdse_$UyPO6gSV4(z3sVNxiJNfp`Sbq;W%?J38^3it<6!r=7V0mRRb%^jF z97!Q0c_4X^6WuvbNk=pS``>xJk6hM^{4X@ALIX&v%i*+LCfCHb+53Z~Yd>Y_6o6C; zs^~5LTwMBMIn7M{%+G`ECXi|AJnH1-LGL73GC>H6@W46~VEG!gmQgZ^whOlz#k-INd!VdJP5LU zjr0eS2OJvQsS_*xZSia5u>C^9kvN=oa##oX-cJMojjA6B#m>)zD?glt`+gbJ1%(3r z#JUoCakaqrOi?8ce@NhaCaWjN@@2gsdGLQIqh%aB*hU45rlD5rVc33+Z|R+G7dh^k z`TT)(e1!61lfcl+{B!O5yo+q3y|i#akpK@&3ux1tI)Ud4z8I81NcImT5BN3K4zYje znG@ywPy6oozeDlHef&UiT5b~Z^&px?rJ;po?GMs<^N^?5pz-YI&%wya7s%oKomMoI v@+Y&tdOmfx3Gg5hOu*+4Nq-=D@RH-h?Y00000NkvXXu0mjf@Yu4} literal 0 HcmV?d00001 diff --git a/textures/default_torch_on_ceiling.png b/textures/default_torch_on_ceiling.png new file mode 100644 index 0000000000000000000000000000000000000000..8deef965e981e504a5e9c49656adf958c6dd4dec GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv=}#LT=BJwMkFg)(D3 zQ$0%un+>Odic&pY978PplM@awt5q8P`5uz^qu-x5&TWzqqU2n}dNt;kLKR&Z~L9fEF@%y85}Sb4q9e0RLA}xc~qF literal 0 HcmV?d00001 diff --git a/textures/default_torch_on_ceiling_animated.png b/textures/default_torch_on_ceiling_animated.png new file mode 100644 index 0000000000000000000000000000000000000000..b101561fc0b55bdabef2f13a1962a15cac1649cd GIT binary patch literal 1302 zcmV+x1?l>UP)EK|00009a7bBm000XU z000XU0RWnu7ytkO2XskIMF-pl5eF0y_?u!H000EFNklKte5+MWD3A z2U0>5s1VCG%-jnM11MDlnKI1h!w~5MjodRY);ZtP%-ozW-~FHbe{;Tb4zNP(*c?V! zWhhqqF;*LhcwOMCldKrYF(JfU0RVV=sNhrrFLxF0)dmoAf*?OH*ca{pTEQLb)T;gA z8>~Ug(F|I!si3g-L%Z{&AWO*NBU+jizoDMf``BirzOsO(#1dk91ppWw?MH24HF(^W zk>V^5;{HE8*z7D1Zp~Z&`QGvVT9TDO8|;tWkKTvz!DcevXeFP79Qi_)WTF`N^E#ax%JsVu9~Udg)&Kx*ddHzQKa)F)^T6eKKz7IYV{atW@vKOaBaG`uZc()qR#E={no`AY#WstoK)7r2ZV+RF-^lfC~3|avpFV@P0wz1P`JkH1Juv z&?FgK*#y1tPC7|q1C1E3(eN+b@=iPffTEv-o11`;&?LtD2fuZr^rd~=S)2!)2TSXN z&g>8xD@&5sFGOoK@OE?X!25}OETmnOFJ#g2Lo_wfOrqFN!)>|pXXWbmB~*7hll^|; z&|oKKuGDa6aUQrl4{rZQHP*Z;j|Wlr1R*ro&#`~d*FnPeBl3m3c;-18pJ*rJ@BmxC zpoxDPrp`u0=%d)q7n&N+W5ehr?kvs&m*)Y|@_4ECHF>M`$glv++CA~pwXbQCf?>CL z05~I0$hOkQNE)al$TjTis1I~lHnFqe>f@u0}cVgy&&!QEoj3gKigBW<=hs?*f;V*4I+>W-%uOP3Y zT}a%t2pg>hR2ncX_rqe7uweNSqInHlf}T+&=6l~lM&1bL!GAjb1`Dwnq^kvD`v3p{ M07*qoM6N<$g7(yE+W-In literal 0 HcmV?d00001 diff --git a/textures/default_torch_on_floor.png b/textures/default_torch_on_floor.png new file mode 100644 index 0000000000000000000000000000000000000000..925a59af960eb65250a99618fc383d636643f8b7 GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#4x1pm601yBc!h{fsT1PP&p?ZSuu%UbgM-*|H4gUc14Z@l?Gr^a4# zM%|yJit?{A%*=;{cuakM@Fe^#?0$IO->&U;xSi39qxy*|H(&beeg9wot>9z*rayBh zzx(z7Z?ozD*^8$Bn=D&#N@&ji+A|>^r5en6ZbaUcypsAu@`PDKXJ_Zb&)4OjNFO+L z=E#Td@8du5{y2Z&z=zl8>$&zEIC0>^Y$5SKzmFd{aPE{(qxir7=?|VIEIq*b|G)8_ e%5Q?}85s_?*fm}~dVCtt6AYfNelF{r5}E*$JAXU? literal 0 HcmV?d00001 diff --git a/textures/default_torch_on_floor_animated.png b/textures/default_torch_on_floor_animated.png new file mode 100644 index 0000000000000000000000000000000000000000..0b55818b40bcd2ca47e758179a51e4209f9a70cc GIT binary patch literal 1355 zcmV-R1+@B!P)EK|00009a7bBm000XU z000XU0RWnu7ytkO2XskIMF-pl5eF0*fk)cD000E)Nkl{#DH41fG+RDyz424d+_0ndNLr@ApWod9R& z7}oA;&_&LJdtXqW?^|Mxd*7ay=#lq49ey*H*ps&+)lB6ZSMqsaG#F8kxkT_l@E{6w zpgM;R>|ai-Ie7H*7Ml9I6qz&YcnLshDbuM!E+b`A9#AquWdTptO{9w6-b`)u-7mRUnc-k)N1;K-uk@s#Jj|cvT z-;-omh7b~Yt02$K;C|02mZ?V~H*n$X=VVM8!=J5tV9q(qvu{Hf9&Z= zM%uO^m(PPl#f;Sso8W=qK@_Ry*mL}x+0%ZU#{^Y}bSu*P9^R-)j6;6W70Q@5ES-<_YN{XQ?5w>fxk_Pcw? z>+0rpGy~oaGT zgU^GsB!$X174UhGq{t{pix)f)JctstuLn7gZ05&=-`z?6-{(IS6#hJt>l8_*Qp|=V zWIOUAKk#gr`wPvNTNixzUk!w2rtwE(H8k-+Q@xNR>IK1r*pTN^6#+oddySW1$SHR8 z4tQz0<228M{$LB8`D!me8b^cOa5pvZ=OEptP+76YdSR8|f#5;ZsOPg}x>e(de0%p@ z{g8C=xlosuAlvcmy!VDp_mNTzieHQDtcADtum<#oNr0~KmvL-x7$5CE#Gky3r3zJ) zX!*ZjmXV(>{x1j~EPDBVJxKnGuWBhYn#mU&;Rlm^`+XQq!~7u(4zy8Kp@#l}J=sF# zTKb9cmN*oMeqt=}z}f$Q^PqRPp8q8RfV9)0fd`GRkiYvP^>s4OBk5LE0p=pi>T{Sp zc-)HVfqRe;&l^I(^CNxymZF6RR;no0a$ebDKz@eE4;DEOLjNH@_y?b1F`{xgXQ2Q9 N002ovPDHLkV1kgJkQV>| literal 0 HcmV?d00001 diff --git a/textures/default_tree.png b/textures/default_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..ab1250123c0bec828df1dd9d7bd22f6b2ab67bc5 GIT binary patch literal 706 zcmV;z0zLhSP)N<2DpT4=*WFlw`Mi5Cq5qvj1fT^ASvsEr}FgHy>^w8z|JNQ|9l#9_rl0 zZHqW-Sz;gtPaB;n%>4Z4Cx86;$=C0LB}OJOd_4~^%GdKi2H?X)&XqbkV+?Ysz#ur` z>$wwsz&nR?4mFn28rB-L4@3<3U=b%6V>nZ$)J7YFp@X4HN*A{^GJ4~69stzZ!GK@{ z=PcF=lUN4O#-Nl=Rq$?lhqlI*3quD0y$^7e&cx-P^BVnB>4;)HZ&T5pWr5bM~sm97J|f~wM033GV! zk4_(*0dI{VOg#6@x<>Lpd81Evx0RK z!P~b50iMsqdfWK-*OSl3jn|%W&SKQCYzqKK%3wfMN$2@KmMYSR@_HTIZwo11oL9jb zLur*(8*z&~KJUEtMDU(%nMqe8=kne_QF?9UBQeI{$``eDj2KjvI5~_lqH2L<{9 literal 0 HcmV?d00001 diff --git a/textures/default_tree_top.png b/textures/default_tree_top.png new file mode 100644 index 0000000000000000000000000000000000000000..6d620069402c138da424cc7fec497a7510f04a15 GIT binary patch literal 843 zcmV-R1GM~!P)}7fL2@p6<2^n&jnB;N-l+hhK2@- zE>eWp0wHC!DD09=v`ZYv|2{Kwe&$ekSBSU$^nS&w=MkTMdK{K3OCwg)0*rAOSCc3S zK%OXGN58rOBucW=ZlG)x`24*?&Yn;Bcqe1nZ{p*WgZ(agUgCvkJl6bvaYG1#(YoZ~ zc0r?=GFg_WTEJXezWeea{ZAfX*9E?qBjS`OZ&Eu)9H)Gt5@ePWcaL~>`ZHgB^F1{I z1<=$Ldk^15-%VIvUy<(gpj_jxULaJ2%5!v-62&Q5DS7MtceuabG`rA2nH6`EQrM)*GNfKPC`RBJ^SlwJ;=eJnBMhJm7YrL@>4z>W0m9gL) zdTF@1oKh{Ps7z5#uBpA_=J6ktdO>Y80NxbTuEuBS<^jOvcuAunxi@H&q&fO_f|Qc1 z*J1bY5G4~34ZPiyLv4|E1DUcuaJQ}yGQyPx?<{q>z*jkLYA9zV#bnOlgA;0 zE(==2K6bfg_T(wiR-2^NLc|fW1~XgG8t&43b05{|Fd8q|&J&`;VfWkdtR!AlJUD3K zttIJpNLno-C5e=K!_s7W6kOFJERwz4R+cM07k2lN51CK%m1`Zl>DF0vsd)JR(+@4;9pZp VZni8G05t#r002ovPDHLkV1nIldmaD) literal 0 HcmV?d00001 diff --git a/textures/default_water.png b/textures/default_water.png new file mode 100644 index 0000000000000000000000000000000000000000..fe652a94cf1091469a130bd0d9f9abd4b2c00560 GIT binary patch literal 710 zcmV;%0y+JOP)GBl9M^`HO%0#ivu zK~y-)J(JCH+g1#PKj7l>N0Oy9YVENnebPQjAFa!D#z`!vku8fNMe+h&&`)Zr2KB zMskfd8-C7nSJ=10{jO%19mzGe%1ReC08u8?Dw2Y#@@bd&?-F#j=wpB3TMv?J?zfqo z5_VGy-7teYR@FS*C`kgX8or)`eJgZ>fji8@yV1xu{eUIKOyO=@|2p&EK~0HKI(M&IL(^=89(3 z647w&d%_E^eR+>~r5}{rT?6Y4hZn`}f8XKm96De46RZq8g#CVl2OPVR>o_h10uFDA zq|C#9gB?1@-Fet1{@f{_k27D7J)())8lEpfxlUwLyaXOWTsx>Y6j#iz7b1c$rxHf9P{!MV-NGltSu?8h-m~-wr%FnITllocJTW0yimw1l4bVm zgi6bG4vudYn6mOY|aX8P!yf|SEzil!q!Hy=`HI>4`AOHXW07*qoM6N<$f~!O^X#fBK literal 0 HcmV?d00001 diff --git a/textures/default_water_flowing_animated.png b/textures/default_water_flowing_animated.png new file mode 100644 index 0000000000000000000000000000000000000000..ac35b2acb0d71a07fbf4add80566cdd7c7017c5b GIT binary patch literal 5972 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 literal 0 HcmV?d00001 diff --git a/textures/default_water_source_animated.png b/textures/default_water_source_animated.png new file mode 100644 index 0000000000000000000000000000000000000000..26de7baaec5224e62128ab1096ea2ffdb1bbba2d GIT binary patch literal 5170 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 Js&WX3{a>lCNLv5^ literal 0 HcmV?d00001 diff --git a/textures/default_wood.png b/textures/default_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..66f2b7228161d6681ab3da2e94a7c2931475d3de GIT binary patch literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sBugD~Uq{1qucLG}_)Usv`!%rbmN;uESQ_5)2}_H=O!(Kufk zWSh<8C{Wuz+3DzNem<730|_z*Ff>8EDPVddq?jc zV$pGHPc5&#`sUp1esklKze@Y0&(;5DkXxZ{)?6Q4&eK9$| z_Tt}z9=npJ{t<4n3A(Jg&~KB8&;cjropvcZO4dYsp4_xZfUounSHMFz<~i#a`(0ms z+g$yB<*7Gu6HI6AuwNN5H8N!Nnn{bgQk(M%E^B6+ob9sNm9Wfgu2s#pn$|rHM{M6~ e+?mZ@z$o;%?DXGEPj_GlF?hQAxvX4nJ z@ErkR#;MwT(m=s$o-U3d7QJUL+4?aX3bZ{u&cS(V$)cxh1tNJ2vYID(cQC4!aH^jO zTKbe@Cu4}mN{-MK5?p%@>fBq>5-wHw=HmCtKZoNdpE}8Fc;YA5EbMrlR z)&5IMHc%_&&C=QMMmtW>f9mdxWZyGgpTlPg%G7H&NKVA726BgIKuyzdyDTDz{; zB>KqJ^gYUZ#hciDs^yk^m-q2xce$nXPrimpG%Q=}%J~&KKp!%Ay85}Sb4q9e0D|Ik A#{d8T literal 0 HcmV?d00001 diff --git a/textures/player.png b/textures/player.png new file mode 100644 index 0000000000000000000000000000000000000000..90adf97476ecd3442dcd435201658ebfaef9d7ab GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3Qk(@Ik;M!Qd`Cc-ajG_-G*Gb3 z)5S5wqx0?5i+l|V9IpE7_@AGDxzu!df$HkDQ8{*;>|eN;w$D1Wz~EWXr3D9`1Wfq$ z&#qzWU56#N7Nqwkq*_%tm@SBGRNBZj>-5yg6K^<`3x}Rrz2T&0@IlchUu6F@@H5Tn zyd3$sIM6uN==W8L_s1*>{C}8;#&JsYo3w7oKPR7gZ#Rd6_U;#|MxT$kz5%+3!PC{x JWt~$(698}dQLF#} literal 0 HcmV?d00001 diff --git a/textures/player_back.png b/textures/player_back.png new file mode 100644 index 0000000000000000000000000000000000000000..530aa7519b95a650ce4fea2612b2dced58becdbc GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3Qk(@Ik;M!Qd`Cc-ajG_-G*GbG z)5S5wqx0?5yL=4_9IgE4*q@($xy+Q?CCN0mJK9pdzU#p1V*&<8iZv4hj=z}Jv2{Q1 zhfDh$R#+Bfzdh&`wZ_O|@?q5@%O2dQaj4^}*4I$YQ}|r{f%zJ7 x;mg(Eu-fW+wwqS6JGO6UQ3g7L!PC{xWt~$(698t?OI!c| literal 0 HcmV?d00001 diff --git a/textures/treeprop.png b/textures/treeprop.png new file mode 100644 index 0000000000000000000000000000000000000000..72e831b3cd10514fa56ae5895ffcfe5b8afa32fe GIT binary patch literal 483 zcmV<90UZ8`P)Px#24YJ`L;x-TA^;XhuMNcj000SaNLh0L01m_e01m_fl`9S#00007bV*G`2iyh( z6%PSJcv-;!00Co3L_t(o!|hZ}O9D|8J=do*^PWwVMFf3di&j!Wfg4-2@9(v&pU|?k zixz>`b7$_kXYM>eLqkJDLqp@ggT{%S^tKEt ze99FmO#iBxqz4)Zd+4VT`Snlmo74Y^1hj#<7!Zy-y@8c0_(0FX*ro^ZpX|7ZXJ002ovPDHLkV1oQ($c+F1 literal 0 HcmV?d00001 diff --git a/textures/wieldhand.png b/textures/wieldhand.png new file mode 100644 index 0000000000000000000000000000000000000000..c4549e5ede15586602c9223d5b5e3d9ca92b88f4 GIT binary patch literal 384 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^J5B z%x1`EtPMN^6yYrJh%9Dc;5!1sj8nDwq=AC$C7!;n?6-NCc)1n0r*TdLn!@1e;uvCa zIyqs1fWf3y2M-@+K6h_pGCQ;I%2}sRpAO_nR0{okv|HTsJJYUbvesn=Z*FX4-p*L8 z{WtK3R~~DGX|m}8m0R!Z&74i2vPg!{|KGW2W+M==`WiC>LG#*9wq^!?^_V}0r@!ZE zKY!=P{^a9|Jlq$VKki@OtO$}i+^&EBVUxk(4LkYr4t$%ZA;Os=ZU6*7tR#|n6Vzrr z+xvX}gI=KELWvD~)w>*>yu@4;cRk{d-q548c4rXYqq#X RH86M>JYD@<);T3K0RXO_i`)PJ literal 0 HcmV?d00001 diff --git a/util.py b/util.py new file mode 100644 index 0000000..4b3d976 --- /dev/null +++ b/util.py @@ -0,0 +1,14 @@ +def readU8(f): + return ord(f.read(1)) + + +def readU16(f): + return ord(f.read(1)) * 256 + ord(f.read(1)) + + +def readU32(f): + return ord(f.read(1)) * 256 * 256 * 256 + ord(f.read(1)) * 256 * 256 + ord(f.read(1)) * 256 + ord(f.read(1)) + + +def readS32(f): + return unsignedToSigned(ord(f.read(1)) * 256 * 256 * 256 + ord(f.read(1)) * 256 * 256 + ord(f.read(1)) * 256 + ord(f.read(1)), 2 ** 31)