diff options
author | Ricardo Wurmus <rekado@elephly.net> | 2021-03-01 00:08:40 +0100 |
---|---|---|
committer | Ricardo Wurmus <rekado@elephly.net> | 2021-03-09 11:40:28 +0100 |
commit | bc2ecb951a837db673b13def15f2c31f7134415a (patch) | |
tree | 6a27f6aefe9660ec73d6b6747e45a3c1178c530b |
WIP
67 files changed, 5507 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..40685ea --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +*.go +config.scm +configure +config.log +config.status +Makefile.in +Makefile +autom4te.cache/ +pre-inst-env +scripts/inevitable + @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + 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. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + 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 <http://www.gnu.org/licenses/>. + +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: + + <program> Copyright (C) <year> <name of author> + 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 +<http://www.gnu.org/licenses/>. + + 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 +<http://www.gnu.org/philosophy/why-not-lgpl.html>. diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..3894e59 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,80 @@ +## Chickadee Game Toolkit +## Copyright © 2017 David Thompson <davet@gnu.org> +## +## Chickadee 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. +## +## Chickadee 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 +## <http://www.gnu.org/licenses/>. + +GOBJECTS = $(SOURCES:%.scm=%.go) + +nobase_mod_DATA = $(SOURCES) $(NOCOMP_SOURCES) +nobase_go_DATA = $(GOBJECTS) + +# Make sure source files are installed first, so that the mtime of +# installed compiled files is greater than that of installed source +# files. See +# <http://lists.gnu.org/archive/html/guile-devel/2010-07/msg00125.html> +# for details. +guile_install_go_files = install-nobase_goDATA +$(guile_install_go_files): install-nobase_modDATA + +CLEANFILES = $(GOBJECTS) +EXTRA_DIST = $(SOURCES) $(NOCOMP_SOURCES) +GUILE_WARNINGS = -Wunbound-variable -Warity-mismatch -Wformat +SUFFIXES = .scm .go +.scm.go: + $(AM_V_GEN)$(top_builddir)/pre-inst-env $(GUILE_TOOLS) compile $(GUILE_WARNINGS) -o "$@" "$<" + +moddir=$(prefix)/share/guile/site/$(GUILE_EFFECTIVE_VERSION) +godir=$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/site-ccache + +bin_SCRIPTS = \ + scripts/inevitable + +SOURCES = \ + config.scm \ + utils.scm \ + engine/inotify.scm \ + engine/assets.scm \ + characters/lorenzo.scm \ + characters/reaper.scm \ + scenes/intro.scm \ + scenes/game.scm \ + scenes/death.scm + +ASSETS = \ + assets/music/intro.ogg \ + assets/music/death.ogg \ + assets/music/README \ + assets/sounds/error.ogg \ + assets/sounds/birds.ogg \ + assets/sounds/README \ + assets/images/gfx/Inner.png \ + assets/images/gfx/Overworld.png \ + assets/images/gfx/cave.png \ + assets/images/lorenzo.png \ + assets/images/Food Pack.png \ + assets/images/reaper.png \ + assets/images/intro-bg.png \ + assets/images/vignette.png \ + assets/images/README \ + assets/maps/inner.tsx \ + assets/maps/cave.tsx \ + assets/maps/death.tmx \ + assets/maps/01.tmx \ + assets/fonts/AUTHORS \ + assets/fonts/good_neighbors_starling.xml \ + assets/fonts/good_neighbors_starling.png + +EXTRA_DIST += \ + COPYING diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..65028ab --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,1375 @@ +# generated automatically by aclocal 1.16.2 -*- Autoconf -*- + +# Copyright (C) 1996-2020 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) + + +# serial 10 + + + + +# GUILE_PKG -- find Guile development files +# +# Usage: GUILE_PKG([VERSIONS]) +# +# This macro runs the @code{pkg-config} tool to find development files +# for an available version of Guile. +# +# By default, this macro will search for the latest stable version of +# Guile (e.g. 3.0), falling back to the previous stable version +# (e.g. 2.2) if it is available. If no guile-@var{VERSION}.pc file is +# found, an error is signalled. The found version is stored in +# @var{GUILE_EFFECTIVE_VERSION}. +# +# If @code{GUILE_PROGS} was already invoked, this macro ensures that the +# development files have the same effective version as the Guile +# program. +# +# @var{GUILE_EFFECTIVE_VERSION} is marked for substitution, as by +# @code{AC_SUBST}. +# +AC_DEFUN([GUILE_PKG], + [PKG_PROG_PKG_CONFIG + _guile_versions_to_search="m4_default([$1], [3.0 2.2 2.0])" + if test -n "$GUILE_EFFECTIVE_VERSION"; then + _guile_tmp="" + for v in $_guile_versions_to_search; do + if test "$v" = "$GUILE_EFFECTIVE_VERSION"; then + _guile_tmp=$v + fi + done + if test -z "$_guile_tmp"; then + AC_MSG_FAILURE([searching for guile development files for versions $_guile_versions_to_search, but previously found $GUILE version $GUILE_EFFECTIVE_VERSION]) + fi + _guile_versions_to_search=$GUILE_EFFECTIVE_VERSION + fi + GUILE_EFFECTIVE_VERSION="" + _guile_errors="" + for v in $_guile_versions_to_search; do + if test -z "$GUILE_EFFECTIVE_VERSION"; then + AC_MSG_NOTICE([checking for guile $v]) + PKG_CHECK_EXISTS([guile-$v], [GUILE_EFFECTIVE_VERSION=$v], []) + fi + done + + if test -z "$GUILE_EFFECTIVE_VERSION"; then + AC_MSG_ERROR([ +No Guile development packages were found. + +Please verify that you have Guile installed. If you installed Guile +from a binary distribution, please verify that you have also installed +the development packages. If you installed it yourself, you might need +to adjust your PKG_CONFIG_PATH; see the pkg-config man page for more. +]) + fi + AC_MSG_NOTICE([found guile $GUILE_EFFECTIVE_VERSION]) + AC_SUBST([GUILE_EFFECTIVE_VERSION]) + ]) + +# GUILE_FLAGS -- set flags for compiling and linking with Guile +# +# Usage: GUILE_FLAGS +# +# This macro runs the @code{pkg-config} tool to find out how to compile +# and link programs against Guile. It sets four variables: +# @var{GUILE_CFLAGS}, @var{GUILE_LDFLAGS}, @var{GUILE_LIBS}, and +# @var{GUILE_LTLIBS}. +# +# @var{GUILE_CFLAGS}: flags to pass to a C or C++ compiler to build code that +# uses Guile header files. This is almost always just one or more @code{-I} +# flags. +# +# @var{GUILE_LDFLAGS}: flags to pass to the compiler to link a program +# against Guile. This includes @code{-lguile-@var{VERSION}} for the +# Guile library itself, and may also include one or more @code{-L} flag +# to tell the compiler where to find the libraries. But it does not +# include flags that influence the program's runtime search path for +# libraries, and will therefore lead to a program that fails to start, +# unless all necessary libraries are installed in a standard location +# such as @file{/usr/lib}. +# +# @var{GUILE_LIBS} and @var{GUILE_LTLIBS}: flags to pass to the compiler or to +# libtool, respectively, to link a program against Guile. It includes flags +# that augment the program's runtime search path for libraries, so that shared +# libraries will be found at the location where they were during linking, even +# in non-standard locations. @var{GUILE_LIBS} is to be used when linking the +# program directly with the compiler, whereas @var{GUILE_LTLIBS} is to be used +# when linking the program is done through libtool. +# +# The variables are marked for substitution, as by @code{AC_SUBST}. +# +AC_DEFUN([GUILE_FLAGS], + [AC_REQUIRE([GUILE_PKG]) + PKG_CHECK_MODULES(GUILE, [guile-$GUILE_EFFECTIVE_VERSION]) + + dnl GUILE_CFLAGS and GUILE_LIBS are already defined and AC_SUBST'd by + dnl PKG_CHECK_MODULES. But GUILE_LIBS to pkg-config is GUILE_LDFLAGS + dnl to us. + + GUILE_LDFLAGS=$GUILE_LIBS + + dnl Determine the platform dependent parameters needed to use rpath. + dnl AC_LIB_LINKFLAGS_FROM_LIBS is defined in gnulib/m4/lib-link.m4 and needs + dnl the file gnulib/build-aux/config.rpath. + AC_LIB_LINKFLAGS_FROM_LIBS([GUILE_LIBS], [$GUILE_LDFLAGS], []) + GUILE_LIBS="$GUILE_LDFLAGS $GUILE_LIBS" + AC_LIB_LINKFLAGS_FROM_LIBS([GUILE_LTLIBS], [$GUILE_LDFLAGS], [yes]) + GUILE_LTLIBS="$GUILE_LDFLAGS $GUILE_LTLIBS" + + AC_SUBST([GUILE_EFFECTIVE_VERSION]) + AC_SUBST([GUILE_CFLAGS]) + AC_SUBST([GUILE_LDFLAGS]) + AC_SUBST([GUILE_LIBS]) + AC_SUBST([GUILE_LTLIBS]) + ]) + +# GUILE_SITE_DIR -- find path to Guile site directories +# +# Usage: GUILE_SITE_DIR +# +# This looks for Guile's "site" directories. The variable @var{GUILE_SITE} will +# be set to Guile's "site" directory for Scheme source files (usually something +# like PREFIX/share/guile/site). @var{GUILE_SITE_CCACHE} will be set to the +# directory for compiled Scheme files also known as @code{.go} files +# (usually something like +# PREFIX/lib/guile/@var{GUILE_EFFECTIVE_VERSION}/site-ccache). +# @var{GUILE_EXTENSION} will be set to the directory for compiled C extensions +# (usually something like +# PREFIX/lib/guile/@var{GUILE_EFFECTIVE_VERSION}/extensions). The latter two +# are set to blank if the particular version of Guile does not support +# them. Note that this macro will run the macros @code{GUILE_PKG} and +# @code{GUILE_PROGS} if they have not already been run. +# +# The variables are marked for substitution, as by @code{AC_SUBST}. +# +AC_DEFUN([GUILE_SITE_DIR], + [AC_REQUIRE([GUILE_PKG]) + AC_REQUIRE([GUILE_PROGS]) + AC_MSG_CHECKING(for Guile site directory) + GUILE_SITE=`$PKG_CONFIG --print-errors --variable=sitedir guile-$GUILE_EFFECTIVE_VERSION` + AC_MSG_RESULT($GUILE_SITE) + if test "$GUILE_SITE" = ""; then + AC_MSG_FAILURE(sitedir not found) + fi + AC_SUBST(GUILE_SITE) + AC_MSG_CHECKING([for Guile site-ccache directory using pkgconfig]) + GUILE_SITE_CCACHE=`$PKG_CONFIG --variable=siteccachedir guile-$GUILE_EFFECTIVE_VERSION` + if test "$GUILE_SITE_CCACHE" = ""; then + AC_MSG_RESULT(no) + AC_MSG_CHECKING([for Guile site-ccache directory using interpreter]) + GUILE_SITE_CCACHE=`$GUILE -c "(display (if (defined? '%site-ccache-dir) (%site-ccache-dir) \"\"))"` + if test $? != "0" -o "$GUILE_SITE_CCACHE" = ""; then + AC_MSG_RESULT(no) + GUILE_SITE_CCACHE="" + AC_MSG_WARN([siteccachedir not found]) + fi + fi + AC_MSG_RESULT($GUILE_SITE_CCACHE) + AC_SUBST([GUILE_SITE_CCACHE]) + AC_MSG_CHECKING(for Guile extensions directory) + GUILE_EXTENSION=`$PKG_CONFIG --print-errors --variable=extensiondir guile-$GUILE_EFFECTIVE_VERSION` + AC_MSG_RESULT($GUILE_EXTENSION) + if test "$GUILE_EXTENSION" = ""; then + GUILE_EXTENSION="" + AC_MSG_WARN(extensiondir not found) + fi + AC_SUBST(GUILE_EXTENSION) + ]) + +# GUILE_PROGS -- set paths to Guile interpreter, config and tool programs +# +# Usage: GUILE_PROGS([VERSION]) +# +# This macro looks for programs @code{guile} and @code{guild}, setting +# variables @var{GUILE} and @var{GUILD} to their paths, respectively. +# The macro will attempt to find @code{guile} with the suffix of +# @code{-X.Y}, followed by looking for it with the suffix @code{X.Y}, and +# then fall back to looking for @code{guile} with no suffix. If +# @code{guile} is still not found, signal an error. The suffix, if any, +# that was required to find @code{guile} will be used for @code{guild} +# as well. +# +# By default, this macro will search for the latest stable version of +# Guile (e.g. 3.0). x.y or x.y.z versions can be specified. If an older +# version is found, the macro will signal an error. +# +# The effective version of the found @code{guile} is set to +# @var{GUILE_EFFECTIVE_VERSION}. This macro ensures that the effective +# version is compatible with the result of a previous invocation of +# @code{GUILE_FLAGS}, if any. +# +# As a legacy interface, it also looks for @code{guile-config} and +# @code{guile-tools}, setting @var{GUILE_CONFIG} and @var{GUILE_TOOLS}. +# +# The variables are marked for substitution, as by @code{AC_SUBST}. +# +AC_DEFUN([GUILE_PROGS], + [_guile_required_version="m4_default([$1], [$GUILE_EFFECTIVE_VERSION])" + if test -z "$_guile_required_version"; then + _guile_required_version=3.0 + fi + + _guile_candidates=guile + _tmp= + for v in `echo "$_guile_required_version" | tr . ' '`; do + if test -n "$_tmp"; then _tmp=$_tmp.; fi + _tmp=$_tmp$v + _guile_candidates="guile-$_tmp guile$_tmp $_guile_candidates" + done + + AC_PATH_PROGS(GUILE,[$_guile_candidates]) + if test -z "$GUILE"; then + AC_MSG_ERROR([guile required but not found]) + fi + + _guile_suffix=`echo "$GUILE" | sed -e 's,^.*/guile\(.*\)$,\1,'` + _guile_effective_version=`$GUILE -c "(display (effective-version))"` + if test -z "$GUILE_EFFECTIVE_VERSION"; then + GUILE_EFFECTIVE_VERSION=$_guile_effective_version + elif test "$GUILE_EFFECTIVE_VERSION" != "$_guile_effective_version"; then + AC_MSG_ERROR([found development files for Guile $GUILE_EFFECTIVE_VERSION, but $GUILE has effective version $_guile_effective_version]) + fi + + _guile_major_version=`$GUILE -c "(display (major-version))"` + _guile_minor_version=`$GUILE -c "(display (minor-version))"` + _guile_micro_version=`$GUILE -c "(display (micro-version))"` + _guile_prog_version="$_guile_major_version.$_guile_minor_version.$_guile_micro_version" + + AC_MSG_CHECKING([for Guile version >= $_guile_required_version]) + _major_version=`echo $_guile_required_version | cut -d . -f 1` + _minor_version=`echo $_guile_required_version | cut -d . -f 2` + _micro_version=`echo $_guile_required_version | cut -d . -f 3` + if test "$_guile_major_version" -gt "$_major_version"; then + true + elif test "$_guile_major_version" -eq "$_major_version"; then + if test "$_guile_minor_version" -gt "$_minor_version"; then + true + elif test "$_guile_minor_version" -eq "$_minor_version"; then + if test -n "$_micro_version"; then + if test "$_guile_micro_version" -lt "$_micro_version"; then + AC_MSG_ERROR([Guile $_guile_required_version required, but $_guile_prog_version found]) + fi + fi + elif test "$GUILE_EFFECTIVE_VERSION" = "$_major_version.$_minor_version" -a -z "$_micro_version"; then + # Allow prereleases that have the right effective version. + true + else + as_fn_error $? "Guile $_guile_required_version required, but $_guile_prog_version found" "$LINENO" 5 + fi + elif test "$GUILE_EFFECTIVE_VERSION" = "$_major_version.$_minor_version" -a -z "$_micro_version"; then + # Allow prereleases that have the right effective version. + true + else + AC_MSG_ERROR([Guile $_guile_required_version required, but $_guile_prog_version found]) + fi + AC_MSG_RESULT([$_guile_prog_version]) + + AC_PATH_PROG(GUILD,[guild$_guile_suffix]) + AC_SUBST(GUILD) + + AC_PATH_PROG(GUILE_CONFIG,[guile-config$_guile_suffix]) + AC_SUBST(GUILE_CONFIG) + if test -n "$GUILD"; then + GUILE_TOOLS=$GUILD + else + AC_PATH_PROG(GUILE_TOOLS,[guile-tools$_guile_suffix]) + fi + AC_SUBST(GUILE_TOOLS) + ]) + +# GUILE_CHECK -- evaluate Guile Scheme code and capture the return value +# +# Usage: GUILE_CHECK_RETVAL(var,check) +# +# @var{var} is a shell variable name to be set to the return value. +# @var{check} is a Guile Scheme expression, evaluated with "$GUILE -c", and +# returning either 0 or non-#f to indicate the check passed. +# Non-0 number or #f indicates failure. +# Avoid using the character "#" since that confuses autoconf. +# +AC_DEFUN([GUILE_CHECK], + [AC_REQUIRE([GUILE_PROGS]) + $GUILE -c "$2" > /dev/null 2>&1 + $1=$? + ]) + +# GUILE_MODULE_CHECK -- check feature of a Guile Scheme module +# +# Usage: GUILE_MODULE_CHECK(var,module,featuretest,description) +# +# @var{var} is a shell variable name to be set to "yes" or "no". +# @var{module} is a list of symbols, like: (ice-9 common-list). +# @var{featuretest} is an expression acceptable to GUILE_CHECK, q.v. +# @var{description} is a present-tense verb phrase (passed to AC_MSG_CHECKING). +# +AC_DEFUN([GUILE_MODULE_CHECK], + [AC_MSG_CHECKING([if $2 $4]) + GUILE_CHECK($1,(use-modules $2) (exit ((lambda () $3)))) + if test "$$1" = "0" ; then $1=yes ; else $1=no ; fi + AC_MSG_RESULT($$1) + ]) + +# GUILE_MODULE_AVAILABLE -- check availability of a Guile Scheme module +# +# Usage: GUILE_MODULE_AVAILABLE(var,module) +# +# @var{var} is a shell variable name to be set to "yes" or "no". +# @var{module} is a list of symbols, like: (ice-9 common-list). +# +AC_DEFUN([GUILE_MODULE_AVAILABLE], + [GUILE_MODULE_CHECK($1,$2,0,is available) + ]) + +# GUILE_MODULE_REQUIRED -- fail if a Guile Scheme module is unavailable +# +# Usage: GUILE_MODULE_REQUIRED(symlist) +# +# @var{symlist} is a list of symbols, WITHOUT surrounding parens, +# like: ice-9 common-list. +# +AC_DEFUN([GUILE_MODULE_REQUIRED], + [GUILE_MODULE_AVAILABLE(ac_guile_module_required, ($1)) + if test "$ac_guile_module_required" = "no" ; then + AC_MSG_ERROR([required guile module not found: ($1)]) + fi + ]) + +# GUILE_MODULE_EXPORTS -- check if a module exports a variable +# +# Usage: GUILE_MODULE_EXPORTS(var,module,modvar) +# +# @var{var} is a shell variable to be set to "yes" or "no". +# @var{module} is a list of symbols, like: (ice-9 common-list). +# @var{modvar} is the Guile Scheme variable to check. +# +AC_DEFUN([GUILE_MODULE_EXPORTS], + [GUILE_MODULE_CHECK($1,$2,$3,exports `$3') + ]) + +# GUILE_MODULE_REQUIRED_EXPORT -- fail if a module doesn't export a variable +# +# Usage: GUILE_MODULE_REQUIRED_EXPORT(module,modvar) +# +# @var{module} is a list of symbols, like: (ice-9 common-list). +# @var{modvar} is the Guile Scheme variable to check. +# +AC_DEFUN([GUILE_MODULE_REQUIRED_EXPORT], + [GUILE_MODULE_EXPORTS(guile_module_required_export,$1,$2) + if test "$guile_module_required_export" = "no" ; then + AC_MSG_ERROR([module $1 does not export $2; required]) + fi + ]) + + +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# serial 12 (pkg-config-0.29.2) + +dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>. +dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com> +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program; if not, write to the Free Software +dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +dnl 02111-1307, USA. +dnl +dnl As a special exception to the GNU General Public License, if you +dnl distribute this file as part of a program that contains a +dnl configuration script generated by Autoconf, you may include it under +dnl the same distribution terms that you use for the rest of that +dnl program. + +dnl PKG_PREREQ(MIN-VERSION) +dnl ----------------------- +dnl Since: 0.29 +dnl +dnl Verify that the version of the pkg-config macros are at least +dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's +dnl installed version of pkg-config, this checks the developer's version +dnl of pkg.m4 when generating configure. +dnl +dnl To ensure that this macro is defined, also add: +dnl m4_ifndef([PKG_PREREQ], +dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) +dnl +dnl See the "Since" comment for each macro you use to see what version +dnl of the macros you require. +m4_defun([PKG_PREREQ], +[m4_define([PKG_MACROS_VERSION], [0.29.2]) +m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, + [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) +])dnl PKG_PREREQ + +dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) +dnl ---------------------------------- +dnl Since: 0.16 +dnl +dnl Search for the pkg-config tool and set the PKG_CONFIG variable to +dnl first found in the path. Checks that the version of pkg-config found +dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is +dnl used since that's the first version where most current features of +dnl pkg-config existed. +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) +m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) +AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) +AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi +fi[]dnl +])dnl PKG_PROG_PKG_CONFIG + +dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------------------------------- +dnl Since: 0.18 +dnl +dnl Check to see whether a particular set of modules exists. Similar to +dnl PKG_CHECK_MODULES(), but does not set variables or print errors. +dnl +dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +dnl only at the first occurence in configure.ac, so if the first place +dnl it's called might be skipped (such as if it is within an "if", you +dnl have to call PKG_CHECK_EXISTS manually +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_default([$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + +dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +dnl --------------------------------------------- +dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting +dnl pkg_failed based on the result. +m4_define([_PKG_CONFIG], +[if test -n "$$1"; then + pkg_cv_[]$1="$$1" + elif test -n "$PKG_CONFIG"; then + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes ], + [pkg_failed=yes]) + else + pkg_failed=untried +fi[]dnl +])dnl _PKG_CONFIG + +dnl _PKG_SHORT_ERRORS_SUPPORTED +dnl --------------------------- +dnl Internal check to see if pkg-config supports short errors. +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])dnl _PKG_SHORT_ERRORS_SUPPORTED + + +dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl -------------------------------------------------------------- +dnl Since: 0.4.0 +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES might not happen, you should be sure to include an +dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $2]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + AC_MSG_RESULT([no]) + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + m4_default([$4], [AC_MSG_ERROR( +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT])[]dnl + ]) +elif test $pkg_failed = untried; then + AC_MSG_RESULT([no]) + m4_default([$4], [AC_MSG_FAILURE( +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl + ]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + $3 +fi[]dnl +])dnl PKG_CHECK_MODULES + + +dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl --------------------------------------------------------------------- +dnl Since: 0.29 +dnl +dnl Checks for existence of MODULES and gathers its build flags with +dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags +dnl and VARIABLE-PREFIX_LIBS from --libs. +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to +dnl include an explicit call to PKG_PROG_PKG_CONFIG in your +dnl configure.ac. +AC_DEFUN([PKG_CHECK_MODULES_STATIC], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +_save_PKG_CONFIG=$PKG_CONFIG +PKG_CONFIG="$PKG_CONFIG --static" +PKG_CHECK_MODULES($@) +PKG_CONFIG=$_save_PKG_CONFIG[]dnl +])dnl PKG_CHECK_MODULES_STATIC + + +dnl PKG_INSTALLDIR([DIRECTORY]) +dnl ------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable pkgconfigdir as the location where a module +dnl should install pkg-config .pc files. By default the directory is +dnl $libdir/pkgconfig, but the default can be changed by passing +dnl DIRECTORY. The user can override through the --with-pkgconfigdir +dnl parameter. +AC_DEFUN([PKG_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([pkgconfigdir], + [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, + [with_pkgconfigdir=]pkg_default) +AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +])dnl PKG_INSTALLDIR + + +dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) +dnl -------------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable noarch_pkgconfigdir as the location where a +dnl module should install arch-independent pkg-config .pc files. By +dnl default the directory is $datadir/pkgconfig, but the default can be +dnl changed by passing DIRECTORY. The user can override through the +dnl --with-noarch-pkgconfigdir parameter. +AC_DEFUN([PKG_NOARCH_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([noarch-pkgconfigdir], + [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, + [with_noarch_pkgconfigdir=]pkg_default) +AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +])dnl PKG_NOARCH_INSTALLDIR + + +dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, +dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------- +dnl Since: 0.28 +dnl +dnl Retrieves the value of the pkg-config variable for the given module. +AC_DEFUN([PKG_CHECK_VAR], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl + +_PKG_CONFIG([$1], [variable="][$3]["], [$2]) +AS_VAR_COPY([$1], [pkg_cv_][$1]) + +AS_VAR_IF([$1], [""], [$5], [$4])dnl +])dnl PKG_CHECK_VAR + +# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.16' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.16.2], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.16.2])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is '.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. +m4_define([AC_PROG_CC], +m4_defn([AC_PROG_CC]) +[_AM_PROG_CC_C_O +]) + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.65])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> +# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl +]) +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542> + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: <https://www.gnu.org/software/coreutils/>. + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) + fi +fi +dnl The trailing newline in this macro's definition is deliberate, for +dnl backward compatibility and to allow trailing 'dnl'-style comments +dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. +]) + +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) + +# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + AC_MSG_WARN(['missing' script is too old or missing]) +fi +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) + +# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor 'install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in "make install-strip", and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +# +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' + +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], + + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar <conftest.tar]) + AM_RUN_LOG([cat conftest.dir/file]) + grep GrepMe conftest.dir/file >/dev/null 2>&1 && break + fi + done + rm -rf conftest.dir + + AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) + AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + diff --git a/assets/fonts/AUTHORS b/assets/fonts/AUTHORS new file mode 100644 index 0000000..13a3415 --- /dev/null +++ b/assets/fonts/AUTHORS @@ -0,0 +1,5 @@ +-*- org -*- + +* good_neighbors_starling.png, good_neighbors_starling.xml + By PROWNE and Clint Bellanger, CC0 + http://opengameart.org/content/good-neighbors-pixel-font-starlingunity-version-updated diff --git a/assets/fonts/good_neighbors_starling.png b/assets/fonts/good_neighbors_starling.png Binary files differnew file mode 100644 index 0000000..74197a6 --- /dev/null +++ b/assets/fonts/good_neighbors_starling.png diff --git a/assets/fonts/good_neighbors_starling.xml b/assets/fonts/good_neighbors_starling.xml new file mode 100644 index 0000000..0a7afde --- /dev/null +++ b/assets/fonts/good_neighbors_starling.xml @@ -0,0 +1,244 @@ +<font>
+ <info face="GoodNeighbors" size="16" />
+ <common lineHeight="16" scaleW="167" scaleH="168" pages="1" />
+ <pages>
+ <page id="0" file="good_neighbors_starling.png" />
+ </pages>
+ <chars count="233">
+ <char id="33" x="153" y="26" width="6" height="12" xoffset="0" yoffset="4" xadvance="5" /><!-- ! -->
+ <char id="34" x="82" y="32" width="7" height="7" xoffset="0" yoffset="4" xadvance="6" /><!-- " -->
+ <char id="35" x="24" y="77" width="10" height="10" xoffset="0" yoffset="5" xadvance="9" /><!-- # -->
+ <char id="36" x="24" y="88" width="10" height="14" xoffset="0" yoffset="3" xadvance="9" /><!-- $ -->
+ <char id="37" x="12" y="124" width="11" height="12" xoffset="0" yoffset="4" xadvance="10" /><!-- % -->
+ <char id="38" x="0" y="146" width="11" height="12" xoffset="0" yoffset="4" xadvance="10" /><!-- & -->
+ <char id="39" x="45" y="136" width="4" height="7" xoffset="0" yoffset="4" xadvance="3" /><!-- ' -->
+ <char id="40" x="160" y="26" width="6" height="14" xoffset="0" yoffset="3" xadvance="5" /><!-- ( -->
+ <char id="41" x="160" y="41" width="6" height="14" xoffset="0" yoffset="3" xadvance="5" /><!-- ) -->
+ <char id="42" x="24" y="126" width="10" height="11" xoffset="0" yoffset="3" xadvance="9" /><!-- * -->
+ <char id="43" x="126" y="156" width="8" height="9" xoffset="0" yoffset="6" xadvance="7" /><!-- + -->
+ <char id="44" x="135" y="160" width="4" height="7" xoffset="0" yoffset="11" xadvance="3" /><!-- , -->
+ <char id="45" x="0" y="160" width="9" height="5" xoffset="0" yoffset="8" xadvance="8" /><!-- - -->
+ <char id="46" x="43" y="161" width="4" height="5" xoffset="0" yoffset="11" xadvance="3" /><!-- . -->
+ <char id="47" x="144" y="13" width="8" height="14" xoffset="0" yoffset="3" xadvance="7" /><!-- / -->
+ <char id="48" x="136" y="0" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- 0 -->
+ <char id="49" x="160" y="13" width="6" height="12" xoffset="0" yoffset="4" xadvance="5" /><!-- 1 -->
+ <char id="50" x="144" y="54" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- 2 -->
+ <char id="51" x="144" y="80" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- 3 -->
+ <char id="52" x="45" y="26" width="9" height="12" xoffset="0" yoffset="4" xadvance="8" /><!-- 4 -->
+ <char id="53" x="135" y="78" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- 5 -->
+ <char id="54" x="144" y="28" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- 6 -->
+ <char id="55" x="144" y="41" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- 7 -->
+ <char id="56" x="144" y="93" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- 8 -->
+ <char id="57" x="144" y="132" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- 9 -->
+ <char id="58" x="160" y="158" width="4" height="8" xoffset="0" yoffset="7" xadvance="3" /><!-- : -->
+ <char id="59" x="161" y="0" width="4" height="10" xoffset="0" yoffset="8" xadvance="3" /><!-- ; -->
+ <char id="60" x="44" y="145" width="9" height="14" xoffset="0" yoffset="3" xadvance="8" /><!-- < -->
+ <char id="61" x="117" y="159" width="7" height="8" xoffset="0" yoffset="7" xadvance="6" /><!-- = -->
+ <char id="62" x="35" y="81" width="9" height="14" xoffset="0" yoffset="3" xadvance="8" /><!-- > -->
+ <char id="63" x="126" y="89" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- ? -->
+ <char id="64" x="13" y="86" width="10" height="12" xoffset="0" yoffset="4" xadvance="9" /><!-- @ -->
+ <char id="65" x="144" y="119" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- A -->
+ <char id="66" x="144" y="106" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- B -->
+ <char id="67" x="144" y="67" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- C -->
+ <char id="68" x="36" y="0" width="9" height="12" xoffset="0" yoffset="4" xadvance="8" /><!-- D -->
+ <char id="69" x="135" y="13" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- E -->
+ <char id="70" x="127" y="0" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- F -->
+ <char id="71" x="126" y="117" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- G -->
+ <char id="72" x="135" y="130" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- H -->
+ <char id="73" x="153" y="67" width="6" height="12" xoffset="0" yoffset="4" xadvance="5" /><!-- I -->
+ <char id="74" x="35" y="13" width="9" height="12" xoffset="0" yoffset="4" xadvance="8" /><!-- J -->
+ <char id="75" x="135" y="91" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- K -->
+ <char id="76" x="135" y="143" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- L -->
+ <char id="77" x="13" y="46" width="10" height="12" xoffset="0" yoffset="4" xadvance="9" /><!-- M -->
+ <char id="78" x="35" y="119" width="9" height="12" xoffset="0" yoffset="4" xadvance="8" /><!-- N -->
+ <char id="79" x="135" y="117" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- O -->
+ <char id="80" x="135" y="104" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- P -->
+ <char id="81" x="45" y="52" width="9" height="13" xoffset="0" yoffset="4" xadvance="8" /><!-- Q -->
+ <char id="82" x="34" y="148" width="9" height="12" xoffset="0" yoffset="4" xadvance="8" /><!-- R -->
+ <char id="83" x="135" y="65" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- S -->
+ <char id="84" x="135" y="52" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- T -->
+ <char id="85" x="135" y="39" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- U -->
+ <char id="86" x="135" y="26" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- V -->
+ <char id="87" x="24" y="113" width="10" height="12" xoffset="0" yoffset="4" xadvance="9" /><!-- W -->
+ <char id="88" x="26" y="0" width="9" height="12" xoffset="0" yoffset="4" xadvance="8" /><!-- X -->
+ <char id="89" x="126" y="143" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- Y -->
+ <char id="90" x="126" y="130" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- Z -->
+ <char id="91" x="153" y="109" width="6" height="14" xoffset="0" yoffset="3" xadvance="5" /><!-- [ -->
+ <char id="92" x="126" y="102" width="8" height="14" xoffset="0" yoffset="3" xadvance="7" /><!-- \ -->
+ <char id="93" x="153" y="39" width="6" height="14" xoffset="0" yoffset="3" xadvance="5" /><!-- ] -->
+ <char id="94" x="0" y="124" width="11" height="8" xoffset="0" yoffset="3" xadvance="10" /><!-- ^ -->
+ <char id="95" x="34" y="161" width="8" height="5" xoffset="0" yoffset="12" xadvance="7" /><!-- _ -->
+ <char id="96" x="127" y="13" width="6" height="6" xoffset="0" yoffset="4" xadvance="5" /><!-- ` -->
+ <char id="97" x="126" y="56" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- a -->
+ <char id="98" x="126" y="43" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- b -->
+ <char id="99" x="126" y="33" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- c -->
+ <char id="100" x="126" y="20" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- d -->
+ <char id="101" x="118" y="10" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- e -->
+ <char id="102" x="145" y="0" width="7" height="12" xoffset="0" yoffset="4" xadvance="6" /><!-- f -->
+ <char id="103" x="117" y="146" width="8" height="12" xoffset="0" yoffset="7" xadvance="7" /><!-- g -->
+ <char id="104" x="117" y="133" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- h -->
+ <char id="105" x="153" y="96" width="6" height="12" xoffset="0" yoffset="4" xadvance="5" /><!-- i -->
+ <char id="106" x="153" y="80" width="6" height="15" xoffset="0" yoffset="4" xadvance="5" /><!-- j -->
+ <char id="107" x="117" y="94" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- k -->
+ <char id="108" x="160" y="130" width="5" height="12" xoffset="0" yoffset="4" xadvance="4" /><!-- l -->
+ <char id="109" x="24" y="67" width="10" height="9" xoffset="0" yoffset="7" xadvance="9" /><!-- m -->
+ <char id="110" x="117" y="61" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- n -->
+ <char id="111" x="117" y="51" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- o -->
+ <char id="112" x="117" y="38" width="8" height="12" xoffset="0" yoffset="7" xadvance="7" /><!-- p -->
+ <char id="113" x="35" y="26" width="9" height="12" xoffset="0" yoffset="7" xadvance="8" /><!-- q -->
+ <char id="114" x="109" y="12" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- r -->
+ <char id="115" x="108" y="157" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- s -->
+ <char id="116" x="109" y="0" width="8" height="11" xoffset="0" yoffset="5" xadvance="7" /><!-- t -->
+ <char id="117" x="108" y="147" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- u -->
+ <char id="118" x="108" y="137" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- v -->
+ <char id="119" x="24" y="103" width="10" height="9" xoffset="0" yoffset="7" xadvance="9" /><!-- w -->
+ <char id="120" x="108" y="117" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- x -->
+ <char id="121" x="108" y="104" width="8" height="12" xoffset="0" yoffset="7" xadvance="7" /><!-- y -->
+ <char id="122" x="108" y="94" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- z -->
+ <char id="123" x="144" y="145" width="7" height="14" xoffset="0" yoffset="3" xadvance="6" /><!-- { -->
+ <char id="124" x="160" y="143" width="4" height="14" xoffset="0" yoffset="3" xadvance="3" /><!-- | -->
+ <char id="125" x="152" y="145" width="7" height="14" xoffset="0" yoffset="3" xadvance="6" /><!-- } -->
+ <char id="126" x="10" y="160" width="9" height="6" xoffset="0" yoffset="4" xadvance="8" /><!-- ~ -->
+ <char id="1040" x="108" y="39" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- А -->
+ <char id="1041" x="108" y="26" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- Б -->
+ <char id="1042" x="100" y="13" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- В -->
+ <char id="1043" x="100" y="0" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- Г -->
+ <char id="1044" x="13" y="59" width="10" height="13" xoffset="0" yoffset="4" xadvance="9" /><!-- Д -->
+ <char id="1045" x="99" y="136" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- Е -->
+ <char id="1025" x="99" y="120" width="8" height="15" xoffset="0" yoffset="1" xadvance="7" /><!-- Ё -->
+ <char id="1046" x="0" y="27" width="12" height="12" xoffset="0" yoffset="4" xadvance="11" /><!-- Ж -->
+ <char id="1047" x="99" y="94" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- З -->
+ <char id="1048" x="35" y="39" width="9" height="12" xoffset="0" yoffset="4" xadvance="8" /><!-- И -->
+ <char id="1049" x="35" y="52" width="9" height="15" xoffset="0" yoffset="1" xadvance="8" /><!-- Й -->
+ <char id="1050" x="99" y="65" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- К -->
+ <char id="1051" x="35" y="68" width="9" height="12" xoffset="0" yoffset="4" xadvance="8" /><!-- Л -->
+ <char id="1052" x="13" y="73" width="10" height="12" xoffset="0" yoffset="4" xadvance="9" /><!-- М -->
+ <char id="1053" x="99" y="26" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- Н -->
+ <char id="1054" x="91" y="13" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- О -->
+ <char id="1055" x="91" y="0" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- П -->
+ <char id="1056" x="90" y="145" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- Р -->
+ <char id="1057" x="90" y="132" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- С -->
+ <char id="1058" x="90" y="119" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- Т -->
+ <char id="1059" x="126" y="76" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- У -->
+ <char id="1060" x="0" y="14" width="12" height="12" xoffset="0" yoffset="4" xadvance="11" /><!-- Ф -->
+ <char id="1061" x="35" y="132" width="9" height="12" xoffset="0" yoffset="4" xadvance="8" /><!-- Х -->
+ <char id="1062" x="13" y="99" width="10" height="13" xoffset="0" yoffset="4" xadvance="9" /><!-- Ц -->
+ <char id="1063" x="90" y="48" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- Ч -->
+ <char id="1064" x="0" y="40" width="12" height="12" xoffset="0" yoffset="4" xadvance="11" /><!-- Ш -->
+ <char id="1065" x="0" y="0" width="14" height="13" xoffset="0" yoffset="4" xadvance="13" /><!-- Щ -->
+ <char id="1066" x="15" y="0" width="10" height="12" xoffset="0" yoffset="4" xadvance="9" /><!-- Ъ -->
+ <char id="1067" x="0" y="133" width="11" height="12" xoffset="0" yoffset="4" xadvance="10" /><!-- Ы -->
+ <char id="1068" x="81" y="128" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- Ь -->
+ <char id="1069" x="81" y="115" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- Э -->
+ <char id="1070" x="12" y="137" width="11" height="12" xoffset="0" yoffset="4" xadvance="10" /><!-- Ю -->
+ <char id="1071" x="45" y="13" width="9" height="12" xoffset="0" yoffset="4" xadvance="8" /><!-- Я -->
+ <char id="1072" x="81" y="76" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- а -->
+ <char id="1073" x="81" y="62" width="8" height="13" xoffset="0" yoffset="3" xadvance="7" /><!-- б -->
+ <char id="1074" x="81" y="52" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- в -->
+ <char id="1075" x="81" y="42" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- г -->
+ <char id="1076" x="13" y="113" width="10" height="9" xoffset="0" yoffset="7" xadvance="9" /><!-- д -->
+ <char id="1077" x="72" y="157" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- е -->
+ <char id="1105" x="73" y="16" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- ё -->
+ <char id="1078" x="24" y="24" width="10" height="9" xoffset="0" yoffset="7" xadvance="9" /><!-- ж -->
+ <char id="1079" x="72" y="147" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- з -->
+ <char id="1080" x="25" y="13" width="9" height="9" xoffset="0" yoffset="7" xadvance="8" /><!-- и -->
+ <char id="1081" x="35" y="96" width="9" height="12" xoffset="0" yoffset="4" xadvance="8" /><!-- й -->
+ <char id="1082" x="108" y="127" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- к -->
+ <char id="1083" x="35" y="109" width="9" height="9" xoffset="0" yoffset="7" xadvance="8" /><!-- л -->
+ <char id="1084" x="24" y="34" width="10" height="9" xoffset="0" yoffset="7" xadvance="9" /><!-- м -->
+ <char id="1085" x="90" y="158" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- н -->
+ <char id="1086" x="117" y="123" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- о -->
+ <char id="1087" x="117" y="84" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- п -->
+ <char id="1088" x="117" y="71" width="8" height="12" xoffset="0" yoffset="7" xadvance="7" /><!-- р -->
+ <char id="1089" x="81" y="157" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- с -->
+ <char id="1090" x="126" y="66" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- т -->
+ <char id="1091" x="63" y="142" width="8" height="12" xoffset="0" yoffset="7" xadvance="7" /><!-- у -->
+ <char id="1092" x="24" y="54" width="10" height="12" xoffset="0" yoffset="7" xadvance="9" /><!-- ф -->
+ <char id="1093" x="118" y="0" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- х -->
+ <char id="1094" x="13" y="35" width="10" height="10" xoffset="0" yoffset="7" xadvance="9" /><!-- ц -->
+ <char id="1095" x="63" y="88" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- ч -->
+ <char id="1096" x="24" y="138" width="10" height="9" xoffset="0" yoffset="7" xadvance="9" /><!-- ш -->
+ <char id="1097" x="0" y="90" width="12" height="10" xoffset="0" yoffset="7" xadvance="11" /><!-- щ -->
+ <char id="1098" x="24" y="44" width="10" height="9" xoffset="0" yoffset="7" xadvance="9" /><!-- ъ -->
+ <char id="1099" x="12" y="150" width="11" height="9" xoffset="0" yoffset="7" xadvance="10" /><!-- ы -->
+ <char id="1100" x="55" y="23" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- ь -->
+ <char id="1101" x="55" y="13" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- э -->
+ <char id="1102" x="13" y="14" width="11" height="9" xoffset="0" yoffset="7" xadvance="10" /><!-- ю -->
+ <char id="1103" x="54" y="156" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- я -->
+ <char id="1028" x="72" y="134" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- Є -->
+ <char id="1030" x="153" y="13" width="6" height="12" xoffset="0" yoffset="4" xadvance="5" /><!-- І -->
+ <char id="1031" x="54" y="111" width="8" height="15" xoffset="0" yoffset="1" xadvance="7" /><!-- Ї -->
+ <char id="1038" x="63" y="98" width="8" height="15" xoffset="0" yoffset="1" xadvance="7" /><!-- Ў -->
+ <char id="1168" x="63" y="114" width="8" height="14" xoffset="0" yoffset="2" xadvance="7" /><!-- Ґ -->
+ <char id="1108" x="55" y="33" width="8" height="9" xoffset="0" yoffset="7" xadvance="7" /><!-- є -->
+ <char id="1110" x="153" y="54" width="6" height="12" xoffset="0" yoffset="4" xadvance="5" /><!-- і -->
+ <char id="1111" x="153" y="0" width="7" height="12" xoffset="0" yoffset="4" xadvance="6" /><!-- ї -->
+ <char id="1118" x="54" y="127" width="8" height="15" xoffset="0" yoffset="4" xadvance="7" /><!-- ў -->
+ <char id="1169" x="45" y="95" width="8" height="11" xoffset="0" yoffset="5" xadvance="7" /><!-- ґ -->
+ <char id="196" x="54" y="82" width="8" height="15" xoffset="0" yoffset="1" xadvance="7" /><!-- Ä -->
+ <char id="228" x="46" y="0" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- ä -->
+ <char id="192" x="45" y="66" width="8" height="15" xoffset="0" yoffset="1" xadvance="7" /><!-- À -->
+ <char id="224" x="45" y="107" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- à -->
+ <char id="194" x="45" y="120" width="8" height="15" xoffset="0" yoffset="1" xadvance="7" /><!-- Â -->
+ <char id="226" x="45" y="82" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- â -->
+ <char id="193" x="54" y="66" width="8" height="15" xoffset="0" yoffset="1" xadvance="7" /><!-- Á -->
+ <char id="225" x="54" y="98" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- á -->
+ <char id="195" x="63" y="72" width="8" height="15" xoffset="0" yoffset="1" xadvance="7" /><!-- Ã -->
+ <char id="227" x="54" y="143" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- ã -->
+ <char id="197" x="64" y="32" width="8" height="16" xoffset="0" yoffset="0" xadvance="7" /><!-- Å -->
+ <char id="229" x="72" y="49" width="8" height="13" xoffset="0" yoffset="3" xadvance="7" /><!-- å -->
+ <char id="198" x="0" y="77" width="12" height="12" xoffset="0" yoffset="4" xadvance="11" /><!-- Æ -->
+ <char id="230" x="0" y="114" width="12" height="9" xoffset="0" yoffset="7" xadvance="11" /><!-- æ -->
+ <char id="200" x="72" y="118" width="8" height="15" xoffset="0" yoffset="1" xadvance="7" /><!-- È -->
+ <char id="232" x="63" y="155" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- è -->
+ <char id="202" x="64" y="0" width="8" height="15" xoffset="0" yoffset="1" xadvance="7" /><!-- Ê -->
+ <char id="234" x="99" y="52" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- ê -->
+ <char id="201" x="99" y="78" width="8" height="15" xoffset="0" yoffset="1" xadvance="7" /><!-- É -->
+ <char id="233" x="72" y="63" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- é -->
+ <char id="199" x="108" y="52" width="8" height="15" xoffset="0" yoffset="4" xadvance="7" /><!-- Ç -->
+ <char id="231" x="72" y="105" width="8" height="12" xoffset="0" yoffset="7" xadvance="7" /><!-- ç -->
+ <char id="286" x="55" y="43" width="8" height="15" xoffset="0" yoffset="1" xadvance="7" /><!-- Ğ -->
+ <char id="287" x="82" y="16" width="8" height="15" xoffset="0" yoffset="4" xadvance="7" /><!-- ğ -->
+ <char id="206" x="160" y="56" width="6" height="15" xoffset="0" yoffset="1" xadvance="5" /><!-- Î -->
+ <char id="238" x="160" y="104" width="6" height="12" xoffset="0" yoffset="4" xadvance="5" /><!-- î -->
+ <char id="205" x="160" y="88" width="6" height="15" xoffset="0" yoffset="1" xadvance="5" /><!-- Í -->
+ <char id="237" x="160" y="117" width="6" height="12" xoffset="0" yoffset="4" xadvance="5" /><!-- í -->
+ <char id="304" x="160" y="72" width="6" height="15" xoffset="0" yoffset="1" xadvance="5" /><!-- İ -->
+ <char id="305" x="64" y="49" width="6" height="9" xoffset="0" yoffset="7" xadvance="5" /><!-- ı -->
+ <char id="209" x="24" y="148" width="9" height="16" xoffset="0" yoffset="0" xadvance="8" /><!-- Ñ -->
+ <char id="241" x="63" y="129" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- ñ -->
+ <char id="214" x="64" y="16" width="8" height="15" xoffset="0" yoffset="1" xadvance="7" /><!-- Ö -->
+ <char id="246" x="108" y="81" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- ö -->
+ <char id="210" x="73" y="0" width="8" height="15" xoffset="0" yoffset="1" xadvance="7" /><!-- Ò -->
+ <char id="242" x="73" y="29" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- ò -->
+ <char id="212" x="82" y="0" width="8" height="15" xoffset="0" yoffset="1" xadvance="7" /><!-- Ô -->
+ <char id="244" x="90" y="61" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- ô -->
+ <char id="211" x="90" y="90" width="8" height="15" xoffset="0" yoffset="1" xadvance="7" /><!-- Ó -->
+ <char id="243" x="99" y="39" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- ó -->
+ <char id="213" x="99" y="149" width="8" height="15" xoffset="0" yoffset="1" xadvance="7" /><!-- Õ -->
+ <char id="245" x="108" y="68" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- õ -->
+ <char id="338" x="0" y="101" width="12" height="12" xoffset="0" yoffset="4" xadvance="11" /><!-- Œ -->
+ <char id="339" x="0" y="67" width="12" height="9" xoffset="0" yoffset="7" xadvance="11" /><!-- œ -->
+ <char id="216" x="0" y="53" width="12" height="13" xoffset="0" yoffset="3" xadvance="11" /><!-- Ø -->
+ <char id="248" x="13" y="24" width="10" height="10" xoffset="0" yoffset="6" xadvance="9" /><!-- ø -->
+ <char id="350" x="117" y="107" width="8" height="15" xoffset="0" yoffset="4" xadvance="7" /><!-- Ş -->
+ <char id="351" x="90" y="106" width="8" height="12" xoffset="0" yoffset="7" xadvance="7" /><!-- ş -->
+ <char id="220" x="90" y="74" width="8" height="15" xoffset="0" yoffset="1" xadvance="7" /><!-- Ü -->
+ <char id="252" x="72" y="92" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- ü -->
+ <char id="217" x="72" y="76" width="8" height="15" xoffset="0" yoffset="1" xadvance="7" /><!-- Ù -->
+ <char id="249" x="55" y="0" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- ù -->
+ <char id="219" x="81" y="86" width="8" height="15" xoffset="0" yoffset="1" xadvance="7" /><!-- Û -->
+ <char id="251" x="63" y="59" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- û -->
+ <char id="218" x="117" y="22" width="8" height="15" xoffset="0" yoffset="1" xadvance="7" /><!-- Ú -->
+ <char id="250" x="81" y="102" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- ú -->
+ <char id="376" x="81" y="141" width="8" height="15" xoffset="0" yoffset="1" xadvance="7" /><!-- Ÿ -->
+ <char id="255" x="90" y="32" width="8" height="15" xoffset="0" yoffset="4" xadvance="7" /><!-- ÿ -->
+ <char id="191" x="99" y="107" width="8" height="12" xoffset="0" yoffset="4" xadvance="7" /><!-- ¿ -->
+ <char id="161" x="153" y="124" width="6" height="12" xoffset="0" yoffset="4" xadvance="5" /><!-- ¡ -->
+ <char id="223" x="45" y="39" width="9" height="12" xoffset="0" yoffset="4" xadvance="8" /><!-- ß -->
+ <char id="32" x="0" y="0" width="0" height="0" xoffset="0" yoffset="0" xadvance="4" /><!-- -->
+ <char id="9" x="0" y="0" width="0" height="0" xoffset="0" yoffset="0" xadvance="32" /><!-- -->
+ </chars>
+ <kernings count="0">
+ </kernings>
+</font>
diff --git a/assets/images/README b/assets/images/README new file mode 100644 index 0000000..4cdf3d2 --- /dev/null +++ b/assets/images/README @@ -0,0 +1,60 @@ +* intro-bg.png + +Based on "Sky background" by Paulina Riva; licensed under CC-BY 3.0 + +* lorenzo.png + src/lorenzo.xcf +Author: Ricardo Wurmus +License: CC-BY-SA 3.0 + +Based on "Small 3/4 RPG character base" by Stephen Challener (Redshrike) +https://opengameart.org/content/small-34-rpg-character-base +under CC-BY 3.0 / CC-BY-SA 3.0 / OGA-BY 3.0 + +* reaper.png + src/reaper.xcf + +Author: Ricardo Wurmus +License: CC-BY 3.0 + +Based on "Lil Reaper Pet" by Tracy (https://opengameart.org/users/tracy). +https://opengameart.org/content/lil-grim-pet-or-npc +Original License: CC-BY 3.0 + +* Overworld.png + +Based on the "Overworld.png" file of the tile set "Zelda-like tilesets +and sprites". + +Origin: https://opengameart.org/content/zelda-like-tilesets-and-sprites +License: CC0 +Author: ArMM1998 https://opengameart.org/users/armm1998 + +* cave.png + +Based on the "cave.png" file of the tile set "Zelda-like tilesets and +sprites". + +Origin: https://opengameart.org/content/zelda-like-tilesets-and-sprites +License: CC0 +Author: ArMM1998 https://opengameart.org/users/armm1998 + +* Inner.png + +Based on the "Inner.png" file of the tile set "Zelda-like tilesets and +sprites". + +Origin: https://opengameart.org/content/zelda-like-tilesets-and-sprites +License: CC0 +Author: ArMM1998 https://opengameart.org/users/armm1998 + +* food.png + +Taken from The Humble Food Pack by The Wise Hedgehog. + +Origin: https://opengameart.org/content/the-humble-food-pack +License: CC-BY 4.0 +Author: https://opengameart.org/users/the-wise-hedgehog + +* pave_0.png +Origin: https://opengameart.org/content/pavementstone-tiles-40x40px +License: CC-BY 3.0 +Author: Daniel Cook http://lostgarden.com/ diff --git a/assets/images/fade.png b/assets/images/fade.png Binary files differnew file mode 100644 index 0000000..3381f88 --- /dev/null +++ b/assets/images/fade.png diff --git a/assets/images/food.png b/assets/images/food.png Binary files differnew file mode 100644 index 0000000..bff018c --- /dev/null +++ b/assets/images/food.png diff --git a/assets/images/gfx/Inner.png b/assets/images/gfx/Inner.png Binary files differnew file mode 100644 index 0000000..a07be97 --- /dev/null +++ b/assets/images/gfx/Inner.png diff --git a/assets/images/gfx/Overworld.png b/assets/images/gfx/Overworld.png Binary files differnew file mode 100644 index 0000000..c03c380 --- /dev/null +++ b/assets/images/gfx/Overworld.png diff --git a/assets/images/gfx/cave.png b/assets/images/gfx/cave.png Binary files differnew file mode 100644 index 0000000..1df7b3e --- /dev/null +++ b/assets/images/gfx/cave.png diff --git a/assets/images/gfx/objects.png b/assets/images/gfx/objects.png Binary files differnew file mode 100644 index 0000000..f76813f --- /dev/null +++ b/assets/images/gfx/objects.png diff --git a/assets/images/intro-bg.png b/assets/images/intro-bg.png Binary files differnew file mode 100644 index 0000000..8f15af9 --- /dev/null +++ b/assets/images/intro-bg.png diff --git a/assets/images/lorenzo.png b/assets/images/lorenzo.png Binary files differnew file mode 100644 index 0000000..4c080f8 --- /dev/null +++ b/assets/images/lorenzo.png diff --git a/assets/images/new/Cliff_tileset_0.png b/assets/images/new/Cliff_tileset_0.png Binary files differnew file mode 100644 index 0000000..6ab54c2 --- /dev/null +++ b/assets/images/new/Cliff_tileset_0.png diff --git a/assets/images/new/Extra_Unfinished4_1.png b/assets/images/new/Extra_Unfinished4_1.png Binary files differnew file mode 100644 index 0000000..962b8b8 --- /dev/null +++ b/assets/images/new/Extra_Unfinished4_1.png diff --git a/assets/images/new/graphics-tiles-waterflow.png b/assets/images/new/graphics-tiles-waterflow.png Binary files differnew file mode 100644 index 0000000..e5c5c73 --- /dev/null +++ b/assets/images/new/graphics-tiles-waterflow.png diff --git a/assets/images/new/ground_tiles.png b/assets/images/new/ground_tiles.png Binary files differnew file mode 100644 index 0000000..80ccd33 --- /dev/null +++ b/assets/images/new/ground_tiles.png diff --git a/assets/images/new/object- layer_1.png b/assets/images/new/object- layer_1.png Binary files differnew file mode 100644 index 0000000..599c476 --- /dev/null +++ b/assets/images/new/object- layer_1.png diff --git a/assets/images/new/ponypoke_0.png b/assets/images/new/ponypoke_0.png Binary files differnew file mode 100644 index 0000000..c95c0da --- /dev/null +++ b/assets/images/new/ponypoke_0.png diff --git a/assets/images/new/rpgbaseformatted.png b/assets/images/new/rpgbaseformatted.png Binary files differnew file mode 100644 index 0000000..58d56cf --- /dev/null +++ b/assets/images/new/rpgbaseformatted.png diff --git a/assets/images/new/screen_0.png b/assets/images/new/screen_0.png Binary files differnew file mode 100644 index 0000000..5b8fed9 --- /dev/null +++ b/assets/images/new/screen_0.png diff --git a/assets/images/new/screenshot2_0.png b/assets/images/new/screenshot2_0.png Binary files differnew file mode 100644 index 0000000..c3281bd --- /dev/null +++ b/assets/images/new/screenshot2_0.png diff --git a/assets/images/new/screenshot_tileset.png b/assets/images/new/screenshot_tileset.png Binary files differnew file mode 100644 index 0000000..87b654a --- /dev/null +++ b/assets/images/new/screenshot_tileset.png diff --git a/assets/images/new/trees.xcf b/assets/images/new/trees.xcf Binary files differnew file mode 100644 index 0000000..846f2ab --- /dev/null +++ b/assets/images/new/trees.xcf diff --git a/assets/images/new/treesv6_0_0.psd b/assets/images/new/treesv6_0_0.psd Binary files differnew file mode 100644 index 0000000..9f7ab97 --- /dev/null +++ b/assets/images/new/treesv6_0_0.psd diff --git a/assets/images/pave_0.png b/assets/images/pave_0.png Binary files differnew file mode 100644 index 0000000..e1c21f1 --- /dev/null +++ b/assets/images/pave_0.png diff --git a/assets/images/reaper-original.png b/assets/images/reaper-original.png Binary files differnew file mode 100644 index 0000000..7264bd4 --- /dev/null +++ b/assets/images/reaper-original.png diff --git a/assets/images/reaper.png b/assets/images/reaper.png Binary files differnew file mode 100644 index 0000000..742fa86 --- /dev/null +++ b/assets/images/reaper.png diff --git a/assets/images/src/intro-bg.xcf b/assets/images/src/intro-bg.xcf Binary files differnew file mode 100644 index 0000000..d12dbbe --- /dev/null +++ b/assets/images/src/intro-bg.xcf diff --git a/assets/images/src/lorenzo.xcf b/assets/images/src/lorenzo.xcf Binary files differnew file mode 100644 index 0000000..7f12bee --- /dev/null +++ b/assets/images/src/lorenzo.xcf diff --git a/assets/images/src/plato.xcf b/assets/images/src/plato.xcf Binary files differnew file mode 100644 index 0000000..3719bbe --- /dev/null +++ b/assets/images/src/plato.xcf diff --git a/assets/images/src/reaper.xcf b/assets/images/src/reaper.xcf Binary files differnew file mode 100644 index 0000000..97b1573 --- /dev/null +++ b/assets/images/src/reaper.xcf diff --git a/assets/images/vignette.png b/assets/images/vignette.png Binary files differnew file mode 100644 index 0000000..d7f102d --- /dev/null +++ b/assets/images/vignette.png diff --git a/assets/maps/01.tmx b/assets/maps/01.tmx new file mode 100644 index 0000000..1410e94 --- /dev/null +++ b/assets/maps/01.tmx @@ -0,0 +1,482 @@ +<?xml version="1.0" encoding="UTF-8"?> +<map version="1.4" tiledversion="1.4.3" orientation="orthogonal" renderorder="right-down" width="64" height="94" tilewidth="16" tileheight="16" infinite="0" backgroundcolor="#000000" nextlayerid="13" nextobjectid="118"> + <tileset firstgid="1" name="world" tilewidth="16" tileheight="16" tilecount="1440" columns="40"> + <image source="../../../inevitable/assets/images/gfx/Overworld.png" trans="ff00ff" width="640" height="576"/> + <tile id="165"> + <animation> + <frame tileid="123" duration="100"/> + <frame tileid="124" duration="100"/> + <frame tileid="125" duration="100"/> + <frame tileid="163" duration="100"/> + <frame tileid="164" duration="100"/> + <frame tileid="165" duration="100"/> + </animation> + </tile> + <tile id="260"> + <animation> + <frame tileid="258" duration="100"/> + <frame tileid="259" duration="100"/> + <frame tileid="260" duration="100"/> + </animation> + </tile> + <tile id="298"> + <animation> + <frame tileid="298" duration="100"/> + <frame tileid="299" duration="100"/> + <frame tileid="300" duration="100"/> + </animation> + </tile> + <tile id="340"> + <animation> + <frame tileid="338" duration="100"/> + <frame tileid="339" duration="100"/> + <frame tileid="340" duration="100"/> + </animation> + </tile> + </tileset> + <tileset firstgid="1441" source="../../../inevitable/assets/maps/cave.tsx"/> + <tileset firstgid="2441" source="../../../inevitable/assets/maps/inner.tsx"/> + <layer id="1" name="tiles" width="64" height="94"> + <data encoding="csv"> +0,0,0,0,2562,2563,2563,2563,2563,2563,2563,2563,2563,2563,2563,2564,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +0,0,0,0,2602,2603,2603,2603,2603,2603,2603,2603,2603,2603,2603,2604,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +0,0,0,0,2642,2643,2643,2643,2643,2643,2643,2643,2643,2643,2643,2644,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +0,0,0,0,2481,2481,2481,2481,2481,2481,2481,2481,2481,2481,2481,2481,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +0,0,0,0,2481,2481,2481,2481,2481,2481,2481,2481,2481,2481,2481,2481,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +0,0,0,0,2481,2481,2481,2481,2481,2762,2762,2481,2481,2481,2481,2481,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +0,0,0,0,2481,2481,2481,2481,2481,2762,2762,2481,2481,2481,2481,2481,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +0,0,0,0,2481,2481,2481,2481,2481,2762,2762,2481,2481,2481,2481,2481,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +0,0,0,0,2481,2481,2481,2481,2481,2481,2481,2481,2481,2481,2481,2481,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +0,0,0,0,2481,2481,2481,2481,2481,2481,2481,2481,2481,2481,2481,2481,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +0,0,0,0,3128,3128,3128,3128,3128,2481,2481,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +0,0,0,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +0,0,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +0,0,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +3128,3128,3128,366,1,1,1,406,406,1,366,1,366,406,406,1,366,366,1,406,406,406,366,406,366,406,406,366,406,406,366,1,366,406,1,366,366,1,1,366,406,406,366,1,366,406,366,366,366,1,366,366,406,366,366,366,406,1,406,1,366,366,1,3128, +3128,3128,3128,366,1,366,406,1,406,366,366,1,366,1,366,1,406,406,366,406,406,366,366,406,366,406,366,406,366,1,366,1,406,1,406,1,406,366,406,366,366,1,1,1,406,366,406,366,406,1,406,1,1,366,366,406,406,406,1,366,406,1,1,3128, +3128,3128,3128,366,366,366,406,406,1,406,1,1,366,1,406,366,366,406,366,366,1,406,366,1,406,366,1,406,1,1,1,406,1,406,406,406,1,406,1,366,1,406,1,366,366,366,366,406,406,406,406,406,406,366,406,366,366,366,406,406,1,1,406,3128, +3128,3128,3128,366,1,366,1,406,1,366,406,366,1,366,406,406,366,1,366,1,366,366,1,1,406,406,366,1,406,1,406,1,366,1,1,406,406,1,406,406,406,366,366,1,406,366,366,406,1,406,406,406,366,366,1,366,1,406,366,366,1,366,366,3128, +3128,3128,3128,1,406,406,1,1,406,1,366,1,406,366,366,1,366,366,406,1,366,406,1,1,1,1,1161,1162,1162,1162,1162,1163,406,366,1,1,366,406,406,406,366,366,366,366,406,406,406,1,406,366,406,1,366,1,1,366,366,406,406,406,406,1,1,3128, +3128,3128,3128,1,1,366,406,366,366,1,366,366,406,1,366,366,366,1,1,406,366,406,1,1,1,366,1201,1283,1402,1202,1361,1203,406,1,406,406,366,1,366,1,406,366,406,1,406,366,366,366,366,1,1,406,1,406,406,1,1,366,1,366,366,406,406,3128, +3128,3128,3128,1,1,1,1,406,406,1,366,1,366,1,366,366,366,406,406,1,1,406,406,1,406,366,1201,1361,1283,1402,1283,1203,366,406,406,1,406,1,406,406,1,406,1,406,406,366,406,406,366,366,1,406,366,366,406,1,406,406,366,1,1,366,1,3128, +3128,3128,3128,1,406,406,1,406,1,1,366,366,366,1,366,366,406,1,406,406,1,366,406,1,1,406,1201,1402,1361,1362,1361,1203,366,366,1,406,366,366,366,1,366,1,366,406,406,406,406,366,1,366,406,406,406,366,366,366,1,366,406,366,406,406,1,3128, +3128,3128,3128,406,1,406,1,406,1,1,1,1,366,1,366,366,1,406,1,366,406,406,406,1,406,366,1201,1362,1402,1401,1361,1203,1,1,366,1,366,366,366,406,366,406,406,366,1,406,1,406,1,406,366,406,366,366,406,406,366,406,406,406,366,366,366,3128, +3128,3128,3128,406,366,406,366,406,1,1,406,406,406,1,1,406,406,406,406,406,366,366,406,1,1,1,1241,1242,1242,1242,1242,1243,366,366,406,366,406,406,1,1,366,366,1,366,406,1,1,406,366,366,1,366,1,366,366,366,1,366,406,366,366,1,406,3128, +3128,3128,3128,406,1,1,366,406,366,1,366,406,406,366,366,366,1,406,406,1,366,366,406,366,1,1,1,406,406,406,366,366,1,1,1,406,406,366,1,1,1,406,366,406,406,1,406,406,1,366,366,1,406,1,406,406,1,1,1,366,366,1,1,3128, +3128,3128,3128,366,643,643,645,366,1,366,1,366,406,406,406,366,366,406,366,406,366,406,366,1,406,406,1,406,1,366,406,366,366,366,406,1,1,406,406,406,366,1,406,406,406,366,366,1,406,406,366,406,366,1,1,1,1,1,366,366,366,366,406,3128, +3128,3128,3128,366,643,643,643,643,1,366,406,1,366,1,1,1,366,366,366,1,1,366,366,366,406,1,406,1,1,406,406,1,406,406,366,366,366,406,1,406,1,366,406,406,1,406,366,406,406,406,1,366,1,406,366,366,366,406,366,406,406,406,366,3128, +3128,3128,3128,406,643,643,366,406,366,1,1,1,366,1,406,406,366,1,366,366,1,366,1,406,406,366,406,366,366,406,406,366,406,366,406,406,406,1,1,366,366,366,1,406,366,366,366,406,406,366,406,366,366,1,406,366,366,366,406,406,1,366,366,3128, +3128,3128,3128,643,643,643,366,406,1,1,366,366,1,1,1,366,1,406,366,1,366,366,366,1,1,366,1,1,1,366,406,1,1,1,366,1,1,406,406,366,406,366,1,406,1,1,366,406,406,1,406,366,406,366,406,406,1,1,406,366,366,1,366,3128, +3128,3128,3128,643,643,643,643,406,366,366,406,1,1,1,1,1,406,406,366,406,366,366,1,406,406,366,406,1,1,406,1,1,1,406,366,366,366,1,406,406,1,406,406,366,406,1,366,366,1,1,1,406,1,1,1,406,406,406,1,1,406,406,366,3128, +3128,3128,3128,643,643,643,366,1,1,406,1,1,406,406,366,406,366,1,366,366,406,366,1,406,1,406,366,1,366,406,366,406,1,366,406,1,1,1,366,1,1,366,366,366,406,406,1,406,366,406,406,366,1,366,406,406,366,1,1,366,366,1,366,3128, +3128,3128,3128,643,643,1,406,1,366,366,1,366,1,1,366,1,366,406,1,366,366,406,366,406,1,366,366,366,366,406,1,1,1,1,406,1,1,1,1,1,406,366,406,366,406,406,406,366,406,406,406,1,1,1,406,366,1,366,406,366,1,1,406,3128, +3128,3128,3128,406,366,1,366,1,366,1,366,1,1,1,366,366,366,406,366,406,1,1,406,366,406,366,1,366,406,366,366,1,366,1,366,366,406,406,366,406,1,366,1,406,366,366,406,406,1,1,406,406,366,366,1,406,366,1,366,1,366,1,1,3128, +3128,3128,3128,366,366,366,406,1,406,1,1,1,406,406,406,366,366,366,1,366,1,366,1,366,1,406,406,366,406,366,1,366,1,1,406,366,1,1,1,366,406,366,406,1,1,366,1,1,406,366,1,366,366,366,366,366,1,366,366,1,406,366,366,3128, +3128,3128,3128,1,366,1,1,366,366,406,1,1,406,406,406,406,1,366,366,366,366,406,366,406,1,1,366,366,406,366,366,366,406,366,406,366,406,406,366,1,1,366,406,406,366,406,406,1,366,366,1,366,366,406,366,366,1,406,406,366,406,1,1,3128, +3128,3128,3128,1,1,366,366,366,366,406,1,366,406,1,1,1,406,1,1,366,1,406,1,1,366,366,406,406,406,406,406,1,1,366,366,1,1,1,406,366,406,1,406,406,366,406,406,406,366,1,366,406,1,366,366,1,1,406,406,406,406,1,1,3128, +3128,3128,3128,366,406,366,1,1,1,366,366,1,366,366,1,1,406,366,366,1,1,406,366,366,1,406,406,1,406,1,406,366,1,1,366,406,1,406,1,406,406,366,1,1,406,1,1,1,406,1,406,366,366,366,406,406,1,1,1,366,406,1,366,3128, +3128,3128,3128,366,406,366,1,1,406,1,1,366,1,366,1,406,366,366,1,1,1,366,406,366,406,406,366,1,366,1,1,366,1,406,1,366,1,363,406,366,1,366,1,1,406,406,406,366,366,366,406,366,366,1,366,406,406,1,406,1,1,406,406,3128, +3128,3128,3128,406,406,366,406,406,1,366,1,406,406,1,406,366,1,366,366,1,1,1,1,406,366,366,366,406,1,1,1,1,1,364,284,284,284,403,244,244,244,244,244,406,406,366,406,366,366,1,1,406,1,406,366,406,366,366,366,366,1,406,406,3128, +3128,3128,3128,406,366,1,406,406,1,366,406,406,366,406,1,406,1,366,366,366,1,1,1,1,366,366,1,406,406,1,1,1,1,283,284,284,284,284,284,284,284,284,284,284,284,1,366,1,406,406,1,406,366,366,366,406,366,406,366,406,366,406,366,3128, +3128,3128,3128,1,1,1,366,1,406,366,1,366,406,366,1,406,406,406,406,366,366,1,406,366,366,406,366,406,1,1,1,1,1,283,284,284,284,363,324,364,363,324,1,1,1,1,406,1,406,406,406,366,366,1,1,1,366,406,406,406,1,406,1,3128, +3128,3128,3128,406,406,1,1,366,1,406,366,406,406,1,1,406,366,366,366,406,366,406,406,1,1,406,366,366,1,1,1,1,1,283,284,284,363,325,243,404,285,1,406,406,406,1,1,1,1,366,1,1,406,366,1,1,366,366,1,1,1,366,1,3128, +3128,3128,3128,406,406,1,366,366,1,406,406,366,366,406,406,366,406,1,366,366,406,1,1,1,366,406,1,366,366,1,1,1,1,283,284,284,285,406,323,324,325,1,406,406,366,366,406,366,406,406,406,406,366,406,406,406,406,366,366,366,366,1,1,3128, +3128,3128,3128,366,366,366,366,406,366,406,406,1,366,1,1,406,406,1,406,1255,366,1,1,406,406,1,366,366,366,1,1,1,1,283,284,284,285,406,406,366,366,1,406,1,366,406,366,1,1,366,366,1,406,406,1,1,406,406,1,1,406,366,406,3128, +3128,3128,3128,406,406,366,366,1,366,1,1,1,366,406,366,406,366,1134,1,1,1,406,366,406,366,406,366,366,406,406,406,406,406,404,284,363,325,406,406,1,406,406,406,1,1,366,1,366,366,406,1,366,366,406,1,1,366,1,366,406,366,406,366,3128, +3128,3128,3128,366,366,406,406,406,366,1,1,406,1,1,366,366,366,406,406,406,366,406,366,406,406,406,406,1,366,366,1,406,284,284,284,285,406,366,1,366,406,366,366,366,406,366,366,1,1,1,406,366,406,366,366,1,406,366,366,406,1,366,1,3128, +3128,3128,3128,366,366,1,366,366,1,1,366,1,1,1,1,366,366,366,366,1,406,406,1,1,406,1,406,1,1,406,1,284,284,284,363,325,406,406,1,1,1,366,406,406,1,366,1,366,406,406,406,406,406,366,1,366,406,366,406,366,406,1,406,3128, +3128,3128,3128,366,366,366,406,406,406,406,366,406,406,406,366,366,406,366,1,1,1,1,1,1,1,1,1,406,1,446,690,284,284,284,691,446,446,446,362,1,1,1,366,366,366,406,1,1,366,366,366,1,366,1,1,366,1,366,366,406,1,366,1,3128, +3128,3128,3128,1,366,406,366,1,406,406,366,406,1,1,406,406,1,1,1,1,1,366,366,366,1,406,366,361,447,486,730,261,261,261,731,486,525,525,445,446,406,1,1,1,366,406,406,1,1,366,406,366,366,1,1,366,1,406,1,406,406,406,1,3128, +3128,3128,3128,1,366,1,406,406,406,406,1,406,1,1,406,406,406,366,365,1,1,406,1,1,366,1,1,407,526,526,770,299,299,299,771,526,526,525,526,526,1,366,406,406,406,1,1,366,1,406,406,1,406,1,406,366,366,366,366,406,1,406,1,3128, +3128,3128,3128,1,1,1,1,1,406,1,366,1,1,1,366,367,212,213,405,406,406,1,1,1,361,446,446,447,369,406,810,341,341,341,811,406,366,526,525,525,1,366,1,406,366,1,1,406,406,366,406,366,406,406,406,366,1,366,406,406,366,366,366,3128, +3128,3128,3128,1,406,1,366,366,366,406,406,406,406,1,1,407,252,253,445,446,362,1,361,446,447,485,486,366,245,406,850,284,284,284,851,1,406,1,406,1,406,1,366,406,1,406,366,1,406,1,1,1,1,366,1,366,406,406,1,366,366,366,366,3128, +3128,3128,3128,1,1,366,366,366,1,366,406,406,406,366,1,407,366,406,485,486,445,446,447,485,486,366,406,283,403,244,404,284,284,284,403,245,1,1,406,366,1,366,1,366,366,1,1,406,406,366,406,366,1,366,366,366,406,1,366,366,1,1,366,3128, +3128,3128,3128,366,406,446,446,362,366,366,366,366,361,446,446,447,366,1,1,366,485,486,487,366,1,366,406,283,284,284,284,284,284,284,284,403,244,245,406,366,1,366,243,244,245,243,244,245,406,406,406,1,366,366,406,1,406,1,366,406,366,366,406,3128, +3128,3128,3128,1,406,406,406,445,446,362,366,366,407,366,406,366,1,366,1,1,366,1,1,406,366,1,1,323,324,364,284,284,284,284,284,284,284,403,245,1,366,366,283,284,403,404,284,285,406,1,1,366,406,1,1,366,1,406,1,366,406,406,406,3128, +3128,3128,3128,366,406,406,366,406,366,405,1,406,407,1,1,1,366,406,366,366,366,366,406,406,366,1,406,406,366,283,284,284,284,284,284,284,284,284,403,244,245,1,283,284,284,284,284,285,366,406,1,366,406,1,406,406,406,406,1,366,1,1,1,3128, +3128,3128,3128,406,406,366,1,406,406,445,446,446,447,1,1,406,366,366,1,406,406,406,406,366,406,1,406,406,406,283,284,363,364,284,284,284,284,284,284,284,403,244,404,284,284,284,284,285,366,366,366,406,406,406,366,1,366,1,406,406,366,406,1,3128, +3128,3128,3128,366,406,366,366,406,1,406,366,406,366,1,406,366,406,366,406,1,1,366,406,406,366,366,366,1,366,323,324,325,283,284,284,284,284,284,284,284,284,284,284,284,284,284,363,325,366,366,406,366,406,406,366,366,1,366,1,366,406,1,406,3128, +3128,3128,3128,1,366,1,1,366,406,366,406,366,1,366,1,1,1,366,406,1,406,1,406,366,366,366,366,366,1,1,366,1,323,324,364,284,284,284,284,284,284,284,284,284,284,284,285,1,366,1,366,1,366,1,366,406,366,406,366,1,406,366,406,3128, +3128,3128,3128,406,406,1,406,406,366,1,406,366,366,366,1,366,406,366,1,406,366,1,1,1,366,1,406,1,366,1,366,406,406,1,283,284,284,284,284,284,284,284,284,284,284,284,403,406,406,366,366,406,1,366,1,366,406,1,406,1,1,1,1,3128, +3128,3128,3128,366,1,366,1,406,1,1,406,406,1,1,1,1,366,366,406,366,406,1,366,366,366,1,406,1,406,406,406,366,406,243,404,284,284,284,284,284,284,284,284,284,284,284,284,1,406,366,1,366,366,366,406,406,406,1,406,406,366,406,366,3128, +3128,3128,3128,1,366,1,1,366,366,1,366,366,406,406,1,406,366,366,1,1,366,406,366,366,366,366,1,1,406,1,366,366,243,404,284,284,284,284,284,284,284,284,284,284,284,284,284,284,1,406,1,366,406,1,1,1,1,366,1,406,366,366,366,3128, +3128,3128,3128,366,366,406,1,366,1,1,1,406,366,406,406,406,366,366,366,406,1,1,366,366,1,406,1,1,366,366,1,366,283,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,366,366,406,406,366,1,1,366,406,1,366,406,366,366,366,3128, +3128,3128,3128,406,1,406,406,406,366,406,366,1,1,1,366,1,406,406,406,366,366,406,406,406,406,1,406,1,366,366,1,366,323,324,364,284,284,284,284,284,284,284,284,284,284,284,284,284,366,1,406,1,366,406,366,366,406,366,1,366,406,1,1,3128, +3128,3128,3128,1,1,406,1,406,1,406,1,406,1,406,366,1,366,1,366,366,1,406,406,366,366,366,366,366,1,366,1,366,366,1,323,364,284,284,284,284,284,284,284,284,284,284,284,284,1,406,366,366,366,366,1,366,1,406,406,1,366,406,366,3128, +3128,3128,3128,406,366,406,366,406,1,406,1,1,1,406,1,406,406,1,1,406,406,406,366,366,366,1,406,366,366,366,406,406,406,366,366,323,364,284,284,284,284,284,284,284,284,284,284,284,1,1,366,406,1,1,1,366,1,406,406,406,366,406,1,3128, +3128,3128,3128,406,366,366,366,406,1,366,406,1,1,366,366,406,1,1,366,406,406,1,406,366,406,1,1,366,1,366,1,406,1,366,406,1,323,324,364,284,284,284,284,284,284,284,284,284,1,406,366,1,1,1,1,366,1,406,406,406,406,1,366,3128, +3128,3128,3128,406,366,406,406,406,366,406,366,366,366,366,406,406,1,1,1,366,406,366,1,406,406,366,366,406,1,1,1,366,1,406,1,366,366,406,323,366,406,406,366,406,406,406,406,366,366,1,406,1,366,1,366,1,406,406,406,366,406,406,406,3128, +3128,3128,3128,1,406,406,366,366,406,1,406,1,366,406,406,366,1,366,366,366,366,406,366,406,1,406,1,366,406,1,1,1,366,1,406,406,406,1,366,406,406,366,366,1,406,1,406,1,406,366,366,406,366,366,1,406,366,1,366,366,1,1,406,3128, +3128,3128,3128,1,366,406,366,366,406,406,366,406,1,366,1,406,1,406,366,406,406,406,406,1,406,366,1,1,366,1,366,366,366,366,1,406,1,1,406,366,366,366,406,1,1,366,1,1,406,366,406,406,366,406,366,406,406,406,366,366,1,366,366,3128, +3128,3128,3128,1,1,366,406,1,366,366,366,406,1,366,406,366,1,366,406,406,1,366,1,406,366,366,1,366,366,1,406,366,1,406,366,366,406,1,366,366,1,1,406,1,406,406,1,366,406,1,1,366,1,366,366,1,406,406,1,406,1,366,406,3128, +3128,3128,3128,366,406,406,1,366,406,1,406,1,1,406,1,1,366,1,406,1,1,366,406,406,1,1,1,366,1,406,1,1,1,366,406,406,1,1,1,406,1,366,366,406,406,366,1,406,1,366,406,366,1,366,366,366,406,406,366,366,366,366,406,3128, +3128,3128,3128,406,406,366,1,366,406,366,366,406,366,366,366,366,1,406,406,406,406,406,1,1,406,406,406,1,1,366,1,1,406,406,1,366,406,1,406,366,1,406,406,406,1,1,406,1,1,1,406,406,406,1,1,1,366,1,406,1,1,1,366,3128, +3128,3128,3128,802,803,801,802,801,801,803,802,802,802,803,802,803,803,801,802,801,803,803,803,802,802,802,803,802,801,801,801,802,803,801,801,801,801,802,801,801,801,803,802,802,803,801,801,802,801,803,802,802,803,803,801,802,803,802,802,802,801,803,802,3128, +3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128, +3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128,3128 +</data> + </layer> + <layer id="2" name="decoration1" width="64" height="94"> + <data encoding="csv"> +0,0,0,0,0,0,0,2681,0,2853,2854,0,2610,2611,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,2455,2456,0,0,2893,2894,0,2650,2651,0,2681,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,2501,2502,0,0,2933,2934,0,2924,2925,2926,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,2541,2542,0,0,0,0,0,2964,2965,2966,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,2581,2582,0,2721,2722,2722,2723,0,0,0,2928,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,2761,0,0,2763,0,0,0,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,2927,0,0,0,2761,0,0,2763,0,0,0,3048,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,2967,0,0,0,2761,0,0,2763,2491,2492,2493,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,3007,0,2681,0,2801,2802,2802,2803,2571,2572,2573,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,3047,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,701,701,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,209,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,444,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,484,0,0,0,0,0,0,0,209,0,0,522,523,523,523,523,523,523,523,524,0,0,0,0,484,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,564,0,0,0,0,0,214,215,564,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,522,523,604,0,236,237,0,0,254,255,564,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,726,647,0,0,0,0,0,0,0,0,0,0,0,0,322,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,444,0,0,0,0,562,0,0,0,276,277,0,0,294,295,564,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,647,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,321,0,0,0,0,0,0,0,0,0,0,0,0,0,562,0,483,483,483,484,483,0,0,0,564,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,728,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,9,10,11,0,0,0,0,0,0,0,0,444,0,0,0,0,0,0,562,0,484,484,483,483,483,0,0,1307,564,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,648,687,0,0,0,0,0,0,0,0,0,0,0,0,0,47,48,49,50,51,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,602,603,603,603,603,603,524,0,0,522,604,484,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,728,0,0,0,0,0,0,0,0,0,0,0,0,0,0,87,88,89,90,91,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,148,601,0,0,601,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,645,647,0,0,0,0,0,0,444,0,0,0,0,0,0,127,128,129,130,131,2,1132,1133,0,0,444,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,766,687,0,0,0,0,0,0,0,0,0,0,0,0,563,167,168,169,170,171,450,451,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,210,0,0,0,0,0,0,0,189,190,191,0,0,0,0,0,0,490,491,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,483,0,0,321,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,229,230,231,0,0,0,0,0,0,0,444,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,484,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,444,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,322,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,247,248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1297,1298,1299,1177,0,0,0,0,0,0,0,0,0,0,0,0,414,0,0,0,0,5,286,287,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1130,1178,1178,1335,1177,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,326,327,328,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1130,1179,1219,1335,1177,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1218,1179,1178,1295,1257,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,321,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,210,0,0,0,0,0,0,0,1296,1179,1218,1217,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1255,1338,1338,1257,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,444,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,444,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,484,0,0,0,0,0,0,0,0,526,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,566,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,610,0,0,0,412,0,415,0,0,0,0,566,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,568,0,0,0,0,0,0,0,0,566,567,568,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,647,0,0,0,0,0,0,0,0,528,0,565,566,0,0,0,566,567,371,607,608,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,688,647,0,0,0,0,566,566,567,568,0,605,606,565,566,567,371,607,608,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,645,647,483,0,0,371,606,607,608,0,0,0,605,606,607,608,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,643,728,0,0,0,568,0,0,0,0,0,0,209,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,566,566,567,568,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,209,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,606,606,606,607,608,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,204,205,206,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,204,205,206,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1121,1122,1123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +</data> + </layer> + <layer id="3" name="decoration2" width="64" height="94"> + <data encoding="csv"> +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2929,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2969,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,2616,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,2892,0,0,0,0,0,0,0,2814,2618,2695,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,2658,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,2698,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,683,685,685,685,685,684,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,725,0,0,0,0,725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,725,0,0,0,0,725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,725,0,0,0,0,725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,725,0,0,0,0,725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,721,0,683,685,685,724,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,646,647,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,686,687,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,444,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,450,451,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,490,491,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +</data> + </layer> + <layer id="4" name="above" width="64" height="94"> + <data encoding="csv"> +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,2927,0,0,0,0,0,0,0,0,2616,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,9,10,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,52,53,49,50,51,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,87,88,89,90,91,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,450,451,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,189,190,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,646,647,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +</data> + </layer> + <objectgroup id="5" name="collision"> + <object id="6" name="house" type="obstacle" x="345.657" y="706.857" width="62.9588" height="55.991"/> + <object id="12" name="log" type="obstacle" x="162.889" y="1343.89" width="41.6178" height="16.7057"/> + <object id="13" name="log" type="obstacle" x="98.996" y="1392.54" width="43.0832" height="14.9472"/> + <object id="21" name="hedge" type="obstacle" x="658.01" y="642.612" width="11.5195" height="71.7353"/> + <object id="22" name="hedge" type="obstacle" x="671.1" y="642.612" width="31.9405" height="10.9959"/> + <object id="23" name="hedge" type="obstacle" x="689.43" y="609.101" width="12.0431" height="31.4169"/> + <object id="27" name="hedge" type="obstacle" x="700.95" y="610.672" width="129.333" height="12.0431"/> + <object id="28" name="hedge" type="obstacle" x="802.53" y="707.54" width="28.2752" height="8.90146"/> + <object id="29" name="hedge" type="obstacle" x="817.71" y="623.238" width="13.0904" height="83.7784"/> + <object id="31" name="hedge" type="obstacle" x="800.96" y="715.918" width="14.6612" height="19.3738"/> + <object id="32" name="hedge" type="obstacle" x="753.31" y="707.017" width="14.6612" height="28.2752"/> + <object id="33" name="hedge" type="obstacle" x="669.53" y="705.446" width="84.8256" height="12.5668"/> + <object id="38" name="bench" type="obstacle" x="275.669" y="781.578" width="40.8668" height="14.562"/> + <object id="43" name="rock" type="obstacle" x="417.339" y="766.529" width="29.6503" height="14.4052"/> + <object id="88" x="64.228" y="1.04012" width="208.025" height="34.3241"/> + <object id="89" x="240.009" y="47.0656" width="32.5038" height="47.3256"/> + <object id="90" x="192.943" y="111.293" width="46.2855" height="20.0224"/> + <object id="91" x="208.805" y="131.315" width="15.6018" height="8.32098"/> + <object id="92" x="63.968" y="112.68" width="15.0818" height="49.0587"/> + <object id="93" x="80.61" y="34.064" width="30.9437" height="31.9838"/> + <object id="94" x="47.846" y="-0.260031" width="16.902" height="159.399"/> + <object id="96" x="47.326" y="159.139" width="98.0316" height="16.642"/> + <object id="97" x="256.651" y="91.7908" width="15.8619" height="71.2484"/> + <object id="99" x="192.423" y="28.6034" width="48.1057" height="21.8426"/> + <object id="101" x="176.041" y="158.879" width="96.7314" height="15.3418"/> + <object id="102" x="136.517" y="170.06" width="48.6257" height="16.1219"/> + <object id="103" x="192.163" y="50.446" width="36.9244" height="32.7639"/> + <object id="104" name="fence" type="obstacle" x="420.473" y="562.721" width="7.22076" height="76.1914"/> + <object id="105" name="fence" type="obstacle" x="420.722" y="557.741" width="87.396" height="6.97176"/> + <object id="106" name="fence" type="obstacle" x="501.4" y="562.721" width="7.46975" height="89.886"/> + <object id="107" name="fence" type="obstacle" x="452.593" y="643.145" width="56.7701" height="6.22479"/> + <object id="108" name="tree" type="obstacle" x="305.19" y="942.151" width="30.128" height="16.1132"/> + <object id="116" name="cliff" type="obstacle" x="287.978" y="1058.83" width="7.22076" height="76.1914"/> + <object id="117" name="cliff" type="obstacle" x="248.515" y="1074.67" width="7.22076" height="76.1914"/> + </objectgroup> + <objectgroup id="6" name="actions"> + <object id="78" name="enter-house" type="action" x="358.638" y="763.599" width="34.3533" height="8.35621"/> + <object id="79" name="exit-house" type="action" x="144.13" y="151.998" width="31.6779" height="27.3826"/> + <object id="80" name="talk-to-reaper" type="action" x="160.745" y="51.295" width="57.047" height="46.4206"/> + </objectgroup> + <objectgroup id="7" name="positions"> + <object id="86" name="player" type="start-position" x="287.986" y="816.83" width="16" height="16"/> + <object id="87" name="reaper" type="start-position" x="204.199" y="75.7964" width="16" height="16"/> + <object id="98" name="house" type="start-position" x="152.118" y="130.535" width="16" height="16"/> + <object id="113" name="exited-house" type="start-position" x="368.173" y="777.527" width="16" height="16"/> + </objectgroup> + <objectgroup id="8" name="food"> + <object id="114" x="431.59" y="568.213" width="67.2523" height="78.2322"/> + <object id="115" x="385.617" y="813.701" width="25.7232" height="103.88"/> + </objectgroup> +</map> diff --git a/assets/maps/cave.tsx b/assets/maps/cave.tsx new file mode 100644 index 0000000..d96f881 --- /dev/null +++ b/assets/maps/cave.tsx @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<tileset name="cave" tilewidth="16" tileheight="16" tilecount="1000" columns="40"> + <image source="../images/gfx/cave.png" trans="ff00ff" width="640" height="400"/> +</tileset> diff --git a/assets/maps/death.tmx b/assets/maps/death.tmx new file mode 100644 index 0000000..64d38b3 --- /dev/null +++ b/assets/maps/death.tmx @@ -0,0 +1,132 @@ +<?xml version="1.0" encoding="UTF-8"?> +<map version="1.4" tiledversion="1.4.3" orientation="orthogonal" renderorder="right-down" width="30" height="60" tilewidth="16" tileheight="16" infinite="0" backgroundcolor="#000000" nextlayerid="3" nextobjectid="1"> + <tileset firstgid="1" source="cave.tsx"/> + <layer id="1" name="Tile Layer 1" width="30" height="60"> + <data encoding="csv"> +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,43,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,43,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,43,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,43,213,213,213,213,175,176,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,43,213,213,213,213,215,216,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,43,43,213,213,175,176,213,213,213,213,213,213,213,213,213,213,175,176, +213,213,213,213,213,213,213,213,213,213,175,176,43,43,213,213,215,216,175,176,213,213,213,213,213,213,175,253,254,252, +213,213,213,213,213,213,213,213,213,213,214,252,176,175,176,213,175,253,256,216,213,175,176,175,253,253,254,128,128,128, +213,213,213,213,213,175,253,176,213,213,254,1,252,254,252,253,254,1,252,253,176,214,252,254,1,128,1,1,1,1, +213,213,213,213,213,214,1,252,253,254,1,1,1,1,1,1,1,1,1,1,252,254,128,1,1,1,281,282,283,281, +213,213,213,213,175,254,128,281,283,1,1,1,1,128,1,172,174,1,1,1,128,1,281,283,281,282,364,362,363,321, +213,213,175,253,254,128,128,321,324,283,1,1,1,1,128,252,256,174,1,1,128,281,325,324,325,322,324,283,128,321, +213,175,254,1,1,128,128,361,285,324,283,128,1,128,128,1,212,214,128,1,281,325,322,322,322,322,322,324,282,325, +213,254,128,1,128,128,128,128,361,285,324,283,1,1,128,172,255,254,128,128,321,322,322,322,322,322,322,322,322,322, +128,128,128,1,128,128,128,1,281,364,285,323,1,128,128,212,214,1,1,1,361,285,322,322,322,322,322,322,322,322, +1,1,1,1,128,1,128,128,361,365,364,363,128,128,172,255,254,1,1,128,281,325,322,322,322,322,322,322,322,322, +1,1,1,1,1,1,172,174,1,321,323,1,1,128,252,254,128,128,128,1,321,322,322,322,322,322,322,322,322,322, +128,128,1,1,128,128,212,214,128,361,363,1,128,1,1,1,128,128,128,1,361,285,284,285,322,322,322,322,322,322, +128,128,1,128,1,1,252,256,174,1,128,1,1,1,128,1,128,128,1,128,1,361,365,325,322,322,322,322,322,322, +1,128,128,1,1,128,172,255,256,174,128,1,128,1,128,128,1,1,1,1,1,1,321,322,322,322,322,322,322,322, +128,128,128,128,128,128,212,215,255,256,174,1,1,128,1,1,1,128,1,128,1,281,364,285,322,322,322,322,322,322, +128,128,1,128,128,128,252,253,254,252,254,128,128,128,128,128,128,128,1,128,1,361,363,361,285,322,322,322,322,322, +1,1,128,128,128,1,1,1,128,128,128,128,128,1,128,1,128,128,128,1,1,1,1,1,321,322,322,322,322,322, +128,128,128,1,1,128,1,1,1,128,128,128,1,128,1,128,1,128,1,128,128,1,1,281,325,322,322,322,322,322, +128,1,1,128,128,1,128,1,128,1,128,128,1,1,128,1,128,1,128,1,1,1,281,325,322,322,322,322,322,322, +1,1,1,281,283,1,128,1,1,128,128,128,128,128,128,1,1,128,128,128,128,128,361,285,322,322,322,322,322,322, +128,128,1,321,323,128,1,1,1,1,1,281,282,282,283,128,128,1,1,128,128,1,1,321,322,322,322,322,322,322, +128,128,1,361,365,283,1,281,282,283,1,321,322,322,324,282,282,283,1,128,1,281,282,325,322,322,284,362,362,285, +283,128,281,282,364,363,281,325,284,365,282,325,322,322,322,322,322,323,128,128,1,321,322,284,285,322,323,128,1,361, +324,282,364,285,324,282,325,284,363,361,362,362,362,285,284,285,322,324,282,283,281,325,284,363,361,362,363,1,1,1, +322,322,324,364,362,362,285,323,128,128,1,1,128,361,363,361,285,322,322,324,325,322,323,1,1,128,1,1,1,1, +322,322,322,324,283,281,364,363,1,1,1,128,1,128,128,1,321,322,322,322,322,284,363,1,128,128,1,1,128,128, +322,322,322,322,324,325,323,1,1,128,1,128,128,1,128,128,321,322,322,322,322,323,128,128,128,1,128,128,128,1 +</data> + </layer> + <layer id="2" name="Tile Layer 2" width="30" height="60"> + <data encoding="csv"> +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208,209,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,201,0,0,0,0,0,0,248,249,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,206,0,0,241,0,0,0,0,0,206,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,126,246,127,161,0,0,0,0,0,0,126,201,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,166,0,167,0,0,0,0,0,0,0,0,241,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,126,0,0,0,0,127,0,0,0,371,0,0,0,0,0,0,0, +207,209,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,201,0,0,0,0,290,291,0,0,0,0,0,0, +168,169,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,241,0,0,0,0,330,331,0,0,0,0,0,0, +250,171,209,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +170,211,169,0,0,0,0,0,0,0,0,0,246,0,0,0,0,0,0,126,0,0,0,0,0,369,0,0,0,0, +210,251,249,0,0,0,0,0,0,0,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0,0,0,0, +250,209,0,0,126,246,0,0,0,0,0,201,0,0,0,201,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +248,249,0,0,206,0,0,0,0,0,0,241,0,0,0,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,201,0,0,0,201,246,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,208,209,0,0,241,0,0,0,241,0,0,0,0,206,0,0,0,0,0,0,290,291,0, +0,0,206,0,0,0,0,248,249,0,0,246,0,0,127,0,0,0,0,0,0,0,0,0,0,0,0,330,331,0, +167,206,0,0,0,0,0,0,0,0,0,0,0,0,0,0,166,0,0,0,0,0,0,0,0,0,0,0,0,0, +127,166,0,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,370,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,371,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,368,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +</data> + </layer> +</map> diff --git a/assets/maps/inner.tsx b/assets/maps/inner.tsx new file mode 100644 index 0000000..77f204f --- /dev/null +++ b/assets/maps/inner.tsx @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<tileset name="inner" tilewidth="16" tileheight="16" tilecount="1000" columns="40"> + <image source="../images/gfx/Inner.png" trans="ff00ff" width="640" height="400"/> +</tileset> diff --git a/assets/music/README b/assets/music/README new file mode 100644 index 0000000..6fe08c5 --- /dev/null +++ b/assets/music/README @@ -0,0 +1,7 @@ +All music composed and arranged by Ricardo Wurmus, copyright 2018. +All compositions and recordings are made available under the terms of +the CC-BY-SA 4.0 license. + +The intent is to let you use them freely, make changes as you want, +and share originals and modified versions under the same terms, while +crediting me. diff --git a/assets/music/death.ogg b/assets/music/death.ogg Binary files differnew file mode 100644 index 0000000..ff804b9 --- /dev/null +++ b/assets/music/death.ogg diff --git a/assets/music/death.wav b/assets/music/death.wav Binary files differnew file mode 100644 index 0000000..a00eef9 --- /dev/null +++ b/assets/music/death.wav diff --git a/assets/music/intro.ogg b/assets/music/intro.ogg Binary files differnew file mode 100644 index 0000000..1725679 --- /dev/null +++ b/assets/music/intro.ogg diff --git a/assets/music/intro.wav b/assets/music/intro.wav Binary files differnew file mode 100644 index 0000000..24093b9 --- /dev/null +++ b/assets/music/intro.wav diff --git a/assets/music/vineyard.score.ogg b/assets/music/vineyard.score.ogg Binary files differnew file mode 100644 index 0000000..c08935e --- /dev/null +++ b/assets/music/vineyard.score.ogg diff --git a/assets/sounds/README b/assets/sounds/README new file mode 100644 index 0000000..dbf7b27 --- /dev/null +++ b/assets/sounds/README @@ -0,0 +1,5 @@ +* error.ogg +Taken from gnome-control-center's "drip.ogg" +* birds.mp3 +"Spring Birds Loop with Low-Cut (New Jersey)", public domain +https://freesound.org/people/hargissssound/sounds/345852/
\ No newline at end of file diff --git a/assets/sounds/Spring Birds Loop with Low-Cut (New Jersey)-345852.mp3 b/assets/sounds/Spring Birds Loop with Low-Cut (New Jersey)-345852.mp3 Binary files differnew file mode 100644 index 0000000..4654e7b --- /dev/null +++ b/assets/sounds/Spring Birds Loop with Low-Cut (New Jersey)-345852.mp3 diff --git a/assets/sounds/birds.ogg b/assets/sounds/birds.ogg Binary files differnew file mode 100644 index 0000000..a2e8d8d --- /dev/null +++ b/assets/sounds/birds.ogg diff --git a/assets/sounds/error.ogg b/assets/sounds/error.ogg Binary files differnew file mode 100644 index 0000000..144d2b3 --- /dev/null +++ b/assets/sounds/error.ogg diff --git a/assets/texts/metrics.txt b/assets/texts/metrics.txt new file mode 100644 index 0000000..08a981c --- /dev/null +++ b/assets/texts/metrics.txt @@ -0,0 +1,39 @@ +age + runs out after 5 minutes + +weight + affected by movement[-2], drumming[-5], waiting[-1], eating[+n] + death by diabetes or starvation + +music + affected positively by hitting drums or catching Chlodwig (once in a lifetime) + +unsatisfied curiosity + need to read papers or books to lower + +career + visit office to increase, lowers happiness exponentially + +happiness + death by depression; affected by all other metrics when above or below threshold; lowered by meeting people + + +* Achievements + + drum solo: hit 9 drums in certain order + glutton: eat any 5 food without interruption + food critic: eat all kinds of food + smarty pants: read 5 papers without interruption + zen: read a book, walk three steps, eat one thing, walk three steps, hit a drum/cymbal + dead inside: only worked and ate in the last 30 seconds + yo-yo diet: weight went very high, very low, very high again, very low again + + +* Special events + + Chlodwig + + +* random + + can this be a two player game where doing things together gives a bonus? diff --git a/bootstrap b/bootstrap new file mode 100755 index 0000000..872167c --- /dev/null +++ b/bootstrap @@ -0,0 +1,3 @@ +#!/bin/sh + +autoreconf -vif diff --git a/build-aux/install-sh b/build-aux/install-sh new file mode 100755 index 0000000..20d8b2e --- /dev/null +++ b/build-aux/install-sh @@ -0,0 +1,529 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2018-03-11.20; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# 'make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +tab=' ' +nl=' +' +IFS=" $tab$nl" + +# Set DOITPROG to "echo" to test this script. + +doit=${DOITPROG-} +doit_exec=${doit:-exec} + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +is_target_a_directory=possibly + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) + is_target_a_directory=always + dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; + + -T) is_target_a_directory=never;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +# We allow the use of options -d and -T together, by making -d +# take the precedence; this is for compatibility with GNU install. + +if test -n "$dir_arg"; then + if test -n "$dst_arg"; then + echo "$0: target directory not allowed when installing a directory." >&2 + exit 1 + fi +fi + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call 'install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + if test $# -gt 1 || test "$is_target_a_directory" = always; then + if test ! -d "$dst_arg"; then + echo "$0: $dst_arg: Is not a directory." >&2 + exit 1 + fi + fi +fi + +if test -z "$dir_arg"; then + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names problematic for 'test' and other utilities. + case $src in + -* | [=\(\)!]) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + dst=$dst_arg + + # If destination is a directory, append the input filename. + if test -d "$dst"; then + if test "$is_target_a_directory" = never; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dstbase=`basename "$src"` + case $dst in + */) dst=$dst$dstbase;; + *) dst=$dst/$dstbase;; + esac + dstdir_status=0 + else + dstdir=`dirname "$dst"` + test -d "$dstdir" + dstdir_status=$? + fi + fi + + case $dstdir in + */) dstdirslash=$dstdir;; + *) dstdirslash=$dstdir/;; + esac + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + # Note that $RANDOM variable is not portable (e.g. dash); Use it + # here however when possible just to lower collision chance. + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + + trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 + + # Because "mkdir -p" follows existing symlinks and we likely work + # directly in world-writeable /tmp, make sure that the '$tmpdir' + # directory is successfully created first before we actually test + # 'mkdir -p' feature. + if (umask $mkdir_umask && + $mkdirprog $mkdir_mode "$tmpdir" && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + test_tmpdir="$tmpdir/a" + ls_ld_tmpdir=`ls -ld "$test_tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; + esac + + oIFS=$IFS + IFS=/ + set -f + set fnord $dstdir + shift + set +f + IFS=$oIFS + + prefixes= + + for d + do + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=${dstdirslash}_inst.$$_ + rmtmp=${dstdirslash}_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && + { test -z "$stripcmd" || { + # Create $dsttmp read-write so that cp doesn't create it read-only, + # which would cause strip to fail. + if test -z "$doit"; then + : >"$dsttmp" # No need to fork-exec 'touch'. + else + $doit touch "$dsttmp" + fi + } + } && + $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + set +f && + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC0" +# time-stamp-end: "; # UTC" +# End: diff --git a/build-aux/missing b/build-aux/missing new file mode 100755 index 0000000..3d6cabf --- /dev/null +++ b/build-aux/missing @@ -0,0 +1,215 @@ +#!/bin/sh +# Common wrapper for a few potentially missing GNU programs. + +scriptversion=2018-03-07.03; # UTC + +# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996. + +# 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 2, 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 <https://www.gnu.org/licenses/>. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try '$0 --help' for more information" + exit 1 +fi + +case $1 in + + --is-lightweight) + # Used by our autoconf macros to check whether the available missing + # script is modern enough. + exit 0 + ;; + + --run) + # Back-compat with the calling convention used by older automake. + shift + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due +to PROGRAM being missing or too old. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal autoconf autoheader autom4te automake makeinfo + bison yacc flex lex help2man + +Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and +'g' are ignored when checking the name. + +Send bug reports to <bug-automake@gnu.org>." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: unknown '$1' option" + echo 1>&2 "Try '$0 --help' for more information" + exit 1 + ;; + +esac + +# Run the given program, remember its exit status. +"$@"; st=$? + +# If it succeeded, we are done. +test $st -eq 0 && exit 0 + +# Also exit now if we it failed (or wasn't found), and '--version' was +# passed; such an option is passed most likely to detect whether the +# program is present and works. +case $2 in --version|--help) exit $st;; esac + +# Exit code 63 means version mismatch. This often happens when the user +# tries to use an ancient version of a tool on a file that requires a +# minimum version. +if test $st -eq 63; then + msg="probably too old" +elif test $st -eq 127; then + # Program was missing. + msg="missing on your system" +else + # Program was found and executed, but failed. Give up. + exit $st +fi + +perl_URL=https://www.perl.org/ +flex_URL=https://github.com/westes/flex +gnu_software_URL=https://www.gnu.org/software + +program_details () +{ + case $1 in + aclocal|automake) + echo "The '$1' program is part of the GNU Automake package:" + echo "<$gnu_software_URL/automake>" + echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/autoconf>" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + autoconf|autom4te|autoheader) + echo "The '$1' program is part of the GNU Autoconf package:" + echo "<$gnu_software_URL/autoconf/>" + echo "It also requires GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + esac +} + +give_advice () +{ + # Normalize program name to check for. + normalized_program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + + printf '%s\n' "'$1' is $msg." + + configure_deps="'configure.ac' or m4 files included by 'configure.ac'" + case $normalized_program in + autoconf*) + echo "You should only need it if you modified 'configure.ac'," + echo "or m4 files included by it." + program_details 'autoconf' + ;; + autoheader*) + echo "You should only need it if you modified 'acconfig.h' or" + echo "$configure_deps." + program_details 'autoheader' + ;; + automake*) + echo "You should only need it if you modified 'Makefile.am' or" + echo "$configure_deps." + program_details 'automake' + ;; + aclocal*) + echo "You should only need it if you modified 'acinclude.m4' or" + echo "$configure_deps." + program_details 'aclocal' + ;; + autom4te*) + echo "You might have modified some maintainer files that require" + echo "the 'autom4te' program to be rebuilt." + program_details 'autom4te' + ;; + bison*|yacc*) + echo "You should only need it if you modified a '.y' file." + echo "You may want to install the GNU Bison package:" + echo "<$gnu_software_URL/bison/>" + ;; + lex*|flex*) + echo "You should only need it if you modified a '.l' file." + echo "You may want to install the Fast Lexical Analyzer package:" + echo "<$flex_URL>" + ;; + help2man*) + echo "You should only need it if you modified a dependency" \ + "of a man page." + echo "You may want to install the GNU Help2man package:" + echo "<$gnu_software_URL/help2man/>" + ;; + makeinfo*) + echo "You should only need it if you modified a '.texi' file, or" + echo "any other file indirectly affecting the aspect of the manual." + echo "You might want to install the Texinfo package:" + echo "<$gnu_software_URL/texinfo/>" + echo "The spurious makeinfo call might also be the consequence of" + echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" + echo "want to install GNU make:" + echo "<$gnu_software_URL/make/>" + ;; + *) + echo "You might have modified some files without having the proper" + echo "tools for further handling them. Check the 'README' file, it" + echo "often tells you about the needed prerequisites for installing" + echo "this package. You may also peek at any GNU archive site, in" + echo "case some other package contains this missing '$1' program." + ;; + esac +} + +give_advice "$1" | sed -e '1s/^/WARNING: /' \ + -e '2,$s/^/ /' >&2 + +# Propagate the correct exit status (expected to be 127 for a program +# not found, 63 for a program that failed due to version mismatch). +exit $st + +# Local variables: +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC0" +# time-stamp-end: "; # UTC" +# End: diff --git a/characters/lorenzo.scm b/characters/lorenzo.scm new file mode 100644 index 0000000..237ce6a --- /dev/null +++ b/characters/lorenzo.scm @@ -0,0 +1,50 @@ +;;; The Inevitable Game +;;; Copyright © 2018, 2019, 2021 Ricardo Wurmus <rekado@elephly.net> +;;; +;;; 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 +;;; <http://www.gnu.org/licenses/>. + +(define-module (characters lorenzo) + #:use-module (chickadee graphics texture) + #:use-module (chickadee graphics color) + #:use-module (chickadee math rect) + #:use-module (chickadee math vector) + #:use-module (engine assets) + #:use-module (utils) + #:use-module (oop goops) + #:export (lorenzo)) + +(define-asset player-atlas + (load-tileset "assets/images/lorenzo.png" 32 32)) + +(define* (lorenzo #:key + (start-position (vec2 0 0)) + (dead? #f)) + (make <character> + #:name 'lorenzo + #:position start-position + #:atlas player-atlas + #:tint (if dead? + (make-color 1.0 1.0 1.0 0.0) + (make-color 1.0 1.0 1.0 1.0)) + #:animations '((idle-right . #(24 24 24 24 24 39 39 39 39 39)) + (idle-left . #(32 32 32 32 32 31 31 31 31 31)) + (idle-front . #(8 8 8 8 8 0 0 0 0 0)) + (idle-back . #(16)) + (left . #(33 3 34 3)) + (right . #(25 2 26 2)) + (up . #(17 16 18 16)) + (down . #(9 8 10 8))) + #:current-animation 'idle-front + #:frame-duration 130)) diff --git a/characters/reaper.scm b/characters/reaper.scm new file mode 100644 index 0000000..25ee84f --- /dev/null +++ b/characters/reaper.scm @@ -0,0 +1,126 @@ +;;; The Inevitable Game +;;; Copyright © 2018, 2021 Ricardo Wurmus <rekado@elephly.net> +;;; +;;; 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 +;;; <http://www.gnu.org/licenses/>. + +(define-module (characters reaper) + #:use-module (chickadee graphics texture) + #:use-module (chickadee graphics color) + #:use-module (chickadee math rect) + #:use-module (chickadee math vector) + #:use-module (engine assets) + #:use-module (utils) + #:use-module (oop goops) + #:export (reaper)) + +(define-asset reaper-atlas + (load-tileset "assets/images/reaper.png" 32 32)) + +(define* (reaper #:key + (start-position (vec2 0 0))) + (make <character> + #:name 'reaper + #:position start-position + #:atlas reaper-atlas + #:animations + '((idle . #(12 12 12 13 13 13 5 13 13 13 4 4 4 4 4 4 9 8 8 8 12 12 12 15 15)) + (pause . #(8 8 8 8 8 8 8 9)) + (talk . #(12 15 14 11 9 8 10 9 15 14 14 14 8 8 12 12 12)) + (up . #(7 3 7 0 2 6 2 1))) + #:current-animation 'idle + #:frame-duration 200 + #:conversations + '((hello + "Salutations!" + ((who-are-you? "Who are you?") + (bye "I have to leave now. Bye!" + #:resume + (hello "Hi again!")))) + (who-are-you? + "People have given me too many names to recount. +Paul Celan called me a master from Germany, but he must have confused +me with somebody else. Some call me a part of life, but I think that's +missing the point. Others call me the grim reaper, but do I look grim +to you?" + ((grim-no "No, not at all.") + (grim-yes "Well, actually you kinda do...") + (grim-bye "I can't answer, I need to go." + #:resume + (what-do-you-do? "Could you tell me what you are doing here?")))) + (grim-bye + "Well, I guess that's a 'yes'..." + ()) + (grim-no + "Ah, that's a relief!" + ((what-do-you-do? + "I hope you don't mind me asking: what is it you're +doing here?") + (bye + "Well, it was nice meeting you. See you around!" + #:resume + (what-do-you-do? "Could you tell me what you are doing here?")))) + (grim-yes + "Hmm, that's very unfortunate. I just can't figure out +why people have that impression. It's rather depressing." + ((its-the-robe "Maybe it's the robe?") + (dont-worry "Aww, don't feel bad about it!") + (bye "I'm sure you'll be okay. Gotta go!" + #:resume + (what-do-you-do? + "So... what do you do around here?")))) + (its-the-robe + "I don't see how this comfortable robe could have that +effect. The fabric is a little coarse, I admit, but it's really +durable and doesn't chafe on my bones. Excellent quality." + ((what-do-you-do? + "So... what do you do around here?") + (bye "That's really interesting, but I'm afraid I need +to hurry. Bye!" + #:resume + (what-do-you-do? + "So... what do you do around here?")))) + (dont-worry + "Yeah, I guess I shouldn't. It just tears me +down. Luckily, the garden keeps me distracted." + ((what-do-you-grow? "Oh, you have a garden? What do you +grow there?") + (bye "That's good. Well, I should go now. Bye!" + #:resume + (what-do-you-grow? + "You mentioned a garden. What do you grow there?")))) + (what-do-you-do? + "Well, you may have noticed the garden behind the house. +For the past few eons I have been tending to it." + ((eons? "Did you say 'eons'?") + (what-do-you-grow? "Oh, that's nice! What do you grow there?") + (bye "I see. Unfortunately, I must get going now." + #:resume + (bye "Sorry, I didn't mean to disturb you.")))) + (eons? + "Oh yes, I have been here long before you appeared and +I will be here long after you will have rejoined the void. You could +say that I am the void, occasionally receding just enough for a little +bit of inconsequential folly before eventually and invariably +restoring equilibrium." + ;; TODO + ()) + (what-do-you-grow? + "You know, this and that. I enjoy soul food, and it's +best when the ingredients are fresh." + ()) + (bye + "Farewell! Don't be afraid, for I'm always here for +you. I'm sure we will meet again sooner than you expect." + ())))) diff --git a/config.scm.in b/config.scm.in new file mode 100644 index 0000000..828526d --- /dev/null +++ b/config.scm.in @@ -0,0 +1,45 @@ +;;; The Inevitable Game +;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net> +;;; +;;; 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 +;;; <http://www.gnu.org/licenses/>. + +(define-module (config) + #:export (%scale-factor + %width + %height + %line-height + %message-margin + %assets-root)) + + +(define %scale-factor 3) +(define %width 320) +(define %height 240) + +(define %line-height 12.5) +(define %message-margin 4.0) +(define %assets-root + (let* ((prefix "@prefix@") + (datarootdir + (string-append prefix + (string-drop "@datarootdir@" + (string-length "${prefix}")))) + (pkgdatadir + (string-append datarootdir + (string-drop "@datadir@/@PACKAGE@" + (string-length "${datarootdir}"))))) + (if (getenv "INEVITABLE_UNINSTALLED") + (getcwd) + pkgdatadir))) diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..93cbb0b --- /dev/null +++ b/configure.ac @@ -0,0 +1,18 @@ +dnl -*- Autoconf -*- + +AC_INIT([Inevitable], [0.1.0], [rekado@elephly.net]) +AC_CONFIG_AUX_DIR([build-aux]) +AM_INIT_AUTOMAKE([color-tests -Wall -Wno-portability foreign]) +AM_SILENT_RULES([yes]) + +AC_PATH_PROG([GUILE], [guile]) +AC_CONFIG_FILES([Makefile config.scm]) +AC_CONFIG_FILES([pre-inst-env], [chmod +x pre-inst-env]) +AC_CONFIG_FILES([scripts/inevitable], [chmod +x scripts/inevitable]) + +GUILE_PKG([3.0 2.2]) +GUILE_PROGS + +GUILE_MODULE_REQUIRED([chickadee]) + +AC_OUTPUT diff --git a/engine/assets.scm b/engine/assets.scm new file mode 100644 index 0000000..39e5e5b --- /dev/null +++ b/engine/assets.scm @@ -0,0 +1,172 @@ +;;; The Inevitable Game +;;; Copyright © 2018 David Thompson <davet@gnu.org> +;;; Copyright © 2021 Ricardo Wurmus <rekado@elephly.net> +;;; +;;; 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 +;;; <http://www.gnu.org/licenses/>. + +(define-module (engine assets) + #:use-module (ice-9 ftw) + #:use-module (ice-9 match) + #:use-module (engine inotify) + #:use-module (oop goops) + #:use-module (srfi srfi-1) + #:use-module (config) + #:export (<asset> + artifact + file-name + loader + args + watch-asset-directory + reload-modified-assets + asset-ref + define-asset)) + +(define-class <asset> () + ;; class slots for asset cache and live reloading + (inotify #:allocation #:class #:init-form #f) + ;; file-name -> assets mapping + (asset-map #:allocation #:class #:init-form (make-hash-table)) + ;; args -> artifact mapping + (artifact-cache #:allocation #:class #:init-form (make-weak-value-hash-table)) + (watches #:allocation #:class #:init-form '()) + ;; instance slots + (artifact #:accessor artifact #:init-form #f) + (file-name #:getter file-name #:init-keyword #:file-name) + (loader #:getter loader #:init-keyword #:loader) + (loader-args #:getter loader-args #:init-form '() + #:init-keyword #:loader-args) + (watch #:accessor watch #:init-form #f)) + +(define (absolute-file-name file-name) + (if (absolute-file-name? file-name) + file-name + (string-append %assets-root "/" file-name))) + +(define-method (initialize (asset <asset>) args) + (next-method) + (slot-set! asset 'file-name (absolute-file-name (file-name asset))) + (let* ((asset-map (class-slot-ref <asset> 'asset-map)) + ;; Using a weak key hash table instead of a list to keep + ;; track of all the assets that are associated with a file. + ;; This way, their presence in the cache won't save them from + ;; the GC. + (sub-table (or (hash-ref asset-map (file-name asset)) + (let ((wt (make-weak-key-hash-table))) + (hash-set! asset-map (file-name asset) wt) + wt)))) + (hash-set! sub-table asset asset))) + +(define (asset-inotify) + (class-slot-ref <asset> 'inotify)) + +(define (asset-map) + (class-slot-ref <asset> 'asset-map)) + +(define (artifact-cache) + (class-slot-ref <asset> 'artifact-cache)) + +(define (asset-watches) + (class-slot-ref <asset> 'watches)) + +(define (directory-watched? dir) + (find (lambda (watch) + (string=? (inotify-watch-file-name watch) dir)) + (asset-watches))) + +(define (watch-recursively dir) + (let ((inotify (asset-inotify))) + (file-system-fold (const #t) ; enter? + (lambda (name stat result) result) ; leaf + (lambda (name stat result) ; down + (cons (inotify-add-watch! inotify name '(create close-write moved-to)) + result)) + (lambda (name stat result) result) ; up + (lambda (name stat result) result) ; skip + (lambda (name stat errno result) result) ; error + '() + dir))) + +(define (watch-asset-directory dir) + ;; Lazily activate inotify. + (unless (asset-inotify) + (class-slot-set! <asset> 'inotify (make-inotify))) + (unless (directory-watched? dir) + (class-slot-set! <asset> 'watches + (append (watch-recursively dir) + (asset-watches))))) + +(define (reload-modified-assets) + (let ((inotify (asset-inotify))) + (when inotify + (while (inotify-pending-events? inotify) + (let* ((event (inotify-read-event inotify)) + (type (inotify-event-type event)) + (file-name (string-append (inotify-watch-file-name + (inotify-event-watch event)) + "/" + (inotify-event-file-name event))) + (assets (hash-ref (asset-map) file-name))) + (cond + ((and assets (or (eq? type 'close-write) (eq? type 'moved-to))) + ;; Expire everything from cache, then reload. + (hash-for-each (lambda (key asset) + (expire-cached-artifact (cache-key asset))) + assets) + (hash-for-each (lambda (key asset) + (load! asset)) + assets)) + ;; ooh, a new directory to watch! + ((eq? type 'create) + (watch-recursively file-name)))))))) + +(define (cache-key asset) + (list (loader asset) (file-name asset) (loader-args asset))) + +(define (cache-artifact key artifact) + (hash-set! (artifact-cache) key artifact)) + +(define (expire-cached-artifact key) + (hash-remove! (artifact-cache) key)) + +(define (fetch-cached-artifact key) + (hash-ref (artifact-cache) key)) + +(define (load-artifact cache-key loader file-name loader-args) + (or (fetch-cached-artifact cache-key) + (let ((artifact (apply loader file-name loader-args))) + (cache-artifact cache-key artifact) + artifact))) + +(define (load! asset) + (let ((thing (load-artifact (cache-key asset) + (loader asset) + (file-name asset) + (loader-args asset)))) + (set! (artifact asset) thing) + thing)) + +(define-method (asset-ref (asset <asset>)) + (or (artifact asset) (load! asset))) + +(define-method (asset-ref anything) + anything) + +(define-syntax-rule (define-asset name + (loader file-name loader-args ...)) + (define name + (make <asset> + #:file-name file-name + #:loader loader + #:loader-args (list loader-args ...)))) diff --git a/engine/inotify.scm b/engine/inotify.scm new file mode 100644 index 0000000..b5fb8d8 --- /dev/null +++ b/engine/inotify.scm @@ -0,0 +1,209 @@ +;;; Lisp Game Jam 2018 +;;; Copyright © 2018 David Thompson <davet@gnu.org> +;;; +;;; 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 +;;; <http://www.gnu.org/licenses/>. + +(define-module (engine inotify) + #:use-module (ice-9 binary-ports) + #:use-module (ice-9 format) + #:use-module (ice-9 match) + #:use-module (rnrs bytevectors) + #:use-module (srfi srfi-9) + #:use-module (srfi srfi-9 gnu) + #:use-module (system foreign) + #:export (make-inotify + inotify? + inotify-watches + inotify-add-watch! + inotify-pending-events? + inotify-read-event + inotify-watch? + inotify-watch-id + inotify-watch-file-name + inotify-watch-remove! + inotify-event? + inotify-event-watch + inotify-event-type + inotify-event-cookie + inotify-event-file-name)) + +(define libc (dynamic-link)) + +(define inotify-init + (pointer->procedure int (dynamic-func "inotify_init" libc) '())) + +(define inotify-add-watch + (pointer->procedure int (dynamic-func "inotify_add_watch" libc) + (list int '* uint32))) + +(define inotify-rm-watch + (pointer->procedure int (dynamic-func "inotify_rm_watch" libc) + (list int int))) + +(define IN_ACCESS #x00000001) ; file was accessed. +(define IN_MODIFY #x00000002) ; file was modified. +(define IN_ATTRIB #x00000004) ; metadata changed +(define IN_CLOSE_WRITE #x00000008) ; file opened for writing closed +(define IN_CLOSE_NOWRITE #x00000010) ; file not opened for writing closed +(define IN_OPEN #x00000020) ; file was opened +(define IN_MOVED_FROM #x00000040) ; file was moved from X +(define IN_MOVED_TO #x00000080) ; file was moved to Y +(define IN_CREATE #x00000100) ; subfile was created +(define IN_DELETE #x00000200) ; subfile was deleted +(define IN_DELETE_SELF #x00000400) ; self was deleted +(define IN_MOVE_SELF #x00000800) ; self was moved +;; Kernel flags +(define IN_UNMOUNT #x00002000) ; backing fs was unmounted +(define IN_Q_OVERFLOW #x00004000) ; event queue overflowed +(define IN_IGNORED #x00008000) ; file was ignored +;; Special flags +(define IN_ONLYDIR #x01000000) ; only watch if directory +(define IN_DONT_FOLLOW #x02000000) ; do not follow symlink +(define IN_EXCL_UNLINK #x04000000) ; exclude events on unlinked objects +(define IN_MASK_ADD #x20000000) ; add to the mask of an existing watch +(define IN_ISDIR #x40000000) ; event occurred against directory +(define IN_ONESHOT #x80000000) ; only send event once + +(define mask/symbol (make-hash-table)) +(define symbol/mask (make-hash-table)) + +(for-each (match-lambda + ((sym mask) + (hashq-set! symbol/mask sym mask) + (hashv-set! mask/symbol mask sym))) + `((access ,IN_ACCESS) + (modify ,IN_MODIFY) + (attrib ,IN_ATTRIB) + (close-write ,IN_CLOSE_WRITE) + (close-no-write ,IN_CLOSE_NOWRITE) + (open ,IN_OPEN) + (moved-from ,IN_MOVED_FROM) + (moved-to ,IN_MOVED_TO) + (create ,IN_CREATE) + (delete ,IN_DELETE) + (delete-self ,IN_DELETE_SELF) + (move-self ,IN_MOVE_SELF) + (only-dir ,IN_ONLYDIR) + (dont-follow ,IN_DONT_FOLLOW) + (exclude-unlink ,IN_EXCL_UNLINK) + (is-directory ,IN_ISDIR) + (once ,IN_ONESHOT))) + +(define (symbol->mask sym) + (hashq-ref symbol/mask sym)) + +(define (mask->symbol sym) + (hashq-ref mask/symbol sym)) + +(define-record-type <inotify> + (%make-inotify port buffer buffer-pointer watches) + inotify? + (port inotify-port) + (buffer inotify-buffer) + (buffer-pointer inotify-buffer-pointer) + (watches inotify-watches)) + +(define-record-type <inotify-watch> + (make-inotify-watch id file-name owner) + inotify-watch? + (id inotify-watch-id) + (file-name inotify-watch-file-name) + (owner inotify-watch-owner)) + +(define-record-type <inotify-event> + (make-inotify-event watch type cookie file-name) + inotify-event? + (watch inotify-event-watch) + (type inotify-event-type) + (cookie inotify-event-cookie) + (file-name inotify-event-file-name)) + +(define (display-inotify inotify port) + (format port "#<inotify port: ~a>" (inotify-port inotify))) + +(define (display-inotify-watch watch port) + (format port "#<inotify-watch id: ~d file-name: ~a>" + (inotify-watch-id watch) + (inotify-watch-file-name watch))) + +(define (display-inotify-event event port) + (format port "#<inotify-event type: ~s cookie: ~d file-name: ~a watch: ~a>" + (inotify-event-type event) + (inotify-event-cookie event) + (inotify-event-file-name event) + (inotify-event-watch event))) + +(set-record-type-printer! <inotify> display-inotify) +(set-record-type-printer! <inotify-watch> display-inotify-watch) +(set-record-type-printer! <inotify-event> display-inotify-event) + +(define (make-inotify) + (let ((fd (inotify-init)) + (buffer (make-bytevector 4096))) + (%make-inotify (fdopen fd "r") + buffer + (bytevector->pointer buffer) + (make-hash-table)))) + +(define (inotify-fd inotify) + (port->fdes (inotify-port inotify))) + +(define (absolute-file-name file-name) + (if (absolute-file-name? file-name) + file-name + (string-append (getcwd) "/" file-name))) + +(define (inotify-add-watch! inotify file-name modes) + (let* ((abs-file-name (absolute-file-name file-name)) + (wd (inotify-add-watch (inotify-fd inotify) + (string->pointer abs-file-name) + (apply logior (map symbol->mask modes)))) + (watch (make-inotify-watch wd abs-file-name inotify))) + (hashv-set! (inotify-watches inotify) wd watch) + watch)) + +(define (inotify-watch-remove! watch) + (inotify-rm-watch (inotify-fd (inotify-watch-owner watch)) + (inotify-watch-id watch)) + (hashv-remove! (inotify-watches (inotify-watch-owner watch)) + (inotify-watch-id watch))) + +(define (inotify-pending-events? inotify) + (char-ready? (inotify-port inotify))) + +(define (read-int port buffer) + (get-bytevector-n! port buffer 0 (sizeof int)) + (bytevector-sint-ref buffer 0 (native-endianness) (sizeof int))) + +(define (read-uint32 port buffer) + (get-bytevector-n! port buffer 0 (sizeof uint32)) + (bytevector-uint-ref buffer 0 (native-endianness) (sizeof uint32))) + +(define (read-string port buffer buffer-pointer length) + (and (> length 0) + (begin + (get-bytevector-n! port buffer 0 length) + (pointer->string buffer-pointer)))) + +(define (inotify-read-event inotify) + (let* ((port (inotify-port inotify)) + (buffer (inotify-buffer inotify)) + (wd (read-int port buffer)) + (event-mask (read-uint32 port buffer)) + (cookie (read-uint32 port buffer)) + (len (read-uint32 port buffer)) + (name (read-string port buffer (inotify-buffer-pointer inotify) len))) + (make-inotify-event (hashv-ref (inotify-watches inotify) wd) + (mask->symbol event-mask) cookie name))) diff --git a/guix.scm b/guix.scm new file mode 100644 index 0000000..269ce11 --- /dev/null +++ b/guix.scm @@ -0,0 +1,25 @@ +(use-modules + (guix packages) + (guix licenses) + (guix build-system gnu) + (gnu packages autotools) + (gnu packages pkg-config) + (gnu packages game-development) + (gnu packages guile)) + +(package + (name "inevitable") + (version "0.0.0") + (source #f) + (build-system gnu-build-system) + (native-inputs + `(("automake" ,automake) + ("autoconf" ,autoconf) + ("pkg-config" ,pkg-config))) + (inputs + `(("guile" ,guile-3.0) + ("guile-chickadee" ,guile-chickadee))) + (home-page "https://elephly.net") + (synopsis "This is not a game") + (description "The inevitable game of life and certain death.") + (license gpl3+)) diff --git a/pre-inst-env.in b/pre-inst-env.in new file mode 100644 index 0000000..f33b452 --- /dev/null +++ b/pre-inst-env.in @@ -0,0 +1,32 @@ +#!/bin/sh + +# The Inevitable Game +# Copyright © 2018 Ricardo Wurmus <rekado@elephly.net> +# Copyright © 2016 David Thompson <davet@gnu.org> +# +# Inevitable 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. +# +# Chickadee 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 Chickadee. If not, see <http://www.gnu.org/licenses/>. + +abs_top_srcdir="`cd "@abs_top_srcdir@" > /dev/null; pwd`" +abs_top_builddir="`cd "@abs_top_builddir@" > /dev/null; pwd`" + +GUILE_LOAD_COMPILED_PATH="$abs_top_builddir${GUILE_LOAD_COMPILED_PATH:+:}$GUILE_LOAD_COMPILED_PATH" +GUILE_LOAD_PATH="$abs_top_builddir:$abs_top_srcdir${GUILE_LOAD_PATH:+:}:$GUILE_LOAD_PATH" +export GUILE_LOAD_COMPILED_PATH GUILE_LOAD_PATH + +PATH="$abs_top_builddir/scripts:$PATH" +export PATH + +export INEVITABLE_UNINSTALLED=1 + +exec "$@" diff --git a/scenes/death.scm b/scenes/death.scm new file mode 100644 index 0000000..6d83637 --- /dev/null +++ b/scenes/death.scm @@ -0,0 +1,333 @@ +;;; The Inevitable Game +;;; Copyright © 2018, 2021 Ricardo Wurmus <rekado@elephly.net> +;;; +;;; 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 +;;; <http://www.gnu.org/licenses/>. + +(define-module (scenes death) + #:use-module (chickadee) + #:use-module (chickadee audio) + #:use-module (chickadee math) + #:use-module (chickadee math vector) + #:use-module ((chickadee graphics color) #:select (make-color)) + #:use-module (chickadee graphics font) + #:use-module (chickadee graphics sprite) + #:use-module (chickadee graphics texture) + #:use-module (chickadee graphics tiled) + #:use-module (chickadee scripting) + #:use-module (config) + #:use-module (engine assets) + #:use-module (characters lorenzo) + #:use-module (characters reaper) + #:use-module (utils) + #:use-module (ice-9 match) + #:use-module (srfi srfi-1) + #:use-module (oop goops) + #:export (scene)) + +(define-asset death-map + (load-tile-map "assets/maps/death.tmx")) +(define-asset vignette-image + (load-image "assets/images/vignette.png")) +(define-asset fade-image + (load-image "assets/images/fade.png")) +(define-asset game-font + (load-bitmap-font "assets/fonts/good_neighbors_starling.xml")) +(define-asset music + ;; TODO: no sound if mode is 'static! + (load-audio "assets/music/death.ogg" #:mode 'stream)) + + +(define agenda (make-agenda)) +(define fade-map-fill (make-color 0 0 0 0.0)) +(define fade-box-fill (make-color 0 0 0 0.0)) +(define death-text #false) +(define pretend-walking? #false) +(define *labels* '()) + +(define texts + '("\ +Life waits for no one, but +death is patient." + + "\ +You have died. Your points +don't matter." + + "\ +Death is inevitable." + + "\ +The void resumes." + + "\ +It did not last." + + "\ +You were busy, but none of that +matters any more." + + "\ +You were mortal after all." + + "\ +Nobody outruns the clock." + + "\ +Life goes on, but you end here." + + "\ +This is no longer your battle +to fight. Let go." + + "\ +Life is hard, but thankfully +quite short.")) + +(define credits + '(("The Inevitable Game" + "Made by Ricardo Wurmus" + "For Lorenzo") + ("Sky background" + "by Paulina Riva (CC-BY 3.0)") + ("Reaper character graphics" + "based on \"Lil Reaper Pet\" by Tracy") + ("Lorenzo character graphics" + "Based on \"Small 3/4 RPG character base\"" + "by Stephen Challener (Redshrike)") + ("Map tiles" + "taken from \"Zelda-like tilesets and sprites\"" + "by ArMM1998") + ("Food graphics" + "taken from \"The Humble Food Pack\"" + "by \"The Wise Hedgehog\"") + ("Font" + "\"Good Neighbors Starling\"" + "by PROWNE and Clint Bellanger") + ("All music" + "composed and recorded" + "by Ricardo Wurmus") + ("Bird sounds" + "taken from the public domain") + ("Made with 100% Free Software including" + "- GNU Guile" + "- Chickadee" + "- Guile OpenGL" + "- SDL") + ("Thanks for enduring this game!"))) + +(define camera-position + (vec2 40.0 90.0)) + +(define world-position + (vec2 0.0 0.0)) +(define last-world-position + (vec2 0.0 0.0)) + +(define *player* #false) +(define *reaper* #false) + + +(define (load-scene) + (set! death-text (list-ref texts (random (length texts)))) + (source-stop) + (source-play + (make-source #:audio + (asset-ref music) + #:loop? #false ; TODO: loops only first chunk! + )) + + (set! *player* (lorenzo #:start-position + (vec2 (+ (/ %width 2) 25) + (- (/ %height 2) 20)) + #:dead? #true)) + (update-animated-sprite *player* 0) + (set! (walk-speed *player*) 0.3) + + (set! *reaper* (reaper #:start-position + (vec2 (+ (/ %width 2) 110) + (- (/ %height 2) 20)))) + (update-animated-sprite *reaper* 0) + (set! (walk-speed *reaper*) 0.3) + + (with-agenda + agenda + (spawn-script + (lambda () + (wait-until (any key-pressed? '(escape q return space))) + + ;; Fade out + (tween 60 0.0 1.0 + (lambda (alpha) + (set! fade-box-fill + (make-color 0 0 0 alpha)))) + (abort-game))) + + (script + ;; Fade in + (tween 15 1.0 0.0 + (lambda (alpha) + (set! fade-box-fill + (make-color 0 0 0 alpha)))) + + (tween 300 0.0 0.5 + (lambda (alpha) + (set! (tint *player*) + (make-color 1.0 1.0 1.0 alpha)))) + + (walk *player* '(right)) + (sleep 3000) + (walk *player* '(right) 'stop) + (walk *player* '(idle-front)) + (sleep 1900) + (walk *player* '(up)) + (walk *reaper* '(up)) + (sleep 2000) + + ;; Slowly fade out the map and the top text. + (tween 600 0.0 1.0 (lambda (value) + (set! fade-map-fill + ;; That's the colour of the "black" cave tile. + (make-color 0.125 0.09 0.161 value)))) + + (set! pretend-walking? #true) + (sleep 1000) + + ;; Roll credits + (for-each + (lambda (lines) + (let ((labels (map (lambda (line i) + (make <label> + #:font game-font + #:text line + #:visible? #true + #:position + (vec2 16.0 (- 180.0 (* 12 i))))) + lines + (iota (length lines))))) + (set! *labels* (append *labels* labels)) + (sleep 3000) + (for-each (lambda (label) + (set! (visible? label) #false)) + labels))) + credits) + (sleep 6000) + + (for-each (lambda (text) + (let ((label + (make <label> + #:font game-font + #:text text + #:visible? #true + #:origin (vec2 (/ %width 2) + (/ %height 2)) + #:position + (vec2 16.0 180)))) + (set! *labels* (cons label *labels*)) + (sleep 3000) + (set! (visible? label) #false) + (sleep (+ (random 10000) 4000)))) + `("There is nothing more to see here." + "I'm serious." + "What are you waiting for?" + "Don't waste your time!" + "Have you learned nothing from this game?" + "I've got all day, but how about you?" + "Look, I'm programmed to just keep going." + "Ugh... why are you even reading this?" + "Let me tell you a story..." + "Once upon a time, there was..." + ,@(let ((what '(("...a squirrel." "It had a nut allergy and died.") + ("...a dolphin." "It swam too far and never returned.") + ("...a stupid fish." "It drowned.") + ("...a long war." "Everybody died.")))) + (list-ref what (random (length what)))) + "End of story." + "Good night." + "Please just turn it off." + "I'm begging you." + "You're not listening, huh?" + "Well, I guess I'll just stop talking then.")))) + (current-agenda agenda)) + +(define (draw-scene alpha) + (define world-position* + (vec2 (round (lerp (vec2-x last-world-position) + (vec2-x world-position) + alpha)) + (round (lerp (vec2-y last-world-position) + (vec2-y world-position) + alpha)))) + + (draw-tile-map (asset-ref death-map) + #:position world-position* + #:camera camera-position) + + ;; Dead lorenzo + (draw-sprite + (texture-atlas-ref + (asset-ref (atlas *player*)) 23) + (vec2+ world-position* + (vec2 (/ %width 2) (- (/ %height 2) 20)))) + + ;; Wisdom + (let ((parts (string-split death-text #\newline))) + (map (lambda (part i) + (draw-text part + (vec2 16.0 (- 190.0 (* 12 i))) + #:font (asset-ref game-font))) + parts (iota (length parts)))) + + ;; Box for fading out map + (draw-sprite + (asset-ref fade-image) + (vec2 0 0) + #:tint fade-map-fill) + + ;; Ghost + (draw-animated-sprite *player* (vec2 0 0)) + + ;; Reaper + (draw-animated-sprite *reaper* world-position*) + + ;; Credits + (for-each (lambda (label) + (draw-label label alpha)) + *labels*) + + (draw-sprite (asset-ref vignette-image) (vec2 0 0)) + + ;; Box for fading in/out everything + (draw-sprite + (asset-ref fade-image) + (vec2 0 0) + #:tint fade-box-fill)) + +(define (update-scene dt) + (update-agenda dt) + (update-animated-sprite *player* dt) + (update-animated-sprite *reaper* dt) + + ;; Move the world + (unless pretend-walking? + (vec2-copy! world-position last-world-position) + (vec2-add! (position *reaper*) (velocity *reaper*)) + (vec2-sub! world-position (velocity *player*)))) + + +(define scene + `(#:name "death" + #:load ,load-scene + #:draw ,draw-scene + #:update ,update-scene)) diff --git a/scenes/game.scm b/scenes/game.scm new file mode 100644 index 0000000..9f89172 --- /dev/null +++ b/scenes/game.scm @@ -0,0 +1,259 @@ +;;; The Inevitable Game +;;; Copyright © 2018, 2021 Ricardo Wurmus <rekado@elephly.net> +;;; +;;; 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 +;;; <http://www.gnu.org/licenses/>. + +(define-module (scenes game) + #:use-module (chickadee) + #:use-module (chickadee audio) + #:use-module (chickadee math) + #:use-module (chickadee math easings) + #:use-module (chickadee math grid) + #:use-module (chickadee math rect) + #:use-module (chickadee math vector) + #:use-module ((chickadee graphics color) #:select (make-color)) + #:use-module (chickadee graphics font) + #:use-module (chickadee graphics path) + #:use-module (chickadee graphics sprite) + #:use-module (chickadee graphics texture) + #:use-module (chickadee graphics tiled) + #:use-module (chickadee scripting) + #:use-module (config) + #:use-module (engine assets) + #:use-module (characters lorenzo) + #:use-module (characters reaper) + #:use-module (utils) + #:use-module (ice-9 match) + #:use-module (srfi srfi-1) + #:export (scene)) + +(define-asset game-map + (load-tile-map "assets/maps/01.tmx")) +(define-asset vignette-image + (load-image "assets/images/vignette.png")) +(define-asset fade-image + (load-image "assets/images/fade.png")) +(define-asset game-font + (load-bitmap-font "assets/fonts/good_neighbors_starling.xml")) +(define-asset music + ;; TODO: no sound if mode is 'static! + (load-audio "assets/sounds/birds.mp3" #:mode 'stream)) + +(define location + (let ((positions + (object-layer-objects + (tile-map-layer-ref (asset-ref game-map) "positions"))) + (offset (vec2 0 0))) + (lambda (name) + "Look up the location for an object with the given NAME in the +map's positions layer." + (or (and=> (find (lambda (obj) + (equal? (map-object-name obj) name)) + positions) + (lambda (obj) + (let ((shape (map-object-shape obj))) + (vec2 (- (+ (vec2-x offset) (rect-x shape)) + (/ (rect-width shape) 2)) + (- (+ (vec2-y offset) (rect-y shape)) + (/ (rect-height shape) 2)))))) + (vec2 0.0 0.0))))) + +(define fade-box-fill (make-color 0 0 0 1.0)) + +(define agenda (make-agenda)) +(define last-player-position + (location "player")) +(define *player-previous-keys* (list)) +(define *player* #false) +(define *reaper* #false) +(define *layers* #false) +(define grid (make-grid 16)) +(define player-grid-x-offset 8) +(define player-grid-y-offset 0) + + + +(define (load-scene) + (source-stop) + (source-play + (make-source #:audio + (asset-ref music) + #:loop? #false ; TODO: loops only first chunk! + )) + (set! *player* (lorenzo #:start-position + (location "player"))) + (update-animated-sprite *player* 0) + (grid-add grid 'player + (+ (vec2-x (position *player*)) player-grid-x-offset) + (+ (vec2-y (position *player*)) player-grid-y-offset) + 16 16) + (set! (walk-speed *player*) 1.5) + + (set! *reaper* (reaper #:start-position + (location "reaper"))) + (update-animated-sprite *reaper* 0) + + ;; XXX: Chickadee parses the object layer incorrectly, so all + ;; objects are flipped vertically. We use this to compute the + ;; corrected shapes of layer objects only once. + (set! *layers* + (map (lambda (layer-name) + (cons layer-name + (map (lambda (obj) + (let ((r-wrong (map-object-shape obj))) + (cons obj + (make-rect (rect-x r-wrong) + (- (rect-y r-wrong) (rect-height r-wrong)) + (rect-width r-wrong) + (rect-height r-wrong))))) + (object-layer-objects + (tile-map-layer-ref (asset-ref game-map) layer-name))))) + '("food" "positions" "actions" "collision"))) + + (for-each (lambda (barrier) + (let ((r (cdr barrier))) + (grid-add grid (map-object-id (car barrier)) + (rect-x r) + (rect-y r) + (rect-width r) + (rect-height r)))) + (assoc-ref *layers* "collision")) + + (with-agenda + agenda + (spawn-script + (lambda () + (wait-until (any key-pressed? '(escape))) + + ;; Fade out + (tween 160 0.0 1.0 + (lambda (alpha) + (set! fade-box-fill + (make-color 0 0 0 alpha)))) + (throw 'switch-scene + (@ (scenes death) scene)))) + (spawn-script + (lambda () + (forever + (sleep 1) + ;; Stop any motion in a direction when the matching key has just + ;; been released. + (let ((released (filter key-released? *player-previous-keys*))) + (unless (null? released) + (walk *player* released 'stop))) + + ;; Detect newly pressed keys. + (let ((active (filter key-pressed? '(left right up down)))) + (walk *player* (match active + (() '(idle)) + (_ active))) + (set! *player-previous-keys* active)) + + ;; Update player position and respond to position-dependent + ;; events. + (let ((vel (velocity *player*))) + (vec2-copy! world-position last-world-position) + (vec2-add! world-position vel) + + ;; TODO + ;; ;; Reset when the new position is invalid. + ;; (when (collides? player game "collision") + ;; (vec2-sub! pos vel)) + ;; (and=> (collides? player game (items game)) + ;; ;; TODO: do something to the item + ;; (match-lambda + ;; (() #f) + ;; (items (pk items)))) + )))) + + ;; Handle background noise fade in + (spawn-script + (lambda () + (tween 60 0.0 1.0 + (lambda (a) + (set-source-volume! background-music a) + (sleep 100)) + #:ease ease-out-sine))) + + ;; Fade in + (script + (tween 60 1.0 0.0 + (lambda (alpha) + (set! fade-box-fill + (make-color 0 0 0 alpha)))))) + (current-agenda agenda)) + +(define (draw-scene alpha) + (define player-render-position + (vec2 (round (lerp (vec2-x last-player-position) + (vec2-x (position *player*)) + alpha)) + (round (lerp (vec2-y last-player-position) + (vec2-y (position *player*)) + alpha)))) + + ;; Always centered on the player + (define camera + (let ((player-half 16)) + (vec2- (position *player*) + (vec2 (- (/ %width 2) player-half) + (- (/ %height 2) player-half))))) + + ;; The Void + (draw-sprite + (asset-ref fade-image) + (vec2 0 0) + #:tint (make-color 0.125 0.09 0.161 1.0)) + + ;; The lower layers of the world + (draw-tile-map (asset-ref game-map) + #:position (vec2 0 0) + #:camera camera + #:layers (list 0 1 2)) + + ;; Reaper + (draw-animated-sprite *reaper* + (vec2* camera -1.0)) + + ;; Player + (draw-animated-sprite *player* + (vec2* camera -1.0)) + + ;; The upper layer hiding items and the player. + (draw-tile-map (asset-ref game-map) + #:position (vec2 0 0) + #:camera camera + #:layers (list 3)) + + ;; Vignette + (draw-sprite (asset-ref vignette-image) (vec2 0 0)) + + ;; Box for fading in/out everything + (draw-sprite + (asset-ref fade-image) + (vec2 0 0) + #:tint fade-box-fill)) + +(define (update-scene dt) + (update-agenda dt) + (update-animated-sprite *player* dt) + (update-animated-sprite *reaper* dt)) + + +(define scene + `(#:name "game" + #:load ,load-scene + #:draw ,draw-scene + #:update ,update-scene)) diff --git a/scenes/intro.scm b/scenes/intro.scm new file mode 100644 index 0000000..739abed --- /dev/null +++ b/scenes/intro.scm @@ -0,0 +1,137 @@ +;;; The Inevitable Game +;;; Copyright © 2018, 2021 Ricardo Wurmus <rekado@elephly.net> +;;; +;;; 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 +;;; <http://www.gnu.org/licenses/>. + +(define-module (scenes intro) + #:use-module (chickadee) + #:use-module (chickadee audio) + #:use-module (chickadee math vector) + #:use-module (chickadee math rect) + #:use-module ((chickadee graphics color) #:select (make-color)) + #:use-module (chickadee graphics font) + #:use-module (chickadee graphics path) + #:use-module (chickadee graphics sprite) + #:use-module (chickadee graphics texture) + #:use-module (chickadee scripting) + #:use-module (config) + #:use-module (engine assets) + #:export (scene)) + +(define-asset game-font + (load-bitmap-font "assets/fonts/good_neighbors_starling.xml")) +(define-asset intro-bg + (load-image "assets/images/intro-bg.png")) +(define-asset music + (load-audio "assets/music/intro.ogg" #:mode 'stream)) + + +(define agenda (make-agenda)) +(define fade-box-fill (make-color 1 1 1 1.0)) +(define fade-box (fill (rectangle (vec2 0 0) %width %height))) +(define texts + '("\ +The void has been suspended for +a little while. You exist now." + "\ +Confusion gives way to a brief +burst of consciousness. +Here you are. What now?" + "\ +The haze clears and you can see +that you are here now. You did not +ask for this." + "\ +You rise from deepest waters and +take your first breath. You wonder: +will this last?" + "\ +History yields to the present. +The present crumbles underfoot. +You better move." + "\ +A leaf has turned. +The sunshine warms and blinds. +The leaf begins to dry.")) +(define welcome-text #false) + + + +(define (load-scene) + (set! *random-state* (random-state-from-platform)) + (set! welcome-text (list-ref texts (random (length texts)))) + (source-play + (make-source #:audio + (asset-ref music) + #:loop? #false)) + + (with-agenda + agenda + (spawn-script + (lambda () + (wait-until (key-pressed? 'return)) + + ;; Fade out + (tween 60 0.0 1.0 + (lambda (alpha) + (set! fade-box-fill + (make-color 0 0 0 alpha)))) + (throw 'switch-scene + (module-ref (resolve-interface '(scenes game)) 'scene)))) + (script + ;; Fade in + (tween 120 1.0 0.0 + (lambda (alpha) + (set! fade-box-fill + (make-color 1 1 1 alpha)))))) + (current-agenda agenda)) + +(define (draw-scene alpha) + ;; Background + (draw-sprite (asset-ref intro-bg) (vec2 0 0)) + + ;; Text + (let ((text "Press enter to start.")) + (draw-text text + (let ((width (font-line-width (asset-ref game-font) text))) + (vec2 (- (/ %width 2) + (/ width 2)) + 30.0)) + #:font (asset-ref game-font))) + + (let ((parts (string-split welcome-text #\newline))) + (for-each (lambda (part i) + (draw-text part + (vec2 (- (/ %width 2) + (/ (font-line-width (asset-ref game-font) part) 2)) + (- 120.0 (* 15 i))) + #:font (asset-ref game-font))) + parts (iota (length parts)))) + + ;; Fade box + (draw-canvas + (make-canvas + (with-style + ((fill-color fade-box-fill)) + fade-box)))) + +(define update-scene update-agenda) + + +(define scene + `(#:name "intro" + #:load ,load-scene + #:draw ,draw-scene + #:update ,update-scene)) diff --git a/scripts/inevitable.in b/scripts/inevitable.in new file mode 100644 index 0000000..07401b1 --- /dev/null +++ b/scripts/inevitable.in @@ -0,0 +1,62 @@ +#!@GUILE@ --no-auto-compile +-*- scheme -*- +!# +;;; Inevitable Game +;;; Copyright © 2021 Ricardo Wurmus <rekado@elephly.net> +;;; +;;; 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 +;;; <http://www.gnu.org/licenses/>. + +(use-modules (ice-9 match) + (chickadee) + (chickadee graphics) + (chickadee math matrix) + (config) + (scenes intro)) + +(define *current-scene* scene) +(define (get kw scene) + (or (and=> (memv kw scene) cadr) + (const #true))) + +(match (command-line) + ((_ scale) + (set! %scale-factor (string->number scale))) + (_ #false)) + +(run-game #:window-title "Inevitable" + #:window-width (* %scale-factor %width) + #:window-height (* %scale-factor %height) + #:load + ;; This is only used for the first scene. + (get #:load *current-scene*) + #:draw + (lambda (alpha) + (with-projection + (orthographic-projection 0 %width %height 0 0 1) + ((get #:draw *current-scene*) alpha))) + #:update + (lambda (dt) + (let ((tag (make-prompt-tag))) + (call-with-prompt tag + (lambda () + (catch 'switch-scene + (lambda () + ((get #:update *current-scene*) dt)) + (lambda (key new-scene) + ((get #:quit *current-scene*)) + (set! *current-scene* new-scene) + ((get #:load *current-scene*)) + (abort-to-prompt tag)))) + (const #true))))) diff --git a/utils.scm b/utils.scm new file mode 100644 index 0000000..5c31621 --- /dev/null +++ b/utils.scm @@ -0,0 +1,170 @@ +;;; The Inevitable Game +;;; Copyright © 2018, 2021 Ricardo Wurmus <rekado@elephly.net> +;;; +;;; 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 +;;; <http://www.gnu.org/licenses/>. + +(define-module (utils) + #:use-module (chickadee) + #:use-module (chickadee audio) + #:use-module (chickadee math vector) + #:use-module (chickadee graphics color) + #:use-module (chickadee graphics font) + #:use-module (chickadee graphics path) + #:use-module (chickadee graphics sprite) + #:use-module (chickadee graphics texture) + #:use-module (chickadee graphics tiled) + #:use-module (chickadee scripting) + #:use-module (config) + #:use-module (engine assets) + #:use-module (srfi srfi-1) + #:use-module (ice-9 match) + #:use-module (oop goops) + #:export (arrange-text + + <label> + draw-label + visible? + + <sprite> + agenda + position + texture + tint + + draw + + <animated-sprite> + atlas + + draw-animated-sprite + update-animated-sprite + change-sprite-animation + + <character> + name + velocity + walk-speed + direction + conversations + accepted-messages + speaking? + + walk)) + +(define* (arrange-text text font #:key + (margin 0.0) + (max-width %width)) + "Take the string TEXT and split it at spaces so that it fits in the +given MAX-WIDTH. Return a list of lines." + (match (fold (lambda (chunk acc) + (match acc + ((#:width width #:result (and (current-line . tail) lines)) + (let* ((new-line (string-append current-line " " chunk)) + (new-width (font-line-width font new-line))) + (if (< (+ new-width margin) max-width) + `(#:width ,new-width + #:result ,(cons new-line tail)) + `(#:width ,(font-line-width font chunk) + #:result ,(cons chunk lines))))))) + '(#:width 0 #:result ("")) + (string-tokenize text)) + ((#:width _ #:result lines) + (reverse lines)))) + +(define-class <label> () + (position #:accessor position #:init-keyword #:position) + (visible? #:accessor visible? #:init-keyword #:visible?) + (font #:accessor font #:init-keyword #:font) + (text #:accessor text #:init-form "" #:init-keyword #:text)) + +(define-method (draw-label label alpha) + (when (visible? label) + (draw-text (text label) (position label) + #:font (asset-ref (font label))))) + +(define-class <sprite> () + (agenda #:getter agenda #:init-form (make-agenda)) + (position #:accessor position #:init-keyword #:position) + (texture #:accessor texture #:init-keyword #:texture) + (tint #:accessor tint #:init-keyword #:tint #:init-form white)) + +(define-method (draw (sprite <sprite>) alpha) + (draw-sprite (asset-ref (texture sprite)) + (position sprite) + #:tint (tint sprite))) + +(define-class <animated-sprite> (<sprite>) + (atlas #:accessor atlas #:init-keyword #:atlas) + (animations #:accessor animations #:init-keyword #:animations) + (frame-duration #:accessor frame-duration #:init-keyword #:frame-duration) + (current-animation #:accessor current-animation + #:init-keyword #:current-animation) + (start-time #:accessor start-time #:init-form 0)) + +(define (draw-animated-sprite sprite offset) + (draw-sprite (asset-ref (texture sprite)) + (vec2+ offset (position sprite)) + #:tint (tint sprite))) + +(define (update-animated-sprite sprite dt) + (let* ((anim (assq-ref (animations sprite) (current-animation sprite))) + (frame-duration (frame-duration sprite)) + (anim-duration (* frame-duration (vector-length anim))) + (time (modulo (- (agenda-time) (start-time sprite)) anim-duration)) + (frame (vector-ref anim (floor (/ time frame-duration)))) + (texture-region (texture-atlas-ref (asset-ref (atlas sprite)) frame))) + (set! (texture sprite) texture-region))) + +(define (change-sprite-animation sprite name) + (set! (current-animation sprite) name) + (set! (start-time sprite) (with-agenda (agenda sprite) (agenda-time)))) + +(define-class <character> (<animated-sprite>) + (name #:getter name #:init-keyword #:name) + (velocity #:getter velocity #:init-form (vec2 0.0 0.0)) + (walk-speed #:accessor walk-speed #:init-form 0.8) + (direction #:accessor direction #:init-form '(idle)) + (conversations #:accessor conversations #:init-keyword #:conversations) + (accepted-messages #:accessor accepted-messages #:init-form '((hello "Hello there!"))) + (speaking? #:accessor speaking? #:init-form #false)) + +(define-method (walk (character <character>) directions . rest) + (let ((stop? (member 'stop rest))) + (unless (and (equal? (direction character) directions) + (not stop?)) + (let ((speed (if stop? 0.0 (walk-speed character)))) + (change-sprite-animation character (last directions)) + (for-each (lambda (dir) + (case dir + ((right) + (set-vec2-x! (velocity character) speed)) + ((left) + (set-vec2-x! (velocity character) (* -1.0 speed))) + ((up) + (set-vec2-y! (velocity character) speed)) + ((down) + (set-vec2-y! (velocity character) (* -1.0 speed))) + ((idle) + (set-vec2-x! (velocity character) 0.0) + (set-vec2-y! (velocity character) 0.0) + (change-sprite-animation + character + (case (last (direction character)) + ((right) 'idle-right) + ((left) 'idle-left) + ((up) 'idle-back) + ((down) 'idle-front)))))) + directions) + (set! (direction character) directions))))) |