Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [code]:pnmtext(error): Unable to find font file phase_3/models/fonts/MickeyFont[/code]
- the egg files contents in a text editor is:
- [code]<CoordinateSystem> { Z-Up }
- <Comment> {
- "bam2egg MickeyFont.bam MickeyFont.egg"
- }
- <Texture> phase_3_palette_2tmlc_2 {
- "phase_3/maps/phase_3_palette_2tmlc_2.rgb"
- <Scalar> format { luminance_alpha }
- <Scalar> wrapu { repeat }
- <Scalar> wrapv { repeat }
- <Scalar> minfilter { linear_mipmap_linear }
- <Scalar> magfilter { linear }
- <Scalar> envtype { modulate }
- <Scalar> alpha { blend }
- }
- <Texture> phase_3_palette_2tmlc_1 {
- "phase_3/maps/phase_3_palette_2tmlc_1.rgb"
- <Scalar> format { luminance_alpha }
- <Scalar> wrapu { repeat }
- <Scalar> wrapv { repeat }
- <Scalar> minfilter { linear_mipmap_linear }
- <Scalar> magfilter { linear }
- <Scalar> envtype { modulate }
- <Scalar> alpha { blend }
- }
- <VertexPool> vpool {
- <Vertex> 0 {
- 0 0 1
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 1 {
- 0.541667 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 2 {
- -0.027381 0 0.0559524
- <UV> { 0.715901 0.0306152 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 3 {
- 0.515476 0 0.0559524
- <UV> { 0.799725 0.0306152 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 4 {
- -0.027381 0 0.34881
- <UV> { 0.715901 0.082666 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 5 {
- 0.515476 0 0.34881
- <UV> { 0.799725 0.082666 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 6 {
- 0.47619 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 7 {
- -0.0214286 0 -0.0333333
- <UV> { 0.91124 0.255273 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 8 {
- 0.467857 0 -0.0333333
- <UV> { 0.987198 0.255273 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 9 {
- -0.0214286 0 0.711905
- <UV> { 0.91124 0.37754 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 10 {
- 0.467857 0 0.711905
- <UV> { 0.987198 0.37754 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 11 {
- 0.357143 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 12 {
- -0.027381 0 -0.170238
- <UV> { 0.6125 0.284801 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 13 {
- 0.336905 0 -0.170238
- <UV> { 0.825 0.284801 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 14 {
- -0.027381 0 0.289286
- <UV> { 0.6125 0.558949 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 15 {
- 0.336905 0 0.289286
- <UV> { 0.825 0.558949 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 16 {
- 0.244048 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 17 {
- -0.0333333 0 -0.0333333
- <UV> { 0.820413 0.0391638 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 18 {
- 0.217857 0 -0.0333333
- <UV> { 0.863179 0.0391638 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 19 {
- -0.0333333 0 0.217857
- <UV> { 0.820413 0.0819299 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 20 {
- 0.217857 0 0.217857
- <UV> { 0.863179 0.0819299 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 21 {
- 0.52381 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 22 {
- -0.027381 0 -0.00952381
- <UV> { 0.6138 0.660096 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 23 {
- 0.509524 0 -0.00952381
- <UV> { 0.948701 0.660096 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 24 {
- -0.027381 0 0.467857
- <UV> { 0.6138 0.949279 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 25 {
- 0.509524 0 0.467857
- <UV> { 0.948701 0.949279 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 26 {
- 0.238095 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 27 {
- -0.0333333 0 0.0202381
- <UV> { 0.0316554 0.6138 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 28 {
- 0.217857 0 0.0202381
- <UV> { 0.20272 0.6138 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 29 {
- -0.0333333 0 0.557143
- <UV> { 0.0316554 0.948701 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 30 {
- 0.217857 0 0.557143
- <UV> { 0.20272 0.948701 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 31 {
- 0.613095 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 32 {
- -0.027381 0 -0.0511905
- <UV> { 0.0131262 0.856949 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 33 {
- 0.688095 0 -0.0511905
- <UV> { 0.131405 0.856949 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 34 {
- -0.027381 0 0.72381
- <UV> { 0.0131262 0.986802 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 35 {
- 0.688095 0 0.72381
- <UV> { 0.131405 0.986802 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 36 {
- 0.404762 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 37 {
- -0.0333333 0 -0.0511905
- <UV> { 0.247076 0.856911 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 38 {
- 0.390476 0 -0.0511905
- <UV> { 0.311519 0.856911 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 39 {
- -0.0333333 0 0.729762
- <UV> { 0.247076 0.98684 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 40 {
- 0.390476 0 0.729762
- <UV> { 0.311519 0.98684 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 41 {
- -0.027381 0 -0.0452381
- <UV> { 0.157232 0.856949 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 42 {
- 0.396429 0 -0.0452381
- <UV> { 0.221675 0.856949 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 43 {
- -0.027381 0 0.729762
- <UV> { 0.157232 0.986802 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 44 {
- 0.396429 0 0.729762
- <UV> { 0.221675 0.986802 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 45 {
- 0.684524 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 46 {
- -0.0333333 0 -0.0333333
- <UV> { 0.774845 0.55617 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 47 {
- 0.682143 0 -0.0333333
- <UV> { 0.893123 0.55617 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 48 {
- -0.0333333 0 0.717857
- <UV> { 0.774845 0.682111 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 49 {
- 0.682143 0 0.717857
- <UV> { 0.893123 0.682111 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 50 {
- 0.619048 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 51 {
- -0.0392857 0 -0.027381
- <UV> { 0.278578 0.251444 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 52 {
- 0.604762 0 -0.027381
- <UV> { 0.381579 0.251444 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 53 {
- -0.0392857 0 0.729762
- <UV> { 0.278578 0.377463 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 54 {
- 0.604762 0 0.729762
- <UV> { 0.381579 0.377463 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 55 {
- 0.39881 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 56 {
- -0.0392857 0 -0.0333333
- <UV> { 0.911079 0.860742 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 57 {
- 0.390476 0 -0.0333333
- <UV> { 0.97564 0.860742 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 58 {
- -0.0392857 0 0.735714
- <UV> { 0.911079 0.986915 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 59 {
- 0.390476 0 0.735714
- <UV> { 0.97564 0.986915 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 60 {
- 0.690476 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 61 {
- -0.0333333 0 -0.0214286
- <UV> { 0.716211 0.102969 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 62 {
- 0.688095 0 -0.0214286
- <UV> { 0.834571 0.102969 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 63 {
- -0.0333333 0 0.717857
- <UV> { 0.716211 0.225157 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 64 {
- 0.688095 0 0.717857
- <UV> { 0.834571 0.225157 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 65 {
- 0.565476 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 66 {
- -0.0333333 0 -0.027381
- <UV> { 0.258938 0.0991389 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 67 {
- 0.55119 0 -0.027381
- <UV> { 0.350437 0.0991389 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 68 {
- -0.0333333 0 0.72381
- <UV> { 0.258938 0.22508 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 69 {
- 0.55119 0 0.72381
- <UV> { 0.350437 0.22508 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 70 {
- 0.666667 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 71 {
- -0.0333333 0 -0.0333333
- <UV> { 0.591253 0.403788 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 72 {
- 0.658333 0 -0.0333333
- <UV> { 0.705623 0.403788 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 73 {
- -0.0333333 0 0.72381
- <UV> { 0.591253 0.529807 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 74 {
- 0.658333 0 0.72381
- <UV> { 0.705623 0.529807 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 75 {
- 0.595238 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 76 {
- -0.0333333 0 -0.0333333
- <UV> { 0.86065 0.10293 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 77 {
- 0.580952 0 -0.0333333
- <UV> { 0.959663 0.10293 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 78 {
- -0.0333333 0 0.711905
- <UV> { 0.86065 0.225196 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 79 {
- 0.580952 0 0.711905
- <UV> { 0.959663 0.225196 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 80 {
- 0.571429 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 81 {
- -0.027381 0 -0.0333333
- <UV> { 0.376126 0.0990614 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 82 {
- 0.557143 0 -0.0333333
- <UV> { 0.467625 0.0990614 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 83 {
- -0.027381 0 0.729762
- <UV> { 0.376126 0.225158 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 84 {
- 0.557143 0 0.729762
- <UV> { 0.467625 0.225158 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 85 {
- 0.625 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 86 {
- -0.0333333 0 -0.0392857
- <UV> { 0.0130424 0.399881 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 87 {
- 0.622619 0 -0.0392857
- <UV> { 0.119771 0.399881 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 88 {
- -0.0333333 0 0.717857
- <UV> { 0.0130424 0.5259 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 89 {
- 0.622619 0 0.717857
- <UV> { 0.119771 0.5259 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 90 {
- 0.60119 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 91 {
- -0.0333333 0 -0.0333333
- <UV> { 0.536386 0.251444 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 92 {
- 0.586905 0 -0.0333333
- <UV> { 0.635489 0.251444 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 93 {
- -0.0333333 0 0.72381
- <UV> { 0.536386 0.377463 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 94 {
- 0.586905 0 0.72381
- <UV> { 0.635489 0.377463 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 95 {
- 0.607143 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 96 {
- -0.027381 0 -0.0333333
- <UV> { 0.661342 0.251444 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 97 {
- 0.59881 0 -0.0333333
- <UV> { 0.760533 0.251444 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 98 {
- -0.027381 0 0.72381
- <UV> { 0.661342 0.377463 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 99 {
- 0.59881 0 0.72381
- <UV> { 0.760533 0.377463 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 100 {
- 0.75 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 101 {
- -0.027381 0 -0.0392857
- <UV> { 0.739749 0.860819 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 102 {
- 0.842857 0 -0.0392857
- <UV> { 0.885251 0.860819 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 103 {
- -0.027381 0 0.717857
- <UV> { 0.739749 0.986838 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 104 {
- 0.842857 0 0.717857
- <UV> { 0.885251 0.986838 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 105 {
- -0.00952381 0 -0.027381
- <UV> { 0.786477 0.251483 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 106 {
- 0.59881 0 -0.027381
- <UV> { 0.885398 0.251483 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 107 {
- -0.00952381 0 0.72381
- <UV> { 0.786477 0.377424 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 108 {
- 0.59881 0 0.72381
- <UV> { 0.885398 0.377424 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 109 {
- 0.779762 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 110 {
- -0.0333333 0 -0.0333333
- <UV> { 0.33734 0.708475 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 111 {
- 0.777381 0 -0.0333333
- <UV> { 0.471253 0.708475 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 112 {
- -0.0333333 0 0.72381
- <UV> { 0.33734 0.834494 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 113 {
- 0.777381 0 0.72381
- <UV> { 0.471253 0.834494 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 114 {
- 0.744048 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 115 {
- -0.00952381 0 -0.0392857
- <UV> { 0.477891 0.556092 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 116 {
- 0.741667 0 -0.0392857
- <UV> { 0.600234 0.556092 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 117 {
- -0.00952381 0 0.72381
- <UV> { 0.477891 0.682189 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 118 {
- 0.741667 0 0.72381
- <UV> { 0.600234 0.682189 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 119 {
- 0.535714 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 120 {
- -0.00952381 0 -0.027381
- <UV> { 0.0128249 0.0990235 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 121 {
- 0.527381 0 -0.027381
- <UV> { 0.0965502 0.0990235 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 122 {
- -0.00952381 0 0.717857
- <UV> { 0.0128249 0.22129 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 123 {
- 0.527381 0 0.717857
- <UV> { 0.0965502 0.22129 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 124 {
- 0.5 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 125 {
- -0.0154762 0 -0.0333333
- <UV> { 0.610523 0.0990614 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 126 {
- 0.491667 0 -0.0333333
- <UV> { 0.690259 0.0990614 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 127 {
- -0.0154762 0 0.729762
- <UV> { 0.610523 0.225158 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 128 {
- 0.491667 0 0.729762
- <UV> { 0.690259 0.225158 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 129 {
- 0.702381 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 130 {
- -0.0333333 0 -0.0392857
- <UV> { 0.0130859 0.552225 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 131 {
- 0.688095 0 -0.0392857
- <UV> { 0.131445 0.552225 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 132 {
- -0.0333333 0 0.717857
- <UV> { 0.0130859 0.678244 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 133 {
- 0.688095 0 0.717857
- <UV> { 0.131445 0.678244 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 134 {
- 0.767857 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 135 {
- -0.0333333 0 -0.0333333
- <UV> { 0.0131602 0.704569 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 136 {
- 0.747619 0 -0.0333333
- <UV> { 0.14309 0.704569 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 137 {
- -0.0333333 0 0.72381
- <UV> { 0.0131602 0.830588 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 138 {
- 0.747619 0 0.72381
- <UV> { 0.14309 0.830588 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 139 {
- 0.488095 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 140 {
- -0.0333333 0 -0.027381
- <UV> { 0.122242 0.0990625 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 141 {
- 0.47381 0 -0.027381
- <UV> { 0.201978 0.0990625 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 142 {
- -0.0333333 0 0.711905
- <UV> { 0.122242 0.22125 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 143 {
- 0.47381 0 0.711905
- <UV> { 0.201978 0.22125 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 144 {
- 0.559524 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 145 {
- -0.0333333 0 -0.0392857
- <UV> { 0.493313 0.0991389 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 146 {
- 0.55119 0 -0.0392857
- <UV> { 0.584812 0.0991389 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 147 {
- -0.0333333 0 0.711905
- <UV> { 0.493313 0.22508 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 148 {
- 0.55119 0 0.711905
- <UV> { 0.584812 0.22508 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 149 {
- 0.720238 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 150 {
- -0.00952381 0 -0.0333333
- <UV> { 0.157578 0.552225 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 151 {
- 0.717857 0 -0.0333333
- <UV> { 0.276016 0.552225 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 152 {
- -0.00952381 0 0.72381
- <UV> { 0.157578 0.678244 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 153 {
- 0.717857 0 0.72381
- <UV> { 0.276016 0.678244 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 154 {
- -0.0333333 0 -0.0392857
- <UV> { 0.137853 0.247499 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 155 {
- 0.575 0 -0.0392857
- <UV> { 0.233242 0.247499 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 156 {
- -0.0333333 0 0.72381
- <UV> { 0.137853 0.373596 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 157 {
- 0.575 0 0.72381
- <UV> { 0.233242 0.373596 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 158 {
- 1.02381 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 159 {
- -0.0333333 0 -0.0392857
- <UV> { 0.337611 0.86078 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 160 {
- 1.02738 0 -0.0392857
- <UV> { 0.521764 0.86078 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 161 {
- -0.0333333 0 0.72381
- <UV> { 0.337611 0.986877 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 162 {
- 1.02738 0 0.72381
- <UV> { 0.521764 0.986877 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 163 {
- 0.714286 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 164 {
- -0.0333333 0 -0.0392857
- <UV> { 0.626367 0.556092 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 165 {
- 0.711905 0 -0.0392857
- <UV> { 0.748634 0.556092 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 166 {
- -0.0333333 0 0.72381
- <UV> { 0.626367 0.682189 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 167 {
- 0.711905 0 0.72381
- <UV> { 0.748634 0.682189 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 168 {
- 0.791667 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 169 {
- -0.0333333 0 -0.0392857
- <UV> { 0.497497 0.708475 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 170 {
- 0.777381 0 -0.0392857
- <UV> { 0.63141 0.708475 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 171 {
- -0.0333333 0 0.717857
- <UV> { 0.497497 0.834494 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 172 {
- 0.777381 0 0.717857
- <UV> { 0.63141 0.834494 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 173 {
- -0.0333333 0 -0.0392857
- <UV> { 0.145898 0.399881 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 174 {
- 0.616667 0 -0.0392857
- <UV> { 0.25254 0.399881 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 175 {
- -0.0333333 0 0.717857
- <UV> { 0.145898 0.5259 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 176 {
- 0.616667 0 0.717857
- <UV> { 0.25254 0.5259 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 177 {
- 0.738095 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 178 {
- -0.0333333 0 -0.0392857
- <UV> { 0.325663 0.556092 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 179 {
- 0.72381 0 -0.0392857
- <UV> { 0.451682 0.556092 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 180 {
- -0.0333333 0 0.72381
- <UV> { 0.325663 0.682189 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 181 {
- 0.72381 0 0.72381
- <UV> { 0.451682 0.682189 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 182 {
- -0.0333333 0 -0.0392857
- <UV> { 0.302189 0.403749 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 183 {
- 0.682143 0 -0.0392857
- <UV> { 0.420467 0.403749 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 184 {
- -0.0333333 0 0.72381
- <UV> { 0.302189 0.529846 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 185 {
- 0.682143 0 0.72381
- <UV> { 0.420467 0.529846 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 186 {
- 0.672619 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 187 {
- -0.0154762 0 -0.0333333
- <UV> { 0.872378 0.403788 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 188 {
- 0.670238 0 -0.0333333
- <UV> { 0.983092 0.403788 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 189 {
- -0.0154762 0 0.72381
- <UV> { 0.872378 0.529807 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 190 {
- 0.670238 0 0.72381
- <UV> { 0.983092 0.529807 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 191 {
- -0.0333333 0 -0.0392857
- <UV> { 0.407528 0.251405 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 192 {
- 0.604762 0 -0.0392857
- <UV> { 0.510441 0.251405 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 193 {
- -0.0333333 0 0.72381
- <UV> { 0.407528 0.377502 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 194 {
- 0.604762 0 0.72381
- <UV> { 0.510441 0.377502 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 195 {
- -0.0333333 0 -0.0392857
- <UV> { 0.44672 0.403749 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 196 {
- 0.682143 0 -0.0392857
- <UV> { 0.564998 0.403749 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 197 {
- -0.0333333 0 0.72381
- <UV> { 0.44672 0.529846 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 198 {
- 0.682143 0 0.72381
- <UV> { 0.564998 0.529846 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 199 {
- -0.0333333 0 -0.0392857
- <UV> { 0.65769 0.708436 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 200 {
- 0.771429 0 -0.0392857
- <UV> { 0.791529 0.708436 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 201 {
- -0.0333333 0 0.72381
- <UV> { 0.65769 0.834533 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 202 {
- 0.771429 0 0.72381
- <UV> { 0.791529 0.834533 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 203 {
- 0.940476 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 204 {
- -0.0333333 0 -0.0452381
- <UV> { 0.548424 0.86078 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 205 {
- 0.938095 0 -0.0452381
- <UV> { 0.713295 0.86078 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 206 {
- -0.0333333 0 0.717857
- <UV> { 0.548424 0.986877 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 207 {
- 0.938095 0 0.717857
- <UV> { 0.713295 0.986877 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 208 {
- -0.0392857 0 -0.0392857
- <UV> { 0.169373 0.70453 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 209 {
- 0.747619 0 -0.0392857
- <UV> { 0.299378 0.70453 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 210 {
- -0.0392857 0 0.72381
- <UV> { 0.169373 0.830627 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 211 {
- 0.747619 0 0.72381
- <UV> { 0.299378 0.830627 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 212 {
- 0.755952 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 213 {
- -0.0333333 0 -0.0452381
- <UV> { 0.817883 0.708436 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 214 {
- 0.765476 0 -0.0452381
- <UV> { 0.951649 0.708436 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 215 {
- -0.0333333 0 0.717857
- <UV> { 0.817883 0.834533 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 216 {
- 0.765476 0 0.717857
- <UV> { 0.951649 0.834533 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 217 {
- 0.660714 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 218 {
- -0.0333333 0 -0.0452381
- <UV> { 0.731878 0.403749 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 219 {
- 0.658333 0 -0.0452381
- <UV> { 0.846248 0.403749 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 220 {
- -0.0333333 0 0.717857
- <UV> { 0.731878 0.529846 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 221 {
- 0.658333 0 0.717857
- <UV> { 0.846248 0.529846 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 222 {
- 0.279762 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 223 {
- -0.0154762 0 -0.0392857
- <UV> { 0.913525 0.556054 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 224 {
- 0.271429 0 -0.0392857
- <UV> { 0.965382 0.556054 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 225 {
- -0.0154762 0 0.729762
- <UV> { 0.913525 0.682227 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 226 {
- 0.271429 0 0.729762
- <UV> { 0.965382 0.682227 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 227 {
- 0.363095 0 0
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 228 {
- -0.0333333 0 0.228571
- <UV> { 0.28475 0.64496 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 229 {
- 0.34881 0 0.228571
- <UV> { 0.512125 0.64496 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 230 {
- -0.0333333 0 0.717857
- <UV> { 0.28475 0.94879 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 231 {
- 0.34881 0 0.717857
- <UV> { 0.512125 0.94879 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 232 {
- -0.00952381 0 -0.027381
- <UV> { 0.0124268 0.246921 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 233 {
- 0.59881 0 -0.027381
- <UV> { 0.112573 0.246921 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 234 {
- -0.00952381 0 0.72381
- <UV> { 0.0124268 0.374174 }
- <RGBA> { 1 1 1 1 }
- }
- <Vertex> 235 {
- 0.59881 0 0.72381
- <UV> { 0.112573 0.374174 }
- <RGBA> { 1 1 1 1 }
- }
- }
- <Group> MickeyFont_english.egg {
- <Group> {
- <Group> {
- <Switch> { 1 }
- <Scalar> fps { 2 }
- <Group> {
- <PointLight> {
- <VertexRef> { 0 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 1 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 2 3 4 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 4 3 5 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 6 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 7 8 9 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 9 8 10 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 11 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_2 }
- <VertexRef> { 12 13 14 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_2 }
- <VertexRef> { 14 13 15 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 16 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 17 18 19 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 19 18 20 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 21 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_2 }
- <VertexRef> { 22 23 24 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_2 }
- <VertexRef> { 24 23 25 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 26 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_2 }
- <VertexRef> { 27 28 29 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_2 }
- <VertexRef> { 29 28 30 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 31 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 32 33 34 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 34 33 35 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 36 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 37 38 39 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 39 38 40 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 36 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 41 42 43 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 43 42 44 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 45 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 46 47 48 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 48 47 49 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 50 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 51 52 53 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 53 52 54 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 55 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 56 57 58 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 58 57 59 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 60 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 61 62 63 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 63 62 64 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 65 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 66 67 68 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 68 67 69 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 70 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 71 72 73 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 73 72 74 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 75 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 76 77 78 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 78 77 79 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 80 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 81 82 83 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 83 82 84 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 85 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 86 87 88 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 88 87 89 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 90 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 91 92 93 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 93 92 94 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 95 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 96 97 98 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 98 97 99 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 100 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 101 102 103 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 103 102 104 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 50 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 105 106 107 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 107 106 108 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 109 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 110 111 112 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 112 111 113 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 114 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 115 116 117 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 117 116 118 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 119 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 120 121 122 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 122 121 123 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 124 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 125 126 127 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 127 126 128 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 129 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 130 131 132 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 132 131 133 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 134 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 135 136 137 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 137 136 138 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 139 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 140 141 142 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 142 141 143 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 144 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 145 146 147 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 147 146 148 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 149 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 150 151 152 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 152 151 153 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 80 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 154 155 156 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 156 155 157 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 158 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 159 160 161 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 161 160 162 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 163 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 164 165 166 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 166 165 167 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 168 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 169 170 171 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 171 170 172 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 50 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 173 174 175 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 175 174 176 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 177 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 178 179 180 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 180 179 181 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 60 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 182 183 184 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 184 183 185 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 186 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 187 188 189 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 189 188 190 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 95 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 191 192 193 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 193 192 194 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 129 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 195 196 197 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 197 196 198 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 134 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 199 200 201 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 201 200 202 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 203 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 204 205 206 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 206 205 207 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 114 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 208 209 210 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 210 209 211 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 212 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 213 214 215 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 215 214 216 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 217 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 218 219 220 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 220 219 221 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 222 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 223 224 225 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 225 224 226 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 227 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_2 }
- <VertexRef> { 228 229 230 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_2 }
- <VertexRef> { 230 229 231 <Ref> { vpool } }
- }
- }
- <Group> {
- <PointLight> {
- <VertexRef> { 50 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 232 233 234 <Ref> { vpool } }
- }
- <Polygon> {
- <TRef> { phase_3_palette_2tmlc_1 }
- <VertexRef> { 234 233 235 <Ref> { vpool } }
- }
- }
- }
- }
- }
- [/code]
- I've tried loading a ttf file, and it comes at me with the same thing. Unable to load font
- Also, the scripts loading the font in order.
- ToontownLoader.py:
- [code]# 2013.08.22 22:26:35 Pacific Daylight Time
- # Embedded file name: toontown.toonbase.ToontownLoader
- from pandac.PandaModules import *
- from direct.directnotify.DirectNotifyGlobal import *
- from direct.showbase import Loader
- from toontown.toontowngui import ToontownLoadingScreen
- class ToontownLoader(Loader.Loader):
- __module__ = __name__
- TickPeriod = 0.2
- def __init__(self, base):
- Loader.Loader.__init__(self, base)
- self.inBulkBlock = None
- self.blockName = None
- self.loadingScreen = ToontownLoadingScreen.ToontownLoadingScreen()
- return
- def destroy(self):
- self.loadingScreen.destroy()
- del self.loadingScreen
- Loader.Loader.destroy(self)
- def beginBulkLoad(self, name, label, range, gui, tipCategory):
- self._loadStartT = globalClock.getRealTime()
- Loader.Loader.notify.info("starting bulk load of block '%s'" % name)
- if self.inBulkBlock:
- Loader.Loader.notify.warning("Tried to start a block ('%s'), but am already in a block ('%s')" % (name, self.blockName))
- return None
- self.inBulkBlock = 1
- self._lastTickT = globalClock.getRealTime()
- self.blockName = name
- self.loadingScreen.begin(range, label, gui, tipCategory)
- return None
- def endBulkLoad(self, name):
- if not self.inBulkBlock:
- Loader.Loader.notify.warning("Tried to end a block ('%s'), but not in one" % name)
- return
- if name != self.blockName:
- Loader.Loader.notify.warning("Tried to end a block ('%s'), other then the current one ('%s')" % (name, self.blockName))
- return
- self.inBulkBlock = None
- expectedCount, loadedCount = self.loadingScreen.end()
- now = globalClock.getRealTime()
- Loader.Loader.notify.info("At end of block '%s', expected %s, loaded %s, duration=%s" % (self.blockName,
- expectedCount,
- loadedCount,
- now - self._loadStartT))
- return
- def abortBulkLoad(self):
- if self.inBulkBlock:
- Loader.Loader.notify.info("Aborting block ('%s')" % self.blockName)
- self.inBulkBlock = None
- self.loadingScreen.abort()
- return
- def tick(self):
- if self.inBulkBlock:
- now = globalClock.getRealTime()
- if now - self._lastTickT > self.TickPeriod:
- self._lastTickT += self.TickPeriod
- self.loadingScreen.tick()
- try:
- base.cr.considerHeartbeat()
- except:
- pass
- def loadModel(self, *args, **kw):
- ret = Loader.Loader.loadModel(self, *args, **kw)
- self.tick()
- return ret
- def loadFont(self, *args, **kw):
- ret = Loader.Loader.loadFont(self, *args, **kw)
- self.tick()
- return ret
- def loadTexture(self, texturePath, alphaPath = None, okMissing = False):
- ret = Loader.Loader.loadTexture(self, texturePath, alphaPath, okMissing=okMissing)
- self.tick()
- if alphaPath:
- self.tick()
- return ret
- def loadSfx(self, soundPath):
- ret = Loader.Loader.loadSfx(self, soundPath)
- self.tick()
- return ret
- def loadMusic(self, soundPath):
- ret = Loader.Loader.loadMusic(self, soundPath)
- self.tick()
- return ret
- def loadDNAFileAI(self, dnaStore, dnaFile):
- ret = loadDNAFileAI(dnaStore, dnaFile, CSDefault)
- self.tick()
- return ret
- def loadDNAFile(self, dnaStore, dnaFile):
- ret = loadDNAFile(dnaStore, dnaFile, CSDefault, 0)
- self.tick()
- return ret
- # okay decompyling C:\Users\Maverick\Documents\Visual Studio 2010\Projects\Unfreezer\py2\toontown\toonbase\ToontownLoader.pyc
- # decompiled 1 files: 1 okay, 0 failed, 0 verify failed
- # 2013.08.22 22:26:35 Pacific Daylight Time
- [/code]
- ###########################################################################################
- ###########################################################################################
- Loader.py:
- [code]"""Loader module: contains the Loader class"""
- __all__ = ['Loader']
- from panda3d.core import *
- from panda3d.core import Loader as PandaLoader
- from direct.directnotify.DirectNotifyGlobal import *
- from direct.showbase.DirectObject import DirectObject
- import types
- # You can specify a phaseChecker callback to check
- # a modelPath to see if it is being loaded in the correct
- # phase
- phaseChecker = None
- class Loader(DirectObject):
- """
- Load models, textures, sounds, and code.
- """
- notify = directNotify.newCategory("Loader")
- loaderIndex = 0
- class Callback:
- def __init__(self, numObjects, gotList, callback, extraArgs):
- self.objects = [None] * numObjects
- self.gotList = gotList
- self.callback = callback
- self.extraArgs = extraArgs
- self.numRemaining = numObjects
- self.cancelled = False
- self.requests = {}
- def gotObject(self, index, object):
- self.objects[index] = object
- self.numRemaining -= 1
- if self.numRemaining == 0:
- if self.gotList:
- self.callback(self.objects, *self.extraArgs)
- else:
- self.callback(*(self.objects + self.extraArgs))
- # special methods
- def __init__(self, base):
- self.base = base
- self.loader = PandaLoader.getGlobalPtr()
- self.hook = "async_loader_%s" % (Loader.loaderIndex)
- Loader.loaderIndex += 1
- self.accept(self.hook, self.__gotAsyncObject)
- def destroy(self):
- self.ignore(self.hook)
- self.loader.stopThreads()
- del self.base
- del self.loader
- # model loading funcs
- def loadModel(self, modelPath, loaderOptions = None, noCache = None,
- allowInstance = False, okMissing = None,
- callback = None, extraArgs = [], priority = None):
- """
- Attempts to load a model or models from one or more relative
- pathnames. If the input modelPath is a string (a single model
- pathname), the return value will be a NodePath to the model
- loaded if the load was successful, or None otherwise. If the
- input modelPath is a list of pathnames, the return value will
- be a list of NodePaths and/or Nones.
- loaderOptions may optionally be passed in to control details
- about the way the model is searched and loaded. See the
- LoaderOptions class for more.
- The default is to look in the ModelPool (RAM) cache first, and
- return a copy from that if the model can be found there. If
- the bam cache is enabled (via the model-cache-dir config
- variable), then that will be consulted next, and if both
- caches fail, the file will be loaded from disk. If noCache is
- True, then neither cache will be consulted or updated.
- If allowInstance is True, a shared instance may be returned
- from the ModelPool. This is dangerous, since it is easy to
- accidentally modify the shared instance, and invalidate future
- load attempts of the same model. Normally, you should leave
- allowInstance set to False, which will always return a unique
- copy.
- If okMissing is True, None is returned if the model is not
- found or cannot be read, and no error message is printed.
- Otherwise, an IOError is raised if the model is not found or
- cannot be read (similar to attempting to open a nonexistent
- file). (If modelPath is a list of filenames, then IOError is
- raised if *any* of the models could not be loaded.)
- If callback is not None, then the model load will be performed
- asynchronously. In this case, loadModel() will initiate a
- background load and return immediately. The return value will
- be an object that may later be passed to
- loader.cancelRequest() to cancel the asynchronous request. At
- some later point, when the requested model(s) have finished
- loading, the callback function will be invoked with the n
- loaded models passed as its parameter list. It is possible
- that the callback will be invoked immediately, even before
- loadModel() returns. If you use callback, you may also
- specify a priority, which specifies the relative importance
- over this model over all of the other asynchronous load
- requests (higher numbers are loaded first).
- True asynchronous model loading requires Panda to have been
- compiled with threading support enabled (you can test
- Thread.isThreadingSupported()). In the absence of threading
- support, the asynchronous interface still exists and still
- behaves exactly as described, except that loadModel() might
- not return immediately.
- """
- assert Loader.notify.debug("Loading model: %s" % (modelPath))
- if loaderOptions == None:
- loaderOptions = LoaderOptions()
- else:
- loaderOptions = LoaderOptions(loaderOptions)
- if okMissing is not None:
- if okMissing:
- loaderOptions.setFlags(loaderOptions.getFlags() & ~LoaderOptions.LFReportErrors)
- else:
- loaderOptions.setFlags(loaderOptions.getFlags() | LoaderOptions.LFReportErrors)
- else:
- okMissing = ((loaderOptions.getFlags() & LoaderOptions.LFReportErrors) == 0)
- if noCache is not None:
- if noCache:
- loaderOptions.setFlags(loaderOptions.getFlags() | LoaderOptions.LFNoCache)
- else:
- loaderOptions.setFlags(loaderOptions.getFlags() & ~LoaderOptions.LFNoCache)
- if allowInstance:
- loaderOptions.setFlags(loaderOptions.getFlags() | LoaderOptions.LFAllowInstance)
- if isinstance(modelPath, types.StringTypes) or \
- isinstance(modelPath, Filename):
- # We were given a single model pathname.
- modelList = [modelPath]
- if phaseChecker:
- phaseChecker(modelPath, loaderOptions)
- gotList = False
- else:
- # Assume we were given a list of model pathnames.
- modelList = modelPath
- gotList = True
- if callback is None:
- # We got no callback, so it's a synchronous load.
- result = []
- for modelPath in modelList:
- node = self.loader.loadSync(Filename(modelPath), loaderOptions)
- if (node != None):
- nodePath = NodePath(node)
- else:
- nodePath = None
- result.append(nodePath)
- if not okMissing and None in result:
- message = 'Could not load model file(s): %s' % (modelList,)
- raise IOError, message
- if gotList:
- return result
- else:
- return result[0]
- else:
- # We got a callback, so we want an asynchronous (threaded)
- # load. We'll return immediately, but when all of the
- # requested models have been loaded, we'll invoke the
- # callback (passing it the models on the parameter list).
- cb = Loader.Callback(len(modelList), gotList, callback, extraArgs)
- i=0
- for modelPath in modelList:
- request = self.loader.makeAsyncRequest(Filename(modelPath), loaderOptions)
- if priority is not None:
- request.setPriority(priority)
- request.setDoneEvent(self.hook)
- request.setPythonObject((cb, i))
- i+=1
- self.loader.loadAsync(request)
- cb.requests[request] = True
- return cb
- def cancelRequest(self, cb):
- """Cancels an aysynchronous loading or flatten request issued
- earlier. The callback associated with the request will not be
- called after cancelRequest() has been performed. """
- if not cb.cancelled:
- cb.cancelled = True
- for request in cb.requests:
- self.loader.remove(request)
- cb.requests = None
- def isRequestPending(self, cb):
- """ Returns true if an asynchronous loading or flatten request
- issued earlier is still pending, or false if it has completed or
- been cancelled. """
- return bool(cb.requests)
- def loadModelOnce(self, modelPath):
- """
- modelPath is a string.
- Attempt to load a model from modelPool, if not present
- then attempt to load it from disk. Return a nodepath to
- the model if successful or None otherwise
- """
- Loader.notify.info("loader.loadModelOnce() is deprecated; use loader.loadModel() instead.")
- return self.loadModel(modelPath, noCache = False)
- def loadModelCopy(self, modelPath, loaderOptions = None):
- """loadModelCopy(self, string)
- NOTE: This method is deprecated and should not be used.
- Attempt to load a model from modelPool, if not present
- then attempt to load it from disk. Return a nodepath to
- a copy of the model if successful or None otherwise
- """
- Loader.notify.info("loader.loadModelCopy() is deprecated; use loader.loadModel() instead.")
- return self.loadModel(modelPath, loaderOptions = loaderOptions, noCache = False)
- def loadModelNode(self, modelPath):
- """
- modelPath is a string.
- This is like loadModelOnce in that it loads a model from the
- modelPool, but it does not then instance it to hidden and it
- returns a Node instead of a NodePath. This is particularly
- useful for special models like fonts that you don't care about
- where they're parented to, and you don't want a NodePath
- anyway--it prevents accumulation of instances of the font
- model under hidden.
- However, if you're loading a font, see loadFont(), below.
- """
- Loader.notify.info("loader.loadModelNode() is deprecated; use loader.loadModel() instead.")
- model = self.loadModel(modelPath, noCache = False)
- if model is not None:
- model = model.node()
- return model
- def unloadModel(self, model):
- """
- model is the return value of loadModel(). For backward
- compatibility, it may also be the filename that was passed to
- loadModel(), though this requires a disk search.
- """
- if isinstance(model, NodePath):
- # Maybe we were given a NodePath
- modelNode = model.node()
- elif isinstance(model, ModelNode):
- # Maybe we were given a node
- modelNode = model
- elif isinstance(model, types.StringTypes) or \
- isinstance(model, Filename):
- # If we were given a filename, we have to ask the loader
- # to resolve it for us.
- options = LoaderOptions(LoaderOptions.LFSearch | LoaderOptions.LFNoDiskCache | LoaderOptions.LFCacheOnly)
- modelNode = self.loader.loadSync(Filename(model), options)
- if modelNode == None:
- # Model not found.
- assert Loader.notify.debug("Unloading model not loaded: %s" % (model))
- return
- assert Loader.notify.debug("%s resolves to %s" % (model, modelNode.getFullpath()))
- else:
- raise 'Invalid parameter to unloadModel: %s' % (model)
- assert Loader.notify.debug("Unloading model: %s" % (modelNode.getFullpath()))
- ModelPool.releaseModel(modelNode)
- # font loading funcs
- def loadFont(self, modelPath,
- spaceAdvance = None, lineHeight = None,
- pointSize = None,
- pixelsPerUnit = None, scaleFactor = None,
- textureMargin = None, polyMargin = None,
- minFilter = None, magFilter = None,
- anisotropicDegree = None,
- color = None,
- outlineWidth = None,
- outlineFeather = 0.1,
- outlineColor = VBase4(0, 0, 0, 1),
- renderMode = None,
- okMissing = False):
- """
- modelPath is a string.
- This loads a special model as a TextFont object, for rendering
- text with a TextNode. A font file must be either a special
- egg file (or bam file) generated with egg-mkfont, which is
- considered a static font, or a standard font file (like a TTF
- file) that is supported by FreeType, which is considered a
- dynamic font.
- okMissing should be True to indicate the method should return
- None if the font file is not found. If it is False, the
- method will raise an exception if the font file is not found
- or cannot be loaded.
- Most font-customization parameters accepted by this method
- (except lineHeight and spaceAdvance) may only be specified for
- dynamic font files like TTF files, not for static egg files.
- lineHeight specifies the vertical distance between consecutive
- lines, in Panda units. If unspecified, it is taken from the
- font information. This parameter may be specified for static
- as well as dynamic fonts.
- spaceAdvance specifies the width of a space character (ascii
- 32), in Panda units. If unspecified, it is taken from the
- font information. This may be specified for static as well as
- dynamic fonts.
- The remaining parameters may only be specified for dynamic
- fonts.
- pixelsPerUnit controls the visual quality of the rendered text
- characters. It specifies the number of texture pixels per
- each Panda unit of character height. Increasing this number
- increases the amount of detail that can be represented in the
- characters, at the expense of texture memory.
- scaleFactor also controls the visual quality of the rendered
- text characters. It is the amount by which the characters are
- rendered bigger out of Freetype, and then downscaled to fit
- within the texture. Increasing this number may reduce some
- artifacts of very small font characters, at a small cost of
- processing time to generate the characters initially.
- textureMargin specifies the number of pixels of the texture to
- leave between adjacent characters. It may be a floating-point
- number. This helps reduce bleed-through from nearby
- characters within the texture space. Increasing this number
- reduces artifacts at the edges of the character cells
- (especially for very small text scales), at the expense of
- texture memory.
- polyMargin specifies the amount of additional buffer to create
- in the polygon that represents each character, in Panda units.
- It is similar to textureMargin, but it controls the polygon
- buffer, not the texture buffer. Increasing this number
- reduces artifacts from letters getting chopped off at the
- edges (especially for very small text scales), with some
- increasing risk of adjacent letters overlapping and obscuring
- each other.
- minFilter, magFilter, and anisotropicDegree specify the
- texture filter modes that should be applied to the textures
- that are created to hold the font characters.
- If color is not None, it should be a VBase4 specifying the
- foreground color of the font. Specifying this option breaks
- TextNode.setColor(), so you almost never want to use this
- option; the default (white) is the most appropriate for a
- font, as it allows text to have any arbitrary color assigned
- at generation time. However, if you want to use a colored
- outline (below) with a different color for the interior, for
- instance a yellow letter with a blue outline, then you need
- this option, and then *all* text generated with this font will
- have to be yellow and blue.
- If outlineWidth is nonzero, an outline will be created at
- runtime for the letters, and outlineWidth will be the desired
- width of the outline, in points (most fonts are 10 points
- high, so 0.5 is often a good choice). If you specify
- outlineWidth, you can also specify outlineFeather (0.0 .. 1.0)
- and outlineColor. You may need to increase pixelsPerUnit to
- get the best results.
- if renderMode is not None, it may be one of the following
- symbols to specify a geometry-based font:
- TextFont.RMTexture - this is the default. Font characters
- are rendered into a texture and applied to a polygon.
- This gives the best general-purpose results.
- TextFont.RMWireframe - Font characters are rendered as a
- sequence of one-pixel lines. Consider enabling line or
- multisample antialiasing for best results.
- TextFont.RMPolygon - Font characters are rendered as a
- flat polygon. This works best for very large
- characters, and generally requires polygon or
- multisample antialiasing to be enabled for best results.
- TextFont.RMExtruded - Font characters are rendered with a
- 3-D outline made of polygons, like a cookie cutter.
- This is appropriate for a 3-D scene, but may be
- completely invisible when assigned to a 2-D scene and
- viewed normally from the front, since polygons are
- infinitely thin.
- TextFont.RMSolid - A combination of RMPolygon and
- RMExtruded: a flat polygon in front with a solid
- three-dimensional edge. This is best for letters that
- will be tumbling in 3-D space.
- If the texture mode is other than RMTexture, most of the above
- parameters do not apply, though pixelsPerUnit still does apply
- and roughly controls the tightness of the curve approximation
- (and the number of vertices generated).
- """
- assert Loader.notify.debug("Loading font: %s" % (modelPath))
- if phaseChecker:
- loaderOptions = LoaderOptions()
- if(okMissing):
- loaderOptions.setFlags(loaderOptions.getFlags() & ~LoaderOptions.LFReportErrors)
- phaseChecker(modelPath, loaderOptions)
- font = FontPool.loadFont(modelPath)
- if font == None:
- if not okMissing:
- message = 'Could not load font file: %s' % (modelPath)
- raise IOError, message
- # If we couldn't load the model, at least return an
- # empty font.
- font = StaticTextFont(PandaNode("empty"))
- # The following properties may only be set for dynamic fonts.
- if hasattr(font, "setPointSize"):
- if pointSize != None:
- font.setPointSize(pointSize)
- if pixelsPerUnit != None:
- font.setPixelsPerUnit(pixelsPerUnit)
- if scaleFactor != None:
- font.setScaleFactor(scaleFactor)
- if textureMargin != None:
- font.setTextureMargin(textureMargin)
- if polyMargin != None:
- font.setPolyMargin(polyMargin)
- if minFilter != None:
- font.setMinfilter(minFilter)
- if magFilter != None:
- font.setMagfilter(magFilter)
- if anisotropicDegree != None:
- font.setAnisotropicDegree(anisotropicDegree)
- if color:
- font.setFg(color)
- # This means we want the background to match the
- # foreground color, but transparent.
- font.setBg(VBase4(color[0], color[1], color[2], 0.0))
- if outlineWidth:
- font.setOutline(outlineColor, outlineWidth, outlineFeather)
- # This means we want the background to match the
- # outline color, but transparent.
- font.setBg(VBase4(outlineColor[0], outlineColor[1], outlineColor[2], 0.0))
- if renderMode:
- font.setRenderMode(renderMode)
- if lineHeight is not None:
- # If the line height is specified, it overrides whatever
- # the font itself thinks the line height should be. This
- # and spaceAdvance should be set last, since some of the
- # other parameters can cause these to be reset to their
- # default.
- font.setLineHeight(lineHeight)
- if spaceAdvance is not None:
- font.setSpaceAdvance(spaceAdvance)
- return font
- # texture loading funcs
- def loadTexture(self, texturePath, alphaPath = None,
- readMipmaps = False, okMissing = False,
- minfilter = None, magfilter = None,
- anisotropicDegree = None, loaderOptions = None,
- multiview = None):
- """
- texturePath is a string.
- Attempt to load a texture from the given file path using
- TexturePool class.
- okMissing should be True to indicate the method should return
- None if the texture file is not found. If it is False, the
- method will raise an exception if the texture file is not
- found or cannot be loaded.
- If alphaPath is not None, it is the name of a grayscale image
- that is applied as the texture's alpha channel.
- If readMipmaps is True, then the filename string must contain
- a sequence of hash characters ('#') that are filled in with
- the mipmap index number, and n images will be loaded
- individually which define the n mipmap levels of the texture.
- The base level is mipmap level 0, and this defines the size of
- the texture and the number of expected mipmap images.
- If minfilter or magfilter is not None, they should be a symbol
- like Texture.FTLinear or Texture.FTNearest. (minfilter may be
- further one of the Mipmap filter type symbols.) These specify
- the filter mode that will automatically be applied to the
- texture when it is loaded. Note that this setting may
- override the texture's existing settings, even if it has
- already been loaded. See egg-texture-cards for a more robust
- way to apply per-texture filter types and settings.
- If anisotropicDegree is not None, it specifies the anisotropic degree
- to apply to the texture when it is loaded. Like minfilter and
- magfilter, egg-texture-cards may be a more robust way to apply
- this setting.
- If multiview is true, it indicates to load a multiview or
- stereo texture. In this case, the filename should contain a
- hash character ('#') that will be replaced with '0' for the
- left image and '1' for the right image. Larger numbers are
- also allowed if you need more than two views.
- """
- if loaderOptions == None:
- loaderOptions = LoaderOptions()
- else:
- loaderOptions = LoaderOptions(loaderOptions)
- if multiview is not None:
- flags = loaderOptions.getTextureFlags()
- if multiview:
- flags |= LoaderOptions.TFMultiview
- else:
- flags &= ~LoaderOptions.TFMultiview
- loaderOptions.setTextureFlags(flags)
- if alphaPath is None:
- assert Loader.notify.debug("Loading texture: %s" % (texturePath))
- texture = TexturePool.loadTexture(texturePath, 0, readMipmaps, loaderOptions)
- else:
- assert Loader.notify.debug("Loading texture: %s %s" % (texturePath, alphaPath))
- texture = TexturePool.loadTexture(texturePath, alphaPath, 0, 0, readMipmaps, loaderOptions)
- if not texture and not okMissing:
- message = 'Could not load texture: %s' % (texturePath)
- raise IOError, message
- if minfilter is not None:
- texture.setMinfilter(minfilter)
- if magfilter is not None:
- texture.setMagfilter(magfilter)
- if anisotropicDegree is not None:
- texture.setAnisotropicDegree(anisotropicDegree)
- return texture
- def load3DTexture(self, texturePattern, readMipmaps = False, okMissing = False,
- minfilter = None, magfilter = None, anisotropicDegree = None,
- loaderOptions = None, multiview = None, numViews = 2):
- """
- texturePattern is a string that contains a sequence of one or
- more hash characters ('#'), which will be filled in with the
- z-height number. Returns a 3-D Texture object, suitable for
- rendering volumetric textures.
- okMissing should be True to indicate the method should return
- None if the texture file is not found. If it is False, the
- method will raise an exception if the texture file is not
- found or cannot be loaded.
- If readMipmaps is True, then the filename string must contain
- two sequences of hash characters; the first group is filled in
- with the z-height number, and the second group with the mipmap
- index number.
- If multiview is true, it indicates to load a multiview or
- stereo texture. In this case, numViews should also be
- specified (the default is 2), and the sequence of texture
- images will be divided into numViews views. The total
- z-height will be (numImages / numViews). For instance, if you
- read 16 images with numViews = 2, then you have created a
- stereo multiview image, with z = 8. In this example, images
- numbered 0 - 7 will be part of the left eye view, and images
- numbered 8 - 15 will be part of the right eye view.
- """
- assert Loader.notify.debug("Loading 3-D texture: %s" % (texturePattern))
- if loaderOptions == None:
- loaderOptions = LoaderOptions()
- else:
- loaderOptions = LoaderOptions(loaderOptions)
- if multiview is not None:
- flags = loaderOptions.getTextureFlags()
- if multiview:
- flags |= LoaderOptions.TFMultiview
- else:
- flags &= ~LoaderOptions.TFMultiview
- loaderOptions.setTextureFlags(flags)
- loaderOptions.setTextureNumViews(numViews)
- texture = TexturePool.load3dTexture(texturePattern, readMipmaps, loaderOptions)
- if not texture and not okMissing:
- message = 'Could not load 3-D texture: %s' % (texturePattern)
- raise IOError, message
- if minfilter is not None:
- texture.setMinfilter(minfilter)
- if magfilter is not None:
- texture.setMagfilter(magfilter)
- if anisotropicDegree is not None:
- texture.setAnisotropicDegree(anisotropicDegree)
- return texture
- def loadCubeMap(self, texturePattern, readMipmaps = False, okMissing = False,
- minfilter = None, magfilter = None, anisotropicDegree = None,
- loaderOptions = None, multiview = None):
- """
- texturePattern is a string that contains a sequence of one or
- more hash characters ('#'), which will be filled in with the
- face index number (0 through 6). Returns a six-face cube map
- Texture object.
- okMissing should be True to indicate the method should return
- None if the texture file is not found. If it is False, the
- method will raise an exception if the texture file is not
- found or cannot be loaded.
- If readMipmaps is True, then the filename string must contain
- two sequences of hash characters; the first group is filled in
- with the face index number, and the second group with the
- mipmap index number.
- If multiview is true, it indicates to load a multiview or
- stereo cube map. For a stereo cube map, 12 images will be
- loaded--images numbered 0 - 5 will become the left eye view,
- and images 6 - 11 will become the right eye view. In general,
- the number of images found on disk must be a multiple of six,
- and each six images will define a new view.
- """
- assert Loader.notify.debug("Loading cube map: %s" % (texturePattern))
- if loaderOptions == None:
- loaderOptions = LoaderOptions()
- else:
- loaderOptions = LoaderOptions(loaderOptions)
- if multiview is not None:
- flags = loaderOptions.getTextureFlags()
- if multiview:
- flags |= LoaderOptions.TFMultiview
- else:
- flags &= ~LoaderOptions.TFMultiview
- loaderOptions.setTextureFlags(flags)
- texture = TexturePool.loadCubeMap(texturePattern, readMipmaps, loaderOptions)
- if not texture and not okMissing:
- message = 'Could not load cube map: %s' % (texturePattern)
- raise IOError, message
- if minfilter is not None:
- texture.setMinfilter(minfilter)
- if magfilter is not None:
- texture.setMagfilter(magfilter)
- if anisotropicDegree is not None:
- texture.setAnisotropicDegree(anisotropicDegree)
- return texture
- def unloadTexture(self, texture):
- """
- Removes the previously-loaded texture from the cache, so
- that when the last reference to it is gone, it will be
- released. This also means that the next time the same texture
- is loaded, it will be re-read from disk (and duplicated in
- texture memory if there are still outstanding references to
- it).
- The texture parameter may be the return value of any previous
- call to loadTexture(), load3DTexture(), or loadCubeMap().
- """
- assert Loader.notify.debug("Unloading texture: %s" % (texture))
- TexturePool.releaseTexture(texture)
- # sound loading funcs
- def loadSfx(self, *args, **kw):
- """Loads one or more sound files, specifically designated as a
- "sound effect" file (that is, uses the sfxManager to load the
- sound). There is no distinction between sound effect files
- and music files other than the particular AudioManager used to
- load the sound file, but this distinction allows the sound
- effects and/or the music files to be adjusted as a group,
- independently of the other group."""
- # showbase-created sfxManager should always be at front of list
- if(self.base.sfxManagerList):
- return self.loadSound(self.base.sfxManagerList[0], *args, **kw)
- return None
- def loadMusic(self, *args, **kw):
- """Loads one or more sound files, specifically designated as a
- "music" file (that is, uses the musicManager to load the
- sound). There is no distinction between sound effect files
- and music files other than the particular AudioManager used to
- load the sound file, but this distinction allows the sound
- effects and/or the music files to be adjusted as a group,
- independently of the other group."""
- if(self.base.musicManager):
- return self.loadSound(self.base.musicManager, *args, **kw)
- else:
- return None
- def loadSound(self, manager, soundPath, positional = False,
- callback = None, extraArgs = []):
- """Loads one or more sound files, specifying the particular
- AudioManager that should be used to load them. The soundPath
- may be either a single filename, or a list of filenames. If a
- callback is specified, the loading happens in the background,
- just as in loadModel(); otherwise, the loading happens before
- loadSound() returns."""
- if isinstance(soundPath, types.StringTypes) or \
- isinstance(soundPath, Filename):
- # We were given a single sound pathname.
- soundList = [soundPath]
- gotList = False
- elif isinstance(soundPath, MovieAudio):
- soundList = [soundPath]
- gotList = False
- else:
- # Assume we were given a list of sound pathnames.
- soundList = soundPath
- gotList = True
- if callback is None:
- # We got no callback, so it's a synchronous load.
- result = []
- for soundPath in soundList:
- # should return a valid sound obj even if musicMgr is invalid
- sound = manager.getSound(soundPath)
- result.append(sound)
- if gotList:
- return result
- else:
- return result[0]
- else:
- # We got a callback, so we want an asynchronous (threaded)
- # load. We'll return immediately, but when all of the
- # requested sounds have been loaded, we'll invoke the
- # callback (passing it the sounds on the parameter list).
- cb = Loader.Callback(len(soundList), gotList, callback, extraArgs)
- for i in range(len(soundList)):
- soundPath = soundList[i]
- request = AudioLoadRequest(manager, soundPath, positional)
- request.setDoneEvent(self.hook)
- request.setPythonObject((cb, i))
- self.loader.loadAsync(request)
- cb.requests[request] = True
- return cb
- def unloadSfx (self, sfx):
- if (sfx):
- if(self.base.sfxManagerList):
- self.base.sfxManagerList[0].uncacheSound (sfx.getName())
- ## def makeNodeNamesUnique(self, nodePath, nodeCount):
- ## if nodeCount == 0:
- ## Loader.modelCount += 1
- ## nodePath.setName(nodePath.getName() +
- ## ('_%d_%d' % (Loader.modelCount, nodeCount)))
- ## for i in range(nodePath.getNumChildren()):
- ## nodeCount += 1
- ## self.makeNodeNamesUnique(nodePath.getChild(i), nodeCount)
- def loadShader (self, shaderPath, okMissing = False):
- shader = ShaderPool.loadShader (shaderPath)
- if not shader and not okMissing:
- message = 'Could not shader file: %s' % (shaderPath)
- raise IOError, message
- return shader
- def unloadShader(self, shaderPath):
- if (shaderPath != None):
- ShaderPool.releaseShader(shaderPath)
- def asyncFlattenStrong(self, model, inPlace = True,
- callback = None, extraArgs = []):
- """ Performs a model.flattenStrong() operation in a sub-thread
- (if threading is compiled into Panda). The model may be a
- single NodePath, or it may be a list of NodePaths.
- Each model is duplicated and flattened in the sub-thread.
- If inPlace is True, then when the flatten operation completes,
- the newly flattened copies are automatically dropped into the
- scene graph, in place the original models.
- If a callback is specified, then it is called after the
- operation is finished, receiving the flattened model (or a
- list of flattened models)."""
- if isinstance(model, NodePath):
- # We were given a single model.
- modelList = [model]
- gotList = False
- else:
- # Assume we were given a list of models.
- modelList = model
- gotList = True
- if inPlace:
- extraArgs = [gotList, callback, modelList, extraArgs]
- callback = self.__asyncFlattenDone
- gotList = True
- cb = Loader.Callback(len(modelList), gotList, callback, extraArgs)
- i=0
- for model in modelList:
- request = ModelFlattenRequest(model.node())
- request.setDoneEvent(self.hook)
- request.setPythonObject((cb, i))
- i+=1
- self.loader.loadAsync(request)
- cb.requests[request] = True
- return cb
- def __asyncFlattenDone(self, models,
- gotList, callback, origModelList, extraArgs):
- """ The asynchronous flatten operation has completed; quietly
- drop in the new models. """
- self.notify.debug("asyncFlattenDone: %s" % (models,))
- assert(len(models) == len(origModelList))
- for i in range(len(models)):
- origModelList[i].getChildren().detach()
- orig = origModelList[i].node()
- flat = models[i].node()
- orig.copyAllProperties(flat)
- orig.replaceNode(flat)
- if callback:
- if gotList:
- callback(origModelList, *extraArgs)
- else:
- callback(*(origModelList + extraArgs))
- def __gotAsyncObject(self, request):
- """A model or sound file or some such thing has just been
- loaded asynchronously by the sub-thread. Add it to the list
- of loaded objects, and call the appropriate callback when it's
- time."""
- cb, i = request.getPythonObject()
- if cb.cancelled:
- return
- del cb.requests[request]
- object = None
- if hasattr(request, "getModel"):
- node = request.getModel()
- if (node != None):
- object = NodePath(node)
- elif hasattr(request, "getSound"):
- object = request.getSound()
- cb.gotObject(i, object)
- [/code]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement