├── .gitignore ├── Cover.png ├── Cover.svg ├── Cover_small.png ├── Cover_tiny.png ├── License.txt ├── P3D Tutorial.odt ├── P3D Tutorial ├── design │ ├── Arena1 │ │ ├── Flagpost.png │ │ ├── Flagpost.xcf │ │ ├── Flagpost_uv.png │ │ ├── Flags.png │ │ ├── Flags.xcf │ │ ├── Flags_uv.png │ │ ├── Ground.png │ │ ├── Ground.xcf │ │ ├── MainHouse.png │ │ ├── MainHouse.xcf │ │ ├── MainHouse_uv.png │ │ ├── Mountain.png │ │ ├── Mountain.xcf │ │ ├── Rooftile_Tile.xcf │ │ ├── Rooftile_Tile32.xcf │ │ ├── SideHouse.png │ │ ├── SideHouse.xcf │ │ ├── SideHouse_uv.png │ │ └── arena.blend │ ├── Arena2 │ │ ├── Godrays.png │ │ ├── Ground.png │ │ ├── Ground_ao.png │ │ ├── Pillar.blend │ │ ├── Pillar.png │ │ ├── Wall.png │ │ ├── Window.blend │ │ ├── Window.png │ │ ├── Window.xcf │ │ ├── arena.blend │ │ └── wall_uv.png │ ├── Character1 │ │ ├── Character.png │ │ ├── Character.xcf │ │ ├── Character1.blend │ │ ├── Character_ao.png │ │ ├── Character_nm.png │ │ └── Character_uv.png │ ├── Character2 │ │ ├── Character.png │ │ ├── Character.xcf │ │ ├── Character2.blend │ │ ├── Character_ao.png │ │ ├── Character_nm.png │ │ └── Character_uv.png │ ├── Design Document.odt │ ├── Design Document.pdf │ ├── FX │ │ ├── BloodSplat.png │ │ ├── BloodSplat.ptf │ │ ├── BloodSplat.xcf │ │ ├── Leaf.png │ │ ├── Leaf.xcf │ │ ├── Leafs.ptf │ │ └── particle_panel.py │ ├── GUI │ │ ├── Button.xcf │ │ ├── CharButton.xcf │ │ ├── CharacterHead.png │ │ ├── Cursor.conf │ │ ├── Cursor.ico │ │ ├── Cursor.png │ │ ├── Cursor.x11 │ │ ├── Cursor.xcf │ │ ├── Level1.png │ │ ├── Level2.png │ │ ├── LevelButton.xcf │ │ ├── MenuBackground.xcf │ │ ├── SelectedCharBackground.xcf │ │ ├── create buttonmap.txt │ │ └── howto x11 cursor.txt │ ├── Icons │ │ ├── icon.svg │ │ ├── icon128.png │ │ ├── icon16.png │ │ ├── icon16.svg │ │ ├── icon256.png │ │ ├── icon32.png │ │ ├── icon48.png │ │ ├── icon512.png │ │ └── icon64.png │ ├── audio │ │ └── step.flac │ └── manual │ │ ├── Char1_L.png │ │ ├── Char2_R.png │ │ ├── GF_Img.png │ │ ├── GF_Logo.png │ │ ├── Keyboards │ │ ├── KeyboardP1.png │ │ ├── KeyboardP1.xcf │ │ ├── KeyboardP2 Full.xcf │ │ ├── KeyboardP2.1.png │ │ ├── KeyboardP2.1.xcf │ │ ├── KeyboardP2.2.png │ │ ├── KeyboardP2.2.xcf │ │ ├── Unbenannt.xcf │ │ └── keyboard.xcf │ │ ├── Level1Button.png │ │ ├── Level2Button.png │ │ ├── Manual Cover Back.png │ │ ├── Manual Cover.png │ │ ├── Manual Cover.xcf │ │ ├── Manual Page BG.png │ │ ├── Manual.pdf │ │ └── Manual.sla └── game │ ├── arena.py │ ├── assets │ ├── audio │ │ ├── ambientLevel1.ogg │ │ ├── fightMusic.ogg │ │ ├── hit.ogg │ │ ├── menuMusic.ogg │ │ └── step.ogg │ ├── characters │ │ ├── character1 │ │ │ ├── Character.png │ │ │ ├── Character_ao.png │ │ │ ├── Character_nm.png │ │ │ ├── char.egg │ │ │ ├── defeated.egg │ │ │ ├── defend.egg │ │ │ ├── hit.egg │ │ │ ├── idle.egg │ │ │ ├── kick_l.egg │ │ │ ├── kick_r.egg │ │ │ ├── punch_l.egg │ │ │ ├── punch_r.egg │ │ │ ├── walk.egg │ │ │ └── walk_back.egg │ │ └── character2 │ │ │ ├── Character.png │ │ │ ├── Character_ao.png │ │ │ ├── Character_nm.png │ │ │ ├── char.egg │ │ │ ├── defeated.egg │ │ │ ├── defend.egg │ │ │ ├── hit.egg │ │ │ ├── idle.egg │ │ │ ├── kick_l.egg │ │ │ ├── kick_r.egg │ │ │ ├── punch_l.egg │ │ │ ├── punch_r.egg │ │ │ ├── walk.egg │ │ │ └── walk_back.egg │ ├── fx │ │ ├── BloodSplat.png │ │ ├── BloodSplat.ptf │ │ ├── Leaf.png │ │ └── Leafs.ptf │ ├── gui │ │ ├── Char1Button.png │ │ ├── Char1_L.png │ │ ├── Char1_R.png │ │ ├── Char2Button.png │ │ ├── Char2_L.png │ │ ├── Char2_R.png │ │ ├── CharBlueBG.png │ │ ├── CharRedBG.png │ │ ├── Cursor.ico │ │ ├── Cursor.x11 │ │ ├── Level1Button.png │ │ ├── Level2Button.png │ │ ├── MenuBackground.png │ │ ├── btn_click.png │ │ ├── btn_disabled.png │ │ ├── btn_ready.png │ │ ├── btn_rollover.png │ │ └── button_map.egg │ └── levels │ │ ├── arena1 │ │ ├── Flagpost.png │ │ ├── Flags.png │ │ ├── Ground.png │ │ ├── MainHouse.png │ │ ├── Mountain.png │ │ ├── SideHouse.png │ │ └── arena.egg │ │ └── arena2 │ │ ├── Godrays.png │ │ ├── Ground.png │ │ ├── Ground_ao.png │ │ ├── Pillar.egg │ │ ├── Pillar.png │ │ ├── Wall.png │ │ ├── Window.egg │ │ ├── Window.png │ │ └── arena.egg │ ├── characterselection.py │ ├── credits.py │ ├── credits.txt │ ├── helper.py │ ├── hud.py │ ├── koscreen.py │ ├── levelselection.py │ ├── main.py │ ├── menu.py │ ├── player.py │ ├── requirements.txt │ └── setup.py ├── Panda3D Tutorial.pdf ├── README.md ├── TinyBookImage.png ├── TinyBookImage.xcf └── by-sa.svg /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | *.py[cod] 3 | 4 | # Translations 5 | *.mo 6 | 7 | # Rope 8 | .ropeproject 9 | 10 | # Backups 11 | *~ 12 | *.blend[0-9] 13 | -------------------------------------------------------------------------------- /Cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/Cover.png -------------------------------------------------------------------------------- /Cover_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/Cover_small.png -------------------------------------------------------------------------------- /Cover_tiny.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/Cover_tiny.png -------------------------------------------------------------------------------- /License.txt: -------------------------------------------------------------------------------- 1 | BSD TWO CLAUSE LICENSE (used for sourcecode): 2 | 3 | Copyright (c) 2015, Fireclaw 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 9 | 10 | 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 11 | 12 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 13 | 14 | 15 | CREATIVE COMMONS ATTRIBUTION SHARE ALIKE (used for Tutorial text "P3D Tutorial.odt" and assets where not explicitely stated in the credits.txt): 16 | 17 | Creative Commons Attribution-ShareAlike 4.0 International Public License 18 | By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. 19 | Section 1 – Definitions. 20 | a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. 21 | b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. 22 | c. BY-SA Compatible License means a license listed at creativecommons.org/compatiblelicenses, approved by Creative Commons as essentially the equivalent of this Public License. 23 | d. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. 24 | e. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. 25 | f. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. 26 | g. License Elements means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution and ShareAlike. 27 | h. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. 28 | i. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. 29 | j. Licensor means the individual(s) or entity(ies) granting rights under this Public License. 30 | k. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. 31 | l. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. 32 | m. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. 33 | Section 2 – Scope. 34 | a. License grant. 35 | 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: 36 | A. reproduce and Share the Licensed Material, in whole or in part; and 37 | B. produce, reproduce, and Share Adapted Material. 38 | 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. 39 | 3. Term. The term of this Public License is specified in Section 6(a). 40 | 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. 41 | 5. Downstream recipients. 42 | A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. 43 | B. Additional offer from the Licensor – Adapted Material. Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter’s License You apply. 44 | C. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. 45 | 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). 46 | b. Other rights. 47 | 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. 48 | 2. Patent and trademark rights are not licensed under this Public License. 49 | 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. 50 | Section 3 – License Conditions. 51 | Your exercise of the Licensed Rights is expressly made subject to the following conditions. 52 | a. Attribution. 53 | 1. If You Share the Licensed Material (including in modified form), You must: 54 | A. retain the following if it is supplied by the Licensor with the Licensed Material: 55 | i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); 56 | ii. a copyright notice; 57 | iii. a notice that refers to this Public License; 58 | iv. a notice that refers to the disclaimer of warranties; 59 | v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; 60 | B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and 61 | C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. 62 | 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. 63 | 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. 64 | b. ShareAlike. 65 | In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply. 66 | 1. The Adapter’s License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-SA Compatible License. 67 | 2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material. 68 | 3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply. 69 | Section 4 – Sui Generis Database Rights. 70 | Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: 71 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; 72 | b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and 73 | c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. 74 | For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. 75 | Section 5 – Disclaimer of Warranties and Limitation of Liability. 76 | a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You. 77 | b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You. 78 | c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. 79 | Section 6 – Term and Termination. 80 | a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. 81 | b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: 82 | 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or 83 | 2. upon express reinstatement by the Licensor. 84 | For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. 85 | c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. 86 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. 87 | Section 7 – Other Terms and Conditions. 88 | a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. 89 | b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. 90 | Section 8 – Interpretation. 91 | a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. 92 | b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. 93 | c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. 94 | d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. 95 | 96 | -------------------------------------------------------------------------------- /P3D Tutorial.odt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial.odt -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena1/Flagpost.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena1/Flagpost.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena1/Flagpost.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena1/Flagpost.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena1/Flagpost_uv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena1/Flagpost_uv.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena1/Flags.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena1/Flags.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena1/Flags.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena1/Flags.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena1/Flags_uv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena1/Flags_uv.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena1/Ground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena1/Ground.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena1/Ground.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena1/Ground.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena1/MainHouse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena1/MainHouse.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena1/MainHouse.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena1/MainHouse.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena1/MainHouse_uv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena1/MainHouse_uv.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena1/Mountain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena1/Mountain.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena1/Mountain.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena1/Mountain.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena1/Rooftile_Tile.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena1/Rooftile_Tile.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena1/Rooftile_Tile32.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena1/Rooftile_Tile32.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena1/SideHouse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena1/SideHouse.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena1/SideHouse.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena1/SideHouse.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena1/SideHouse_uv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena1/SideHouse_uv.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena1/arena.blend: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena1/arena.blend -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena2/Godrays.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena2/Godrays.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena2/Ground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena2/Ground.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena2/Ground_ao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena2/Ground_ao.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena2/Pillar.blend: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena2/Pillar.blend -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena2/Pillar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena2/Pillar.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena2/Wall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena2/Wall.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena2/Window.blend: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena2/Window.blend -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena2/Window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena2/Window.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena2/Window.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena2/Window.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena2/arena.blend: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena2/arena.blend -------------------------------------------------------------------------------- /P3D Tutorial/design/Arena2/wall_uv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Arena2/wall_uv.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Character1/Character.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Character1/Character.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Character1/Character.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Character1/Character.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/Character1/Character1.blend: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Character1/Character1.blend -------------------------------------------------------------------------------- /P3D Tutorial/design/Character1/Character_ao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Character1/Character_ao.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Character1/Character_nm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Character1/Character_nm.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Character1/Character_uv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Character1/Character_uv.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Character2/Character.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Character2/Character.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Character2/Character.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Character2/Character.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/Character2/Character2.blend: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Character2/Character2.blend -------------------------------------------------------------------------------- /P3D Tutorial/design/Character2/Character_ao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Character2/Character_ao.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Character2/Character_nm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Character2/Character_nm.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Character2/Character_uv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Character2/Character_uv.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Design Document.odt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Design Document.odt -------------------------------------------------------------------------------- /P3D Tutorial/design/Design Document.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Design Document.pdf -------------------------------------------------------------------------------- /P3D Tutorial/design/FX/BloodSplat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/FX/BloodSplat.png -------------------------------------------------------------------------------- /P3D Tutorial/design/FX/BloodSplat.ptf: -------------------------------------------------------------------------------- 1 | 2 | self.reset() 3 | self.setPos(0.000, 0.000, 0.000) 4 | self.setHpr(0.000, 0.000, 0.000) 5 | self.setScale(1.000, 1.000, 1.000) 6 | p0 = Particles.Particles('particles-1') 7 | # Particles parameters 8 | p0.setFactory("ZSpinParticleFactory") 9 | p0.setRenderer("SpriteParticleRenderer") 10 | p0.setEmitter("PointEmitter") 11 | p0.setPoolSize(2) 12 | p0.setBirthRate(0.0100) 13 | p0.setLitterSize(1) 14 | p0.setLitterSpread(0) 15 | p0.setSystemLifespan(0.0000) 16 | p0.setLocalVelocityFlag(1) 17 | p0.setSystemGrowsOlderFlag(0) 18 | # Factory parameters 19 | p0.factory.setLifespanBase(0.6000) 20 | p0.factory.setLifespanSpread(0.0000) 21 | p0.factory.setMassBase(1.0000) 22 | p0.factory.setMassSpread(0.0000) 23 | p0.factory.setTerminalVelocityBase(400.0000) 24 | p0.factory.setTerminalVelocitySpread(0.0000) 25 | # Z Spin factory parameters 26 | p0.factory.setInitialAngle(0.0000) 27 | p0.factory.setInitialAngleSpread(0.0000) 28 | p0.factory.enableAngularVelocity(1) 29 | p0.factory.setAngularVelocity(155.0000) 30 | p0.factory.setAngularVelocitySpread(5.0000) 31 | # Renderer parameters 32 | p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT) 33 | p0.renderer.setUserAlpha(1.00) 34 | # Sprite parameters 35 | p0.renderer.addTextureFromFile('assets/fx/BloodSplat.png') 36 | p0.renderer.setColor(Vec4(1.00, 1.00, 1.00, 1.00)) 37 | p0.renderer.setXScaleFlag(0) 38 | p0.renderer.setYScaleFlag(0) 39 | p0.renderer.setAnimAngleFlag(1) 40 | p0.renderer.setInitialXScale(0.2000) 41 | p0.renderer.setFinalXScale(1.0000) 42 | p0.renderer.setInitialYScale(0.2000) 43 | p0.renderer.setFinalYScale(1.0000) 44 | p0.renderer.setNonanimatedTheta(0.0000) 45 | p0.renderer.setAlphaBlendMethod(BaseParticleRenderer.PPBLENDLINEAR) 46 | p0.renderer.setAlphaDisable(0) 47 | p0.renderer.setColorBlendMode(ColorBlendAttrib.MAdd, ColorBlendAttrib.OIncomingAlpha, ColorBlendAttrib.OOneMinusIncomingAlpha) 48 | # Emitter parameters 49 | p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) 50 | p0.emitter.setAmplitude(0.5000) 51 | p0.emitter.setAmplitudeSpread(1.0000) 52 | p0.emitter.setOffsetForce(Vec3(0.0000, 0.0000, 0.0000)) 53 | p0.emitter.setExplicitLaunchVector(Vec3(1.0000, 0.0000, 0.0000)) 54 | p0.emitter.setRadiateOrigin(Point3(0.0000, 1.0000, 0.4000)) 55 | # Point parameters 56 | p0.emitter.setLocation(Point3(0.0000, 0.0000, 0.0000)) 57 | self.addParticles(p0) 58 | -------------------------------------------------------------------------------- /P3D Tutorial/design/FX/BloodSplat.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/FX/BloodSplat.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/FX/Leaf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/FX/Leaf.png -------------------------------------------------------------------------------- /P3D Tutorial/design/FX/Leaf.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/FX/Leaf.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/FX/Leafs.ptf: -------------------------------------------------------------------------------- 1 | 2 | self.reset() 3 | self.setPos(0.000, 0.000, 0.000) 4 | self.setHpr(0.000, 0.000, 0.000) 5 | self.setScale(1.000, 1.000, 1.000) 6 | p0 = Particles.Particles('particles-1') 7 | # Particles parameters 8 | p0.setFactory("ZSpinParticleFactory") 9 | p0.setRenderer("SpriteParticleRenderer") 10 | p0.setEmitter("LineEmitter") 11 | p0.setPoolSize(15) 12 | p0.setBirthRate(2.5000) 13 | p0.setLitterSize(10) 14 | p0.setLitterSpread(0) 15 | p0.setSystemLifespan(0.0000) 16 | p0.setLocalVelocityFlag(1) 17 | p0.setSystemGrowsOlderFlag(0) 18 | # Factory parameters 19 | p0.factory.setLifespanBase(2.5000) 20 | p0.factory.setLifespanSpread(2.0000) 21 | p0.factory.setMassBase(1.0000) 22 | p0.factory.setMassSpread(0.0000) 23 | p0.factory.setTerminalVelocityBase(400.0000) 24 | p0.factory.setTerminalVelocitySpread(0.0000) 25 | # Z Spin factory parameters 26 | p0.factory.setInitialAngle(0.0000) 27 | p0.factory.setInitialAngleSpread(69.7751) 28 | p0.factory.enableAngularVelocity(0) 29 | p0.factory.setFinalAngle(-43.1524) 30 | p0.factory.setFinalAngleSpread(-66.8014) 31 | # Renderer parameters 32 | p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHANONE) 33 | p0.renderer.setUserAlpha(1.00) 34 | # Sprite parameters 35 | p0.renderer.addTextureFromFile('./Leaf.png') 36 | p0.renderer.setColor(Vec4(1.00, 1.00, 1.00, 1.00)) 37 | p0.renderer.setXScaleFlag(0) 38 | p0.renderer.setYScaleFlag(0) 39 | p0.renderer.setAnimAngleFlag(1) 40 | p0.renderer.setInitialXScale(0.0800) 41 | p0.renderer.setFinalXScale(1.0000) 42 | p0.renderer.setInitialYScale(0.0800) 43 | p0.renderer.setFinalYScale(1.0000) 44 | p0.renderer.setNonanimatedTheta(0.0000) 45 | p0.renderer.setAlphaBlendMethod(BaseParticleRenderer.PPBLENDLINEAR) 46 | p0.renderer.setAlphaDisable(0) 47 | p0.renderer.setColorBlendMode(ColorBlendAttrib.MAdd, ColorBlendAttrib.OIncomingAlpha, ColorBlendAttrib.OOneMinusIncomingAlpha) 48 | # Emitter parameters 49 | p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) 50 | p0.emitter.setAmplitude(0.5000) 51 | p0.emitter.setAmplitudeSpread(0.7000) 52 | p0.emitter.setOffsetForce(Vec3(-0.5000, 0.0000, -0.2000)) 53 | p0.emitter.setExplicitLaunchVector(Vec3(-1.0000, -1.0000, -1.0000)) 54 | p0.emitter.setRadiateOrigin(Point3(1.0000, 0.0000, 2.0000)) 55 | # Line parameters 56 | p0.emitter.setEndpoint1(Point3(2.0000, 0.0000, 1.0000)) 57 | p0.emitter.setEndpoint2(Point3(-1.0000, 0.0000, 1.0000)) 58 | self.addParticles(p0) 59 | -------------------------------------------------------------------------------- /P3D Tutorial/design/FX/particle_panel.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | # Author: Shao Zhang, Phil Saltzman 4 | # Last Updated: 2015-03-13 5 | # 6 | # This file contians the minimum code needed to load the particle panel tool 7 | # See readme.txt for more information 8 | 9 | import sys 10 | try: 11 | import _tkinter 12 | except: 13 | sys.exit("Please install python module 'Tkinter'") 14 | 15 | try: 16 | import Pmw 17 | except: 18 | sys.exit("Please install Python megawidgets") 19 | 20 | # Open the Panda window 21 | from direct.showbase.ShowBase import ShowBase 22 | base = ShowBase() 23 | 24 | # Makes sure that Panda is configured to play nice with Tkinter 25 | base.startTk() 26 | 27 | from direct.tkpanels.ParticlePanel import ParticlePanel 28 | 29 | pp = ParticlePanel() # Create the panel 30 | base.disableMouse() # Disable camera control to place it 31 | base.camera.setY(-10) # Place the camera 32 | base.setBackgroundColor(0, 0, 0) # Most particle systems show up better on black backgrounds 33 | base.run() 34 | -------------------------------------------------------------------------------- /P3D Tutorial/design/GUI/Button.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/GUI/Button.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/GUI/CharButton.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/GUI/CharButton.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/GUI/CharacterHead.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/GUI/CharacterHead.png -------------------------------------------------------------------------------- /P3D Tutorial/design/GUI/Cursor.conf: -------------------------------------------------------------------------------- 1 | 32 1 1 Cursor.png 2 | -------------------------------------------------------------------------------- /P3D Tutorial/design/GUI/Cursor.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/GUI/Cursor.ico -------------------------------------------------------------------------------- /P3D Tutorial/design/GUI/Cursor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/GUI/Cursor.png -------------------------------------------------------------------------------- /P3D Tutorial/design/GUI/Cursor.x11: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/GUI/Cursor.x11 -------------------------------------------------------------------------------- /P3D Tutorial/design/GUI/Cursor.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/GUI/Cursor.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/GUI/Level1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/GUI/Level1.png -------------------------------------------------------------------------------- /P3D Tutorial/design/GUI/Level2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/GUI/Level2.png -------------------------------------------------------------------------------- /P3D Tutorial/design/GUI/LevelButton.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/GUI/LevelButton.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/GUI/MenuBackground.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/GUI/MenuBackground.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/GUI/SelectedCharBackground.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/GUI/SelectedCharBackground.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/GUI/create buttonmap.txt: -------------------------------------------------------------------------------- 1 | To create the button_map.egg file you need to call the following command that get 2 | installed with the Panda3D SDK. You must make sure, the png files given to it do 3 | exist and, as they are used for the main menu's buttons they should have all the 4 | same size of 800x40 px. The -g option will let us change the frames size, whereas 5 | the values to it were calculated using the actual pixel values for the aspect 6 | ratio and the frames size set to 1 unit in each direction multiplied with the 7 | aspect of the actual image. The -wm parameter was set to clamp so we don't get 8 | color bleeding from one side to another. 9 | 10 | egg-texture-cards -o button_map.egg -p 800,40 -g 0,1,-0.025,0.025 -wm clamp btn_ready.png btn_click.png btn_rollover.png btn_disabled.png 11 | -------------------------------------------------------------------------------- /P3D Tutorial/design/GUI/howto x11 cursor.txt: -------------------------------------------------------------------------------- 1 | To create x11 cursor files create a cursor configuration file. 2 | This file should contain the following: 3 | 4 | dimension pointer-position-x pointer-position-y image-filename 5 | e.g.: 6 | 32 1 1 Cursor.png 7 | 8 | then call this command to create a x11 cursor named cursor.x11 9 | xcursorgen Cursor.conf ./Cursor.x11 10 | 11 | On windows systmems you can simply use the ico file format. Though with that 12 | you'll be limited as you can't set the pointer possition. To get more control 13 | you have to use windows cursor (cur or ani) files. 14 | -------------------------------------------------------------------------------- /P3D Tutorial/design/Icons/icon128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Icons/icon128.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Icons/icon16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Icons/icon16.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Icons/icon16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 22 | 24 | 33 | 36 | 40 | 44 | 45 | 54 | 57 | 61 | 65 | 66 | 75 | 84 | 93 | 102 | 111 | 120 | 129 | 138 | 147 | 156 | 165 | 174 | 175 | 194 | 196 | 197 | 199 | image/svg+xml 200 | 202 | 203 | 204 | 205 | 206 | 211 | 214 | 217 | 225 | 231 | 237 | 245 | 251 | 259 | 260 | 264 | 272 | 278 | 284 | 292 | 298 | 299 | 300 | 301 | 302 | -------------------------------------------------------------------------------- /P3D Tutorial/design/Icons/icon256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Icons/icon256.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Icons/icon32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Icons/icon32.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Icons/icon48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Icons/icon48.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Icons/icon512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Icons/icon512.png -------------------------------------------------------------------------------- /P3D Tutorial/design/Icons/icon64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/Icons/icon64.png -------------------------------------------------------------------------------- /P3D Tutorial/design/audio/step.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/audio/step.flac -------------------------------------------------------------------------------- /P3D Tutorial/design/manual/Char1_L.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/manual/Char1_L.png -------------------------------------------------------------------------------- /P3D Tutorial/design/manual/Char2_R.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/manual/Char2_R.png -------------------------------------------------------------------------------- /P3D Tutorial/design/manual/GF_Img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/manual/GF_Img.png -------------------------------------------------------------------------------- /P3D Tutorial/design/manual/GF_Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/manual/GF_Logo.png -------------------------------------------------------------------------------- /P3D Tutorial/design/manual/Keyboards/KeyboardP1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/manual/Keyboards/KeyboardP1.png -------------------------------------------------------------------------------- /P3D Tutorial/design/manual/Keyboards/KeyboardP1.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/manual/Keyboards/KeyboardP1.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/manual/Keyboards/KeyboardP2 Full.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/manual/Keyboards/KeyboardP2 Full.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/manual/Keyboards/KeyboardP2.1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/manual/Keyboards/KeyboardP2.1.png -------------------------------------------------------------------------------- /P3D Tutorial/design/manual/Keyboards/KeyboardP2.1.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/manual/Keyboards/KeyboardP2.1.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/manual/Keyboards/KeyboardP2.2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/manual/Keyboards/KeyboardP2.2.png -------------------------------------------------------------------------------- /P3D Tutorial/design/manual/Keyboards/KeyboardP2.2.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/manual/Keyboards/KeyboardP2.2.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/manual/Keyboards/Unbenannt.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/manual/Keyboards/Unbenannt.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/manual/Keyboards/keyboard.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/manual/Keyboards/keyboard.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/manual/Level1Button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/manual/Level1Button.png -------------------------------------------------------------------------------- /P3D Tutorial/design/manual/Level2Button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/manual/Level2Button.png -------------------------------------------------------------------------------- /P3D Tutorial/design/manual/Manual Cover Back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/manual/Manual Cover Back.png -------------------------------------------------------------------------------- /P3D Tutorial/design/manual/Manual Cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/manual/Manual Cover.png -------------------------------------------------------------------------------- /P3D Tutorial/design/manual/Manual Cover.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/manual/Manual Cover.xcf -------------------------------------------------------------------------------- /P3D Tutorial/design/manual/Manual Page BG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/manual/Manual Page BG.png -------------------------------------------------------------------------------- /P3D Tutorial/design/manual/Manual.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/design/manual/Manual.pdf -------------------------------------------------------------------------------- /P3D Tutorial/game/arena.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | __author__ = "Fireclaw the Fox" 3 | __license__ = """ 4 | Simplified BSD (BSD 2-Clause) License. 5 | See License.txt or http://opensource.org/licenses/BSD-2-Clause for more info 6 | """ 7 | 8 | from panda3d.core import ( 9 | AmbientLight, 10 | PerspectiveLens, 11 | DirectionalLight, 12 | Fog) 13 | from direct.particles.ParticleEffect import ParticleEffect 14 | 15 | class Arena: 16 | def __init__(self, arenaNr): 17 | arenaPath = "levels/arena{}/".format(arenaNr) 18 | self.arena = loader.loadModel(arenaPath + "arena") 19 | self.arena.setScale(2) 20 | self.arena.reparentTo(render) 21 | self.arena.hide() 22 | 23 | ambientLight = AmbientLight("ambient_light") 24 | ambientLight.setColor((0.2, 0.2, 0.2, 1)) 25 | self.alnp = render.attachNewNode(ambientLight) 26 | 27 | sunLens = PerspectiveLens() 28 | sunLens.setFilmSize(50) 29 | sun = DirectionalLight("sun") 30 | sun.setColor((1, 1, 1, 1)) 31 | sun.setShadowCaster(True, 2048, 2048) 32 | sun.setScene(render) 33 | #sun.showFrustum() 34 | 35 | self.ambientSound = None 36 | self.levelParticles = None 37 | if arenaNr == 1: 38 | sunLens.setNearFar(25,45) 39 | sun.setLens(sunLens) 40 | self.sunNp = render.attachNewNode(sun) 41 | self.sunNp.setPos(-10, -10, 30) 42 | self.sunNp.lookAt(0,0,0) 43 | 44 | self.ambientSound = loader.loadSfx("assets/audio/ambientLevel1.ogg") 45 | self.ambientSound.setLoop(True) 46 | 47 | self.fog = Fog("Outside Fog") 48 | self.fog.setColor(0.3,0.3,0.5) 49 | self.fog.setExpDensity(0.025) 50 | 51 | self.levelParticles = ParticleEffect() 52 | self.levelParticles.loadConfig("assets/fx/Leafs.ptf") 53 | self.levelParticles.start(parent = render2d, renderParent = render2d) 54 | elif arenaNr == 2: 55 | sunLens.setFov(120, 40) 56 | sunLens.setNearFar(2,10) 57 | sun.setLens(sunLens) 58 | self.sunNp = render.attachNewNode(sun) 59 | self.sunNp.setPos(0, 0, 5) 60 | self.sunNp.lookAt(0,0,0) 61 | 62 | self.fog = Fog("Temple Fog") 63 | self.fog.setColor(0,0,0) 64 | self.fog.setExpDensity(0.065) 65 | 66 | def start(self): 67 | self.arena.show() 68 | render.setLight(self.alnp) 69 | render.setLight(self.sunNp) 70 | if self.ambientSound != None: 71 | self.ambientSound.play() 72 | render.setFog(self.fog) 73 | 74 | def stop(self): 75 | self.arena.hide() 76 | render.clearLight() 77 | if self.ambientSound != None: 78 | self.ambientSound.stop() 79 | render.clearFog() 80 | if self.levelParticles != None: 81 | self.levelParticles.cleanup() 82 | 83 | def getStartPos(self, charNr): 84 | if charNr == 1: 85 | return self.arena.find("**/StartPosA").getPos() * 2 86 | elif charNr == 2: 87 | return self.arena.find("**/StartPosB").getPos() * 2 88 | else: 89 | return (0,0,0) 90 | -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/audio/ambientLevel1.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/audio/ambientLevel1.ogg -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/audio/fightMusic.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/audio/fightMusic.ogg -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/audio/hit.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/audio/hit.ogg -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/audio/menuMusic.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/audio/menuMusic.ogg -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/audio/step.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/audio/step.ogg -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/characters/character1/Character.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/characters/character1/Character.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/characters/character1/Character_ao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/characters/character1/Character_ao.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/characters/character1/Character_nm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/characters/character1/Character_nm.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/characters/character2/Character.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/characters/character2/Character.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/characters/character2/Character_ao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/characters/character2/Character_ao.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/characters/character2/Character_nm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/characters/character2/Character_nm.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/fx/BloodSplat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/fx/BloodSplat.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/fx/BloodSplat.ptf: -------------------------------------------------------------------------------- 1 | 2 | self.reset() 3 | self.setPos(0.000, 0.000, 0.000) 4 | self.setHpr(0.000, 0.000, 0.000) 5 | self.setScale(1.000, 1.000, 1.000) 6 | p0 = Particles.Particles('particles-1') 7 | # Particles parameters 8 | p0.setFactory("ZSpinParticleFactory") 9 | p0.setRenderer("SpriteParticleRenderer") 10 | p0.setEmitter("PointEmitter") 11 | p0.setPoolSize(2) 12 | p0.setBirthRate(0.0100) 13 | p0.setLitterSize(1) 14 | p0.setLitterSpread(0) 15 | p0.setSystemLifespan(0.0000) 16 | p0.setLocalVelocityFlag(1) 17 | p0.setSystemGrowsOlderFlag(0) 18 | # Factory parameters 19 | p0.factory.setLifespanBase(0.6000) 20 | p0.factory.setLifespanSpread(0.0000) 21 | p0.factory.setMassBase(1.0000) 22 | p0.factory.setMassSpread(0.0000) 23 | p0.factory.setTerminalVelocityBase(400.0000) 24 | p0.factory.setTerminalVelocitySpread(0.0000) 25 | # Z Spin factory parameters 26 | p0.factory.setInitialAngle(0.0000) 27 | p0.factory.setInitialAngleSpread(0.0000) 28 | p0.factory.enableAngularVelocity(1) 29 | p0.factory.setAngularVelocity(155.0000) 30 | p0.factory.setAngularVelocitySpread(5.0000) 31 | # Renderer parameters 32 | p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT) 33 | p0.renderer.setUserAlpha(1.00) 34 | # Sprite parameters 35 | p0.renderer.addTextureFromFile('assets/fx/BloodSplat.png') 36 | p0.renderer.setColor(Vec4(1.00, 1.00, 1.00, 1.00)) 37 | p0.renderer.setXScaleFlag(0) 38 | p0.renderer.setYScaleFlag(0) 39 | p0.renderer.setAnimAngleFlag(1) 40 | p0.renderer.setInitialXScale(0.2000) 41 | p0.renderer.setFinalXScale(1.0000) 42 | p0.renderer.setInitialYScale(0.2000) 43 | p0.renderer.setFinalYScale(1.0000) 44 | p0.renderer.setNonanimatedTheta(0.0000) 45 | p0.renderer.setAlphaBlendMethod(BaseParticleRenderer.PPBLENDLINEAR) 46 | p0.renderer.setAlphaDisable(0) 47 | p0.renderer.setColorBlendMode(ColorBlendAttrib.MAdd, ColorBlendAttrib.OIncomingAlpha, ColorBlendAttrib.OOneMinusIncomingAlpha) 48 | # Emitter parameters 49 | p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) 50 | p0.emitter.setAmplitude(0.5000) 51 | p0.emitter.setAmplitudeSpread(1.0000) 52 | p0.emitter.setOffsetForce(Vec3(0.0000, 0.0000, 0.0000)) 53 | p0.emitter.setExplicitLaunchVector(Vec3(1.0000, 0.0000, 0.0000)) 54 | p0.emitter.setRadiateOrigin(Point3(0.0000, 1.0000, 0.4000)) 55 | # Point parameters 56 | p0.emitter.setLocation(Point3(0.0000, 0.0000, 0.0000)) 57 | self.addParticles(p0) 58 | -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/fx/Leaf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/fx/Leaf.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/fx/Leafs.ptf: -------------------------------------------------------------------------------- 1 | 2 | self.reset() 3 | self.setPos(0.000, 0.000, 0.000) 4 | self.setHpr(0.000, 0.000, 0.000) 5 | self.setScale(1.000, 1.000, 1.000) 6 | p0 = Particles.Particles('particles-1') 7 | # Particles parameters 8 | p0.setFactory("ZSpinParticleFactory") 9 | p0.setRenderer("SpriteParticleRenderer") 10 | p0.setEmitter("LineEmitter") 11 | p0.setPoolSize(15) 12 | p0.setBirthRate(2.5000) 13 | p0.setLitterSize(10) 14 | p0.setLitterSpread(0) 15 | p0.setSystemLifespan(0.0000) 16 | p0.setLocalVelocityFlag(1) 17 | p0.setSystemGrowsOlderFlag(0) 18 | # Factory parameters 19 | p0.factory.setLifespanBase(2.5000) 20 | p0.factory.setLifespanSpread(2.0000) 21 | p0.factory.setMassBase(1.0000) 22 | p0.factory.setMassSpread(0.0000) 23 | p0.factory.setTerminalVelocityBase(400.0000) 24 | p0.factory.setTerminalVelocitySpread(0.0000) 25 | # Z Spin factory parameters 26 | p0.factory.setInitialAngle(0.0000) 27 | p0.factory.setInitialAngleSpread(69.7751) 28 | p0.factory.enableAngularVelocity(0) 29 | p0.factory.setFinalAngle(-43.1524) 30 | p0.factory.setFinalAngleSpread(-66.8014) 31 | # Renderer parameters 32 | p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHANONE) 33 | p0.renderer.setUserAlpha(1.00) 34 | # Sprite parameters 35 | p0.renderer.addTextureFromFile('assets/fx/Leaf.png') 36 | p0.renderer.setColor(Vec4(1.00, 1.00, 1.00, 1.00)) 37 | p0.renderer.setXScaleFlag(0) 38 | p0.renderer.setYScaleFlag(0) 39 | p0.renderer.setAnimAngleFlag(1) 40 | p0.renderer.setInitialXScale(0.0800) 41 | p0.renderer.setFinalXScale(1.0000) 42 | p0.renderer.setInitialYScale(0.0800) 43 | p0.renderer.setFinalYScale(1.0000) 44 | p0.renderer.setNonanimatedTheta(0.0000) 45 | p0.renderer.setAlphaBlendMethod(BaseParticleRenderer.PPBLENDLINEAR) 46 | p0.renderer.setAlphaDisable(0) 47 | p0.renderer.setColorBlendMode(ColorBlendAttrib.MAdd, ColorBlendAttrib.OIncomingAlpha, ColorBlendAttrib.OOneMinusIncomingAlpha) 48 | # Emitter parameters 49 | p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) 50 | p0.emitter.setAmplitude(0.5000) 51 | p0.emitter.setAmplitudeSpread(0.7000) 52 | p0.emitter.setOffsetForce(Vec3(-0.5000, 0.0000, -0.2000)) 53 | p0.emitter.setExplicitLaunchVector(Vec3(-1.0000, -1.0000, -1.0000)) 54 | p0.emitter.setRadiateOrigin(Point3(1.0000, 0.0000, 2.0000)) 55 | # Line parameters 56 | p0.emitter.setEndpoint1(Point3(2.0000, 0.0000, 1.0000)) 57 | p0.emitter.setEndpoint2(Point3(-1.0000, 0.0000, 1.0000)) 58 | self.addParticles(p0) 59 | -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/gui/Char1Button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/gui/Char1Button.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/gui/Char1_L.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/gui/Char1_L.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/gui/Char1_R.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/gui/Char1_R.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/gui/Char2Button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/gui/Char2Button.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/gui/Char2_L.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/gui/Char2_L.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/gui/Char2_R.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/gui/Char2_R.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/gui/CharBlueBG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/gui/CharBlueBG.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/gui/CharRedBG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/gui/CharRedBG.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/gui/Cursor.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/gui/Cursor.ico -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/gui/Cursor.x11: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/gui/Cursor.x11 -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/gui/Level1Button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/gui/Level1Button.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/gui/Level2Button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/gui/Level2Button.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/gui/MenuBackground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/gui/MenuBackground.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/gui/btn_click.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/gui/btn_click.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/gui/btn_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/gui/btn_disabled.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/gui/btn_ready.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/gui/btn_ready.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/gui/btn_rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/gui/btn_rollover.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/gui/button_map.egg: -------------------------------------------------------------------------------- 1 | { 2 | "egg-texture-cards -o button_map.egg -p 800,40 -g 0,1,-0.025,0.025 -wm clamp btn_ready.png btn_click.png btn_rollover.png btn_disabled.png" 3 | } 4 | btn_rollover { 5 | btn_rollover.png 6 | wrap { clamp } 7 | } 8 | btn_ready { 9 | btn_ready.png 10 | wrap { clamp } 11 | } 12 | btn_disabled { 13 | btn_disabled.png 14 | wrap { clamp } 15 | } 16 | btn_click { 17 | btn_click.png 18 | wrap { clamp } 19 | } 20 | { 21 | { 1 } 22 | fps { 2 } 23 | vpool { 24 | 0 { 25 | 0 0.025 0 26 | { 0 1 } 27 | } 28 | 1 { 29 | 0 -0.025 0 30 | { 0 0 } 31 | } 32 | 2 { 33 | 1 -0.025 0 34 | { 1 0 } 35 | } 36 | 3 { 37 | 1 0.025 0 38 | { 1 1 } 39 | } 40 | 4 { 41 | 0 0.025 0 42 | { 0 1 } 43 | } 44 | 5 { 45 | 0 -0.025 0 46 | { 0 0 } 47 | } 48 | 6 { 49 | 1 -0.025 0 50 | { 1 0 } 51 | } 52 | 7 { 53 | 1 0.025 0 54 | { 1 1 } 55 | } 56 | 8 { 57 | 0 0.025 0 58 | { 0 1 } 59 | } 60 | 9 { 61 | 0 -0.025 0 62 | { 0 0 } 63 | } 64 | 10 { 65 | 1 -0.025 0 66 | { 1 0 } 67 | } 68 | 11 { 69 | 1 0.025 0 70 | { 1 1 } 71 | } 72 | 12 { 73 | 0 0.025 0 74 | { 0 1 } 75 | } 76 | 13 { 77 | 0 -0.025 0 78 | { 0 0 } 79 | } 80 | 14 { 81 | 1 -0.025 0 82 | { 1 0 } 83 | } 84 | 15 { 85 | 1 0.025 0 86 | { 1 1 } 87 | } 88 | } 89 | btn_ready { 90 | { 91 | { 1 1 1 1 } 92 | { btn_ready } 93 | { 0 1 2 3 { vpool } } 94 | } 95 | } 96 | btn_click { 97 | { 98 | { 1 1 1 1 } 99 | { btn_click } 100 | { 4 5 6 7 { vpool } } 101 | } 102 | } 103 | btn_rollover { 104 | { 105 | { 1 1 1 1 } 106 | { btn_rollover } 107 | { 8 9 10 11 { vpool } } 108 | } 109 | } 110 | btn_disabled { 111 | { 112 | { 1 1 1 1 } 113 | { btn_disabled } 114 | { 12 13 14 15 { vpool } } 115 | } 116 | } 117 | } 118 | -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/levels/arena1/Flagpost.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/levels/arena1/Flagpost.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/levels/arena1/Flags.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/levels/arena1/Flags.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/levels/arena1/Ground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/levels/arena1/Ground.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/levels/arena1/MainHouse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/levels/arena1/MainHouse.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/levels/arena1/Mountain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/levels/arena1/Mountain.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/levels/arena1/SideHouse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/levels/arena1/SideHouse.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/levels/arena2/Godrays.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/levels/arena2/Godrays.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/levels/arena2/Ground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/levels/arena2/Ground.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/levels/arena2/Ground_ao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/levels/arena2/Ground_ao.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/levels/arena2/Pillar.egg: -------------------------------------------------------------------------------- 1 | { Z-up } 2 | Pillar { 3 | diffr { 0.640000 } 4 | diffg { 0.640000 } 5 | diffb { 0.640000 } 6 | specr { 0.000000 } 7 | specg { 0.000000 } 8 | specb { 0.000000 } 9 | shininess { 12.5 } 10 | ambr { 1.000000 } 11 | ambg { 1.000000 } 12 | ambb { 1.000000 } 13 | emitr { 0.000000 } 14 | emitg { 0.000000 } 15 | emitb { 0.000000 } 16 | } 17 | 18 | Pillar { 19 | "./Pillar.png" 20 | envtype { MODULATE } 21 | minfilter { LINEAR_MIPMAP_LINEAR } 22 | magfilter { LINEAR_MIPMAP_LINEAR } 23 | wrap { REPEAT } 24 | } 25 | 26 | Cylinder { 27 | { 28 | { 29 | 1.0 0.0 0.0 0.0 30 | 0.0 1.0 0.0 0.0 31 | 0.0 0.0 1.0 0.0 32 | 0.0 0.0 0.0 1.0 33 | } 34 | } 35 | 36 | Cylinder { 37 | 38 | 0 {0.000000 0.500000 0.400000 39 | { 0.000000 1.000000 0.000000 } 40 | { 41 | 0.552734 0.011719 42 | } 43 | } 44 | 1 {0.000000 0.500000 6.400000 45 | { 0.000000 1.000000 0.000000 } 46 | { 47 | 0.552734 0.988281 48 | } 49 | } 50 | 2 {0.097545 0.490393 6.400000 51 | { 0.195074 0.980773 0.000000 } 52 | { 53 | 0.535156 0.988281 54 | } 55 | } 56 | 3 {0.097545 0.490393 0.400000 57 | { 0.195074 0.980773 0.000000 } 58 | { 59 | 0.535156 0.011719 60 | } 61 | } 62 | 4 {0.097545 0.490393 0.400000 63 | { 0.195074 0.980773 0.000000 } 64 | { 65 | 0.535156 0.011719 66 | } 67 | } 68 | 5 {0.097545 0.490393 6.400000 69 | { 0.195074 0.980773 0.000000 } 70 | { 71 | 0.535156 0.988281 72 | } 73 | } 74 | 6 {0.191342 0.461940 6.400000 75 | { 0.382672 0.923856 0.000000 } 76 | { 77 | 0.517578 0.988281 78 | } 79 | } 80 | 7 {0.191342 0.461940 0.400000 81 | { 0.382672 0.923856 0.000000 } 82 | { 83 | 0.517578 0.011719 84 | } 85 | } 86 | 8 {0.191342 0.461940 0.400000 87 | { 0.382672 0.923856 0.000000 } 88 | { 89 | 0.517578 0.011719 90 | } 91 | } 92 | 9 {0.191342 0.461940 6.400000 93 | { 0.382672 0.923856 0.000000 } 94 | { 95 | 0.517578 0.988281 96 | } 97 | } 98 | 10 {0.277785 0.415735 6.400000 99 | { 0.555559 0.831446 0.000000 } 100 | { 101 | 0.500000 0.988281 102 | } 103 | } 104 | 11 {0.277785 0.415735 0.400000 105 | { 0.555559 0.831446 0.000000 } 106 | { 107 | 0.500000 0.011719 108 | } 109 | } 110 | 12 {0.277785 0.415735 0.400000 111 | { 0.555559 0.831446 0.000000 } 112 | { 113 | 0.500000 0.011719 114 | } 115 | } 116 | 13 {0.277785 0.415735 6.400000 117 | { 0.555559 0.831446 0.000000 } 118 | { 119 | 0.500000 0.988281 120 | } 121 | } 122 | 14 {0.353553 0.353554 6.400000 123 | { 0.707083 0.707083 0.000000 } 124 | { 125 | 0.484375 0.988281 126 | } 127 | } 128 | 15 {0.353553 0.353554 0.400000 129 | { 0.707083 0.707083 0.000000 } 130 | { 131 | 0.484375 0.011719 132 | } 133 | } 134 | 16 {0.353553 0.353554 0.400000 135 | { 0.707083 0.707083 0.000000 } 136 | { 137 | 0.484375 0.011719 138 | } 139 | } 140 | 17 {0.353553 0.353554 6.400000 141 | { 0.707083 0.707083 0.000000 } 142 | { 143 | 0.484375 0.988281 144 | } 145 | } 146 | 18 {0.415735 0.277785 6.400000 147 | { 0.831446 0.555559 0.000000 } 148 | { 149 | 0.466797 0.988281 150 | } 151 | } 152 | 19 {0.415735 0.277785 0.400000 153 | { 0.831446 0.555559 0.000000 } 154 | { 155 | 0.466797 0.011719 156 | } 157 | } 158 | 20 {0.415735 0.277785 0.400000 159 | { 0.831446 0.555559 0.000000 } 160 | { 161 | 0.466797 0.011719 162 | } 163 | } 164 | 21 {0.415735 0.277785 6.400000 165 | { 0.831446 0.555559 0.000000 } 166 | { 167 | 0.466797 0.988281 168 | } 169 | } 170 | 22 {0.461940 0.191342 6.400000 171 | { 0.923856 0.382672 0.000000 } 172 | { 173 | 0.449219 0.988281 174 | } 175 | } 176 | 23 {0.461940 0.191342 0.400000 177 | { 0.923856 0.382672 0.000000 } 178 | { 179 | 0.449219 0.011719 180 | } 181 | } 182 | 24 {0.461940 0.191342 0.400000 183 | { 0.923856 0.382672 0.000000 } 184 | { 185 | 0.449219 0.011719 186 | } 187 | } 188 | 25 {0.461940 0.191342 6.400000 189 | { 0.923856 0.382672 0.000000 } 190 | { 191 | 0.449219 0.988281 192 | } 193 | } 194 | 26 {0.490393 0.097545 6.400000 195 | { 0.980773 0.195074 0.000000 } 196 | { 197 | 0.431641 0.988281 198 | } 199 | } 200 | 27 {0.490393 0.097545 0.400000 201 | { 0.980773 0.195074 0.000000 } 202 | { 203 | 0.431641 0.011719 204 | } 205 | } 206 | 28 {0.490393 0.097545 0.400000 207 | { 0.980773 0.195074 0.000000 } 208 | { 209 | 0.431641 0.011719 210 | } 211 | } 212 | 29 {0.490393 0.097545 6.400000 213 | { 0.980773 0.195074 0.000000 } 214 | { 215 | 0.431641 0.988281 216 | } 217 | } 218 | 30 {0.500000 0.000000 6.400000 219 | { 1.000000 0.000000 0.000000 } 220 | { 221 | 0.416016 0.988281 222 | } 223 | } 224 | 31 {0.500000 0.000000 0.400000 225 | { 1.000000 0.000000 0.000000 } 226 | { 227 | 0.416016 0.011719 228 | } 229 | } 230 | 32 {0.500000 0.000000 0.400000 231 | { 1.000000 0.000000 0.000000 } 232 | { 233 | 0.416016 0.011719 234 | } 235 | } 236 | 33 {0.500000 0.000000 6.400000 237 | { 1.000000 0.000000 0.000000 } 238 | { 239 | 0.416016 0.988281 240 | } 241 | } 242 | 34 {0.490393 -0.097545 6.400000 243 | { 0.980773 -0.195074 0.000000 } 244 | { 245 | 0.398438 0.988281 246 | } 247 | } 248 | 35 {0.490393 -0.097545 0.400000 249 | { 0.980773 -0.195074 0.000000 } 250 | { 251 | 0.398438 0.011719 252 | } 253 | } 254 | 36 {0.490393 -0.097545 0.400000 255 | { 0.980773 -0.195074 0.000000 } 256 | { 257 | 0.398438 0.011719 258 | } 259 | } 260 | 37 {0.490393 -0.097545 6.400000 261 | { 0.980773 -0.195074 0.000000 } 262 | { 263 | 0.398438 0.988281 264 | } 265 | } 266 | 38 {0.461940 -0.191341 6.400000 267 | { 0.923856 -0.382672 0.000000 } 268 | { 269 | 0.380859 0.988281 270 | } 271 | } 272 | 39 {0.461940 -0.191341 0.400000 273 | { 0.923856 -0.382672 0.000000 } 274 | { 275 | 0.380859 0.011719 276 | } 277 | } 278 | 40 {0.461940 -0.191341 0.400000 279 | { 0.923856 -0.382672 0.000000 } 280 | { 281 | 0.380859 0.011719 282 | } 283 | } 284 | 41 {0.461940 -0.191341 6.400000 285 | { 0.923856 -0.382672 0.000000 } 286 | { 287 | 0.380859 0.988281 288 | } 289 | } 290 | 42 {0.415735 -0.277785 6.400000 291 | { 0.831446 -0.555559 0.000000 } 292 | { 293 | 0.365234 0.988281 294 | } 295 | } 296 | 43 {0.415735 -0.277785 0.400000 297 | { 0.831446 -0.555559 0.000000 } 298 | { 299 | 0.365234 0.011719 300 | } 301 | } 302 | 44 {0.415735 -0.277785 0.400000 303 | { 0.831446 -0.555559 0.000000 } 304 | { 305 | 0.365234 0.011719 306 | } 307 | } 308 | 45 {0.415735 -0.277785 6.400000 309 | { 0.831446 -0.555559 0.000000 } 310 | { 311 | 0.365234 0.988281 312 | } 313 | } 314 | 46 {0.353553 -0.353553 6.400000 315 | { 0.707083 -0.707083 0.000000 } 316 | { 317 | 0.347656 0.988281 318 | } 319 | } 320 | 47 {0.353553 -0.353553 0.400000 321 | { 0.707083 -0.707083 0.000000 } 322 | { 323 | 0.347656 0.011719 324 | } 325 | } 326 | 48 {0.353553 -0.353553 0.400000 327 | { 0.707083 -0.707083 0.000000 } 328 | { 329 | 0.347656 0.011719 330 | } 331 | } 332 | 49 {0.353553 -0.353553 6.400000 333 | { 0.707083 -0.707083 0.000000 } 334 | { 335 | 0.347656 0.988281 336 | } 337 | } 338 | 50 {0.277785 -0.415735 6.400000 339 | { 0.555559 -0.831446 0.000000 } 340 | { 341 | 0.330078 0.988281 342 | } 343 | } 344 | 51 {0.277785 -0.415735 0.400000 345 | { 0.555559 -0.831446 0.000000 } 346 | { 347 | 0.330078 0.011719 348 | } 349 | } 350 | 52 {0.277785 -0.415735 0.400000 351 | { 0.555559 -0.831446 0.000000 } 352 | { 353 | 0.330078 0.011719 354 | } 355 | } 356 | 53 {0.277785 -0.415735 6.400000 357 | { 0.555559 -0.831446 0.000000 } 358 | { 359 | 0.330078 0.988281 360 | } 361 | } 362 | 54 {0.191342 -0.461940 6.400000 363 | { 0.382672 -0.923856 0.000000 } 364 | { 365 | 0.312500 0.988281 366 | } 367 | } 368 | 55 {0.191342 -0.461940 0.400000 369 | { 0.382672 -0.923856 0.000000 } 370 | { 371 | 0.312500 0.011719 372 | } 373 | } 374 | 56 {0.191342 -0.461940 0.400000 375 | { 0.382672 -0.923856 0.000000 } 376 | { 377 | 0.312500 0.011719 378 | } 379 | } 380 | 57 {0.191342 -0.461940 6.400000 381 | { 0.382672 -0.923856 0.000000 } 382 | { 383 | 0.312500 0.988281 384 | } 385 | } 386 | 58 {0.097545 -0.490392 6.400000 387 | { 0.195074 -0.980773 0.000000 } 388 | { 389 | 0.296875 0.988281 390 | } 391 | } 392 | 59 {0.097545 -0.490392 0.400000 393 | { 0.195074 -0.980773 0.000000 } 394 | { 395 | 0.296875 0.011719 396 | } 397 | } 398 | 60 {0.097545 -0.490392 0.400000 399 | { 0.195074 -0.980773 0.000000 } 400 | { 401 | 0.296875 0.011719 402 | } 403 | } 404 | 61 {0.097545 -0.490392 6.400000 405 | { 0.195074 -0.980773 0.000000 } 406 | { 407 | 0.296875 0.988281 408 | } 409 | } 410 | 62 {-0.000000 -0.500000 6.400000 411 | { 0.000000 -0.999969 0.000000 } 412 | { 413 | 0.279297 0.988281 414 | } 415 | } 416 | 63 {-0.000000 -0.500000 0.400000 417 | { 0.000000 -0.999969 0.000000 } 418 | { 419 | 0.279297 0.011719 420 | } 421 | } 422 | 64 {-0.000000 -0.500000 0.400000 423 | { 0.000000 -0.999969 0.000000 } 424 | { 425 | 0.279297 0.011719 426 | } 427 | } 428 | 65 {-0.000000 -0.500000 6.400000 429 | { 0.000000 -0.999969 0.000000 } 430 | { 431 | 0.279297 0.988281 432 | } 433 | } 434 | 66 {-0.097545 -0.490392 6.400000 435 | { -0.195074 -0.980773 0.000000 } 436 | { 437 | 0.261719 0.988281 438 | } 439 | } 440 | 67 {-0.097545 -0.490392 0.400000 441 | { -0.195074 -0.980773 0.000000 } 442 | { 443 | 0.261719 0.011719 444 | } 445 | } 446 | 68 {-0.097545 -0.490392 0.400000 447 | { -0.195074 -0.980773 0.000000 } 448 | { 449 | 0.261719 0.011719 450 | } 451 | } 452 | 69 {-0.097545 -0.490392 6.400000 453 | { -0.195074 -0.980773 0.000000 } 454 | { 455 | 0.261719 0.988281 456 | } 457 | } 458 | 70 {-0.191342 -0.461939 6.400000 459 | { -0.382672 -0.923856 0.000000 } 460 | { 461 | 0.246094 0.988281 462 | } 463 | } 464 | 71 {-0.191342 -0.461939 0.400000 465 | { -0.382672 -0.923856 0.000000 } 466 | { 467 | 0.244141 0.011719 468 | } 469 | } 470 | 72 {-0.191342 -0.461939 0.400000 471 | { -0.382672 -0.923856 0.000000 } 472 | { 473 | 0.244141 0.011719 474 | } 475 | } 476 | 73 {-0.191342 -0.461939 6.400000 477 | { -0.382672 -0.923856 0.000000 } 478 | { 479 | 0.246094 0.988281 480 | } 481 | } 482 | 74 {-0.277785 -0.415734 6.400000 483 | { -0.555559 -0.831446 0.000000 } 484 | { 485 | 0.228516 0.988281 486 | } 487 | } 488 | 75 {-0.277785 -0.415734 0.400000 489 | { -0.555559 -0.831446 0.000000 } 490 | { 491 | 0.228516 0.011719 492 | } 493 | } 494 | 76 {-0.277785 -0.415734 0.400000 495 | { -0.555559 -0.831446 0.000000 } 496 | { 497 | 0.228516 0.011719 498 | } 499 | } 500 | 77 {-0.277785 -0.415734 6.400000 501 | { -0.555559 -0.831446 0.000000 } 502 | { 503 | 0.228516 0.988281 504 | } 505 | } 506 | 78 {-0.353554 -0.353553 6.400000 507 | { -0.707083 -0.707083 0.000000 } 508 | { 509 | 0.210938 0.988281 510 | } 511 | } 512 | 79 {-0.353554 -0.353553 0.400000 513 | { -0.707083 -0.707083 0.000000 } 514 | { 515 | 0.210938 0.011719 516 | } 517 | } 518 | 80 {-0.353554 -0.353553 0.400000 519 | { -0.707083 -0.707083 0.000000 } 520 | { 521 | 0.210938 0.011719 522 | } 523 | } 524 | 81 {-0.353554 -0.353553 6.400000 525 | { -0.707083 -0.707083 0.000000 } 526 | { 527 | 0.210938 0.988281 528 | } 529 | } 530 | 82 {-0.415735 -0.277785 6.400000 531 | { -0.831446 -0.555559 0.000000 } 532 | { 533 | 0.193359 0.988281 534 | } 535 | } 536 | 83 {-0.415735 -0.277785 0.400000 537 | { -0.831446 -0.555559 0.000000 } 538 | { 539 | 0.193359 0.011719 540 | } 541 | } 542 | 84 {-0.415735 -0.277785 0.400000 543 | { -0.831446 -0.555559 0.000000 } 544 | { 545 | 0.193359 0.011719 546 | } 547 | } 548 | 85 {-0.415735 -0.277785 6.400000 549 | { -0.831446 -0.555559 0.000000 } 550 | { 551 | 0.193359 0.988281 552 | } 553 | } 554 | 86 {-0.461940 -0.191341 6.400000 555 | { -0.923856 -0.382672 0.000000 } 556 | { 557 | 0.177734 0.988281 558 | } 559 | } 560 | 87 {-0.461940 -0.191341 0.400000 561 | { -0.923856 -0.382672 0.000000 } 562 | { 563 | 0.177734 0.011719 564 | } 565 | } 566 | 88 {-0.461940 -0.191341 0.400000 567 | { -0.923856 -0.382672 0.000000 } 568 | { 569 | 0.177734 0.011719 570 | } 571 | } 572 | 89 {-0.461940 -0.191341 6.400000 573 | { -0.923856 -0.382672 0.000000 } 574 | { 575 | 0.177734 0.988281 576 | } 577 | } 578 | 90 {-0.490393 -0.097545 6.400000 579 | { -0.980773 -0.195074 0.000000 } 580 | { 581 | 0.160156 0.988281 582 | } 583 | } 584 | 91 {-0.490393 -0.097545 0.400000 585 | { -0.980773 -0.195074 0.000000 } 586 | { 587 | 0.160156 0.011719 588 | } 589 | } 590 | 92 {-0.490393 -0.097545 0.400000 591 | { -0.980773 -0.195074 0.000000 } 592 | { 593 | 0.160156 0.011719 594 | } 595 | } 596 | 93 {-0.490393 -0.097545 6.400000 597 | { -0.980773 -0.195074 0.000000 } 598 | { 599 | 0.160156 0.988281 600 | } 601 | } 602 | 94 {-0.500000 0.000001 6.400000 603 | { -1.000000 0.000000 0.000000 } 604 | { 605 | 0.142578 0.988281 606 | } 607 | } 608 | 95 {-0.500000 0.000001 0.400000 609 | { -1.000000 0.000000 0.000000 } 610 | { 611 | 0.142578 0.011719 612 | } 613 | } 614 | 96 {-0.500000 0.000001 0.400000 615 | { -1.000000 0.000000 0.000000 } 616 | { 617 | 0.142578 0.011719 618 | } 619 | } 620 | 97 {-0.500000 0.000001 6.400000 621 | { -1.000000 0.000000 0.000000 } 622 | { 623 | 0.142578 0.988281 624 | } 625 | } 626 | 98 {-0.490393 0.097546 6.400000 627 | { -0.980773 0.195074 0.000000 } 628 | { 629 | 0.125000 0.988281 630 | } 631 | } 632 | 99 {-0.490393 0.097546 0.400000 633 | { -0.980773 0.195074 0.000000 } 634 | { 635 | 0.125000 0.011719 636 | } 637 | } 638 | 100 {-0.490393 0.097546 0.400000 639 | { -0.980773 0.195074 0.000000 } 640 | { 641 | 0.125000 0.011719 642 | } 643 | } 644 | 101 {-0.490393 0.097546 6.400000 645 | { -0.980773 0.195074 0.000000 } 646 | { 647 | 0.125000 0.988281 648 | } 649 | } 650 | 102 {-0.461940 0.191342 6.400000 651 | { -0.923856 0.382672 0.000000 } 652 | { 653 | 0.109375 0.988281 654 | } 655 | } 656 | 103 {-0.461940 0.191342 0.400000 657 | { -0.923856 0.382672 0.000000 } 658 | { 659 | 0.109375 0.011719 660 | } 661 | } 662 | 104 {-0.461940 0.191342 0.400000 663 | { -0.923856 0.382672 0.000000 } 664 | { 665 | 0.109375 0.011719 666 | } 667 | } 668 | 105 {-0.461940 0.191342 6.400000 669 | { -0.923856 0.382672 0.000000 } 670 | { 671 | 0.109375 0.988281 672 | } 673 | } 674 | 106 {-0.415734 0.277786 6.400000 675 | { -0.831446 0.555559 0.000000 } 676 | { 677 | 0.091797 0.988281 678 | } 679 | } 680 | 107 {-0.415734 0.277786 0.400000 681 | { -0.831446 0.555559 0.000000 } 682 | { 683 | 0.091797 0.011719 684 | } 685 | } 686 | 108 {-0.415734 0.277786 0.400000 687 | { -0.831446 0.555559 0.000000 } 688 | { 689 | 0.091797 0.011719 690 | } 691 | } 692 | 109 {-0.415734 0.277786 6.400000 693 | { -0.831446 0.555559 0.000000 } 694 | { 695 | 0.091797 0.988281 696 | } 697 | } 698 | 110 {-0.353553 0.353554 6.400000 699 | { -0.707083 0.707083 0.000000 } 700 | { 701 | 0.074219 0.988281 702 | } 703 | } 704 | 111 {-0.353553 0.353554 0.400000 705 | { -0.707083 0.707083 0.000000 } 706 | { 707 | 0.074219 0.011719 708 | } 709 | } 710 | 112 {-0.353553 0.353554 0.400000 711 | { -0.707083 0.707083 0.000000 } 712 | { 713 | 0.074219 0.011719 714 | } 715 | } 716 | 113 {-0.353553 0.353554 6.400000 717 | { -0.707083 0.707083 0.000000 } 718 | { 719 | 0.074219 0.988281 720 | } 721 | } 722 | 114 {-0.277785 0.415735 6.400000 723 | { -0.555559 0.831446 0.000000 } 724 | { 725 | 0.058594 0.988281 726 | } 727 | } 728 | 115 {-0.277785 0.415735 0.400000 729 | { -0.555559 0.831446 0.000000 } 730 | { 731 | 0.058594 0.011719 732 | } 733 | } 734 | 116 {-0.277785 0.415735 0.400000 735 | { -0.555559 0.831446 0.000000 } 736 | { 737 | 0.058594 0.011719 738 | } 739 | } 740 | 117 {-0.277785 0.415735 6.400000 741 | { -0.555559 0.831446 0.000000 } 742 | { 743 | 0.058594 0.988281 744 | } 745 | } 746 | 118 {-0.191341 0.461940 6.400000 747 | { -0.382672 0.923856 0.000000 } 748 | { 749 | 0.041016 0.988281 750 | } 751 | } 752 | 119 {-0.191341 0.461940 0.400000 753 | { -0.382672 0.923856 0.000000 } 754 | { 755 | 0.041016 0.011719 756 | } 757 | } 758 | 120 {-0.630000 0.630000 0.400000 759 | { 760 | 0.669922 0.835938 761 | } 762 | } 763 | 121 {0.630000 0.630000 0.400000 764 | { 765 | 0.886719 0.835938 766 | } 767 | } 768 | 122 {0.720000 0.720000 0.000000 769 | { 770 | 0.902344 0.906250 771 | } 772 | } 773 | 123 {-0.720000 0.720000 0.000000 774 | { 775 | 0.654297 0.906250 776 | } 777 | } 778 | 124 {-0.097544 0.490393 0.400000 779 | { -0.195074 0.980773 0.000000 } 780 | { 781 | 0.023438 0.011719 782 | } 783 | } 784 | 125 {-0.097544 0.490393 6.400000 785 | { -0.195074 0.980773 0.000000 } 786 | { 787 | 0.023438 0.988281 788 | } 789 | } 790 | 126 {0.000000 0.500000 6.400000 791 | { 0.000000 1.000000 0.000000 } 792 | { 793 | 0.005859 0.988281 794 | } 795 | } 796 | 127 {0.000000 0.500000 0.400000 797 | { 0.000000 1.000000 0.000000 } 798 | { 799 | 0.005859 0.011719 800 | } 801 | } 802 | 128 {-0.191341 0.461940 0.400000 803 | { -0.382672 0.923856 0.000000 } 804 | { 805 | 0.041016 0.011719 806 | } 807 | } 808 | 129 {-0.191341 0.461940 6.400000 809 | { -0.382672 0.923856 0.000000 } 810 | { 811 | 0.041016 0.988281 812 | } 813 | } 814 | 130 {-0.097544 0.490393 6.400000 815 | { -0.195074 0.980773 0.000000 } 816 | { 817 | 0.023438 0.988281 818 | } 819 | } 820 | 131 {-0.097544 0.490393 0.400000 821 | { -0.195074 0.980773 0.000000 } 822 | { 823 | 0.023438 0.011719 824 | } 825 | } 826 | 132 {-0.630000 -0.630000 0.400000 827 | { 828 | 0.669922 0.619141 829 | } 830 | } 831 | 133 {-0.630000 0.630000 0.400000 832 | { 833 | 0.669922 0.835938 834 | } 835 | } 836 | 134 {-0.720000 0.720000 0.000000 837 | { 838 | 0.599609 0.851562 839 | } 840 | } 841 | 135 {-0.720000 -0.720000 0.000000 842 | { 843 | 0.599609 0.603516 844 | } 845 | } 846 | 136 {0.630000 0.630000 0.400000 847 | { 848 | 0.886719 0.835938 849 | } 850 | } 851 | 137 {0.630000 -0.630000 0.400000 852 | { 853 | 0.886719 0.619141 854 | } 855 | } 856 | 138 {0.720000 -0.720000 0.000000 857 | { 858 | 0.957031 0.603516 859 | } 860 | } 861 | 139 {0.720000 0.720000 0.000000 862 | { 863 | 0.957031 0.851562 864 | } 865 | } 866 | 140 {0.630000 -0.630000 0.400000 867 | { 868 | 0.886719 0.619141 869 | } 870 | } 871 | 141 {-0.630000 -0.630000 0.400000 872 | { 873 | 0.669922 0.619141 874 | } 875 | } 876 | 142 {-0.720000 -0.720000 0.000000 877 | { 878 | 0.654297 0.548828 879 | } 880 | } 881 | 143 {0.720000 -0.720000 0.000000 882 | { 883 | 0.902344 0.548828 884 | } 885 | } 886 | 144 {0.630000 0.630000 6.400001 887 | { 888 | 0.884766 0.189453 889 | } 890 | } 891 | 145 {-0.630000 0.630000 6.400001 892 | { 893 | 0.667969 0.189453 894 | } 895 | } 896 | 146 {-0.720000 0.720000 6.800001 897 | { 898 | 0.652344 0.119141 899 | } 900 | } 901 | 147 {0.720000 0.720000 6.800001 902 | { 903 | 0.900391 0.119141 904 | } 905 | } 906 | 148 {0.630000 -0.630000 0.400000 907 | { 908 | 0.886719 0.619141 909 | } 910 | } 911 | 149 {0.630000 0.630000 0.400000 912 | { 913 | 0.886719 0.835938 914 | } 915 | } 916 | 150 {-0.630000 0.630000 0.400000 917 | { 918 | 0.669922 0.835938 919 | } 920 | } 921 | 151 {-0.630000 -0.630000 0.400000 922 | { 923 | 0.669922 0.619141 924 | } 925 | } 926 | 152 {0.630000 -0.630000 6.400001 927 | { 928 | 0.884766 0.406250 929 | } 930 | } 931 | 153 {0.630000 0.630000 6.400001 932 | { 933 | 0.884766 0.189453 934 | } 935 | } 936 | 154 {0.720000 0.720000 6.800001 937 | { 938 | 0.955078 0.175781 939 | } 940 | } 941 | 155 {0.720000 -0.720000 6.800001 942 | { 943 | 0.955078 0.421875 944 | } 945 | } 946 | 156 {-0.630000 0.630000 6.400001 947 | { 948 | 0.667969 0.189453 949 | } 950 | } 951 | 157 {-0.630000 -0.630000 6.400000 952 | { 953 | 0.667969 0.406250 954 | } 955 | } 956 | 158 {-0.720000 -0.720000 6.800000 957 | { 958 | 0.597656 0.421875 959 | } 960 | } 961 | 159 {-0.720000 0.720000 6.800001 962 | { 963 | 0.597656 0.175781 964 | } 965 | } 966 | 160 {-0.630000 -0.630000 6.400000 967 | { 968 | 0.667969 0.406250 969 | } 970 | } 971 | 161 {0.630000 -0.630000 6.400001 972 | { 973 | 0.884766 0.406250 974 | } 975 | } 976 | 162 {0.720000 -0.720000 6.800001 977 | { 978 | 0.900391 0.478516 979 | } 980 | } 981 | 163 {-0.720000 -0.720000 6.800000 982 | { 983 | 0.652344 0.478516 984 | } 985 | } 986 | 164 {-0.630000 -0.630000 6.400000 987 | { 988 | 0.667969 0.406250 989 | } 990 | } 991 | 165 {-0.630000 0.630000 6.400001 992 | { 993 | 0.667969 0.189453 994 | } 995 | } 996 | 166 {0.630000 0.630000 6.400001 997 | { 998 | 0.884766 0.189453 999 | } 1000 | } 1001 | 167 {0.630000 -0.630000 6.400001 1002 | { 1003 | 0.884766 0.406250 1004 | } 1005 | }} 1006 | 1007 | 1008 | { 1009 | { Pillar } 1010 | { Pillar } 1011 | {0.098017 0.995185 0.000000} 1012 | { 0 1 2 3 { Cylinder }} 1013 | } 1014 | { 1015 | { Pillar } 1016 | { Pillar } 1017 | {0.290285 0.956940 0.000000} 1018 | { 4 5 6 7 { Cylinder }} 1019 | } 1020 | { 1021 | { Pillar } 1022 | { Pillar } 1023 | {0.471397 0.881921 0.000000} 1024 | { 8 9 10 11 { Cylinder }} 1025 | } 1026 | { 1027 | { Pillar } 1028 | { Pillar } 1029 | {0.634393 0.773010 0.000000} 1030 | { 12 13 14 15 { Cylinder }} 1031 | } 1032 | { 1033 | { Pillar } 1034 | { Pillar } 1035 | {0.773010 0.634393 0.000000} 1036 | { 16 17 18 19 { Cylinder }} 1037 | } 1038 | { 1039 | { Pillar } 1040 | { Pillar } 1041 | {0.881921 0.471396 0.000000} 1042 | { 20 21 22 23 { Cylinder }} 1043 | } 1044 | { 1045 | { Pillar } 1046 | { Pillar } 1047 | {0.956940 0.290285 0.000000} 1048 | { 24 25 26 27 { Cylinder }} 1049 | } 1050 | { 1051 | { Pillar } 1052 | { Pillar } 1053 | {0.995185 0.098017 0.000000} 1054 | { 28 29 30 31 { Cylinder }} 1055 | } 1056 | { 1057 | { Pillar } 1058 | { Pillar } 1059 | {0.995185 -0.098017 0.000000} 1060 | { 32 33 34 35 { Cylinder }} 1061 | } 1062 | { 1063 | { Pillar } 1064 | { Pillar } 1065 | {0.956940 -0.290285 0.000000} 1066 | { 36 37 38 39 { Cylinder }} 1067 | } 1068 | { 1069 | { Pillar } 1070 | { Pillar } 1071 | {0.881921 -0.471397 0.000000} 1072 | { 40 41 42 43 { Cylinder }} 1073 | } 1074 | { 1075 | { Pillar } 1076 | { Pillar } 1077 | {0.773010 -0.634393 0.000000} 1078 | { 44 45 46 47 { Cylinder }} 1079 | } 1080 | { 1081 | { Pillar } 1082 | { Pillar } 1083 | {0.634393 -0.773010 0.000000} 1084 | { 48 49 50 51 { Cylinder }} 1085 | } 1086 | { 1087 | { Pillar } 1088 | { Pillar } 1089 | {0.471397 -0.881921 0.000000} 1090 | { 52 53 54 55 { Cylinder }} 1091 | } 1092 | { 1093 | { Pillar } 1094 | { Pillar } 1095 | {0.290284 -0.956940 0.000000} 1096 | { 56 57 58 59 { Cylinder }} 1097 | } 1098 | { 1099 | { Pillar } 1100 | { Pillar } 1101 | {0.098018 -0.995185 0.000000} 1102 | { 60 61 62 63 { Cylinder }} 1103 | } 1104 | { 1105 | { Pillar } 1106 | { Pillar } 1107 | {-0.098018 -0.995185 0.000000} 1108 | { 64 65 66 67 { Cylinder }} 1109 | } 1110 | { 1111 | { Pillar } 1112 | { Pillar } 1113 | {-0.290285 -0.956940 0.000000} 1114 | { 68 69 70 71 { Cylinder }} 1115 | } 1116 | { 1117 | { Pillar } 1118 | { Pillar } 1119 | {-0.471397 -0.881921 0.000000} 1120 | { 72 73 74 75 { Cylinder }} 1121 | } 1122 | { 1123 | { Pillar } 1124 | { Pillar } 1125 | {-0.634394 -0.773010 0.000000} 1126 | { 76 77 78 79 { Cylinder }} 1127 | } 1128 | { 1129 | { Pillar } 1130 | { Pillar } 1131 | {-0.773011 -0.634393 0.000000} 1132 | { 80 81 82 83 { Cylinder }} 1133 | } 1134 | { 1135 | { Pillar } 1136 | { Pillar } 1137 | {-0.881922 -0.471396 0.000000} 1138 | { 84 85 86 87 { Cylinder }} 1139 | } 1140 | { 1141 | { Pillar } 1142 | { Pillar } 1143 | {-0.956941 -0.290284 0.000000} 1144 | { 88 89 90 91 { Cylinder }} 1145 | } 1146 | { 1147 | { Pillar } 1148 | { Pillar } 1149 | {-0.995185 -0.098016 0.000000} 1150 | { 92 93 94 95 { Cylinder }} 1151 | } 1152 | { 1153 | { Pillar } 1154 | { Pillar } 1155 | {-0.995185 0.098018 0.000000} 1156 | { 96 97 98 99 { Cylinder }} 1157 | } 1158 | { 1159 | { Pillar } 1160 | { Pillar } 1161 | {-0.956940 0.290286 0.000000} 1162 | { 100 101 102 103 { Cylinder }} 1163 | } 1164 | { 1165 | { Pillar } 1166 | { Pillar } 1167 | {-0.881921 0.471398 0.000000} 1168 | { 104 105 106 107 { Cylinder }} 1169 | } 1170 | { 1171 | { Pillar } 1172 | { Pillar } 1173 | {-0.773010 0.634394 0.000000} 1174 | { 108 109 110 111 { Cylinder }} 1175 | } 1176 | { 1177 | { Pillar } 1178 | { Pillar } 1179 | {-0.634392 0.773011 0.000000} 1180 | { 112 113 114 115 { Cylinder }} 1181 | } 1182 | { 1183 | { Pillar } 1184 | { Pillar } 1185 | {-0.471395 0.881922 0.000000} 1186 | { 116 117 118 119 { Cylinder }} 1187 | } 1188 | { 1189 | { Pillar } 1190 | { Pillar } 1191 | {0.000000 0.975610 0.219512} 1192 | { 120 121 122 123 { Cylinder }} 1193 | } 1194 | { 1195 | { Pillar } 1196 | { Pillar } 1197 | {-0.098017 0.995185 0.000000} 1198 | { 124 125 126 127 { Cylinder }} 1199 | } 1200 | { 1201 | { Pillar } 1202 | { Pillar } 1203 | {-0.290283 0.956941 0.000000} 1204 | { 128 129 130 131 { Cylinder }} 1205 | } 1206 | { 1207 | { Pillar } 1208 | { Pillar } 1209 | {-0.975610 0.000000 0.219512} 1210 | { 132 133 134 135 { Cylinder }} 1211 | } 1212 | { 1213 | { Pillar } 1214 | { Pillar } 1215 | {0.975610 0.000000 0.219512} 1216 | { 136 137 138 139 { Cylinder }} 1217 | } 1218 | { 1219 | { Pillar } 1220 | { Pillar } 1221 | {0.000000 -0.975610 0.219512} 1222 | { 140 141 142 143 { Cylinder }} 1223 | } 1224 | { 1225 | { Pillar } 1226 | { Pillar } 1227 | {0.000000 0.975610 -0.219512} 1228 | { 144 145 146 147 { Cylinder }} 1229 | } 1230 | { 1231 | { Pillar } 1232 | { Pillar } 1233 | {0.000000 0.000000 1.000000} 1234 | { 148 149 150 151 { Cylinder }} 1235 | } 1236 | { 1237 | { Pillar } 1238 | { Pillar } 1239 | {0.975610 0.000000 -0.219512} 1240 | { 152 153 154 155 { Cylinder }} 1241 | } 1242 | { 1243 | { Pillar } 1244 | { Pillar } 1245 | {-0.975610 0.000000 -0.219512} 1246 | { 156 157 158 159 { Cylinder }} 1247 | } 1248 | { 1249 | { Pillar } 1250 | { Pillar } 1251 | {0.000000 -0.975610 -0.219513} 1252 | { 160 161 162 163 { Cylinder }} 1253 | } 1254 | { 1255 | { Pillar } 1256 | { Pillar } 1257 | {0.000000 0.000000 -1.000000} 1258 | { 164 165 166 167 { Cylinder }} 1259 | } 1260 | } 1261 | -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/levels/arena2/Pillar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/levels/arena2/Pillar.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/levels/arena2/Wall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/levels/arena2/Wall.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/levels/arena2/Window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/P3D Tutorial/game/assets/levels/arena2/Window.png -------------------------------------------------------------------------------- /P3D Tutorial/game/assets/levels/arena2/arena.egg: -------------------------------------------------------------------------------- 1 | { Z-Up } 2 | 3 | { 4 | "egg-trans -tbnall -o /home/linux/arena.egg /home/linux/arena.egg" 5 | } 6 | Wall { 7 | Wall.png 8 | wrap { repeat } 9 | minfilter { linear_mipmap_linear } 10 | magfilter { linear_mipmap_linear } 11 | envtype { modulate } 12 | } 13 | Ground_ao { 14 | Ground_ao.png 15 | wrap { repeat } 16 | minfilter { linear_mipmap_linear } 17 | magfilter { linear_mipmap_linear } 18 | envtype { modulate } 19 | } 20 | Ground { 21 | Ground.png 22 | wrap { repeat } 23 | minfilter { linear_mipmap_linear } 24 | magfilter { linear_mipmap_linear } 25 | envtype { modulate } 26 | uv-name { ORCO } 27 | } 28 | Wall { 29 | diffr { 0.64 } 30 | diffg { 0.64 } 31 | diffb { 0.64 } 32 | ambr { 1 } 33 | ambg { 1 } 34 | ambb { 1 } 35 | emitr { 0 } 36 | emitg { 0 } 37 | emitb { 0 } 38 | specr { 0.5 } 39 | specg { 0.5 } 40 | specb { 0.5 } 41 | shininess { 12.5 } 42 | } 43 | Ground { 44 | diffr { 0.64 } 45 | diffg { 0.64 } 46 | diffb { 0.64 } 47 | ambr { 1 } 48 | ambg { 1 } 49 | ambb { 1 } 50 | emitr { 0 } 51 | emitg { 0 } 52 | emitb { 0 } 53 | specr { 0.5 } 54 | specg { 0.5 } 55 | specb { 0.5 } 56 | shininess { 12.5 } 57 | } 58 | Window.004 { 59 | { 60 | { 61 | 0.3 0 0 0 62 | 0 0.3 0 0 63 | 0 0 0.3 0 64 | 4 3 1.6 1 65 | } 66 | } 67 | { 68 | { 69 | "assets/levels/arena2/Window" 70 | } 71 | } 72 | } 73 | Window.003 { 74 | { 75 | { 76 | 0.3 0 0 0 77 | 0 0.3 0 0 78 | 0 0 0.3 0 79 | -4 3 1.6 1 80 | } 81 | } 82 | { 83 | { 84 | "assets/levels/arena2/Window" 85 | } 86 | } 87 | } 88 | Window.002 { 89 | { 90 | { 91 | 0.3 0 0 0 92 | 0 0.3 0 0 93 | 0 0 0.3 0 94 | -2 3 1.6 1 95 | } 96 | } 97 | { 98 | { 99 | "assets/levels/arena2/Window" 100 | } 101 | } 102 | } 103 | Window.001 { 104 | { 105 | { 106 | 0.3 0 0 0 107 | 0 0.3 0 0 108 | 0 0 0.3 0 109 | 2 3 1.6 1 110 | } 111 | } 112 | { 113 | { 114 | "assets/levels/arena2/Window" 115 | } 116 | } 117 | } 118 | Window { 119 | { 120 | { 121 | 0.3 0 0 0 122 | 0 0.3 0 0 123 | 0 0 0.3 0 124 | 0 3 1.6 1 125 | } 126 | } 127 | { 128 | { 129 | "assets/levels/arena2/Window" 130 | } 131 | } 132 | } 133 | Plane { 134 | { 135 | { 136 | 1 0 0 0 137 | 0 7.54979e-08 1 0 138 | 0 -1 7.54979e-08 0 139 | 0 3 1 1 140 | } 141 | } 142 | Plane { 143 | 0 { 144 | -6 -2 4.07 145 | { 146 | 8.1e-05 0.658176 147 | { 1 7.07222e-07 -7.07222e-07 } 148 | { 1.00016e-06 -0.707107 0.707107 } 149 | } 150 | } 151 | 1 { 152 | -6 0 2.07 153 | { 154 | 8.1e-05 0.422512 155 | { 1 7.07222e-07 -7.07222e-07 } 156 | { 1.00016e-06 -0.707107 0.707107 } 157 | } 158 | } 159 | 2 { 160 | -6 0 2.07 161 | { 162 | 8.1e-05 0.422512 163 | { 1 1.00016e-06 0 } 164 | { 1.00016e-06 -1 0 } 165 | } 166 | } 167 | 3 { 168 | -6 3 0 169 | { 170 | 8.1e-05 8.1e-05 171 | { 1 0 0 } 172 | { 0 0 1 } 173 | } 174 | } 175 | 4 { 176 | -6 3 2.07 177 | { 178 | 8.1e-05 0.172553 179 | { 1 0 0 } 180 | { 0 0 1 } 181 | } 182 | } 183 | 5 { 184 | -6 3 2.07 185 | { 186 | 8.1e-05 0.172553 187 | { 1 0 0 } 188 | { 0 -1 0 } 189 | } 190 | } 191 | 6 { 192 | 6 -2 4.07 193 | { 194 | 0.999919 0.658177 195 | { 1 7.07222e-07 -7.07222e-07 } 196 | { 1.00016e-06 -0.707107 0.707107 } 197 | } 198 | } 199 | 7 { 200 | 6 0 2.07 201 | { 202 | 0.999919 0.422513 203 | { 1 7.07222e-07 -7.07222e-07 } 204 | { 1.00016e-06 -0.707107 0.707107 } 205 | } 206 | } 207 | 8 { 208 | 6 0 2.07 209 | { 210 | 0.999919 0.422513 211 | { 1 1.00016e-06 0 } 212 | { 1.00016e-06 -1 0 } 213 | } 214 | } 215 | 9 { 216 | 6 3 -0 217 | { 218 | 0.999919 8.1e-05 219 | { 1 0 0 } 220 | { 0 0 1 } 221 | } 222 | } 223 | 10 { 224 | 6 3 2.07 225 | { 226 | 0.999919 0.172553 227 | { 1 0 0 } 228 | { 0 0 1 } 229 | } 230 | } 231 | 11 { 232 | 6 3 2.07 233 | { 234 | 0.999919 0.172553 235 | { 1 0 0 } 236 | { 0 -1 0 } 237 | } 238 | } 239 | } 240 | { 241 | { 0 -1 0 } 242 | { Wall } 243 | { Wall } 244 | { 3 9 10 4 { Plane } } 245 | } 246 | { 247 | { 0 0 -1 } 248 | { Wall } 249 | { Wall } 250 | { 5 11 8 2 { Plane } } 251 | } 252 | { 253 | { 0 -0.707107 -0.707107 } 254 | { Wall } 255 | { Wall } 256 | { 1 7 6 0 { Plane } } 257 | } 258 | } 259 | Pillar.011 { 260 | { 261 | { 262 | 0.304 0 0 0 263 | 0 0.304 0 0 264 | 0 0 0.304 0 265 | -5 2 0 1 266 | } 267 | } 268 | { 269 | { 270 | Pillar 271 | } 272 | } 273 | } 274 | Pillar.010 { 275 | { 276 | { 277 | 0.304 0 0 0 278 | 0 0.304 0 0 279 | 0 0 0.304 0 280 | -5 1 0 1 281 | } 282 | } 283 | { 284 | { 285 | Pillar 286 | } 287 | } 288 | } 289 | Pillar.009 { 290 | { 291 | { 292 | 0.304 0 0 0 293 | 0 0.304 0 0 294 | 0 0 0.304 0 295 | 5 1 0 1 296 | } 297 | } 298 | { 299 | { 300 | Pillar 301 | } 302 | } 303 | } 304 | Pillar.008 { 305 | { 306 | { 307 | 0.304 0 0 0 308 | 0 0.304 0 0 309 | 0 0 0.304 0 310 | 5 2 0 1 311 | } 312 | } 313 | { 314 | { 315 | Pillar 316 | } 317 | } 318 | } 319 | Pillar.007 { 320 | { 321 | { 322 | 0.304 0 0 0 323 | 0 0.304 0 0 324 | 0 0 0.304 0 325 | -1 2 0 1 326 | } 327 | } 328 | { 329 | { 330 | Pillar 331 | } 332 | } 333 | } 334 | Pillar.006 { 335 | { 336 | { 337 | 0.304 0 0 0 338 | 0 0.304 0 0 339 | 0 0 0.304 0 340 | 1 2 0 1 341 | } 342 | } 343 | { 344 | { 345 | Pillar 346 | } 347 | } 348 | } 349 | Pillar.005 { 350 | { 351 | { 352 | 0.304 0 0 0 353 | 0 0.304 0 0 354 | 0 0 0.304 0 355 | 3 2 0 1 356 | } 357 | } 358 | { 359 | { 360 | Pillar 361 | } 362 | } 363 | } 364 | Pillar.004 { 365 | { 366 | { 367 | 0.304 0 0 0 368 | 0 0.304 0 0 369 | 0 0 0.304 0 370 | -3 2 0 1 371 | } 372 | } 373 | { 374 | { 375 | Pillar 376 | } 377 | } 378 | } 379 | Pillar.003 { 380 | { 381 | { 382 | 0.304 0 0 0 383 | 0 0.304 0 0 384 | 0 0 0.304 0 385 | -3 1 0 1 386 | } 387 | } 388 | { 389 | { 390 | Pillar 391 | } 392 | } 393 | } 394 | Pillar.002 { 395 | { 396 | { 397 | 0.304 0 0 0 398 | 0 0.304 0 0 399 | 0 0 0.304 0 400 | 3 1 0 1 401 | } 402 | } 403 | { 404 | { 405 | Pillar 406 | } 407 | } 408 | } 409 | Pillar.001 { 410 | { 411 | { 412 | 0.304 0 0 0 413 | 0 0.304 0 0 414 | 0 0 0.304 0 415 | 1 1 0 1 416 | } 417 | } 418 | { 419 | { 420 | Pillar 421 | } 422 | } 423 | } 424 | Pillar { 425 | { 426 | { 427 | 0.304 0 0 0 428 | 0 0.304 0 0 429 | 0 0 0.304 0 430 | -1 1 0 1 431 | } 432 | } 433 | { 434 | { 435 | Pillar 436 | } 437 | } 438 | } 439 | Col_ArenaEnd.R { 440 | { Plane descend } 441 | { 442 | { 443 | 3.69944e-07 0 -1.9 0 444 | 7.39887e-07 -1.9 0 0 445 | -1.9 -7.39887e-07 -3.69944e-07 0 446 | 3 0 0 1 447 | } 448 | } 449 | Col_ArenaEnd.R { 450 | 0 { 451 | 3 1.9 1.9 452 | } 453 | 1 { 454 | 3 1.9 -1.9 455 | } 456 | 2 { 457 | 3 -1.9 -1.9 458 | } 459 | 3 { 460 | 3 -1.9 1.9 461 | } 462 | } 463 | { 464 | { -1 0 0 } 465 | { 0 1 2 3 { Col_ArenaEnd.R } } 466 | } 467 | } 468 | Col_ArenaEnd.L { 469 | { Plane descend } 470 | { 471 | { 472 | 3.69944e-07 0 -1.9 0 473 | -2.55282e-07 1.9 0 0 474 | 1.9 2.55282e-07 3.69944e-07 0 475 | -3 0 0 1 476 | } 477 | } 478 | Col_ArenaEnd.L { 479 | 0 { 480 | -3 -1.9 1.9 481 | } 482 | 1 { 483 | -3 -1.9 -1.9 484 | } 485 | 2 { 486 | -3 1.9 -1.9 487 | } 488 | 3 { 489 | -3 1.9 1.9 490 | } 491 | } 492 | { 493 | { 1 0 0 } 494 | { 0 1 2 3 { Col_ArenaEnd.L } } 495 | } 496 | } 497 | StartPosB { 498 | { 499 | { 500 | 1 0 0 0 501 | 0 1 0 0 502 | 0 0 1 0 503 | 0.5 0 0 1 504 | } 505 | } 506 | } 507 | StartPosA { 508 | { 509 | { 510 | 1 0 0 0 511 | 0 1 0 0 512 | 0 0 1 0 513 | -0.5 0 0 1 514 | } 515 | } 516 | } 517 | Ground { 518 | { 519 | { 520 | 1 0 0 0 521 | 0 1 0 0 522 | 0 0 1 0 523 | 0 0 0 1 524 | } 525 | } 526 | Ground { 527 | 0 { 528 | -6 -9 0 529 | { 530 | 0 0 531 | { 1 0 0 } 532 | { 0 1 0 } 533 | } 534 | ORCO { 535 | 0 0 536 | { 1 0 0 } 537 | { 0 1 0 } 538 | } 539 | } 540 | 1 { 541 | -6 3 0 542 | { 543 | 0 1 544 | { 1 0 0 } 545 | { 0 1 0 } 546 | } 547 | ORCO { 548 | 0 1 549 | { 1 0 0 } 550 | { 0 1 0 } 551 | } 552 | } 553 | 2 { 554 | 6 -9 0 555 | { 556 | 1 0 557 | { 1 0 0 } 558 | { 0 1 0 } 559 | } 560 | ORCO { 561 | 1 0 562 | { 1 0 0 } 563 | { 0 1 0 } 564 | } 565 | } 566 | 3 { 567 | 6 3 0 568 | { 569 | 1 1 570 | { 1 0 0 } 571 | { 0 1 0 } 572 | } 573 | ORCO { 574 | 1 1 575 | { 1 0 0 } 576 | { 0 1 0 } 577 | } 578 | } 579 | } 580 | { 581 | { 0 0 1 } 582 | { Ground } 583 | { Ground_ao } 584 | { Ground } 585 | { 0 2 3 1 { Ground } } 586 | } 587 | } 588 | -------------------------------------------------------------------------------- /P3D Tutorial/game/characterselection.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | __author__ = "Fireclaw the Fox" 3 | __license__ = """ 4 | Simplified BSD (BSD 2-Clause) License. 5 | See License.txt or http://opensource.org/licenses/BSD-2-Clause for more info 6 | """ 7 | 8 | from panda3d.core import ( 9 | TextNode, 10 | Texture) 11 | from direct.gui.DirectGui import ( 12 | DirectFrame, 13 | DirectButton, 14 | DGG) 15 | 16 | class CharacterSelection: 17 | def __init__(self): 18 | 19 | self.frameMain = DirectFrame( 20 | frameSize = (base.a2dLeft, base.a2dRight, 21 | base.a2dBottom, base.a2dTop), 22 | frameColor = (0.05, 0.05, 0.05, 1)) 23 | self.frameMain.setTransparency(1) 24 | 25 | width = abs(base.a2dLeft) + base.a2dRight 26 | 27 | red = loader.loadTexture("assets/gui/CharRedBG.png") 28 | red.setWrapU(Texture.WM_repeat) 29 | red.setWrapV(Texture.WM_repeat) 30 | self.char1Frame = DirectFrame( 31 | text = "Player 1", 32 | text_fg = (1,1,1,1), 33 | text_scale = 0.1, 34 | text_pos = (0, base.a2dTop - 0.2), 35 | frameSize = (-width/6.0, width/6.0, 36 | base.a2dBottom, base.a2dTop), 37 | frameTexture = red, 38 | pos = (base.a2dLeft+width/6.0, 0, 0)) 39 | self.char1Frame.updateFrameStyle() 40 | self.char1Frame.setTransparency(1) 41 | self.char1Frame.reparentTo(self.frameMain) 42 | 43 | blue = loader.loadTexture("assets/gui/CharBlueBG.png") 44 | blue.setWrapU(Texture.WM_repeat) 45 | blue.setWrapV(Texture.WM_repeat) 46 | self.char2Frame = DirectFrame( 47 | text = "Player 2", 48 | text_fg = (1,1,1,1), 49 | text_scale = 0.1, 50 | text_pos = (0, base.a2dTop - 0.2), 51 | frameSize = (-width/6.0, width/6.0, 52 | base.a2dBottom, base.a2dTop), 53 | frameTexture = blue, 54 | pos = (base.a2dRight-width/6.0, 0, 0)) 55 | self.char2Frame.setTransparency(1) 56 | self.char2Frame.reparentTo(self.frameMain) 57 | 58 | self.footerFrame = DirectFrame( 59 | text = "PLAYER 1 - CHOOSE YOUR CHARACTER", 60 | text_fg = (1,1,1,1), 61 | text_scale = 0.08, 62 | text_pos = (0, -0.03), 63 | frameSize = (base.a2dLeft, base.a2dRight, 64 | 0.1, -0.1), 65 | pos = (0, 0, base.a2dBottom + 0.2), 66 | frameColor = (0, 0, 0, 0.5)) 67 | self.footerFrame.setTransparency(1) 68 | self.footerFrame.reparentTo(self.frameMain) 69 | 70 | self.charSelectFrame = DirectFrame( 71 | text = "VS", 72 | text_fg = (1,1,1,1), 73 | text_scale = 0.1, 74 | text_pos = (0, base.a2dTop - 0.2), 75 | frameSize = (-width/6.0, width/6.0, 76 | base.a2dBottom, base.a2dTop), 77 | frameColor = (0,0,0,0)) 78 | self.charSelectFrame.reparentTo(self.frameMain) 79 | 80 | self.btnChar1 = self.createCharacterButton( 81 | (-0.2, 0, 0), 82 | "assets/gui/Char1Button.png", 83 | 1) 84 | self.btnChar1.reparentTo(self.charSelectFrame) 85 | 86 | self.btnChar2 = self.createCharacterButton( 87 | (0.2, 0, 0), 88 | "assets/gui/Char2Button.png", 89 | 2) 90 | self.btnChar2.reparentTo(self.charSelectFrame) 91 | 92 | self.btnBack = DirectButton( 93 | text = "BACK", 94 | text_fg = (1,1,1,1), 95 | text_align = TextNode.ALeft, 96 | scale = 0.1, 97 | pad = (0.15, 0.15), 98 | pos = (base.a2dLeft + 0.08, 0, -0.03), 99 | frameColor = ( 100 | (0.2,0.2,0.2,0.8), 101 | (0.4,0.4,0.4,0.8), 102 | (0.4,0.4,0.4,0.8), 103 | (0.1,0.1,0.1,0.8)), 104 | relief = 1, 105 | command = base.messenger.send, 106 | extraArgs = ["CharSelection-Back"], 107 | pressEffect = False, 108 | rolloverSound = None, 109 | clickSound = None) 110 | self.btnBack.setTransparency(1) 111 | self.btnBack.reparentTo(self.footerFrame) 112 | 113 | self.btnStart = DirectButton( 114 | text = "START", 115 | text_fg = (1,1,1,1), 116 | text_align = TextNode.ARight, 117 | scale = 0.1, 118 | pad = (0.15, 0.15), 119 | pos = (base.a2dRight - 0.08, 0, -0.03), 120 | relief = 1, 121 | frameColor = ( 122 | (0.2,0.2,0.2,0.8), 123 | (0.4,0.4,0.4,0.8), 124 | (0.4,0.4,0.4,0.8), 125 | (0.1,0.1,0.1,0.8)), 126 | command = base.messenger.send, 127 | extraArgs = ["CharSelection-Start"], 128 | pressEffect = False, 129 | rolloverSound = None, 130 | clickSound = None) 131 | self.btnStart.setTransparency(1) 132 | self.btnStart.reparentTo(self.footerFrame) 133 | self.btnStart["state"] = DGG.DISABLED 134 | 135 | self.hide() 136 | 137 | def createCharacterButton(self, pos, image, charNr): 138 | btn = DirectButton( 139 | scale = 0.1, 140 | relief = 0, 141 | frameColor = (0,0,0,0), 142 | pos = pos, 143 | image = image, 144 | command = self.selectCharacter, 145 | extraArgs = [charNr], 146 | rolloverSound = None, 147 | clickSound = None) 148 | btn.setTransparency(1) 149 | return btn 150 | 151 | def selectCharacter(self, charNr): 152 | if self.char1Frame["image"] == None: 153 | self.char1Frame["image"] = "assets/gui/Char{}_L.png".format(charNr) 154 | self.char1Frame["image_scale"] = (0.5,1, 1) 155 | self.selectedCharacter1 = charNr 156 | self.footerFrame["text"] = "PLAYER 2 - CHOOSE YOUR CHARACTER" 157 | elif self.char2Frame["image"] == None: 158 | self.char2Frame["image"] = "assets/gui/Char{}_R.png".format(charNr) 159 | self.char2Frame["image_scale"] = (0.5,1, 1) 160 | self.selectedCharacter2 = charNr 161 | self.btnStart["state"] = DGG.NORMAL 162 | self.footerFrame["text"] = "START THE FIGHT >" 163 | 164 | def show(self): 165 | self.selectedCharacter1 = None 166 | self.selectedCharacter2 = None 167 | self.char1Frame["image"] = None 168 | self.char2Frame["image"] = None 169 | self.footerFrame["text"] = "PLAYER 1 - CHOOSE YOUR CHARACTER" 170 | self.btnStart["state"] = DGG.DISABLED 171 | self.frameMain.show() 172 | 173 | def hide(self): 174 | self.frameMain.hide() 175 | -------------------------------------------------------------------------------- /P3D Tutorial/game/credits.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | __author__ = "Fireclaw the Fox" 3 | __license__ = """ 4 | Simplified BSD (BSD 2-Clause) License. 5 | See License.txt or http://opensource.org/licenses/BSD-2-Clause for more info 6 | """ 7 | 8 | from panda3d.core import ( 9 | TextNode, 10 | TextProperties, 11 | TextPropertiesManager) 12 | from direct.gui.DirectGui import ( 13 | DirectFrame, 14 | DirectLabel, 15 | DirectButton) 16 | from direct.stdpy.file import open 17 | from direct.interval.LerpInterval import LerpPosInterval 18 | 19 | class Credits: 20 | def __init__(self): 21 | 22 | self.frameMain = DirectFrame( 23 | frameSize = (base.a2dLeft, base.a2dRight, 24 | base.a2dBottom, base.a2dTop), 25 | frameColor = (0.05, 0.05, 0.05, 1)) 26 | self.frameMain.setTransparency(1) 27 | 28 | tpBig = TextProperties() 29 | tpBig.setTextScale(1.5) 30 | tpSmall = TextProperties() 31 | tpSmall.setTextScale(0.75) 32 | tpUs = TextProperties() 33 | tpUs.setUnderscore(True) 34 | tpMgr = TextPropertiesManager.getGlobalPtr() 35 | tpMgr.setProperties("big", tpBig) 36 | tpMgr.setProperties("small", tpSmall) 37 | tpMgr.setProperties("us", tpUs) 38 | 39 | creditsText = "" 40 | with open("credits.txt") as f: 41 | creditsText = f.read() 42 | self.lblCredits = DirectLabel( 43 | text = creditsText, 44 | text_fg = (1,1,1,1), 45 | text_bg = (0,0,0,0), 46 | frameColor = (0,0,0,0), 47 | text_align = TextNode.ACenter, 48 | scale = 0.1, 49 | pos = (0, 0, base.a2dTop - 0.2)) 50 | self.lblCredits.setTransparency(1) 51 | self.lblCredits.reparentTo(self.frameMain) 52 | 53 | self.creditsScroll = LerpPosInterval( 54 | self.lblCredits, 55 | 12.0, 56 | (0, 0, base.a2dTop + 3.5), 57 | startPos=(0, 0, base.a2dBottom), 58 | name="CreditsScroll") 59 | 60 | self.btnBack = DirectButton( 61 | text = "BACK", 62 | text_fg = (1,1,1,1), 63 | text_align = TextNode.ALeft, 64 | scale = 0.1, 65 | pad = (0.15, 0.15), 66 | pos = (base.a2dLeft + 0.08, 0, base.a2dBottom + 0.05), 67 | frameColor = ( 68 | (0.2,0.2,0.2,0.8), 69 | (0.4,0.4,0.4,0.8), 70 | (0.4,0.4,0.4,0.8), 71 | (0.1,0.1,0.1,0.8), 72 | ), 73 | relief = 1, 74 | command = base.messenger.send, 75 | extraArgs = ["Credits-Back"], 76 | pressEffect = False, 77 | rolloverSound = None, 78 | clickSound = None) 79 | self.btnBack.setTransparency(1) 80 | self.btnBack.reparentTo(self.frameMain) 81 | 82 | self.hide() 83 | 84 | def show(self): 85 | self.frameMain.show() 86 | self.creditsScroll.loop() 87 | 88 | def hide(self): 89 | self.frameMain.hide() 90 | self.creditsScroll.finish() 91 | -------------------------------------------------------------------------------- /P3D Tutorial/game/credits.txt: -------------------------------------------------------------------------------- 1 | bigTatakai no ikimono 2 | 3 | us:Idea: 4 | smallFireclaw the Fox 5 | 6 | us:Development: 7 | smallFireclaw the Fox 8 | 9 | us:Design: 10 | smallFireclaw the Fox 11 | 12 | us:Music: 13 | smallNiji Wo Koete - Metal Version 14 | by 15 | Butterfly Tea 16 | Licensed: CC-BY-SA 17 | 18 | Cavern of Time 19 | by 20 | Buterfly Tea 21 | Licensed: CC-BY-SA 22 |  23 | 24 | us:Soundeffects: 25 | smallpunch 26 | by 27 | Ekokubza123 28 | Licensed: CC-0 29 | 30 | step 31 | by 32 | dav0r 33 | Licensed: CC-0 34 | 35 | Level 1 Ambient 36 | by 37 | volivieri 38 | Licensed: CC-BY 39 | 40 | us:Special thanks to: 41 | smallPanda3D Community and the Panda3D Developers 42 | -------------------------------------------------------------------------------- /P3D Tutorial/game/helper.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # -*- coding: utf-8 -*- 3 | __author__ = "Fireclaw the Fox" 4 | __license__ = """ 5 | Simplified BSD (BSD 2-Clause) License. 6 | See License.txt or http://opensource.org/licenses/BSD-2-Clause for more info 7 | """ 8 | 9 | # 10 | # PYTHON IMPORTS 11 | # 12 | import sys 13 | 14 | # 15 | # PANDA3D ENGINE IMPORTS 16 | # 17 | from panda3d.core import WindowProperties 18 | 19 | def hide_cursor(): 20 | """set the Cursor invisible""" 21 | props = WindowProperties() 22 | props.setCursorHidden(True) 23 | # somehow the window gets undecorated after hiding the cursor 24 | # so we reset it here to the value we need 25 | #props.setUndecorated(settings.fullscreen) 26 | base.win.requestProperties(props) 27 | 28 | def show_cursor(): 29 | """set the Cursor visible again""" 30 | props = WindowProperties() 31 | props.setCursorHidden(False) 32 | # set the filename to the mouse cursor 33 | x11 = "assets/gui/Cursor.x11" 34 | win = "assets/gui/Cursor.ico" 35 | if sys.platform.startswith("linux"): 36 | props.setCursorFilename(x11) 37 | else: 38 | props.setCursorFilename(win) 39 | base.win.requestProperties(props) 40 | -------------------------------------------------------------------------------- /P3D Tutorial/game/hud.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | __author__ = "Fireclaw the Fox" 3 | __license__ = """ 4 | Simplified BSD (BSD 2-Clause) License. 5 | See License.txt or http://opensource.org/licenses/BSD-2-Clause for more info 6 | """ 7 | 8 | # Panda3D imoprts 9 | from direct.showbase.DirectObject import DirectObject 10 | from direct.gui.DirectGui import DirectWaitBar, DGG 11 | from panda3d.core import TextNode 12 | 13 | class Hud(DirectObject): 14 | def __init__(self): 15 | self.lifeBar1 = DirectWaitBar( 16 | text = "Player1", 17 | text_fg = (1,1,1,1), 18 | text_pos = (-1.2, -0.18, 0), 19 | text_align = TextNode.ALeft, 20 | value = 100, 21 | barColor = (0, 1, 0.25, 1), 22 | barRelief = DGG.RAISED, 23 | barBorderWidth = (0.03, 0.03), 24 | borderWidth = (0.01, 0.01), 25 | relief = DGG.RIDGE, 26 | frameColor = (0.8,0.05,0.10,1), 27 | frameSize = (-1.2, 0, 0, -0.1), 28 | pos = (-0.2,0,base.a2dTop-0.15)) 29 | self.lifeBar1.setTransparency(1) 30 | 31 | self.lifeBar2 = DirectWaitBar( 32 | text = "Player2", 33 | text_fg = (1,1,1,1), 34 | text_pos = (1.2, -0.18, 0), 35 | text_align = TextNode.ARight, 36 | value = 100, 37 | barColor = (0, 1, 0.25, 1), 38 | barRelief = DGG.RAISED, 39 | barBorderWidth = (0.03, 0.03), 40 | borderWidth = (0.01, 0.01), 41 | relief = DGG.RIDGE, 42 | frameColor = (0.8,0.05,0.10,1), 43 | frameSize = (0, 1.2, 0, -0.1), 44 | pos = (0.2,0,base.a2dTop-0.15)) 45 | self.lifeBar2.setTransparency(1) 46 | 47 | self.accept("hud_setLifeBarValue", self.setLifeBarValue) 48 | self.hide() 49 | 50 | def show(self): 51 | self.lifeBar1["value"] = 100 52 | self.lifeBar2["value"] = 100 53 | self.lifeBar1.show() 54 | self.lifeBar2.show() 55 | 56 | def hide(self): 57 | self.lifeBar1.hide() 58 | self.lifeBar2.hide() 59 | 60 | def setLifeBarValue(self, barNr, newValue): 61 | if barNr == 0: 62 | self.lifeBar1["value"] = newValue 63 | elif barNr == 1: 64 | self.lifeBar2["value"] = newValue 65 | -------------------------------------------------------------------------------- /P3D Tutorial/game/koscreen.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | __author__ = "Fireclaw the Fox" 3 | __license__ = """ 4 | Simplified BSD (BSD 2-Clause) License. 5 | See License.txt or http://opensource.org/licenses/BSD-2-Clause for more info 6 | """ 7 | 8 | # Panda3D imoprts 9 | from direct.showbase.DirectObject import DirectObject 10 | from direct.gui.DirectGui import ( 11 | DirectFrame, 12 | DirectLabel, 13 | DirectButton) 14 | 15 | class KoScreen(DirectObject): 16 | def __init__(self): 17 | self.frameMain = DirectFrame( 18 | frameSize = (base.a2dLeft, base.a2dRight, 19 | base.a2dBottom, base.a2dTop), 20 | frameColor = (0, 0, 0, 0.75)) 21 | self.frameMain.setTransparency(1) 22 | 23 | self.lbl_KO = DirectLabel( 24 | text = "K.O.", 25 | text_fg = (1,1,1,1), 26 | scale = 1, 27 | pos = (0, 0, 0), 28 | frameColor = (0,0,0,0)) 29 | self.lbl_KO.setTransparency(1) 30 | self.lbl_KO.reparentTo(self.frameMain) 31 | 32 | self.lbl_PlayerXWon = DirectLabel( 33 | text = "PLAYER X WON", 34 | text_fg = (1,1,1,1), 35 | scale = 0.25, 36 | pos = (0, 0, -0.5), 37 | frameColor = (0,0,0,0)) 38 | self.lbl_PlayerXWon.setTransparency(1) 39 | self.lbl_PlayerXWon.reparentTo(self.frameMain) 40 | 41 | self.btnContinue = DirectButton( 42 | text = "CONTINUE", 43 | text_fg = (1,1,1,1), 44 | scale = 0.1, 45 | pad = (0.15, 0.15), 46 | pos = (0, 0, -0.8), 47 | frameColor = ( 48 | (0.2,0.2,0.2,0.8), 49 | (0.4,0.4,0.4,0.8), 50 | (0.4,0.4,0.4,0.8), 51 | (0.1,0.1,0.1,0.8), 52 | ), 53 | relief = 1, 54 | command = base.messenger.send, 55 | extraArgs = ["KoScreen-Back"], 56 | pressEffect = False, 57 | rolloverSound = None, 58 | clickSound = None) 59 | self.btnContinue.setTransparency(1) 60 | self.btnContinue.reparentTo(self.frameMain) 61 | 62 | self.hide() 63 | 64 | def show(self, succseedingPlayer): 65 | self.frameMain.show() 66 | self.lbl_PlayerXWon["text"] = "PLAYER {} WON".format(succseedingPlayer) 67 | 68 | def hide(self): 69 | self.frameMain.hide() 70 | -------------------------------------------------------------------------------- /P3D Tutorial/game/levelselection.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | __author__ = "Fireclaw the Fox" 3 | __license__ = """ 4 | Simplified BSD (BSD 2-Clause) License. 5 | See License.txt or http://opensource.org/licenses/BSD-2-Clause for more info 6 | """ 7 | 8 | from panda3d.core import TextNode 9 | from direct.gui.DirectGui import ( 10 | DirectFrame, 11 | DirectButton) 12 | 13 | class LevelSelection: 14 | def __init__(self): 15 | 16 | self.frameMain = DirectFrame( 17 | frameSize = (base.a2dLeft, base.a2dRight, 18 | base.a2dBottom, base.a2dTop), 19 | frameColor = (0.05, 0.05, 0.05, 1)) 20 | self.frameMain.setTransparency(1) 21 | 22 | self.btnLevel1 = self.createLevelButton( 23 | (-0.6, 0, 0.15), 24 | "assets/gui/Level1Button.png", 25 | 1) 26 | self.btnLevel1.reparentTo(self.frameMain) 27 | 28 | self.btnLevel2 = self.createLevelButton( 29 | (0.6, 0, 0.15), 30 | "assets/gui/Level2Button.png", 31 | 2) 32 | self.btnLevel2.reparentTo(self.frameMain) 33 | 34 | self.footerFrame = DirectFrame( 35 | text = "SELECT THE ARENA", 36 | text_fg = (1,1,1,1), 37 | text_scale = 0.08, 38 | text_pos = (0, -0.03), 39 | frameSize = (base.a2dLeft, base.a2dRight, 40 | 0.1, -0.1), 41 | pos = (0, 0, base.a2dBottom + 0.2), 42 | frameColor = (0, 0, 0, 0.5)) 43 | self.footerFrame.setTransparency(1) 44 | self.footerFrame.reparentTo(self.frameMain) 45 | 46 | self.btnBack = DirectButton( 47 | text = "BACK", 48 | text_fg = (1,1,1,1), 49 | text_align = TextNode.ALeft, 50 | scale = 0.1, 51 | pad = (0.15, 0.15), 52 | pos = (base.a2dLeft + 0.08, 0, -0.03), 53 | frameColor = ( 54 | (0.2,0.2,0.2,0.8), 55 | (0.4,0.4,0.4,0.8), 56 | (0.4,0.4,0.4,0.8), 57 | (0.1,0.1,0.1,0.8), 58 | ), 59 | relief = 1, 60 | command = base.messenger.send, 61 | extraArgs = ["LevelSelection-Back"], 62 | pressEffect = False, 63 | rolloverSound = None, 64 | clickSound = None) 65 | self.btnBack.setTransparency(1) 66 | self.btnBack.reparentTo(self.footerFrame) 67 | 68 | self.hide() 69 | 70 | def createLevelButton(self, pos, image, levelNr): 71 | btn = DirectButton( 72 | scale = (0.5, 1, 0.75), 73 | relief = 0, 74 | frameColor = (0,0,0,0), 75 | pos = pos, 76 | image = image, 77 | command = self.selectLevel, 78 | extraArgs = [levelNr], 79 | rolloverSound = None, 80 | clickSound = None) 81 | btn.setTransparency(1) 82 | return btn 83 | 84 | def selectLevel(self, level): 85 | self.selectedLevel = level 86 | base.messenger.send("LevelSelection-Start") 87 | 88 | def show(self): 89 | self.frameMain.show() 90 | 91 | def hide(self): 92 | self.frameMain.hide() 93 | -------------------------------------------------------------------------------- /P3D Tutorial/game/main.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | __author__ = "Fireclaw the Fox" 3 | __license__ = """ 4 | Simplified BSD (BSD 2-Clause) License. 5 | See License.txt or http://opensource.org/licenses/BSD-2-Clause for more info 6 | """ 7 | 8 | # Python imports 9 | import os 10 | 11 | # Panda3D imoprts 12 | from direct.showbase.ShowBase import ShowBase 13 | from direct.fsm.FSM import FSM 14 | from direct.gui.DirectGui import DGG 15 | from panda3d.core import ( 16 | CollisionTraverser, 17 | CollisionHandlerPusher, 18 | AntialiasAttrib, 19 | ConfigPageManager, 20 | ConfigVariableInt, 21 | ConfigVariableBool, 22 | ConfigVariableString, 23 | OFileStream, 24 | WindowProperties, 25 | loadPrcFileData, 26 | loadPrcFile, 27 | Filename, 28 | AudioSound) 29 | from direct.showbase.Audio3DManager import Audio3DManager 30 | 31 | # Game imports 32 | from player import Player 33 | from arena import Arena 34 | from menu import Menu 35 | from credits import Credits 36 | from characterselection import CharacterSelection 37 | from levelselection import LevelSelection 38 | from koscreen import KoScreen 39 | from hud import Hud 40 | from helper import hide_cursor, show_cursor 41 | 42 | # 43 | # PATHS AND CONFIGS 44 | # 45 | # set company and application details 46 | companyName = "Grimfang Studio" 47 | appName = "Tatakai no ikimono" 48 | versionstring = "19.07" 49 | 50 | # build the path from the details we have 51 | home = os.path.expanduser("~") 52 | basedir = os.path.join( 53 | home, 54 | companyName, 55 | appName) 56 | if not os.path.exists(basedir): 57 | os.makedirs(basedir) 58 | 59 | # look for a config file 60 | prcFile = os.path.join(basedir, "{}.prc".format(appName)) 61 | if os.path.exists(prcFile): 62 | mainConfig = loadPrcFile(Filename.fromOsSpecific(prcFile)) 63 | 64 | # set configurations that should not be changed from a config file 65 | loadPrcFileData("", 66 | """ 67 | # 68 | # Model loading 69 | # 70 | model-path $MAIN_DIR/assets/ 71 | 72 | # 73 | # Window and graphics 74 | # 75 | window-title {} 76 | #show-frame-rate-meter 1 77 | 78 | # 79 | # Logging 80 | # 81 | #notify-level info 82 | notify-timestamp 1 83 | """.format(appName)) 84 | 85 | # 86 | # MAIN GAME CLASS 87 | # 88 | class Main(ShowBase, FSM): 89 | """Main function of the application 90 | initialise the engine (ShowBase)""" 91 | 92 | def __init__(self): 93 | """initialise the engine""" 94 | ShowBase.__init__(self) 95 | base.notify.info("Version {}".format(versionstring)) 96 | FSM.__init__(self, "FSM-Game") 97 | 98 | # 99 | # BASIC APPLICATION CONFIGURATIONS 100 | # 101 | # disable pandas default camera driver 102 | self.disableMouse() 103 | # set antialias for the complete sceen to automatic 104 | self.render.setAntialias(AntialiasAttrib.MAuto) 105 | # shader generator 106 | render.setShaderAuto() 107 | # Enhance font readability 108 | DGG.getDefaultFont().setPixelsPerUnit(100) 109 | # get the displays width and height for later usage 110 | self.dispWidth = self.pipe.getDisplayWidth() 111 | self.dispHeight = self.pipe.getDisplayHeight() 112 | 113 | # 114 | # CONFIGURATION LOADING 115 | # 116 | # load given variables or set defaults 117 | # check if particles should be enabled 118 | # NOTE: If you use the internal physics engine, this always has 119 | # to be enabled! 120 | particles = ConfigVariableBool("particles-enabled", True).getValue() 121 | if particles: 122 | self.enableParticles() 123 | 124 | def setFullscreen(): 125 | """Helper function to set the window fullscreen 126 | with width and height set to the screens size""" 127 | # set window properties 128 | # clear all properties not previously set 129 | base.win.clearRejectedProperties() 130 | # setup new window properties 131 | props = WindowProperties() 132 | # Fullscreen 133 | props.setFullscreen(True) 134 | # set the window size to the screen resolution 135 | props.setSize(self.dispWidth, self.dispHeight) 136 | # request the new properties 137 | base.win.requestProperties(props) 138 | # Set the config variables so we correctly store the 139 | # new size and fullscreen setting later 140 | winSize = ConfigVariableString("win-size") 141 | winSize.setValue("{} {}".format(self.dispWidth, self.dispHeight)) 142 | fullscreen = ConfigVariableBool("fullscreen") 143 | fullscreen.setValue(True) 144 | # Render a frame to make sure the fullscreen is applied 145 | # before we do anything else 146 | self.taskMgr.step() 147 | # make sure to propagate the new aspect ratio properly so 148 | # the GUI and other things will be scaled appropriately 149 | aspectRatio = self.dispWidth / self.dispHeight 150 | self.adjustWindowAspectRatio(aspectRatio) 151 | 152 | 153 | # check if the config file hasn't been created 154 | if not os.path.exists(prcFile): 155 | setFullscreen() 156 | # automatically safe configuration at application exit 157 | #base.exitFunc = self.__writeConfig 158 | 159 | # 160 | # INITIALIZE GAME CONTENT 161 | # 162 | base.cTrav = CollisionTraverser("base collision traverser") 163 | base.pusher = CollisionHandlerPusher() 164 | self.menu = Menu() 165 | self.credits = Credits() 166 | self.charSelection = CharacterSelection() 167 | self.levelSelection = LevelSelection() 168 | self.koScreen = KoScreen() 169 | self.hud = Hud() 170 | self.menuMusic = loader.loadMusic("assets/audio/menuMusic.ogg") 171 | self.menuMusic.setLoop(True) 172 | self.fightMusic = loader.loadMusic("assets/audio/fightMusic.ogg") 173 | self.fightMusic.setLoop(True) 174 | base.audio3d = Audio3DManager(base.sfxManagerList[0], camera) 175 | 176 | # 177 | # EVENT HANDLING 178 | # 179 | # By default we accept the escape key 180 | self.accept("escape", self.__escape) 181 | 182 | # 183 | # ENTER GAMES INITIAL FSM STATE 184 | # 185 | self.request("Menu") 186 | 187 | # 188 | # FSM PART 189 | # 190 | def enterMenu(self): 191 | show_cursor() 192 | self.accept("Menu-Start", self.request, ["CharSelection"]) 193 | self.accept("Menu-Credits", self.request, ["Credits"]) 194 | self.accept("Menu-Quit", self.userExit) 195 | self.ignore("KoScreen-Back") 196 | self.koScreen.hide() 197 | self.menu.show() 198 | if self.menuMusic.status() != AudioSound.PLAYING: 199 | self.menuMusic.play() 200 | if self.fightMusic.status() == AudioSound.PLAYING: 201 | self.fightMusic.stop() 202 | 203 | def exitMenu(self): 204 | self.ignore("Menu-Start") 205 | self.ignore("Menu-Credits") 206 | self.ignore("Menu-Quit") 207 | self.menu.hide() 208 | 209 | def enterCredits(self): 210 | self.accept("Credits-Back", self.request, ["Menu"]) 211 | self.koScreen.hide() 212 | self.credits.show() 213 | 214 | def exitCredits(self): 215 | self.ignore("Credits-Back") 216 | self.credits.hide() 217 | 218 | def enterCharSelection(self): 219 | self.accept("CharSelection-Back", self.request, ["Menu"]) 220 | self.accept("CharSelection-Start", self.request, ["LevelSelection"]) 221 | self.charSelection.show() 222 | 223 | def exitCharSelection(self): 224 | self.ignore("CharSelection-Start") 225 | self.ignore("CharSelection-Back") 226 | self.charSelection.hide() 227 | self.selectedChar1 = self.charSelection.selectedCharacter1 228 | self.selectedChar2 = self.charSelection.selectedCharacter2 229 | 230 | def enterLevelSelection(self): 231 | self.accept("LevelSelection-Back", self.request, ["CharSelection"]) 232 | self.accept("LevelSelection-Start", self.request, ["Game"]) 233 | self.levelSelection.show() 234 | 235 | def exitLevelSelection(self): 236 | self.ignore("LevelSelection-Start") 237 | self.ignore("LevelSelection-Back") 238 | self.levelSelection.hide() 239 | 240 | def enterGame(self): 241 | # main game code should be called here 242 | self.arena = Arena(self.levelSelection.selectedLevel) 243 | self.arena.start() 244 | self.camera.setPos(0, -5, 1.25) 245 | self.player = Player(0, self.selectedChar1, "p1") 246 | self.player2 = Player(1, self.selectedChar2, "p2") 247 | self.player.setEnemy(self.player2.collisionNodeName) 248 | self.player2.setEnemy(self.player.collisionNodeName) 249 | self.player.start(self.arena.getStartPos(1)) 250 | self.player2.start(self.arena.getStartPos(2)) 251 | self.taskMgr.add(self.updateWorldCam, "world camera update task") 252 | self.accept("gameOver", self.gameOver) 253 | self.hud.show() 254 | def lifeChanged(charId, health): 255 | base.messenger.send( 256 | "hud_setLifeBarValue", 257 | [charId, health]) 258 | self.accept("lifeChanged", lifeChanged) 259 | hide_cursor() 260 | if self.fightMusic.status() != AudioSound.PLAYING: 261 | self.fightMusic.play() 262 | if self.menuMusic.status() == AudioSound.PLAYING: 263 | self.menuMusic.stop() 264 | 265 | def exitGame(self): 266 | # cleanup for game code 267 | self.taskMgr.remove("world camera update task") 268 | self.player.stop() 269 | self.player2.stop() 270 | del self.player 271 | del self.player2 272 | self.arena.stop() 273 | self.ignore("gameOver") 274 | self.ignore("lifeChanged") 275 | self.hud.hide() 276 | 277 | # 278 | # FSM PART END 279 | # 280 | 281 | # 282 | # BASIC FUNCTIONS 283 | # 284 | def gameOver(self, LoosingCharId): 285 | show_cursor() 286 | winningChar = 1 287 | if LoosingCharId == 0: 288 | winningChar = 2 289 | self.accept("KoScreen-Back", self.request, ["Credits"]) 290 | self.koScreen.show(winningChar) 291 | 292 | def updateWorldCam(self, task): 293 | playerVec = self.player.getPos() - self.player2.getPos() 294 | playerDist = playerVec.length() 295 | x = self.player.getX() + playerDist / 2.0 296 | self.camera.setX(x) 297 | 298 | zoomout = False 299 | if not self.cam.node().isInView(self.player.getPos(self.cam)): 300 | camPosUpdate = -2 * globalClock.getDt() 301 | self.camera.setY(self.camera, camPosUpdate) 302 | zoomout = True 303 | if not self.cam.node().isInView(self.player2.getPos(self.cam)): 304 | camPosUpdate = -2 * globalClock.getDt() 305 | self.camera.setY(self.camera, camPosUpdate) 306 | zoomout = True 307 | if not zoomout: 308 | if self.camera.getY() < -5: 309 | camPosUpdate = 2 * globalClock.getDt() 310 | self.camera.setY(self.camera, camPosUpdate) 311 | return task.cont 312 | 313 | def __escape(self): 314 | """Handle user escape key klicks""" 315 | if self.state == "Menu": 316 | # In this state, we will stop the application 317 | self.userExit() 318 | elif self.state == "LevelSelection": 319 | self.request("CharSelection") 320 | else: 321 | # In every other state, we switch back to the Menu state 322 | self.request("Menu") 323 | 324 | def __writeConfig(self): 325 | """Save current config in the prc file or if no prc file exists 326 | create one. The prc file is set in the prcFile variable""" 327 | page = None 328 | 329 | # 330 | #TODO: add any configuration variable names that you have added 331 | # to the dictionaries in the next lines. Set the current 332 | # configurations value as value in this dictionary and it's 333 | # name as key. 334 | configVariables = { 335 | # set the window size in the config file 336 | "win-size": ConfigVariableString("win-size", "{} {}".format(self.dispWidth, self.dispHeight)).getValue(), 337 | # set the default to fullscreen in the config file 338 | "fullscreen": "#t" if ConfigVariableBool("fullscreen", True).getValue() else "#f", 339 | # particles 340 | "particles-enabled": "#t" if self.particleMgrEnabled else "#f", 341 | # audio 342 | "audio-volume": str(round(self.musicManager.getVolume(), 2)), 343 | "audio-music-active": "#t" if ConfigVariableBool("audio-music-active").getValue() else "#f", 344 | "audio-sfx-active": "#t" if ConfigVariableBool("audio-sfx-active").getValue() else "#f", 345 | # logging 346 | "notify-output": os.path.join(basedir, "game.log"), 347 | # window 348 | "framebuffer-multisample": "#t" if ConfigVariableBool("framebuffer-multisample").getValue() else "#f", 349 | "multisamples": str(ConfigVariableInt("multisamples", 8).getValue()), 350 | "texture-anisotropic-degree": str(ConfigVariableInt("texture-anisotropic-degree").getValue()), 351 | "textures-auto-power-2": "#t" if ConfigVariableBool("textures-auto-power-2", True).getValue() else "#f", 352 | } 353 | 354 | page = None 355 | # Check if we have an existing configuration file 356 | if os.path.exists(prcFile): 357 | # open the config file and change values according to current 358 | # application settings 359 | page = loadPrcFile(Filename.fromOsSpecific(prcFile)) 360 | removeDecls = [] 361 | for dec in range(page.getNumDeclarations()): 362 | # Check if our variables are given. 363 | # NOTE: This check has to be done to not loose our base or other 364 | # manual config changes by the user 365 | if page.getVariableName(dec) in configVariables.keys(): 366 | removeDecls.append(page.modifyDeclaration(dec)) 367 | for dec in removeDecls: 368 | page.deleteDeclaration(dec) 369 | else: 370 | # Create a config file and set default values 371 | cpMgr = ConfigPageManager.getGlobalPtr() 372 | page = cpMgr.makeExplicitPage("Application Config") 373 | 374 | # always write custom configurations 375 | for key, value in configVariables.items(): 376 | page.makeDeclaration(key, value) 377 | # create a stream to the specified config file 378 | configfile = OFileStream(prcFile) 379 | # and now write it out 380 | page.write(configfile) 381 | # close the stream 382 | configfile.close() 383 | 384 | # 385 | # BASIC END 386 | # 387 | # CLASS Main END 388 | 389 | # 390 | # START GAME 391 | # 392 | Game = Main() 393 | Game.run() 394 | -------------------------------------------------------------------------------- /P3D Tutorial/game/menu.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | __author__ = "Fireclaw the Fox" 3 | __license__ = """ 4 | Simplified BSD (BSD 2-Clause) License. 5 | See License.txt or http://opensource.org/licenses/BSD-2-Clause for more info 6 | """ 7 | 8 | from panda3d.core import TextNode 9 | from direct.gui.DirectGui import ( 10 | DirectFrame, 11 | DirectLabel, 12 | DirectButton) 13 | 14 | class Menu: 15 | def __init__(self): 16 | 17 | self.frameMain = DirectFrame( 18 | image = "gui/MenuBackground.png", 19 | image_scale = (1.7778, 1, 1), 20 | frameSize = (base.a2dLeft, base.a2dRight, 21 | base.a2dBottom, base.a2dTop), 22 | frameColor = (0, 0, 0, 0)) 23 | self.frameMain.setTransparency(1) 24 | 25 | self.title = DirectLabel( 26 | scale = 0.15, 27 | text_align = TextNode.ALeft, 28 | pos = (base.a2dLeft + 0.2, 0, 0), 29 | frameColor = (0, 0, 0, 0), 30 | text = "Main Menu", 31 | text_fg = (1,1,1,1)) 32 | self.title.setTransparency(1) 33 | self.title.reparentTo(self.frameMain) 34 | 35 | self.btnStart = self.createButton( 36 | "Start", 37 | -.10, 38 | ["Menu-Start"]) 39 | 40 | self.btnStart = self.createButton( 41 | "Credits", 42 | -.25, 43 | ["Menu-Credits"]) 44 | 45 | self.btnExit = self.createButton( 46 | "Quit", 47 | -.40, 48 | ["Menu-Quit"]) 49 | 50 | self.hide() 51 | 52 | def createButton(self, text, verticalPos, eventArgs): 53 | maps = loader.loadModel("gui/button_map") 54 | btnGeom = (maps.find("**/btn_ready"), 55 | maps.find("**/btn_click"), 56 | maps.find("**/btn_rollover"), 57 | maps.find("**/btn_disabled")) 58 | btn = DirectButton( 59 | text = text, 60 | text_fg = (0,0,0,1), 61 | text_scale = 0.05, 62 | text_pos = (0.02, -0.015), 63 | text_align = TextNode.ALeft, 64 | scale = 2, 65 | pos = (base.a2dLeft + 0.2, 0, verticalPos), 66 | geom = btnGeom, 67 | relief = 0, 68 | frameColor = (0,0,0,0), 69 | command = base.messenger.send, 70 | extraArgs = eventArgs, 71 | pressEffect = False, 72 | rolloverSound = None, 73 | clickSound = None) 74 | btn.reparentTo(self.frameMain) 75 | 76 | def show(self): 77 | self.frameMain.show() 78 | 79 | def hide(self): 80 | self.frameMain.hide() 81 | -------------------------------------------------------------------------------- /P3D Tutorial/game/player.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | __author__ = "Fireclaw the Fox" 3 | __license__ = """ 4 | Simplified BSD (BSD 2-Clause) License. 5 | See License.txt or http://opensource.org/licenses/BSD-2-Clause for more info 6 | """ 7 | 8 | # Panda3D imoprts 9 | from direct.showbase.DirectObject import DirectObject 10 | from direct.actor.Actor import Actor 11 | from direct.fsm.FSM import FSM 12 | from panda3d.core import ( 13 | CollisionSegment, 14 | CollisionSphere, 15 | CollisionNode, 16 | KeyboardButton, 17 | AudioSound) 18 | from direct.particles.ParticleEffect import ParticleEffect 19 | 20 | class Player(FSM, DirectObject): 21 | def __init__(self, charId, charNr, controls): 22 | FSM.__init__(self, "FSM-Player{}".format(charNr)) 23 | self.charId = charId 24 | charPath = "characters/character{}/".format(charNr) 25 | self.character = Actor( 26 | charPath + "char", { 27 | "Idle":charPath + "idle", 28 | "Walk":charPath + "walk", 29 | "Walk_back":charPath + "walk_back", 30 | "Punch_l":charPath + "punch_l", 31 | "Punch_r":charPath + "punch_r", 32 | "Kick_l":charPath + "kick_l", 33 | "Kick_r":charPath + "kick_r", 34 | "Defend":charPath + "defend", 35 | "Hit":charPath + "hit", 36 | "Defeated":charPath + "defeated" 37 | } 38 | ) 39 | self.character.reparentTo(render) 40 | self.character.hide() 41 | self.walkSpeed = 2.0 # units per second 42 | if controls == "p1": 43 | self.character.setH(90) 44 | self.leftButton = KeyboardButton.asciiKey(b"d") 45 | self.rightButton = KeyboardButton.asciiKey(b"f") 46 | self.punchLButton = KeyboardButton.asciiKey(b"q") 47 | self.punchRButton = KeyboardButton.asciiKey(b"w") 48 | self.kickLButton = KeyboardButton.asciiKey(b"a") 49 | self.kickRButton = KeyboardButton.asciiKey(b"s") 50 | self.defendButton = KeyboardButton.asciiKey(b"e") 51 | elif controls == "p2": 52 | self.character.setH(-90) 53 | self.leftButton = KeyboardButton.right() 54 | self.rightButton = KeyboardButton.left() 55 | self.punchLButton = KeyboardButton.asciiKey(b"i") 56 | self.punchRButton = KeyboardButton.asciiKey(b"o") 57 | self.kickLButton = KeyboardButton.asciiKey(b"k") 58 | self.kickRButton = KeyboardButton.asciiKey(b"l") 59 | self.defendButton = KeyboardButton.asciiKey(b"p") 60 | 61 | self.getPos = self.character.getPos 62 | self.getX = self.character.getX 63 | 64 | characterSphere = CollisionSphere(0, 0, 1.0, 0.5) 65 | self.collisionNodeName = "character{}Collision".format(charId) 66 | characterColNode = CollisionNode(self.collisionNodeName) 67 | characterColNode.addSolid(characterSphere) 68 | self.characterCollision = self.character.attachNewNode(characterColNode) 69 | # Uncomment this line to show collision solids 70 | #self.characterCollision.show() 71 | base.pusher.addCollider(self.characterCollision, self.character) 72 | base.cTrav.addCollider(self.characterCollision, base.pusher) 73 | 74 | characterHitRay = CollisionSegment(0, -0.5, 1.0, 0, -0.8, 1.0) 75 | characterColNode.addSolid(characterHitRay) 76 | 77 | self.audioStep = base.audio3d.loadSfx("assets/audio/step.ogg") 78 | self.audioStep.setLoop(True) 79 | base.audio3d.attachSoundToObject(self.audioStep, self.character) 80 | 81 | self.audioHit = base.audio3d.loadSfx("assets/audio/hit.ogg") 82 | self.audioHit.setLoop(False) 83 | base.audio3d.attachSoundToObject(self.audioStep, self.character) 84 | 85 | def setEnemy(self, enemyColName): 86 | self.enemyColName = enemyColName 87 | inEvent = "{}-into-{}".format(enemyColName,self.collisionNodeName) 88 | base.pusher.addInPattern(inEvent) 89 | self.accept(inEvent, self.setCanBeHit, [True]) 90 | outEvent = "{}-out-{}".format(enemyColName,self.collisionNodeName) 91 | base.pusher.addOutPattern(outEvent) 92 | self.accept(outEvent, self.setCanBeHit, [False]) 93 | 94 | def setCanBeHit(self, yes, collission): 95 | eventName = "hitEnemy{}".format(self.collisionNodeName) 96 | if yes: 97 | self.accept(eventName, self.gotHit) 98 | else: 99 | self.ignore(eventName) 100 | self.canBeHit = yes 101 | 102 | def gotHit(self): 103 | if not self.canBeHit or self.isDefending: return 104 | 105 | self.bloodsplat = ParticleEffect() 106 | self.bloodsplat.loadConfig("assets/fx/BloodSplat.ptf") 107 | floater = self.character.attachNewNode("particleFloater") 108 | if self.character.getH() == 90: 109 | floater.setPos(-1, 0, 1) 110 | if self.character.getH() == -90: 111 | floater.setPos(1, 0, 1) 112 | self.bloodsplat.start(parent = floater, renderParent = render) 113 | taskMgr.doMethodLater(0.5, self.bloodsplat.cleanup, 114 | "stop Particle", extraArgs = []) 115 | 116 | self.health -= 10 117 | base.messenger.send( 118 | "lifeChanged", 119 | [self.charId, self.health]) 120 | if self.health <= 0: 121 | self.gotDefeated = True 122 | self.request("Defeated") 123 | base.messenger.send("gameOver", [self.charId]) 124 | else: 125 | self.request("Hit") 126 | 127 | def attackAnimationPlaying(self): 128 | actionAnimations = [ 129 | "Punch_l", 130 | "Punch_r", 131 | "Kick_l", 132 | "Kick_r", 133 | "Hit"] 134 | if self.character.getCurrentAnim() in actionAnimations: return True 135 | 136 | def start(self, startPos): 137 | self.character.setPos(startPos) 138 | self.character.show() 139 | self.request("Idle") 140 | self.canBeHit = False 141 | self.isDefending = False 142 | self.gotDefeated = False 143 | self.health = 100 144 | taskMgr.add(self.moveTask, "move task {}".format(self.charId)) 145 | 146 | def stop(self): 147 | taskMgr.remove("move task {}".format(self.charId)) 148 | self.ignoreAll() 149 | base.audio3d.detachSound(self.audioStep) 150 | base.audio3d.detachSound(self.audioHit) 151 | self.character.cleanup() 152 | self.character.removeNode() 153 | 154 | def moveTask(self, task): 155 | if self.gotDefeated: 156 | base.messenger.send("GameOver") 157 | return task.done 158 | if self.attackAnimationPlaying(): return task.cont 159 | speed = 0.0 160 | isDown = base.mouseWatcherNode.isButtonDown 161 | 162 | if isDown(self.defendButton): 163 | if self.state != "Defend": 164 | self.isDefending = True 165 | self.request("Defend") 166 | return task.cont 167 | self.isDefending = False 168 | 169 | # Check for attack keys 170 | isAction = False 171 | if isDown(self.punchLButton): 172 | isAction = True 173 | self.request("Punch_l") 174 | elif isDown(self.punchRButton): 175 | isAction = True 176 | self.request("Punch_r") 177 | elif isDown(self.kickLButton): 178 | isAction = True 179 | self.request("Kick_l") 180 | elif isDown(self.kickRButton): 181 | isAction = True 182 | self.request("Kick_r") 183 | if isAction: 184 | base.messenger.send("hitEnemy{}".format(self.enemyColName)) 185 | return task.cont 186 | 187 | if isDown(self.leftButton): 188 | speed += self.walkSpeed 189 | if isDown(self.rightButton): 190 | speed -= self.walkSpeed 191 | yDelta = speed * globalClock.getDt() 192 | self.character.setY(self.character, yDelta) 193 | if speed != 0.0 and self.state != "Walk" and self.state != "Walk_back": 194 | if speed < 0: 195 | self.request("Walk") 196 | else: 197 | self.request("Walk_back") 198 | elif speed == 0.0 and self.state != "Idle": 199 | self.request("Idle") 200 | return task.cont 201 | 202 | def enterIdle(self): 203 | self.character.loop("Idle") 204 | def exitIdle(self): 205 | self.character.stop() 206 | 207 | def enterWalk(self): 208 | self.character.loop("Walk") 209 | if self.audioStep.status() != AudioSound.PLAYING: 210 | self.audioStep.play() 211 | def exitWalk(self): 212 | self.character.stop() 213 | if self.audioStep.status() == AudioSound.PLAYING: 214 | self.audioStep.stop() 215 | 216 | def enterWalk_back(self): 217 | self.character.loop("Walk_back") 218 | if self.audioStep.status() != AudioSound.PLAYING: 219 | self.audioStep.play() 220 | def exitWalk_back(self): 221 | self.character.stop() 222 | if self.audioStep.status() == AudioSound.PLAYING: 223 | self.audioStep.stop() 224 | 225 | def enterPunch_l(self): 226 | self.character.play("Punch_l") 227 | def exitPunch_l(self): 228 | self.character.stop() 229 | 230 | def enterPunch_r(self): 231 | self.character.play("Punch_r") 232 | def exitPunch_r(self): 233 | self.character.stop() 234 | 235 | def enterKick_l(self): 236 | self.character.play("Kick_l") 237 | def exitKick_l(self): 238 | self.character.stop() 239 | 240 | def enterKick_r(self): 241 | self.character.play("Kick_r") 242 | def exitKick_r(self): 243 | self.character.stop() 244 | 245 | def enterDefend(self): 246 | self.character.play("Defend") 247 | def exitDefend(self): 248 | self.character.stop() 249 | 250 | def enterHit(self): 251 | self.character.play("Hit") 252 | self.audioHit.play() 253 | def exitHit(self): 254 | self.character.stop() 255 | 256 | def enterDefeated(self): 257 | self.character.play("Defeated") 258 | def exitDefeated(self): 259 | self.character.stop() 260 | -------------------------------------------------------------------------------- /P3D Tutorial/game/requirements.txt: -------------------------------------------------------------------------------- 1 | panda3d 2 | -------------------------------------------------------------------------------- /P3D Tutorial/game/setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup 2 | 3 | exclude = [ 4 | # build stuff 5 | 'build/**', 6 | 'build', 7 | 'dist/**', 8 | 'dist', 9 | '**/*.py', 10 | 'setup.py', 11 | 'requirements.txt'] 12 | 13 | setup( 14 | name='Tatakai no ikimono', 15 | author = "Fireclaw the Fox", 16 | author_email = "info@grimfang-studio.org", 17 | options = { 18 | 'build_apps': { 19 | 'include_patterns': ['**/*'], 20 | 'exclude_patterns': exclude, 21 | 'gui_apps': { 22 | 'tatakai-no-ikimono': 'main.py', 23 | }, 24 | 'plugins': [ 25 | 'pandagl', 26 | 'p3openal_audio' 27 | ] 28 | } 29 | } 30 | ) 31 | -------------------------------------------------------------------------------- /Panda3D Tutorial.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/Panda3D Tutorial.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # panda3d-tutorial 2 | A Tutorial book about game creation with the Panda3D game engine and other open source tools. 3 | 4 | This Tutorial will show you how to create a game from scratch to release and describe each step in the development. It is mainly for developers, but also has some hints, tips and tricks for others in the game making process. 5 | 6 | Within this tutorial, we will show you how to create a small beat em up game, how to pack it up and deploy it. We will also give you hints every now and then about all the parts you have to go through if you like to release a videogame, even though some of the steps you have to take within the games development are even aplyable to other kinds of software or even non videogame games like board or cardgames. 7 | 8 | This book is mainly intended for beginners who want to learn game development with free open source tools. 9 | 10 | 11 | current state: Released 12 | 13 | Notes for writers: 14 | The code highlighting in this book is created with http://extensions.libreoffice.org/extension-center/code-colorizer-formatter 15 | Note, set Font Name to Liberation Mono in it's configuration. 16 | 17 | -------------------------------------------------------------------------------- /TinyBookImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/TinyBookImage.png -------------------------------------------------------------------------------- /TinyBookImage.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fireclawthefox/panda3d-tutorial/d195315b9d58de236126f7540e9bca1e5f8308a2/TinyBookImage.xcf -------------------------------------------------------------------------------- /by-sa.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 21 | 43 | 45 | 46 | 48 | image/svg+xml 49 | 51 | 52 | 53 | 54 | 58 | 64 | 69 | 70 | 73 | 74 | 83 | 84 | 87 | 90 | 91 | 92 | 93 | 94 | 95 | 98 | 99 | 102 | 106 | 107 | 111 | 112 | 113 | 114 | 117 | 121 | 122 | 126 | 127 | 128 | 129 | 132 | 133 | 142 | 143 | 146 | 149 | 150 | 153 | 154 | 155 | 156 | 157 | 158 | 160 | 170 | 171 | 173 | 176 | 177 | 186 | 187 | 188 | 189 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | --------------------------------------------------------------------------------