BLENDER_v233REND 1@SRdoT\oSRscreen<oo<o o o\o;o^` DATA<oU|oDATA|oUo<o`DATAoUo|o`DATAoU<ooDATA<oU|ooFDATA|oUo<oFDATAoUo|oDATAoU<ooDATA<oU|oo,DATA|oUo<o,FDATAoUo|o,DATAoUoDATA<oV|o|ooDATA|oVo<o<ooDATAoVo|o|o<oDATAoV<ooo|oDATA<oV|oo<o|oDATA|oVo<o<ooDATAoVo|o<ooDATAoV<ooooDATA<oV|ooooDATA|oVo<oo<oDATAoVo|oo<oDATAoV<oo<o|oDATA<oV|oo|o|oDATA|oVo<o<o|oDATAoVo|o<ooDATAoV< oo|ooDATA< oV| oo|ooDATA| oV o< oooDATA oV| oooDATA oX$o<oooo?FDz@PףO o omtrtml|sDATAtmWsnOutputRender>DATAsnWtntmRenderRender@>DATAtnWnsnAnimRender>DATAnW4mtnFormatRender>DATA4mW\6nnLink and MaterialsEditing>DATA\6nWtw4mMeshEditing@>DATAtwWDn\6nMesh ToolsEditing>DATADnWl|stwMesh Tools 1Editing>DATAl|sWDnCameraEditing@>DATA oF o333? oDdC4-DIeCC(BDC??,yDATA oA o333? o??? ???? A??FDz@PA Aj?I7>}GCHB? A B?=CXXDATA$oX o o<o|oo|oG`Ga``4w, nDATA oX4o$o<oooo>>o?--- Ttlx||DATAtJo333? oDD*??TDn>DATAoA4ot333? o??ND?4.> >?D$?N%% ??% 4.+?̺o>x>o!)s>o???ND?4.> >??g@ B?=C>4.> DATA4oFlxo333? oDdCD1MCC(BDC??DATATlxH4o333? o+SELECT IMAGE/home/ingo/projects/windstille/files/wings/kg/../starfightertex.tga ~*DATA4oX\o oo<o|o<o>iA>o?+E++E ,6No$&iDATAoA|n333?4o=.?])Z:?10?ؼ>~{m?>B@8?p??=.?10?{b)ؼ>m?Z:?>Z?,>0^[2>" >ã:ԙ>FaJp @I#?'I??|?l,)нj?х"@~,C& Z?>iA>o?=.?])Z:?10?ؼ>~{m?>B@8?p??%SC? NRds.@ B?=CZ@@> DATAh|nLhxo 333?4os/ ][@,..DATA hxM$&i|n333?4oDATAT$&iHhx333?4o+SAVE FILEFile/home/ingo/projects/windstille/files/wings/starfighter.blend.py~NDATA\oX4oo|o|oo?y@ JL-E-+-,E TSDoo4m4mDATADoAo333?\o>Y_=f?]?{>@޾,yw?qr=RM?6"Z?>]?/yU_={>w?f?@޾qr=@b&ԫW@?ll>R>s7ff r?c?W>@>3@؉rqrI@e5A"ZA2|>J?~dS5<*=`d>}30AÆ9BXA@?y@ JL>Y_=f?]?{>@޾,yw?qr=RM?6"Z?}(?ݾS:A B?=Cj&;@=)|+ DATAoFDo333?\oDdCD1MCC(BDC??SRd\oToSRscreen.001ooDo"o"ot6o;oDATAoUoDATAoUooDATAoUooDATAoUDooDATADoUooDATAoUoDoDATAoUooDATAoUDooDATADoUooDATAoUoDoDATAoUooDATAoUoDATADoVoooDATAoVoDoooDATAoVoooDoDATAoVDooooDATADoVooDooDATAoVoDoooDATAoV ooooDATA oVD ooooDATAD oV o ooDoDATA oV oD oDoDoDATA oV!o oooDATA!oVD!o oooDATAD!oV!o!oDooDATA!oV!oD!oDooDATA!oV"o!oooDATA"oVD"o!oDooDATAD"oV"o"oooDATA"oVD"oooDATA"oX&ooooo?FDz@Pףd#o$oDATA#oF$o333?DdC˄3D(dCC(BDC??DATA$oA#o333???? ???? A??FDz@PA Aj?I7>}GCHB? A B?=CXXDATA&oX'o"oDoooodDATA'oX-o&ooDooog=Ρ>o?qqd(ol+oDATA(oG)o333?zCAzCA A@FB= A DATA)oIl+o(o333?AA Y YCA A@CC #<@d*o+oDATA,d*of*oOBBoDATA,*of+od*oME|AEoDATA,+of*oOB`A?oDATAl+oA)o333????55@??A0??5>5?g=Ρ>o$[;??cYAYJ@5>5??cYA B? #<C55@DATA-oXt6o'ooooog=S=o?w}w}5d.o44oDATA.oGd/o333?zCAzCA A@FB= A DATAd/oFd0o.o333?DdCJRCۖzDGhICC(BDC??DATAd0oEt1od/o333?zC̽̌?zC@ #< #<`jFzD OBzC̽̌?DATAt1oJT2od0o333??DATAT2oI44ot1o333?AA>l>lBA A@CC #<@,3o3oDATA,,3of3oOBq= @BoDATA,3of3o,3oME|AEoDATA,3of3oOBp=A?oDATA44oAT2o333????55@??A0??5>5?g=S=o$s>?cYA~2bA5>5??cYA B?=C55@DATAt6oX-oDoDooog=+=o?w}w}d\7ol9oDATA\7oEl8o333?zC̽̌?zC@@@ #< #<`jFzD OBzC̽̌?DATAl8oFl9o\7o333?DdC@CdDGhICC(BDC??DATAl9oAl8o333????55@??A0??5>5?g=+=o$gV>?cYAL³90A5>5??cYA B?=C55@SC;o?SC14 z\?o4 z oNdd??< d=fff?=fff?Z@@???//backbuf//ftypeDDATA4 z9\?o<zDATA\?o94 zo7BoOBBo6<zOBPlaneEouu,o????????????DOBd??)d??>)d?????DATA,oOB<z6BoOBMesh,yhzE"uѬ2?????%%???%%i!3?%i!3E"uѬ2??????Dd?? #=?>=?@???DATAhzMEEo+,yMEPlaneg]TxTxFotGoFo@4???DATAFoGoDATAPFo/????DATAtGo,ME,y+EoMEstarfighteruvzhz4Њ,$6P?&N @@ADATAhz^DATAP,/4??@v4??04???0@v?4??@v04?@v4?04??0@v?4?@v0X?X?X>?0?X?@vXNX݌X>z/݌?XpvNX.@X.@X>.@0?X.@@v?4?.@@v04??.@0@v4?.@@v4?.@0XR@L{S XR@4Sd X>R@0Sd ?XR@v{S ?4?R@Tu%1,4??R@u1Cu 4?R@Cu 4?R@%1,DRm@1o <澪a?m@2Ɇ%(<>a?m@6%(D?Rm@u1o D?^0?m@p/%b ?I?m@,-p(b I?m@p(D^0?m@/%˾eq=@j>eq=@E=j>>@]@FU˾>@FU&˾$^?@x~M&>$^?@#x~M3>k?ޫ@y>%3ɾk?ޫ@y>%u̙Q?@!tu>̙Q?@9t3>]?@^O3]?@m!^Ok> >k+@!w{BB>D9? h@ ?j:DBBD9? h@?j:Dk >k+@w{4n>@sEs,>%z!?@I Us,%z!?@@6sE9?Sz'ak?S0bakSb9ȿS'4?S=D4?S@v4??S0@v?4?SkD9?bL~:ak?b0akb9ȿb:4?bJ4?b@v4??b0@v?4?bgJd??bBMm1d?bqhΎ>?bH*i4Ύ?bf*i4?^cNw >?^c |O?*uiO>?*uAi9?⾬?nak?fakⷹf9ȿ⾬zn4?1l_4?IFfd?[ S4Ln!?61n>!?b'61d??< S4L4??IFf?4?OE1l_?X94>??X94>?X94>.@?X94>R@` X94>?X94>X94>.@X94>R@ ?_eTXLr4/?Ῥ&1Pr4/Ῥ1PTXLhȳc?<7VعU6?[PO6?/Xp@dP~K?@@P~KO?6?V&/XpعU?6?&[Ph?ȳc?L<7V?ݵ@q&r4/?ݵ@*D$r4/ݵ@:D$ݵ@R&hȳc?ݵ@/D:عU6?ݵ@\oO6?ݵ@je@;`?@;rF`O?6?ݵ@T5jeعU?6?ݵ@F1\oh?ȳc?ݵ@aD:>X@H'֘rX@&'֘r>?%@Ss>>?L@Ss>X@IoJX@FoJ>?H$E>>? $E~?D1+؝?+٩D~؝+٩DM~~ʿD+T?D!-0?D@!)0?D+Nߜ:@?>m@7:>@?>@7!)?0?D* \)c-?0?D-@?T?D,!?E 8-r?}Y 8,+'r?}Y)C?E)}?[׿k7qΈ?|Վk7}\HUqB@ο}^S_?q Y_ ?y# XQY@@fP?} _g'J{@nEf?gD<\Cg&+q?Ŀ<٤+:z?"ി>o ?L>p E`@=Do 55{H@W7\J@PJ{;P/i\@gD?J{;=634>c@<7+^R)z@ET \V<x@_=I."b%j@zl=u]a@, ڌn@,9Yn^m@1=˚Q0Gu@g=2Kl LFniC@vT =/erm@|T ѮbO@\8 %:JR@=:4[t@NX"o0h8@k`B>"Lh8@_9>@Lne >@#J6Bwh@#J66l=@s;Sӽ@vN'ӽ@ 9wYQ=@ 9qk6=D@Dh>D@^} >D@#J6vrR |=D@ 9*(ӽD@ 9wՂ(D@#J6R |D@ ӽD@Eh=@EJi)_c>@F} c>@6<1rT[=@63*dᗽ@63dc@6<1T[c@F ᗽ@Ei)_b =@/;VrI=@&ZY =@'^XZUb =@+(_\1b @+(_\1@'ZU@&Y b @/ğVrImk`B>"h8? ܞB>"^0h8Ä{1 %;ǍF:=ZP`X< 7tNX<Ω85=:<[3\8 %iJUm|T !ѮbBvT /e >l niEy"ി>EBqĿ= ?> @ @? @A@@BA CB@ED<=@ FE=> GF>?@H@AI@HG?@@KC<D@KJBC@LNS@L]\@MO[@MPR@ROM@RPQS SNOR SQL@UTDE@ VUEF WVFG@ XWGH@ YXHI@ ZYIM [ZM@\NL@\[ON ^]LJ _KDT@ _^JK@`b@` a@a`@b `@bc@cb@de@df@e d@fg@fd@gf@ihTUjiUVkjVWlkWXmlXYnmYZonZ[qp\]rq]^s_Thsr^_vuij xwkl@ yxlm zymn {zno@ }|pq@ ~}qr sht@ ~rs poo[\p[\ @@/tuuv vw wx xy yz z{{| |}}~ t ~ut@th iu@, ""  H  BL   @ @ @   @  @ @          p| {o @@    @  @@ @@ @@ @    @  @PMI PIA PAB PBJ PJL PLQ'c$@c$#@c#@g @g '@g'@@h@hi@i '@@@@@@o op p #| |{ { # wv@kw vj@&, (  B"H F   @ @ @   @  @ @          k jk@j@'@@@@@@DATApD*$Dn3>& ?VG>h"?8 >h"?: > ?Dni>, ?i>_"?TpX>Ac"?LX> ?Dn8 >h"?8 >m;-?=b"?=f"?Dn3>& ?LX> ?TpX>Ac"?VG>h"?Dn=b"?/p=Y"?aq=- ?u= ?Dnm>~:"?W> ?>D ? >|'"?DnU>S"?L> ?W> ?m>~:"?Dn&>^hz?l>n?͓>n???DnU>S"?i>5-?i>_"?=c>WZ"?Dn+s=g&>9=e>u= ?aq=- ?Dn~>>\>>>D ?W> ?Dn>z5>~>>W> ?L> ?Dn5W>i>uh>0e>i>, ?LX> ?DnLX> ?3>& ?,>dt>5W>i>Dn3>& ?: > ?jK >Sx>,>dt>Dn?z=>LX=>9=e>+s=g&>Dn:w>l>>J >\>>~>>Dn#1>*>:w>l>~>>>z5>DnW>>Oh>D>uh>0e>5W>i>Dn>>W>>5W>i>,>dt>Dn" >G>>>,>dt>jK >Sx>Dn=ַ>=#>LX=>?z=>Dnb>Ji?>s?w>r?wM>di?Dn=ӓ>*>5ч>>2>->??Dn5ч>>=ӓ>*>:w>l>#1>*>Dn3a>]P>6un>Ҹ>Oh>D>W>>Dn>4/>>¸>%=dW>??Dn>¸>>4/>>>" >G>Dn=^->=#>=ַ>??Dn2>->5ч>>6un>Ҹ>Ix>{i>DnX ?/oj? ?s?>s?b>Ji?DnIx>{i>6un>Ҹ>3a>]P>??Dn%=dW>>¸>=#>=^->DnC?1s? ?s?X ?/oj??0j?DnI0!?k? ?r??9t?o/?Pj?Dnu$?l?I0!?k?o/?Pj?B#(?Ji?Dn#?s?1'?Pu??9t? ?r?Dn#?s?u$?l?B#(?Ji?1'?Pu?Dna!?]r?ݕ!?{l?C#?[l?\#?Efr?Dnݕ!?{l?a!?]r? ?r?I0!?k?DnC#?[l?ݕ!?{l?I0!?k?u$?l?Dn\#?Efr?#?s? ?r?a!?]r?Dn\#?Efr?C#?[l?u$?l?#?s?Dnn?$k??x&l??0j?o/?Pj?Dni?r?n?$k?o/?Pj??9t?Dnd?q?C?1s??0j??x&l?Dnd?q?i?r??9t?C?1s?Dn?l?2?ml?N?Qq?_y?"q?Dn2?ml??l??x&l?n?$k?DnN?Qq?2?ml?n?$k?i?r?Dn_y?"q?d?q??x&l??l?Dn_y?"q?N?Qq?i?r?d?q?DnHoX>n?l>n? z>=`z?t_>=`z?Dn+>n?HoX>n?4P>Vz?<3>Vz?Dn0=n?+>n?#>=`z?==`z?Dn.&q=n?0=n?kF=^hz???DnO>;-?8 >m;-?8 >h"?VG>h"?DnMX>6-?O>;-?VG>h"?TpX>Ac"?Dni>5-?MX>6-?TpX>Ac"?i>_"?DnHoX>XQ?l>XQ?l>n?HoX>n?Dn+>XQ?HoX>XQ?HoX>n?+>n?Dn0=XQ?+>XQ?+>n?0=n?DnH&q=XQ?.&q=n?n-=n?n-=XQ?DnH&q=XQ?0=XQ?0=n?.&q=n?Dn͓>XQ?͓>n?l>n?l>XQ?Dn͓>XQ? >XQ? >n?͓>n?Dn$5?A?+?ӟA?+?6???Dn$5?A?3?U?=-?{U???Dnz?:A?&?/A?%?yvU???Dnz?:A? ?&?'?Q6???Dn'?Q6?&?/A?z?:A???Dn'?Q6?#?u"?6/?c #?+?6?Dn+?6?+?ӟA?&?/A?'?Q6?Dn+?6?'2?d&?$5?A???DnHoX>oGoGXQ?HoX>XQ?Dn+>oGoGXQ?+>XQ?Dn0=oGoGXQ?0=XQ?DnH&q=oGoGoGXQ? >XQ?Dn͓>oGXQ?l>XQ?l>oGoGoGXQ?͓>XQ?Dnk~>h ?i>, ?uh>0e>y?~>iT>Dnk~>h ?L> ?U>S"?=c>WZ"?Dn=c>WZ"?i>_"?i>, ?k~>h ?Dny?~>iT>>z5>L> ?k~>h ?Dny?~>iT>uh>0e>Oh>D> }>>Dn }>>#1>*>>z5>y?~>iT>Dn= ?: > ?8 >h"?=f"?Dn= ?u= ?9=e>h=t>Dn=f"?=b"?u= ?= ?Dnh=t>9=e>LX=>=¤>Dnh=t>jK >Sx>: > ?= ?Dn=¤>" >G>jK >Sx>h=t>Dn!h?7U?O^? \?.X^?Y?f?T?Dng?fR?!h?7U?f?T?g?NR?DnGf?NW?g?fR?g?NR?_ h?V?Dnl?fZ?Gf?NW?_ h?V? l?Y?Dn /m?V?l?fZ? l?Y?j?_BY?Dnh!m? V? /m?V?j?_BY?Ch?Y?Dnl???h!m? V?Ch?Y?9}e?L?DnS?MO?"T???X?xI?V?Q?DnAR?}O?S?MO?V?Q?XU?KuQ?DneT?(}U?U?S?.X^?Y?O^? \?DneT?(}U?AR?}O?XU?KuQ?U?S?DnC>CUl>>CUl>><Dn>CUl>?>CUl>?><>T<Dn?CUl>>CUl>>T<?T<Dn>m?_K?Lm?|`K? /m?V?h!m? V?Dn2=d]>I0
    /<CUl>=d]>=<><DnU>CUl>>CUl>><Dn~5>CUl>;5>`<7u>*<7u>CUl>Dn~5>CUl>U>CUl>U><;5>`<DnW^f?˼A?+Z?A?"T???l???DnNBe?0J?W^f?˼A?l???9}e?L?Dn`Y?AG?X?xI?"T???+Z?A?Dn`Y?AG?NBe?0J?9}e?L?X?xI?DnHP@?ml?:?ml?9?i?A??i?Dn:?ml?HP@?ml?3E?Co?˃8?Co?Dn9?i?:?ml?˃8?Co?3?Af?DnA??i?QA?Af?3E?Co?HP@?ml?DnA??i?9?i?3?Af?QA?Af?Dn@>d>^>)>>\>r>>DnY>T>@>d>r>>6?8>Dn ? Щ>Y>T>6?8>en?d>Dn?&> ? Щ>en?d>H1?;>DnW?Z>?&>H1?;>?ܽ>Dnl?bJ?5l?scJ?Lm?|`K?>m?_K?Dn$?Y>'>'>>>b>ɏ>Dn'>'>$?Y>J?G8>?Z>Dn>>'>'>?Z>3>>Dnb>ɏ>>>3>>M>)^>Dnȴ>>b>ɏ>M>)^>D>29>Dn>'>E>>>\>^>)>Dn>'>ȴ>>D>29>E>>Dn>mWX>>*WX>>CUl>7u>CUl>Dnx>'=>mWX>7u>CUl>7u>*<Dn>'=><>CUl>>*WX>Dng?) i?&W=l?R@= r?]RE>Dn*)?>(?^>$?1Am>(?r>Dnc?y>(?^>*)?>1*?>Dnr?f`>r?#Lq>e?_Cp>f?`>Dnr?f`>f?`>g?) r?]RE>Dni? =Yh?8<}j?]<Yj?=Dn&?U`>̖(?0c>(?r>$?1Am>DnYj?=l?R@= i?&W=i? =DnYj?=}j?]B?>*)?>(?r>DnA?/mx>A?ׁ>(?r>̖(?0c>DnCP?Aa=1O?U$=Yh?8<i? =DnP?=CP?Aa=i? = i?&W=DneN?1>P?= i?&W=g?)Dni;N?qE>eN?1>g?)f?`>DnC?-">1*?>*)?>B?>DnHM?OQ>i;N?qE>f?`>e?_Cp>DnIK?Q->K?;S>B?>A?ׁ>DnoK?,ey>IK?Q->A?ׁ>A?/mx>DnH?HO=5G?׶=1O?U$=CP?Aa=DnIH?23}=H?HO=CP?Aa=P?=DnG?ظ.>IH?23}=P?=eN?1>DnG?ظ.>eN?1>i;N?qE>DnK?>C?-">B?>K?;S>DnzF?,L>i;N?qE>HM?OQ>Dn%q?c(>Sq?V>K?;S>IK?Q->Dn*q?c>%q?c(>IK?Q->oK?,ey>Dng"?A֣=!?aK=5G?׶=H?HO=Dnf"?[=g"?A֣=H?HO=IH?23}=Dn!?k>f"?[=IH?23}=G?ظ.>Dn!?>!?k>G?ظ.>DnQhq?^>K?>K?;S>Sq?V>Dnxc!?>!?>zF?,L>Dn:=Q>===<=d]>DnGP=Q>2=d]>l2=˜<,P==DnKY6?2?:0? ?/?T>Y6?u>DneY??KY6?2?Y6?u>i7Z?>Dn֧\?w?eY??i7Z?>]?&>Dn^?%?֧\?w?]?&>D_?"l>Dn؜>Q?g(>A?>*>g>>Dn?:?؜>Q?g>>?qu>DnmU.?@?-?>/?T>:0? ?Dn$???:??qu>*$?>Dn?L>?g(>A?؜>Q?Dn? ?}>?؜>Q??:?Dnظ6??mU.?@?:0? ?$8??n?DnP?5?? ??:?$??DnXB?E,???O,?$8??n?"?,?L>?}>?Dn?Ȳ,?4+?,?}>?? ?Dn#??,?ظ6??$8??n???O,?Dn7?,??Ȳ,?? ?P?5?Dn ?I?>H?>hG???Dn ?I?>hG?X?hG???Dn ?I?X?hG?X?ZU???Dn ?I?X?ZU?>ZU???Dn ?I?>ZU?>AaT???Dn ?I?>AaT? ?cCS???Dn }>>Oh>D>6un>Ҹ>??Dn }>>6un>Ҹ>5ч>>??Dn }>>5ч>>#1>*>??Dn=¤>LX=>=#>??Dn=¤>=#>>¸>??Dn=¤>>¸>" >G>??Dnb>ɏ>ȴ>>>'>??Dnb>ɏ>>'>^>)>??Dnb>ɏ>^>)>@>d>??Dnb>ɏ>@>d>Y>T>??Dnb>ɏ>Y>T> ? Щ>??Dnb>ɏ> ? Щ>?&>??Dnb>ɏ>?&>W?Z>??Dnb>ɏ>W?Z>$?Y>??DnW> "=x>'=7u>*<??DnW> "=7u>*<><??DnW> "=><>'=??DnW> "=>'=ߐ> "=??Dn?>5]?4=?T=??Dn?>?T=!?=??Dn?>!?=f"?[=??Dn?>f"?[=!?k>??Dn?>!?k>T!?d>??Dn?>T!?d>?1>??Dn^.=͉'=,P==l2=˜<??Dn^.=͉'=l2=˜<=<??Dn^.=͉'==<==??Dn^.=͉'=== =͉'=??Dn =nX>:=Q>=d]>??Dn =nX>=d]>2=d]>??Dn =nX>2=d]>GP=Q>??Dn =nX>GP=Q>.=nX>??Dn @?k -?XB?E,?[P?f,???Dn @?k -?[P?f,?P?6-???Dn @?k -?P?6-?P?.???Dn @?k -?P?.?uP?.???Dn @?k -?uP?.?RB?.???Dn @?k -?RB?.?@?-???Dn>mWX>7u>CUl>>CUl>>*WX>Dnx>'=7u>*<7u>CUl>>mWX>Dn>'=>*WX>>CUl>><Dng?) r?]RE>l?R@= i?&W=Dn*)?>(?r>$?1Am>(?^>Dnc?y>1*?>*)?>(?^>Dnr?f`>f?`>e?_Cp>r?#Lq>Dnr?f`> r?]RE>g?)f?`>Dni? =Yj?=}j?]$?1Am>(?r>̖(?0c>DnYj?=i? = i?&W=l?R@=DnYj?=l?R@=un?qy<}j?]<DnA?ׁ>(?r>*)?>B?>DnA?/mx>̖(?0c>(?r>A?ׁ>DnCP?Aa=i? =Yh?8<1O?U$=DnP?= i?&W=i? =CP?Aa=DneN?1>g?) i?&W=P?=Dni;N?qE>f?`>g?)eN?1>DnC?-">B?>*)?>1*?>DnHM?OQ>e?_Cp>f?`>i;N?qE>DnIK?Q->A?ׁ>B?>K?;S>DnoK?,ey>A?/mx>A?ׁ>IK?Q->DnH?HO=CP?Aa=1O?U$=5G?׶=DnIH?23}=P?=CP?Aa=H?HO=DnG?ظ.>eN?1>P?=IH?23}=Dni;N?qE>eN?1>G?ظ.>DnK?>K?;S>B?>C?-">DnzF?,L>HM?OQ>i;N?qE>Dn%q?c(>IK?Q->K?;S>Sq?V>Dn*q?c>oK?,ey>IK?Q->%q?c(>Dng"?A֣=H?HO=5G?׶=!?aK=Dnf"?[=IH?23}=H?HO=g"?A֣=Dn!?k>G?ظ.>IH?23}=f"?[=Dn!?>G?ظ.>!?k>DnQhq?^>Sq?V>K?;S>K?>Dnxc!?>zF?,L>!?>DnW> "=7u>*'=??DnW> "=><7u>*<??DnW> "=>'=><??DnW> "=ߐ> "=>'=??Dn?>?T=5]?4=??Dn?>!?=?T=??Dn?>f"?[=!?=??Dn?>!?k>f"?[=??Dn?>T!?d>!?k>??Dn?>?1>T!?d>??MA@Go!^MAMaterialL?L?L??????????L????2 ????@?==L=IoDATAXIoIo??????????MA@^!GoMAcube1_auv6?????????????L????2 ?????@?=?=?TEIoTETex>@???????@@????? @??IM(DnIMstarfightertex.tga/home/ingo/projects/windstille/files/wings/starfightertex.tgarTXdsTXobj_io_modif228.py<sxsܙwsss3>BDATA(<s/home/ingo/download/obj_io_modif228.pyDATAsL s sJ DATAL s<ns s&DATA<nnL s|n5DATAn|Qn<n nDATA|QnRnnQnDATARntRn|QnDRnCDATAtRnt sRnD sCDATAt sstRn s2DATAsL^st sTsDATAL^s^ss^scDATA^st_sL^s^sJDATAt_s$`s^s_sEDATA$`sDATA|lulululuDATAlu\mu|lu,muDATA\mumulumu DATAmuLnu\munu DATALnunumunuDATAnu:DATAuu$u܃u DATAuuuTuDATAuuūuDATAuuuDuDATAuuuąu|?DATAuuuDuDATAuuuĆuDATAutuuDATAtuu̵uu7@DATAuutuTu<DATAuv=v=v.DATAL>v>v=v>v.DATA>v|?vL>v$?v.DATA|?v?v>v?vDATA?v@v|?v,@vCDATA@v Av?v@vDATA AvAv@vLAv/DATAAvBv AvAvDATABvBvAvTBv*DATABvLCvBvBv5DATALCvCvBvCv+DATACv|DvLCv$Dv+DATA|DvEvCvDv+DATAEvEv|DvTEvDATAEvDFvEvEv9DATADFvFvEvFv9DATAFvGvDFv,Gv9DATAGv$HvFvGv DATA$HvHvGvdHv"DATAHvDATAv4vvv>DATA4vvvtv>DATAvtv4vv-DATAtvvvvDATAvdvtv$vDATAdvvvvDATAvTvdvvDATATvvvvDATAvDvTvvDATADvvvv<DATAvvDv,v8DATAvww>wt=w\>w'DATA>wd?w>w>wKDATAd?w?w>w?w)DATA?w@wd?w<@w!DATA@w4Aw?w@w?DATA4AwAw@wtAwDATAAwdBw4AwAw8DATAdBwBwAwBw DATABwdCwdBw4CwDATAdCwDwBwCw1DATADwDwdCwDDwRDATADw4EwDwEwDATA4EwEwDwtEwCDATAEwFw4Ew$FwEDATAFwDGwEwFwCDATADGwGwFwGwDATAGwLHwDGw HwDATALHwHwGwHwDATAHw\IwLHwHw5DATA\IwIwHwIw)DATAIwdJw\Iw4JwDATAdJwJwIwJwDATAJwdKwdJw$KwDATAdKwKwJwKwDATAKwtLwdKw,LwDATAtLwLwKwLwDATALwMwtLw 0:DATAu gAlert = 3DATA u else:DATAu gAlert = 4DATA u FILE.flush()DATAu FILE.close()DATA uDATA|u#=========================DATA(udef ObjImport(file, Name, filename):DATA u#========================= DATAu vcount = 0DATAu vncount = 0DATAu vtcount = 0DATAu fcount = 0DATAu gcount = 0DATAu setcount = 0DATAu groupflag = 0DATAu objectflag = 0DATAu mtlflag = 0DATAu baseindex = 0DATAu basevtcount = 0DATAu basevncount = 0DATAu matindex = 0DATAuDATA u pointList = []DATAu uvList = []DATA u normalList = []DATAu faceList = []DATA u materialList = []DATAu uv = [] DATA u lines = file.readlines()DATAu linenumber = 1DATA uDATA|u for line in lines:DATA u words = line.split()DATA(u if words and words[0] == "#":DATA$u pass # ignore commentsDATA(u elif words and words[0] == "v":DATA 4u vcount = vcount + 1DATA u x = float(words[1])DATA Du y = float(words[2])DATA u z = float(words[3])DATA(Tu pointList.append([x, y, z])DATAuDATA,Tu elif words and words[0] == "vt":DATA$u vtcount = vtcount + 1DATA |v u = float(words[1])DATA v v = float(words[2])DATA$v uvList.append([u, v])DATAvDATA,v elif words and words[0] == "vn":DATA$$v vncount = vncount + 1DATA v i = float(words[1])DATA <v j = float(words[2])DATA v k = float(words[3])DATA,Lv normalList.append([i, j, k])DATAvDATA(Tv elif words and words[0] == "f":DATA v fcount = fcount + 1DATA(lv vi = [] # vertex indicesDATA(v ti = [] # texture indicesDATA(v ni = [] # normal indicesDATA  v words = words[1:]DATA v lcount = len(words)DATA,, v for index in (xrange(lcount)):DATA4 v if words[index].find( "/") == -1:DATA0d v vindex = int(words[index])DATAH v if vindex < 0: vindex = baseindex + vindex + 1 DATA( v vi.append(vindex)DATA< v else:DATA4 v vtn = words[index].split( "/")DATA(\v vindex = int(vtn[0])DATADv if vindex < 0: vindex = baseindex + vindex + 1 DATA(v vi.append(vindex) DATA,v DATA0v if len(vtn) > 1 and vtn[1]:DATA,<v tindex = int(vtn[1])DATAHv if tindex < 0: tindex = basevtcount +tindex + 1DATA(v ti.append(tindex)DATAvDATA0v if len(vtn) > 2 and vtn[2]:DATA,v nindex = int(vtn[2])DATAHv if nindex < 0: nindex = basevncount +nindex + 1DATA(dv ni.append(nindex)DATA4v faceList.append([vi, ti, ni, matindex])DATAvDATA(v elif words and words[0] == "o":DATA$v ObjectName = words[1]DATA$v objectflag = 1DATA0v #print "Name is %s" % ObjectNameDATADvDATA(v elif words and words[0] == "g":DATADv groupflag = 1DATA v index = len(words)DATA Tv if objectflag == 0:DATA v objectflag = 1DATA dv if index > 1:DATA4v ObjectName = words[1].join("_")DATA4v GroupName = words[1].join("_") DATA,v else:DATA,v ObjectName = "Default" DATA,Dv GroupName = "Default" DATA8v #print "Object name is %s" % ObjectNameDATA8| v #print "Group name is %s" % GroupNameDATA!v else:DATA !v if index > 1:DATA4$"v GroupName = join(words[1],"_") DATA"v else:DATA,D#v GroupName = "Default" DATA8#v #print "Group name is %s" % GroupNameDATA|$v DATA $v if mtlflag == 0:DATALt%v matindex = AddMeshMaterial(GroupName,materialList, matindex)DATA$,&v gcount = gcount + 1 DATA&vDATA,'v if fcount > 0: DATA$'v baseindex = vcountDATA(D(v basevncount = vncountDATA((v basevtcount = vtcountDATAd)vDATA0)v elif words and words[0] == "mtllib":DATA(l*v # try to export materialsDATA4*v directory, dummy = os.split(filename)DATA4+v filename = os.join(directory, words[1])DATA<,v try:DATA,,v file = open(filename, "r")DATAT-v except:DATA8-v print "no material file %s" % filenameDATAt.v else:DATA.v mtlflag = 1DATA,|/v file = open(filename, "r")DATA(0v line = file.readline()DATA0v while line:DATA,,1v words = line.split()DATA81v if words and words[0] == "newmtl":DATA(d2v name = words[1]DATA82v line = file.readline() # Ns ?DATA,3v words = line.split()DATA\,4v while (words[0] != "Ka" and words[0] != "Kd" and words[0] != "Ks"): DATA84v line = file.readline() # KaDATA05v words = line.split()DATA,,6v if words[0] == "Ka":DATA06v Ka = [float(words[1]),DATA0\7v float(words[2]),DATA07v float(words[3])]DATA88v line = file.readline() # KdDATA0,9v words = line.split()DATA,9v if words[0] == "Kd":DATA0\:v Kd = [float(words[1]),DATA0:v float(words[2]),DATA0;v float(words[3])]DATA8$v float(words[2]),DATA0$?v float(words[3])]DATA?vDATAD,@v matindex = AddGlobalMaterial(name, matindex) DATA@vDATA0LAv matlist = Material.Get() DATAAvDATA,TBv if len(matlist) > 0:DATA8Bv material = matlist[matindex]DATA,Cv material.R = Kd[0]DATA,$Dv material.G = Kd[1]DATA,Dv material.B = Kd[2]DATA TEv try:DATA<Ev material.specCol[0] = Ks[0]DATA<Fv material.specCol[1] = Ks[1]DATA<,Gv material.specCol[2] = Ks[2]DATA$Gv except:DATA$dHv passDATA Hv try:DATAD|Iv alpha = 1 - ((Ka[0]+Ka[1]+Ka[2])/3)DATA$,Jv except:DATA$Jv passDATA LKv try:DATA8Kv material.alpha = alphaDATA$tLv except:DATA$Mv passDATAMv else:DATA(Nv mtlflag = 0DATANvDATA,Ov line = file.readline()DATA Ov file.close()DATA 0:DATA \v #mesh.hasFaceUV() = 1DATA,\v print ("Object has uv coordinates")DATA<]v DATA ]v if len(materialList) > 0:DATA 4^v for m in materialList:DATA^v try:DATA 4_v M=Material.Get(m)DATA(_v mesh.materials.append(M) DATAL`v except:DATA`v passDATALavDATAav total = len(faceList)DATA Dbv i = 0DATAbvDATA,cv for f in faceList:DATAcv if i%1000 == 0:DATA8,dv print ("Progress = "+ str(i)+"/"+ str(total))DATAdvDATA 0:DATA dgv face.mat = matindexDATAgvDATA\hv limit = len(vi)DATA(hv setcount = setcount + len(vi)DATAliv c = 0 DATAiv DATA\jv while c < limit:DATAjv m = vi[c]-1DATA,dkv if vtcount > 0 and len(ti) > c:DATAkv n = ti[c]-1DATA,lv if vncount > 0 and len(ni) > c:DATAmv p = ni[c]-1DATAmvDATAnv if vtcount > 0:DATAnv try:DATA$ov u, v = uvList[n]DATAov except:DATA,pv pass DATApvDATAqv """ DATApqv # multiply uv coordinates by 2 and add 1. Apparently blender uses uv range of 1 to 3 (not 0 to 1). DATA0trv mesh.verts[m].uvco[0] = (u*2)+1DATA0 sv mesh.verts[m].uvco[1] = (v*2)+1DATAsv """DATAtvDATAtv if vncount > 0:DATA(uv if p > len(normalList):DATAduv print("normal len = " +str(len(normalList))+ " vector len = " +str(len(pointList)))DATA(tvv print("p = " +str(p))DATA(wv x, y, z = normalList[p] DATA(wv mesh.verts[m].no[0] = xDATA($xv mesh.verts[m].no[1] = yDATA(xv mesh.verts[m].no[2] = zDATADyv c = c+1 DATAyv DATA4zv if len(vi) < 5:DATAzv for index in vi:DATA0<{v face.v.append (mesh.verts[index-1])DATA{v DATAD|v if vtcount > 0: DATA |v for index in ti:DATA(T}v u, v = uvList[index-1]DATA(}v face.uv.append((u,v))DATAt~vDATA~v if vcount>0:DATAdv face.smooth=1DATAvDATA$\v mesh.faces.append(face) DATAvDATA0\v print "all other (general) polygons ..."DATAv for f in faceList:DATA$tv vi, ti, ni, matindex = f DATAv if len(vi) > 4:DATA,v # export the polygon as edgesDATA<v print ("Odd face, vertices = "+ str(len(vi)))DATA(Ąv for i in range(len(vi)-2):DATA$Tv face = NMesh.Face()DATA,v if len(materialList) > 0:DATA(|v face.mat = matindexDATA4 v face.v.append(mesh.verts[vi[0]-1])DATA4v face.v.append(mesh.verts[vi[i+1]-1])DATA4Lv face.v.append(mesh.verts[vi[i+2]-1])DATAvDATA \v if vtcount > 0: DATA$v if len(ti) > i+2:DATA,tv u, v = uvList[ti[0]-1]DATA, v face.uv.append((u,v))DATA0v u, v = uvList[ti[i+1]-1]DATA, 1 or exporttype > 1:DATA8 v Transform = CreateMatrix(object, Transform)DATAv multiflag = 1DATA 4v DATA4v mesh = NMesh.GetRawFromObject(object.name)DATALv ObjName = mesh.nameDATA(Թv has_uvco = mesh.hasVertexUV()DATAdvDATA4Ժv FILE.write("# Meshname:\t%s\n" % ObjName)DATAtvDATAv faces = mesh.facesDATA$lv materials = mesh.materialsDATA v Vertices = mesh.vertsDATA,v GlobalMaterials = Material.Get()DATAvDATALv if len(materials) > 1 and len(GlobalMaterials) > 0 and type < 4:DATA4Dv CreateMtlFile(Name, materials, MtlList)DATAvDATA<Tv # Total Vertices and faces; comment if not usefulDATADv FILE.write("# Total number of Faces:\t%s\n" % len(faces))DATAHv FILE.write("# Total number of Vertices:\t%s\n" % len(Vertices))DATA\vDATAv FILE.write("\n")DATATvDATA4v # print first image map for uvcoords to useDATA@dv # to be updated when we get access to other texturesDATAT v if mesh.hasFaceUV(): FILE.write("# UV Texture:\t%s\n\n" % mesh.hasFaceUV())DATAvDATAL 1 and len(GlobalMaterials) > 0 and type < 3:DATAPv UseLayers(faces, Vertices, MtlList, has_uvco, FILE, ObjName, Name)DATALv elif len(materials) > 1 and len(GlobalMaterials) > 0 and type == 3:DATALdv UseMtl(faces, Vertices, MtlList, has_uvco, FILE, ObjName, Name)DATAv else:DATA@v Standard(faces, Vertices, has_uvco, FILE, ObjName)DATA 0:DATA(dv limit = len(uvList)-200DATA0v while index > limit and found == 0:DATA,v uv_value = uvList[index-1]DATAD$v if uv[0] == uv_value[0] and uv[1] == uv_value[1]:DATA0v uvPtrs.append(index+uvcount)DATAlv found = 1DATA$v index = index - 1DATAv if found == 0:DATA$ w uvList.append(uv)DATA$w index = len(uvList)DATA,,w uvPtrs.append(index+uvcount)DATAw u, v = uvDATA4Lw FILE.write("vt %s %s\n" % (u, v))DATAw uv_flag = 1DATAtwDATA(w if has_uvco and uv_flag == 0:DATAtw for v in Vertices:DATA w u, v, z = v.uvco DATAw u = (u-1)/2DATAw v = (v-1)/2DATA0w FILE.write("vt %s %s\n" % (u, v))DATAwDATAw for v in Vertices: DATAw x, y, z = v.noDATA4w FILE.write("vn %s %s %s\n" % (x, y, z))DATA< wDATA w p = 0DATA$ w uvindex = 0DATA w total = len(faces)DATA, wDATA w for face in faces:DATA$ w p = p+1DATA w if (p%1000) == 0:DATAL, w print ("Progress = "+ str(p)+ " of "+ str(total) +" faces")DATA wDATATw FILE.write("f ")DATA,w for index in range(len(face.v)):DATA4tw v = face.v[index].index + vertexcountDATA$w if len(face.uv) > 0:DATAHw FILE.write("%s/%s/%s " % (v+1, uvPtrs[uvindex], v+1))DATA$Tw uvindex = uvindex+1DATAw elif has_uvco:DATA<lw FILE.write("%s/%s/%s " % (v+1, v+1, v+1))DATA(w else: DATA4w FILE.write("%s//%s " % (v+1, v+1))DATADw FILE.write("\n")DATAwDATA4<w vertexcount = vertexcount + len(Vertices)DATA(w uvcount = uvcount + len(uvList)DATAlwDATA@w print("Export of " +str(ObjName)+ ".obj finished.\n")DATAwDATAHw#=====================================================================DATALwdef UseLayers(faces, Vertices, MtlList, has_uvco, FILE, ObjName, Name): DATAH\w#===================================================================== DATA w global vertexcountDATAw global uvcountDATAw global multiflagDATAwDATAw uvPtrs = []DATAw uvList = []DATAwDATA8tw FILE.write("mtllib %s\n\n" % (Name + ".mtl"))DATA,w FILE.write("g %s\n\n" % (ObjName)) DATAwDATAw for v in Vertices: DATAw vert = v.co DATA $ w if multiflag == 1:DATA0 w vert = Alter(vert, Transform) DATAD!w x, y, z = vertDATA4!w FILE.write("v %s %s %s\n" % (x, y, z))DATAl"wDATA"w uv_flag = 0DATA(\#w for m in range(len(MtlList)):DATA #w for face in faces:DATA t$w if face.mat == m:DATA$$w for uv in face.uv:DATA %w found = 0DATA(&w index = len(uvList)DATA &w limit = 0DATA,,'w if len(uvList)-200 > 0:DATA0'w limit = len(uvList)-200DATA8\(w while index > limit and found == 0:DATA4(w uv_value = uvList[index-1]DATAL)w if uv[0] == uv_value[0] and uv[1] == uv_value[1]:DATA8T*w uvPtrs.append(index+uvcount)DATA$*w found = 1DATA,+w index = index - 1DATA$,w if found == 0:DATA,,w uvList.append(uv)DATA,D-w index = len(uvList)DATA4-w uvPtrs.append(index+uvcount)DATA$|.w u, v = uvDATA< /w FILE.write("vt %s %s\n" % (u, v))DATA$/w uv_flag = 1DATAD0wDATA(0w if has_uvco and uv_flag == 0:DATAD1w for v in Vertices:DATA 1w u, v, z = v.uvcoDATAT2w u = (u-1)/2DATA2w v = (v-1)/2DATA0T3w FILE.write("vt %s %s\n" % (u, v))DATA3wDATA\4w for v in Vertices: DATA4w x, y, z = v.noDATA4l5w FILE.write("vn %s %s %s\n" % (x, y, z))DATA 6wDATA|6w total = len(faces)DATA7w p = 0DATA|7w uvindex = 0DATA07w for m in range(len(MtlList)): DATA<8w FILE.write("usemtl %s\n" % (MtlList[m].name)) DATA <9w for face in faces:DATA 9w if face.mat == m:DATAL:w p = p+1DATA$:w if (p%1000) == 0:DATAP\;w print ("Progress = "+ str(p)+ " of "+ str(total) +" faces")DATAw if len(face.uv) > 0:DATAL>w FILE.write("%s/%s/%s " % (v+1, uvPtrs[uvindex], v+1))DATA,?w uvindex = uvindex+1DATA$<@w elif has_uvco:DATA@@w FILE.write("%s/%s/%s " % (v+1, v+1, v+1))DATAtAw else:DATA<Aw FILE.write("%s//%s " % (v+1, v+1))DATA$Bw FILE.write("\n")DATA4CwDATA4Cw vertexcount = vertexcount + len(Vertices) DATATDDw print("Export of " +str(ObjName)+ ".obj using material layers finished.\n")DATAEwDATADtEw#==================================================================DATAH$Fwdef UseMtl(faces, Vertices, MtlList, has_uvco, FILE, ObjName, Name): DATADFw#==================================================================DATAGw global vertexcountDATA Hw global multiflagDATAHwDATA8Hw FILE.write("mtllib %s\n\n" % (Name + ".mtl")) DATA,Iw FILE.write("o %s\n\n" % (ObjName))DATA4Jw DATAJw index = 0DATA$Kw VertexList = []DATA Kw for vertex in Vertices:DATA ,Lw VertexList.append(-1)DATALw index = index + 1DATA@ ?!@A5 " BCDEFG(H#$I%J%KLMNOPQRSTUV!WXYZ&[\]^'_(`abcdefghijklmnopqrs) tuvwx yz{|} ~*ijk+*,'_##DELMr(52o(#)+,-%hijklDE&(H.(/Ehijk[\&(/sH0  1!W2223   243   (/g f!"#$5 %&'()*+,-6.&/*-7770-123456789:6;5<8&3  = '>'?(9@A/ BC f!gDEFGH3427IJKLMNOPQ0R:::6;5<STUVWXY  Z&; [\]^_<"3  ` (A/ a b c=d>e?f@g<hCAi jWkg f!lmnopZqrBstuvw0xCyzD>C{|Z=}~0?ijk@E 126(AFFF AfG''T ''(9@3 HI J  `   / f!H     j]  KGGsL7h(&HMNNN'_O       P  sQRUOP !"#$%&'()@*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcSdrseT'fLgTh# iNjUklVm nMo jSpRiQqHW #(`NO@rstuvX+YYwxZyz{|}~'fWXFel[YYYwxZyz\YYwxZyz]YYwxZyzs[  ()^YYwxZyz[ vrs_ YYwxZyz[rs`YYwxZyzab c YYwxZyz[  dYYwxZyz[#rsNOe YYwxZyz[fYYwxZyz 5g YYwxZyhs5iQYYwxZy     jjkk !"s%#  $l%&'()*+,-./012345rsm6./789:;<=>?@ABCDEFGrnnn lHmImJmKmLmMmNmOmPmQmRmSmTmUo]V.p"WXYZ[\]^_`abcdefghijklmnopq rstuvowq x y zT{|}~rrrr sssrr2tttstZZZrrrrqTw   u 3v%JvvvLw ww2vx  tux y{| } ~y%yyy 2wv(T{$Ixyyy z{   |||}}}2~~~*|~F ' 2 (' -         rs /  s   r' !" #$%rs &''() *+% ,se &-./01' H2 3456Z78 9z:;<9=> 1'<? @AT{'f ' BC !DEFG  rHI'JKLMNO  rHIUkPQRSTU'V!Wrs"XY * Z 'V [\]^_`azb c!W!d e(>fghijk5lmnopqrstuvYYwxZy[z9NOs w''( f!x' yU z {|DDDD } ~z f     f ZI (  ZH YYwxZyz[HZsJJJ( ( Z1'Z'Z7'Z'Z'JH2'''rsk   Z(H23ENDB