asylum-0.3.2/data/Voices/Raver0000644000175000017500000001005010644556626014653 0ustar hughhughSta1Raver$ ,nF<..T/=COcPB4.Fj'7=K]u\F<.<\/=GOgJB..Nn/7=Ke}TF<N\fltz~vpjbXJ8;MYekqwysme]OE-*BP\fjpv|ztnjbXJ:-EQ_gmsy}wqke[QC+(BLXdjprx~~zvplfbXLB2 -AIS]egkoquwy}}{ywusqokigec_YUQMIC=3-% $(,046:<@BBBDDDDBBB@@>:86420,(&$"asylum-0.3.2/data/Voices/Stunned0000644000175000017500000002005410644556626015221 0ustar hughhughSta1Stunned @,Ƹϸhu=Mp@դڃɽ/R¾XˢӤګ>ĴcpuTeнʺ%ջėҷA٦mĨ̼ެЌ㫥ɽpʯɒ-ƅl゚&㥮ĠH͆lƮEj˹e1Ⱦ˓ª̚ݥԾxٺU[Ӵ9Eҧ²偺s"ڂل}SЄK㫇gᅢиUsüȊƒ䶬ɵ¤ם#ڒoۑNöӰ~檬~ЕKϬήncэȳӒ.ݲĚ먺婺HУydНgicBqиm謞̐j朜ۤΐ ™ͳK⦀9rĄ[ſṮnˑ6˯ܦ筵ӫh޺́ƤzbƜŪ솥cbəަEʍɰIݫ҂p8}éȨߊnlƊǽʫ͢ȧ嫨ҳՇ/xδYҹߣ~Ŷ޴闬̮Ʉ}Ū ۫đ۸ݥ"ݣάeߵʥkآs⬿Ŝ·Ͳ悧˦cǻe؊ѣfҔ߳༉π#ȭ݁p趭۳c֍iĿ亩ەں뗮⮛{џ⦏uٳFk+ΕҦ%Ȇ趟ŐH(փkl廦ΗØҤ筮Ҋ~鳞GTγ穾nvҠE3Ë̔ӯ忚⨫pԣܼ鯮ڞҲŴ5գԯ߳γƣՓҪ룼Î҄߹ಥɦ涯ۡ°ݱ|ðIߧbŜ۷кkյ֊ɤɞޠ׆אд_֤Օٌ̌ĩӓؑѭ֨o̩Ӈȵ͘ڈtܒӱȗٿцWב繦§[̯ۓԃ᯶ޢxw᥶ʠ趵ɴƧٕKŘഭöܴٯĉكⴳǶ`㷠༯ݿ)ֲtΪ׉ܢɤhð̃ݩҴ]֢1ئ㱸ەިїC㱶ć߻ܪսԌ;ܨͤ^ٷwݻțۑ䪿8澟ˑܤ&ژ:OðHуƳBj㹰¡׉ܞՑs.׉ั͊چ߯ڲDz7ۿ©kKݝlkޢdԆەfI}YǨ9ǜ⸳zxCҕ͚܎ۋրä·Ůܒgݩ߇î؂ͤĩk»Ŵڞ|ґ㿮\Z΋܄ܴòؔφЙܐzīôڌi;٧ߡhɘڈUkψ޸ú㱼wi ہƑjܶ2ʏ߻ΕǨYt̍LӅޢݱޮɢƙŢ̋l܄،Ƨ㿮Y˂ّ֖ݩ¥۵ĥLEݗ֊㵴ܴäĝǚ܌eުӉ伳è޾ǔG0lⴷᷲ޲͎ʁŖQeޢٗؖ㯾ڠ⸵㽲ܰߧܜۋF$ʕǬ侹㷾ޢSʏɪµߟDюʣݧވώ͢8ʥǬܐz߉ıЋ9Ÿނɮ͢ѐ~h\dnӄՆϢޒˬވüjcԇ̥ȯe¿HՈќ˪tǶkҋ̣ȯʭqķ5½*ķĵ߃ȫݑΙwz˪d⾻ߍЏNɨ"į!Ǭ2ƭh͜⺿ݍЅŰEʡޒVĭvцijPϐD͘⼹͜⺽ߟˠ⸽ߙCˤݍoǬu΋ôCʡ܈zı$ˤہ΍忺ޔlıCǬ$ƫ+Ǯh·ߓ΍b˨t侽uʧ҅>Ųތ͢ӌh>便C½Y¹e»C$b~ϞˮhkΥ߅z˰̧eϤlΣoϨLʯLǸօѤ>ƹ׆̭bΧ>Ч$Ϋbʳ׈tĿӢͲևuΩlĿѤYǼҡ>ȷՎhѤѤ$ĽՒΧOˮ+ȱ$ͪVЙĽbϤނżYЛȱYlј˪ނŶ>e҇Й̥ʫ߇Ƴk»+hӈϠˮzź{ΟȱelϢǶґȱOӌɲП½t˰ΧoӘґՌԑӘzΧCɴoѠLƹ׈ʱzʳׂ~ȹՔLϬuЧhѪu{ʳՔί׎ʵՠeuϰԙbtʷӤ؅ʹѨ֑Vh˸ЫהoOͲҥٌOo̵Ӥ؁CͲ֍YΩh̫bУCɶցӚzΧYͪ>̫Cͪ>̫Cͪ>̫Cͪ>̫Cͪ>̫Cͪ>̫Cͪ>̫+˰CȵbǺ{ՎСoͬ+ƹ~Сe˲kӞbȷ׆̭bΩLΩV̭lȷՒVϪuЧlϪ؁oȷӞOʳ՘Cʵ՞e{ƿϬ֍ɼЩو$ȻѦ؁OͲԛb~˲ԗƿѤOɶԓeСCҗu˲kĽՌԍ¿tˮb{̥ȱo½Vltz~tb>便C¹oƳ߅ọ̈̄Η҅eübDz܂ɬގͦϞєӈ~lhhhtՂӎњͤˮ~Ŷ>kБ̧ߋƷCՂϤކŸ+Гȵ+Ӓɲ$ЙĹbͨlҍƷLͨlғĽtˮ$Σ߁Ոɴ+Σ߇¿tͨzkΡƵOtєͦɰzDztǴtǰކɬޔϚrkȫҁ彾z͠Yȧ<ˤc̟~цµ˞⸽ߕCˢ⸽ߛ$͐³ڈ<ʕðݕ<|ƣ㻶ިەTrȗê഻ߩ؎iMˊƣ㿰ްݥ،iMˈģ΅ްۥ֌agɐߵڦّ\hƗ߿ܮٟx8ƋܰםnZĕݹئՋLjܼۭԌ'Ɖۻ֦ӅIÚخՕŐز՛4ŎزՕØ֬хkٹԞ9—իrń֮щo׵А^ֶѕW׷АbԴύqձ΀ÂҨiԾѣշΎnҬuԾѣӷ̌rЪkҺϛCѱ~ѿΤCд͓aϫtϽ̢Oδ˙ͱȌL̪ɋGͯƌʮɕB˵Ȣ{ʺKɭƖsȺ;ɯƢŋdɹBȮuǫƢŗˆ}ƼbǹCƶǵFưaůhĬoŭvĨ{ūxĨ{ūx¨wërªqëhªaíT®Eï$°óE²X÷o¸zpSPqpQ\yuZWnzgB*_rp_6(Yl{|o`I :Yhu~sh]H-6MXejsxxsnid_VQJC83,% #&#(/4|7{, 5?/2:, 3;-(0$)1'&.$%+#"(#)!&#!        asylum-0.3.2/data/Voices/SmallZap0000644000175000017500000000775410644556626015340 0ustar hughhughSta1Gentle_Zap @,ǹDƺ(ŷ&ĸB{õ´Ns-|LkŻ}~¶xŻOl´vy})v¸RUUdd?ŽKdº|6eŽeFz6]ùQXºf'qcDxľd%oý}OLzºvDO}ýelzJGwûa2p¼laûm7\¼xR7qýyMBr¼~bc]dh.KsmCFpz^[yýqI>jrN_{ÿsO,bz¼v`Mmya/Jj¾lHSqoWNj¾xfFUmoY+&%;KWagmsw{yuqkg_UI9)&pt6Ww{m[=062)Kcoy_jĶv[iQCAG[iu}yqkg_]YUM= Bf|lB9Ygmigc]ck{ý5|L=eu}}wogYE)*HXfnv||zp^"[ûyL¼tf\X\dhjdV2Cm{eG2FPTVT`djpv|~~~xpfXJ@>JbtlYŽ3nxndR@-/# `vr\"GkSV|PIwc&pl( ;OagmqsuuuuuuuwwwwwsoiaK#2Tht~~zxvvxz|~|zthRQqyW&bxzl^F$9CEC9'(BP\fltz~rb>9gqM,`r~|vpljlntzznZ4/[my}umgaWQMKKMMOQQOMMKIKMOSY]__WM/$Rld!okM6LX\^ZVPLJHHJJLNPPPNLJJJNT^fnv~znZ09_qwqmkmqw}{iG6hpN'_oyske[M?%"4@B>.-Oesyc^|rRSku{}{{y{}}qcG BXfnrvxvvvttrrrrrrplhdXJ0+?GIE5(FZflnlhZ85e}g bvjZD+GWekouwwwuoicUC)$.*AYiusc90\n||vnjffhlrx~rb>5eywgO!8VhpxzpbJ9UciigaO-,VlzpV [wueK#,JZdhlprvz~xrj`N6#9EKOQUW[_eimqw{}{wqi]K'"DR\b`XL69QagkkiaKBbtr\,?aswk]E >Xhpx|~~ztndR: +CKMIA#$F\jrz~vnbN&/Ockosusqmiea][]cekosw{{ywmeYC 8TfpzzrjbP4E]ku{oaCBXdjljdXBC]kwymW)>br|rj`N: -GYemu}yogYI3$((($" $,:FTbhrx~|tj\D9Qagiie[K-BTbfhf`P8KcsugS1&Ndp||lV$CcswiYC(@HJF8%EWemswywuog[G'>LX`bddddbbbbdfjlnrrtrpnhbVH. 5K[ekquy}uk[;$TjxtdHC[gmomg_K',LbjpvvvrjbP0I_ks{woeU9HbnzzpfXH2  )AQaksy{sk]G!(FR\`^ZRH4%9GMOMG92&!#'-3;CGMQSWWWUSOIA1"0ƠiDɛ;˳1jlɯabƒ֨͡fǧiR|fӵ}IzҲEuئӧkӽrɧcfؼ(\Ԋեx˧Mjū{]RĘmָGӷg;ϿeNt궿ãmƠqxã_Z|ǥcVΰ=zo]ϵBt\şw;ʚ#ֶɁѻBxիMҾH}Ԩӫͫ[dǩoAr̺x̪ǝleũy&h΁׽{_FʶxmδiѿdeHr涻׹o?rʲd^δg˩P|ɵ dhյeʶjrɥn ˻)d˥yEvȰ*eȐő˿jĽǗkȸZUO˩vɵH~ƿݵO~ȼbcȮ5˽rz}ë\zڞϳkI^ƸsmĚhnų?Vx侣˩_Ķ{ƬoɿrǹWNtւͫ[,¤+qƮiɹuykBlʇճa¼kDĺZǹy|õ)`ȓɥuInefĪrï,ngÓa0a~~åhG^Ǔ[R,qcEg.^ΊѹqQ8rw-6j}Vxtɫa1jc?an)9Jt{ϳc5fh}}ruzxsIJrt˫O<@GDW^gշUBsuC~X4jVϩq9|ugxX[Pք˝a6SwtsvtmUBhִţwQ,mZ&izl)Pz$ɧ}U(nuodxe1Nzָѷa%tzsqkx^]:jָͯS(8yvdIHxΈӽ_|#}RzQi8lΈϳQ@pwGBr{ ^YQLmG/\t_NzΨɫU|\w_dCz:IFnаɫQ {efnueriO%DtzJGrp3sc&,UiS HpfMsiE&8( asylum-0.3.2/data/Voices/NasalStr0000644000175000017500000001005010644556626015323 0ustar hughhughSta1Nasal_String ,l 0 ,ǿeVr~~zt^$aw{e'Rx`ǽoCHlx|ztd> Wqyg+Nzƈû{Y^pvxtfDOky}}ug'Txʜi9JjrvtfF!Eeuysc%VxΨs÷wW`lplfL+[owsm]!\zаŻg%LfjlfT5SkqoiU `ҸXǿsM&ZfhfV,'KcmkeSb־û}}a!HbffX4 E]imeM ^~ztx¾ĔýwqwkC>Zd`VB3YgicO Xztllx¼ȢoùuoqqK*R`b\F=SegcQNvvlht¼̬!ſogiwwWL\dbL)OaigU-JrrfbhxдPſmeeqc)D^`XP(C[ggW/Bnvd`drľԼzɿſm]ek}i7PblnnrgMRU﨤gegkֱ¾¾̲v^$Kvդeege6E=/﫥oO&b|f@5cu⭭卉Ǯ{c'Nſ㧟0f|j~ꞢȆvl󩯵kPHö澺ܒo0Ei˽ýK2bxſ󷵳̧ʋrdLApfZH.C͋ڶ~pÈxýÿӹ椤/! &06>BDFHJJJrЦ奧z¾|pdP0G]ks孯Ǘ⸸skcUÿÿO;lrzֺžd%6HV;:JT`flrxř{smeДLJܠԎlllffdd|xvrmmoqsVPJF>4dbZTNHHB8," !+7әi}MS¬ľlhhd`¾njfb^VPHªpljfbϩMSW[_cy{~zvrpm͛uwsuussuuwwyyy{{}}}{{}}|zvtrnleggiikkkmmotrnljhfdƄ~|ªĘmmkkkiiiii:640.*(&$  JHFDDB@<:8426кƎnlljjh ƬIIAA|zzxvQQQQQQO~|zzxvddbbb`^^\Z||²ºŽj~~||zzxvvvttrrpZXXVVJuuUUSSQQOOOMM;99ͳZXXVT}pIGGGGEhhhfffdddbbb``^ppnnnll;WUȪ}}U}{{y;99977sqqqoomWWUUBBBB@@>><<::JJiiç{{yywwuu+)GEEEECCCCAA??=zzxeevvv}}{|zzx~~||zxxvvttjhhxvvttrrrppnnlljjjhhhffussqqod}}{}{{yywuus3b``^^\\ZXXVVkkikkiiigg'%%%%%######!trrpppnnlljjjh;;9333111/}}{yyww}}{{}}{{yywuub``JJHHH`ddnnliggee``^^\ZZXXOMMKKKIIIGGGGEEEe~rpppnnllljjhhff%####5YWWU}iigggsqqqommmkkkiigggeeeecccaa__ywwuussqY77553331WSSSQQOOOYYWWUUUSoo!!USSSQQOKKKIIIttrrUU`^\\ZZXXVVTTTR}{{yywwuuss6644k~||zzx .,,,,***(((ywuussqqoussqsqqooommkkiNNLLLJjjjhhhUUSSQQQOqo%%%Vtrrp###mkkiiiggXXVV~~||zzxxvvttrrrppnne533111,RPPNNhfdddbljjhhhfffgeeecccca__]CC<::l~x\hhfffdddb FDUUSSQQZXX~~||zx|zzhffSSQQQOOuussqqoouussqqooommkie1111/ljjhDDBBB@@@>><~^\\..GGGEECCCCAAA?jrrdb``^^\\ZZXXVVTTRPPPNNLh'yww}}{yKKIIK{ywuussoommmkk++++uusssqqomkkkggecoGGEEEYWW}{{yyyywmmkkiii####hfffddLJ $$$$$"hvttPNNNLLJJ'''''%%###FD55533311NNBBB@ljjhhhffd^HHHFFFDDDDBB@>><<<::88666 SQQOcccca__]][[YYWWWUUSSQQQMIIIGGGEEEECIIEEECEECCCCAA??==;;--+++a__]YWWWUUSSQQQOOOKIIIIGGGggeeeccccOOMMcca__QQQOOMMMKK??==,DBBBB@@>XV664400$$"""""" JFFDDDDBBB@HHBB@@>GGE EEE[[c][[M][[IIGGGEEEQOOMMMOGGEEEEC??=SMKKKIIIG//----++ ---+++)%%%)))'';99977555333111////)''''%%%%%%%%####!!!!755533311 && $$ """"  &&"""" *((((&&&&&$$$$$"""""      !!%%###! asylum-0.3.2/data/Voices/Rocket0000644000175000017500000001005410644556626015027 0ustar hughhughSta1Rocket @,)&BJJFDF@BJPPJD6&=?3  '% .46$%  #9O]YSQMOG).BBHZffflhXNRTVTD=SOANbd\F ISM+8FNF$1WaYMIWcissomok_YE9BfjZTB UqyuqgSI7-IGG]qw{ui]_mqg=TjfjjbhprrbK[UeYSEUek{o_%8FJH/E3?$6JFJ4)sýs}÷{P¼dysiû ȸNký]éegdƾʚkڨkzҴHǝƸbeթylűnĴªzz~tZpƶ:r`|oФ4ȰfǹͥΪZ߽xƆţg:y˱rUɥw~iIN}ɑh PͿONt6;MHI^Ƭb͵qϝȴr¸Ɩ_{dzzTŵyĺļ®nBe[ĶJŷoĨ-OHxLa˽kɱyOTĶg÷ͳ>ȺŵuPhG]<ʺnª(ûiyåDʼdoɱoǭyb¬~1K`rCɫy9pzxNbƸȺyƼĘFqUn}Z¶ٽoXĸJ{4j0Źj¾~thZF5Ueo{{uqoqsy}si_K3(@NXdjrx¾xpdP,)Mcms{{uokgeca_YUOG;' (N^fltz~xrlhbZPH>. );IS]ekqw}}{ywwuuuuuuuuuuuuuuuuuwwwwwwwuuuussssssqqqqqqqqqqqqqqqqqssssuuwwyy{{}}}}}}}{{{{{{yyyywwwwuuussqqqommkkkiggeecca_][YWUSQOMKIIGEC?951+% $,4<::864220..,,**(&&$$""  asylum-0.3.2/data/Voices/Organ0000644000175000017500000002005410644556626014647 0ustar hughhughSta1Organ  ,s{gUMUagoiY30R^\L,#CKG7 ?as}gpZKs{qITd0'?EKYm{}s:$]hpfhfZ qRtwɿ]rF*Jhvzj2wsdnѿ}l`mqdTiͻeҪʲHSiùDZ+҆͡¾İlճV¢͕ƶpzjļޞ˷ýj@qL~v!ʼnزmå~о|J'i˻w֞ӫf¾®Kٽ3¦ӧȼ3õ^ƾⰭϽûd'oddɝں=ūXĬ|\3Ñܬ׵!®dq¬eױjEŻDõ`rcolq˩Hů'ȶXqͿǣณۿoNj®/ݻ'²Sç°sǻ`fyqp1ϳhpǵgzOϿɭvqŋ̾a͝°Ls¶Sů[ĴTɿbLyr\ѽ9ȄǷĸBϿ͵.0ɟl̺Zѩ~²jɏºOɵsƶ،ý}b(pyʒݶpϿk΀ͩʸĶձ\zͣ¼7ͽȺަwf-nuǑΠŽuŋҔϱgʴž׹-ѭ^¾ÕʾⴧÿuhA÷f/ˣШſ|¶Mëɟ֦ӹtʲƬ3mյC¾ĺ>ǣ~ªqrOǽNfͭҮiÿfNë˫ڲDȰv̸nʼnٿw¬b˫fĮW÷orOç´ϵ\Դ?:ƴ~ūϳf޼ţK~ȰbxəŏIJxϳ$ư~lùkxQǭKļѽIָD3̾ǫѻ9Eǫw`ȮDfȦͥnɟbȸս]ȶ|֒ŻmzI˵k¦Yw־h_Ʀwɭyd˱ ~ʬ|'BβOѭ>u˩)ŃʺܨǽkGϽƮFŏzk̲+˯Ǒʆͷe`ʬrS/ԾjӵOkϱkĢɓ̾඙ɿo)ÓȸxǟĈwмjϳɣΘͽxʬhkexƎսueӹhȪmͥ¨uëqǣɩĒƌѵͫФgV̬`wy^̤Ë~]տ"β9ӭ|Ĭ(ŭyL˫lĤu˯bƘ}̤ջϳ\Ԭñ)ή\ҲgřdYť_vҼT׹NƲ~DZdѵ6Ȭ+ͳ%Ơk|ҰٿѻCִkŵihЮ\]6ǣ&Wǫ}N~OʶҖɵtսY̶`͹iƤUrؾYáwֺǹ"Ҳ^yƄ˫W~|[ɱ=rȒ̺֨͹zŁͽƤ-lbǥō`ǽ]Զb~̠˱ujni˷qJ̤͕ξڲϿtɓĘ˿Ʀf̎ɩǝ|ǿ}tֺj`Үw͵D`oͻIpҮӧª޼;ÝlϥȨkĨ2dԤͯɧČFھrؼ͹->yϿsJظsױĮfǥZqӯ̰"ápĨFbشѳ˭dĔS€i|ͻc9ñIݽRƲƈɩ4SٹVκrN¦Rdչ˳Ɯ}ĈʘͿu_ŵudnQȶʚͯ;MŽR{dͷcƢk~ȎЪqŹΌ˅ʺΦkѷc®^ɁƠyQƼRyhЂţͻ}ƤSTʘvֶCǽiҢϙ̾Юӽy´z͙Ȫ?iĸDul֢ɩͿĦ!ÿſM΢Jpǿrذթ®ҶfÉĸӧ̲\q4orްͭĦ2ó}ҨKȒǿǿ6ܼ۵vIJԺǗľٳκwmtѵßt¦LǻԮqõyΨyŽa]߿(ƶcˣݽL–u{z?ivqջã\Rã~شYûҲûZiƸœ ϫj¦yYĤ=}p]gxZç&ȼPŭFܼÿzÿ|ЈˍȼĤdoӳ:Ĭ_ˇȬ\wjnmg|֐ũéCĸNɵaXåxƔ}ùL֠ѣȾĨz;y׻OưѝʲsmfRk~ަɯëc´DͿrŭPʨ-Sڬ׭¶ƬRIouƶ`ի̺Aahm¾䶧͵ím&śʆųGвjſŵຓ۷N¸ƮnL-qNjƺ|۵pTkwIn~Ou|čѻíy%wiwɩ̖ǹuԾ_ſǽoYºưvd˝ƾ¨zASvlq}z¸Që~O[/O˱\ТǽĢBsýåvǃļưjGϧqĮLR~Xrºhűrrg}3N4yϻIԪʮmyûǯ&x͙ľİTӱd ͏ƴtbn:nĺږɵÿjbwu2rfOÁְqãθh_s÷ɷgԖѧx¾İg׹¦ѣȺxbƾ⬳ͻýd.qVBǗڸKũh¨j0SͿڨճBĮBiªkׯzȾ9ùL亥û`Mqfr˧(ůưp6yŝ޴ٻ]¾Ņ5ճ<ĺE¸{ɹwNf_g`zQh̲ZIƸxZMǹjȦgçkvľtWɿwr$ǷA|~|d-y+xrdrȼŽsM.^f\0GkwwkE@dj`g{Bcq;dvh^RDOq{i][eowyq[fd e}s]5"BJJJLPX`dffbXJ<*""(..*#1771'asylum-0.3.2/data/Voices/Hiss0000644000175000017500000002005410644556626014507 0ustar hughhughSta1Hiss @,w܌ϘȢ؋mڥ@ӈɠԥۤe₀ˈ壊rKvμ֒CѰڳ\ÑʸQdðkſЮ̽ôkѶۧ΋͍̪eŎÔNeңԱs΃Ĵș7ݡώu`ǿѱͱʾhԉ߇ȶ[ըmЕއWٰvIѤ㈭̞Ҷ{Ȭʪχǟr‡cyΝƩ|vN݀٤ߪEģɶЫwOԤ㸭FgɪoڥކۛnmΦΉ㢳߄rάt֜HǀveͬRhȯœBŸy߃Ǿoਵѿޓ娮ĸjޒ֓s$[T˦ݵєͭй~Rӽֳc㐌ŹǓ1 ɭ܉_̱ƚxx÷EΣQⰧҮr@ƙĦh ĥֱڿ۴\㥠޳幼ȠűmԃϙЮhcSg̵Uص]اϿS݂ע5²ǹٸsQǡ^Ĵd̷۸忓^޾G]OҺoøшڳtӸPɬҝmԠìJo)><ƽԶ޾uѣ0vnѵmԓٺDukoҥʼ ÿaPľ5\ۘāʞHoŶ6䰙?mu宮VӲήvzߺx!F~ӣ֍χΙ^bبjmXۣ~ҺǗÔסڸkݭڞەܥĺзOTʬ`ҧӍ6oƑ3Ԟ¢¾ͤǰ-p}sͪNòΨȏ٫8ŧkr~ᶖ޾٠םՄkdgմɬŏިޞӘɥՑNյ5Ǵ۽͵F÷߆Ǔ_۷GٸVpԦ~ڴεUҾ{Egԣiv˭qnfɹTޖʮ3zȹւƪyw׊]ȸߤ֣˸ГſpHּмԱ|˧ڄws?ִhߘhྺՅ୛ݖ{чaWŚũKjߥpީY㙩Ƙiڤ׳h8〩۽þ!ħТϫ{km\δÓٻx؎ݔщ̦ܪͨڶI¼פfԐjazƁءǯkt܄᰾ıiVɮnHSS)Ϝ(עՐzoSҶԇ_yםΈɆjaָܙ:üSίQeyѳ#֨D?¦CӤшվ¸>٠ë}Fʆܐ+[-ٳƲģTƼଵW*jߕ*Bԓ⎓头tq᫔ГӍNʵi؈naӯulx|ȵţIƳ12ߡť|Դm۳çեϮs⮘⥓iʥکɱƵ²½ݗ˾ƥȊGu{ܨGӐOjR|вޏiҭĂ֬rƯɗѷs8ț⬤׷᭪پґʳkף–uԴľPٺǫҭfوǣêܽ|ةXCore壷wVׯ޵VţgļͫÀР߄0В۔LԲƨUߚͥ׆ΩߧǼǨ̷ިtȘzܴɣ$ɛbGݘݕד௮͊JӒ˺xi7ϥܨƂݮҶ͓ׄߣrs(9˦)נѺ{׷vıB־״ȳ֚ۛ޵7cdr܌ٱǰ<ץ>ݸۧTjtkzǟڸӜӒѲ“ͫϸΏπߕ{˭#ɆɔWnʬǦը̵Ş>ḞrYѫȤ˷Ңg=լe޺ȧDtgRҬިػᩭ;̥Bʾ޳ջφ߼L&Мx„ƠmĺHjڔ҈`᥿kآ̍m῾ԾͧЊú2Ǵ^Ԯs+۩իH׽ݯֳyLtoֶɏmӣՎlQ0壱SϺӰۗ‡݌D߷NOށ˼CöXņgTШɶ؇OՔɈIȵ]ܵ0m/۔)Xkʭՙݦ߃ғ(۬\TلٵԐېPvEÜἰⰂ㼃λ彬̴ּQK0ʲ̃ѿMƱļնXҴڼ¶ɬkɮַØѣí#ɭɭ׫5#߲ͻˣٺځԦJ̸˖ü-uܨ؅CՈuwٽĜĆϽѯf⿸JʨܴˇظƳͿи܀lΦӪ͗ӎũgΑѣߴi˘ףJm״ۻʾ̯tѺ`۬ܠټO؝{ƒ֧t?ߩj߂وٷgŬѠׂܬ֌LڲںޟXh啪ˇ|i|cŏǙȰeTƽ٨zMȧwǤùέܻNڨ䎫JUҌ㼺ӄ8ƿއr[jʬΐƕ٧ի~vǤײߢ԰جƒ㭔̵Fwœ)´mf5ЬsIɂZܳƀ܏pܗҸºǨܙȍݼڷЏͺ⥤OަVv&Ҽ4wӱ-ylٯ\ԵȓϒDľЌَÔ^̯{_fЙ԰gʣԨêףʟ-ś*jrëzVͦ⹨Ćͣǔɦ̤ݲ¸ѳʵ᭘˿ԂpݿܢrƷ彈˙WÅyέw޳fβٿؽiPٕ3ٳJSEԧόՏΔQeqHer䷥ѽۤRuh{ԝ҂֐ҥi|EÌvS⿺Nׄu]{pƩӫαͭӳjљӶqPŰ˧̩нӽ©չ㣆А=ޒfׂǛl໭{Ƥջʄرugޗج¬i~ÜͿܤ唲ؾҪ`ۍȦ׿xˇًۤӰt{⠧?ݫߵٍ ܬT㉈q≣8Ϊeݰ֙[ΈФkFKeᢲ嬀ފߪڢֿlDZޫȳȲǪЬƓ߻bʾKɳͥ㈋#ͳʱrc‡vقړ߭l֞ۻɳ߱ЩޚʩԈmތ₃Ŗհ˪b~ΥƿԭüӮOe·3Юו!ӎXˮԂ¤7ݹ!ѸҽzdటɅ۴kǕ߭gɤоb̼ѱ|RⷢJPX^bbdfdffhhlnpvz~lX"Ccu}ysomigeeccca_][WQIC3#"4BHNTXZ\^^`bbbdhjlpvzzlX,1[m{}wsomgeca_]][[YWUQKGA3#.:BHNRTXZZZ\^`bdfhlptvz~zpdR0Kamw}yuokieca][YWUUUSQOMIC=1# &2DFHJLLNPPPRVX\bdfhlnpprttvvvxxxxxxxxxxxzzzzzzxxvtpnhd\PB,)CO[eimquwyy{{{{yyyywwwwwwwwwwuusqommiieca]YWSQOMKIGGEC?=93+'  $(.48<@BDFHJLPRTXZ^bbdfhjllnnpprrrrrrrrrrrrrrrrppnljhd`XPH:(3CMU]cgikmoqqssssssssqqqqqooommkkiggeca][WUQOMKGGECA?;73/+%#   $*.248<@BDFHJLPRTVX\^`bddfhhjhjlllnnnppnnnnlljhhfd`\VRJF<0$ '17CGKQUY]acegiikkmmmmmmmmmkkkiggeeca_]YWUQKIGEC?;51/+'%# "$(,026<>BDHJLNRTVXZ\^\^`bbbdddddddddddbb`^\ZVTPLHD@80&#+39AEIKOQSWY[]__]_________]][[YWWUSQOMKKIGECC?=9731-)'%!   "&(,.0468<>BBDFFHJJLNNPPRRRTTTNNNLLLJJHHFFDB@<842.(&  #%)+/1379;?ACCEEGGGIIIIKKKKKKKKKIIIIGGEECCA?=;953/-)'# "$(*,.24688:<>8:::<<<<<<<<<<<:::88664220.(&&$"   !####%%%%%%%%%%% asylum-0.3.2/data/Voices/Cymbal0000644000175000017500000001111410644556626015005 0ustar hughhughSta1cymbal  ,Ķm׫X˼YȏXYHHϵ‹0ЗՆˎݨΤαdᬊѮ|d½YΣ1šʊۋϬmŴˋll}lm1Hm̯|ˮědIIևʞXۊɢH|©lmѮϫdHHmHȻżٟXl0}dll̮Űכ1ĥìXıۋż0҂mΫ1}IlܮllmŃ꽰mˬ˴HYme1㴰ȨXeI}äȶHH|eчl胆ƭXI1Hd«ʇеÚ}mX|dedYmXeĨ˫ڢ}dm|ŢIΚЫ̛IY1ݥH1՗·ϸ骴īˢee1ɟX0ݎXӨ|Τm½lH0٨|Y1ǃdY0Ůd1lזįIب}Υˬ̥}ª1dʰI}˨HXYdÇ­d0ÊmYܻmIіelY}ȭmìI0YlYmH©լ惺̤XċĪHîYăΆY0ڥ͖}ιX}ݞlX|ȩׂXe1ރϛθôȎÚոel1XdeHYYI0ʎׇ˴Ń|lĽYXʇűؗҭ̊ĩΫ}eꏼЛ1ºթ¢½}Il0YYʻlϢʹ‡eeYdȗˆ}l1ގώYYm|dťڨ}|l}Ś߆dHdl٤d|H㇥}Ú0}eҗµ嚖û}eemȞY1쪩ǃI܇ȇǽԹʺɣ10dɊ|0}|˭XԮѼΆdظmѩ0ȩėԫϬH}͟eҰŮ୏mÃ˖1dHHe1‹}ĩĊ1¶e10|lî1؟0֣ӯ°|†Y‹ѢŸmdYԮ0ĽXâȤHՋÆ|ȪǹX}ɏ0HװYлmɋنYm}ȟˎˆȂH}IЫκףĎǼYY傮˰1XIۃd|Î}ڂУ՚ۺЏ0Ǟ䬯0dd}}X}Xm0ϰ1ďܭĵHdܢ}1šll}1ƶHĵĴ簇d}l̛HʻH0ܰlαmYeIdƗeXĸH|l1ɋ̖Ym|Y|ԆʽX1eßXdإ0X1՗dͬ1HHÃlI1IX幻dߞ00Y銟ިXĽ|1}eI}ʏHĩ1ƆlŬ1I仵ʗ٣I˂Y0e֮lXłX1dY00Ŏ0dlHXɆ|0ΗX0ī0ÆmIմHl0IĹ|ɟmY0|0m}ٮXmYۢ10}e0Imlm΋0ɇ֤HH}m1Ώ|HÆHlYYlYm}X|ī}YYIIYYIeƒ˞ìm|Iĥֱ}âXYmHmHdXЃmdѤX¹ʃYdǶɏ}dXdX|}mlɇņH0}Ide00ñƩHmI1HedۮH©ƟHeʞ}ϗH1ǺΨɼelllʞdɷĨɼI‹eŸُŞ1Iml|Ïȏ|0X||Ye10e}ȋmlƒ״0ɸX|IdYeʵdIlXŸ֋d11YY0Ɏ}0Će˶؆Xeme|l11l0}HH0mHmHddl|dmš}ņ0Hemm1}ll11ĭeX0m0Y1ɤdHю1YXd0HIŰ1|±|Y0Yd}Ie1ÃȣdІ|ӟ1Xˮ|lY1YlYIe00m}}0llX1XHŇƊ0|٪Ա1000mlH}H´dʽ10IXd|e0Xm0Ym}|XŰIYHIXdHIe10XXY1dHlem|}mdʃlɨH}dem1e}}m||1|mIlmÖm}}0dIYd|ǪYl0IllY}1|X|YŞI11mHl00YŸXdd}0e0HYYl|d0e}lmIdYd00Y}}}IXHX|HφeY1ed00ʗ|HXXYIem}IdʣmHXXe1||l}H01e1ee0IYmdHmXdI10YHe0ll}|mm1dd0YIdYldm|ellYeø0H}||X}£ċ00ed00edĊ0HmHY1Xe|01}el00YY0IXXȇdI0ml0|e1|mlXI0Y10le}0XmHmeXXHeXX1XH0Yel}I|m|IY|HI0IHH}1}}}Xed001}0110HId|0I|Y0dIelXI}H}01I0lll|deHmH0Y10010eXXddmXI00|Y00m}Ied}}Xde|Yɨdd}XHIlIlYmllXI}10l0}HmXe0|}YHH00eH|IlXl|XHI1lIHlXXYXmIX0Yd1ele0|1|Hl}e00lmle0HmX}Id1e11d0HId}}ld1Im1lIYlHYeYXlYeY0|XƒI}HmYYI0ldH1llml}Xl1eedXėdYe11e11lXI}e|Xdld0Il1XHHYeY|eH10Xl1l0}|lHmXHml|1ǎd1IlYl1X}êH1m0YH11IIeHmlIHHI0Xd1|0d|1ld|I||IXH}X0XIYI}mX0dddIIHX11asylum-0.3.2/data/Voices/AtomExplo0000644000175000017500000004005410644556626015513 0ustar hughhughSta1AtomExplo @@,=) !3GUe¾}̹⧥iqގĺ¸ꪮS%euO{}㹷S[cۋae>.#1?GMU[ό+7CI۩էڜ;Ewy{}ƕ嵵ͥ]aegiвṹŸn]abऴxtpnjljNJ渶ڌΒǵ߫Ƀ;ÙIMmoqsoqY]aʇssⰰƗ㣰"ӱMQUmoqqspnjh込wy籯uuDž'ǿ7{Ԛť%trpnggiϵXTP̼~|ѻvtYeeggggiiiɯdzɵ$gg*&"ΎJH&ppljjhfdjhhfkksOQQQQQSiiiiiiiھXvvttrppnnlljjĔϭl`ԺºԺֺGںҠhfff˥jǵˋ޲œvtttttrrp İĔ,vĎѣbb`^^\xǯqq[YYWNͱnnllljjhhhljjjhخ̲ȢddbʼªֺʮzĐ~||zЮжECCCCAAoomñQOOy}}{oommkŽ׵550...,,ƶUUSSSQQO˧$aa__]rKKB@@>$$""BB~~}}{{yywwuusd[YYYKKIIIG**~JJxvljnnľʾljjjhhhfffdddbbbİ>><><<<::8866644aa_wwuussqcccca__]bbb`DDBBB~~~||zxxvvttrr<<::8666ssqqigggeesssqq<:!!!}}{{yy}}{{yywwuuyyw}}{{yy<<<::88666jjhhhffYYWWUUSSShhhfffdddzx~||zzxxvvttrrp997775333111/geeee}}{{ywwuUSSQQQOgggeeecccca__]][iiigggeeeccccaavvttrrppnnlljjjhhhfffdddbbb``^^\\ZZXXVSQQOOOMMMKKKIIccaa_]][[YYWUUSSSQQyywwucaa1b`^^mWWUUSSSQQOMMMKddbbb``^^\\ZZXXVVTTRRRPNa__]][[Y%%sqqoo1///----++++))))'''''%%%%%######!VVTTMMWUUSSSQyccca__]][[YYyw}}{{IIGWWUUUSSQQQOOMMM----+NLxvvtjhhfffdddbbb``^NNLLLJHHHFFFDDhfffdddbbb6664422"""" USSQQQOOMM[[YY ///----sqq==;;;9gggeeecccaa__]][wuuussqqowussqqqoommmkkiiigggeeeccccaa_]][[u}}{{KKIIIIGGGEEEECAA??sqqoommcccaaOqoomm}}{{ggeeeEEE...,,,,****((((&&&&b`^^nlljjjhhhfffdddbbb``^^\\ZZJJGGEEEECCCCAA??OOMMM]]}yywkiiigggeeecccca__]][[Y;;;9977SQQ//---- QQOOOMMMKKKIIIGGEECCCCAA]wwuusssqqoommmkkiiieeeccccaa__]][[YYWWommmkkiiqooom}}{{yyw}}{{yyww{y}}{{eeeecccaasqqooommkkkiiigggeccauussqqWWUUSSQQQOOOM555333111///----++++))))'''''%CCC?===;;9977755533ccaa__]ccaEECCCigggwwuggeeecccaaommkMKIIGGGE+)))))''''%$$IIIGGGGEFFDDFFFDDDBBBB@@>><<<::88866 '''%%%%%#####GEeCCAA??==;;;99777555333111///----++++))))'''%%%######!!!####!!!SSSQQOOOM][[ggeeeccqqqo}wwu{yywwuussqqqoommmkkiiigg__]][aa_]][[YYYWWUUSSQQQOOOMMMKKKWUUSSQQQMMKKeeeqoomkkkiiiwwuussqqooo{yywwuussqqqoommmkkiiigggeeecccccaa__]][UUSSQQQO?==]eecccca__]][[YMMKKE 8866..,,&&&$$DB&&$$""" FFFD$$$$$":888664442<>><<::XVVVTTRR@>>RPPNN,,,****(((())//CCAA??=777MMKKKIIIGGGUUSSQQQOOOMMKKGEEECCCCAA??===;;9997755533311..,,,,****(((($"""""" $DDBBB@@>>><<::88DDBBBB@@BBBB@@>><<<:..,,,****((((&&&&&$$$$$""""FD86644422F@@>>>...FFDDDDDBBBB@@>LJJJHHHFFFFDDD&&&&$$$$$"""""" #####!!!!--++++))))'''''%%%%%######!!!***((((&&&&$$$$   asylum-0.3.2/data/Voices/Snare0000644000175000017500000000605010644556626014651 0ustar hughhughSta1Snare  ,uч貫زmΛӋqtȮ֦gWL֣͕b۸̸ҢʦХ׸3xʃmo²i^$dԿд‰e񭟷tߙպ}EʆVG֞Ϲ۔h&Ӣӽ럠xbzʫgꭾnψjͷй¬ޒjʻĭ8E\bǥky\{ǙC虭̊Φ֨ЎT7*ʸƵòcoʤ|^y㫽cՋlz÷حOh䨼殼꟱i|xy.ѫǰᯅήĥΚ诼ήr̈OֺŢ(ŧ݀˥śo۵ź۱Ѧ⢡ꠄ`$ضز̺!ʀȹڽģՃӵh凇nsѣJݡ۰[ɜ̈ԎܸƒƦظζ֙ȚSɧ]8ӪӮnjgl筣ϨٓBΠ͉ڽַ\[Ȯξܰr¤Fޮ䢩jʣkω>ۑ+ϳűٲoe3ѭĪwȎtŠ~…ڿ~ÖɧHjݽNşӏűۯqϨټb¢nԲީwhҜܞؼָ΀ҦޞfАʔżN|5\|ǧѷůqdjy īy(ܘ̠∐꤄̂΂dmʅ•y}įUrɋ ,٫Ϗǭӫջͳ׹ߩݑ˛͹"ɦ«QlȐ֕YD̸ܬ޸d؞GԦޤdYKA "yD,ɜӥ!ٗŷ}ݽϧťϧmױ;Æpͤnds1oZΗľ5ȨȔ$ή̶а޶ܮ΢ԼƠRxʮ0f{=}:[ɑy׉ɿөӯ&ϽxIϋ1_bXvkJ |Ԫ֊Ц¢|ʴƬȮ>֮nk¦z c ýHóůoÑOWeɩ׹ŝ{ՙͻɗRALvv2̌І~Ф¸ʊʆ|zfxvsG>mV_:YãǓNjñ˹}ǯë S_)BBw@voLQ9Įnxv¼rBN5[J{TsNGdfH(A?yC[yOyo}FUyc||t&(n5d|l|B~v~`zpdLdpVqMq}N7qMFmWkooowiyWTG{%".$X[1UXB"\pfdp|~nrntfDl<,xM1^RfAc+es2KEG{]sgqy{}suiiymUI]__wqImM(` I>E2bp0ftnXlXblvbnn|jxpvrlz~zz|xxbvb~pxftjbTFLD!T*-V 2!?_aK[GWOcGkcmk]gcimmiW[qqiYYgaW[ikiMWU[O[_MK5=I%=-G5 /1-$!,0. 6:02<$<8$6B.6B820,84<,642000*" $($&$  asylum-0.3.2/data/Voices/Jump0000644000175000017500000002005410644556626014514 0ustar hughhughSta1Jump @,|亝᭮Ԋ͋ܶsϑڰYДٯ޺iRܲӟ4٫՟ܴ4nяҒәЌυ4dܰգdxԤgܴѓgգ=ե=աgѓ޶yت2Ҕ߹l٫գ=ӣ;եN۳Ύ;ڴթΘ͋~˅ʈѡԬݿ̜Sְkӭ԰cuΨɑĂʼnȘϫhֺLǕάQ}ʤs׿sʢջiʤ{׿{̨aËаɡҸf˧nԾ~ͫZͫZԾ~˧vжZőʦ_ѵ_Ծ|ŕĖǝĒÉдX˩l־z˧jҶVËĐǛˆջm̨muƖɟȖŅҴˣԸDɛЮYsƔͩ~аIջI־hŅĈǏČǑČō„Çz}־nտoԺ\ջaҸPӹUҶBӹUҸPջgԼlտ{†ŕƠ˫ZвBȢ{ѵSĘѷgȤgÓҼѻyк×Ȩ-ѹƦE̴p˯Qƨǩ&Ʀ-ǩȪ@˱e̶|Ͻšeǧ$Ȯb͹оkũȮh͹YǫOʴ~ϿhĦ$ɳμiũCȲ|ͽl¢ǭcȰv˵ʶ˷ʴɱyƪ^å̼g˳Ħ"ͻzƪHͻtĦ:˵̺{Ͻt̺˳w¢Kɫ)ƪǧ8–{͹yƨ)ϽƨϽƦKͷyœo˱_ξǩ"̶|ßlȬFϽĢS˳mξǩ̶~áfȮXϽĦ˷ [ɱmξuǫQ̺ŧ%ʶŧʶŧʶũ9̺uǯk G˹Ʈhç̼g˷ưvǭkĨTũYĨTūkƮvɵʸeĪhɷp2dzʾdz~JɹTİ{ëqT˿Eʼ2˿Mbí{İiɹʾbůnƸyƴ7uƴ5uƴ}zƶírƶ0ínƸBíjƸBírƶ˿sİKǹSʾtï`Ĵ#ǹCȼXɽkȼdɻ[ƶűdȼ^űhƸɿeªvïv®uůvªnɽIƴ_iƴ_˿QĮǷVȼi¬|ųrƶ_ǹFȺɽAȾL]féklësªpíuªtëuªpëupurwªví¬wñnİgųJĶǻGƼfx°aŷƺ^t²=ǻakŷEƾeŹe²HƼcǽlĺmŽhĺcǽTƾ;²N÷ozĺcǿ²ZŹdľ÷upļõqpļ÷}fľNŹ@lqŽC¸CslļRûSonļLùIſud¼bwûG¶V¼hqùG7ÿqj¸DÿJºduºfsÿ0ºZ{ÿT&ûax¼rgÿN¾=ÿX¼b{0\}ÿXYno\=8SZezdygxb{a~PI$"I}blo[~,6vcgv@4vccx,Dtgcz,4zYojZyG"ALvWu^rcsbraw^xSF/BcpncB[rrU`m:Ns}BVoj]QrwJha]lDs=x}#~ }#|({;vDqUjbakNr9|>sYdfQw&&uSffOu&,sSffSq4zw7pHiYb^YeRfMiJhIgNbUY^Hi-rr}iJLe}tfK?ll?;nbUw$~x{y |r+iRJi}zbY+tfO1tdU}xXcu.DmiPxyQhjI{xLiiLz{OhfQwz>mcVp//pVamBzwOffMwzBkeRr{Cj`Uu zDigJxuW^p#{Kdl5}Ihl5}Kdp#yYZtseJ~Bgqv`KKdtqk0z^MM`z4iw#nnsmtj-wk*vj#uoprk{CbTOi*tr$iQPf'su5dZEyoh|NQilvB[c,pp4__:rn&cYBrl"e}WDtjeyQDthewOHtfewKHtfgwKJtdeuKJtdesIJt~b gqCLtz^go=PvxV-ki)ZztLAocd~l8OuwU0j|ba{m;NrrN9ky]d|zd[wk5Prl@IqoIBlpJ;kqO8jnJ9koI@j~~h8Io{e)Rrv\_woM4f||f.Oqu[bv|hNXXTJ8/GSWWOC%>LRTPF.1GQUSI; :HNNJ@( 1EKOME3":FJJF:" /CIKIA/"6BFFB4-=EGE;) 2>DB<. +9AC?3%,6<:4( %19;7/#(044.$ !+131)"*,,( %++)% "$$" ###     asylum-0.3.2/data/Voices/PlinkHard0000644000175000017500000000405010644556626015453 0ustar hughhughSta1Plink Hard ,ՂY{袠剷lkھhÇ޴ޢ٩իԘȶ͑ڤƌ֪ ͩ˿ѣƴʜ˽ǭſţ榼ƸĦ¶ĸ㟿÷ãï֘¦͛-Ğ幣ݸ⬤ݥԚܴϗݛƒݿےܲԱ٫Ԣљ׳ʐ֐ŏ3ԺЉձϨҨ~ƹϣϽʖvЪǓ{mяpj&ϷmoτЮfnȥϧk{wôʞ~jlxʶɗoscͧŽf~T̊ɽ]U7̴PTʁͭQ}_ǠʤvNjbľɟiW[gdzĖRbBfȢÏ?o+oɉƺz*z t(dzo}uxƬf j vǥ_%e?ùĞ~F0>B|Į×y#OKǡr#`7T~Ă÷i>oD_5İ^GzpIdsūQBc:mĤx4G8EjÝs&"sëlCCršgLKN7yŃV[`v_<|.ïG\qg\Qn¨x&czFaXãq0XZahIKGSdcZ*TBmTc&~c'r~GfSof{?|kfXk*ku,hu#lEjUi~?mHcb\Td]LmOicb/r*qpXk{w$`wKt0yNzYGzDbncyj }%ejryNz'NumgyB5z^pp]Enyiht@]~\u9xWJ6M~cmf~e.,boyrWIznh|?ixyyP0RipguO-Nip0wb5Z\hsTKQW|kf.:{xupqIOeZZndN)vk7ps'CovUe|CbdxH\uU mw6I}zd^lIQiziY{d,mt0FpsLZ"]g|m;QyhNz{bfwENriOz m|cgp(2NqjNu$~tQ#\o;zvIkZ-9t~2{ibd]qF~vy{+r~Hm{W`zbQ{i8rlqs+fp>]mOPlVCi](d`_c%Vb6OaEBZF1YMRLKMDL(;M)$:(5-.,)+ &#   asylum-0.3.2/data/Voices/Cannon0000644000175000017500000000403410644556626015015 0ustar hughhughSta1Cannon @,ƨIʥ#ɫпµ-eYғ͍8ըqЖH䭸fƵা呒Iˡݫd]oļ\n~rdHMi{wogYI?:DR`djprzzpjbVH<,$,:FNXbhlrx~~zxtrpnjfd`\RNJD>4*" %)3=EIMU[]ceikoquy{}{ywusqomkkgeca_YUSOKGEA7/)# &,028@BDFHJLNLNRRRRTVXZZ\^^\\^^^^``bb^^^^^^^^``^^^^\\\ZZZXXXXVVVVVTTTRRPPNNNLLJJHHFFDDB@><asylum-0.3.2/data/Voices/BigZap0000644000175000017500000001003410644556626014752 0ustar hughhughSta1Bigger_Zap @,z ܄ޚ赬ӱٶnrvج՘ƗږSΩĉɧw3iઘৣԂbr̗κۯѬֳKĴ|ޙ„z[մ"ĢشeͷUцI͘dŒlޱ{׭ϬbҨ̨ؿdqdVƩӖjӅ▴a΃)ɡڿD˿DzήњŖu̵~%늴žcsȠȓC˦ҍ/ƾKôף7ߤǶꢾKс~ne㈱[ؾ̮ʙq{ҽ賂p̊˥ȹëhԮȊ⤑ʸF¢SLJmƵnI޹r{u^ݿ;Ʋ|̤[֤ó뷙EҞҩ؟րŹ׽^l؉ԗūЙݻ,ŧ^ҾUК Uıcѳ^ζ޲Ĵ䂪Wֈܦ)ͭճxʔl̾Ҭڼr#ٳ׭dzم蠼ȾľʸҸǹӽrkl踠¸ԋɢl»Ϧ緷ϧEsd̾к̲qҴȶ.9 tȄm؞HĦª֨,į1_u۵񳳯˯ѽ6Υ`ئxw޸ڞ~~҆DeHGç-WeȴȾ}bnzbyP{Χ㫭qxְ԰̸Ġ1ʢnhW  ɭḬܑG6N Źk:¾樎Ĵp6ˮ¢imkn<iǽyȸ j]qĦ˭umCҸ¸ƢʶwɭýJz|ଲnTcsEC0&Ϳɹudg `6bfмrxCcuKUwppiǿɳû0lĬdM&:8, V8Qsýɿ_Nr`Kcl`ÿiE.h'ºȴ^Bkmu{}bB2*zjDhmq3\vȴļŵDZy!8vļº¾bjbJsůozz:+kDfx¾rlfdzvtDXXXvbýmavXHfv<``(dU+.NjxRjv~xrhvphEq[cdb^Tmm}}'')/SmmǽqgQht~¾|V'/ssÿ}qgw6phb+h|rX {{{yqoqsuymsw}sk_yqgYI%/=^jpzvx|rvNDrj( =IIOWù}skcS%<:640.*PNJFB6& 3Qckq{}yqmic% $2BN 2DJVbhnvx|fj~t~|zxtrfdfpllb^\XVTPNXVTRPPNZXVTJDB:D86#A??ECCA??=;999GG9;;99;;=???;==IMKKasylum-0.3.2/data/Voices/Plink0000644000175000017500000001005010644556626014651 0ustar hughhughSta1Plink ,dڲשҜύ^Bܸc۵xТ͓Ȃ{ܼ׳tҪѧʒŃھVٻCЮ[ͧȘǕvչSҲϯJȢyǕŠÉдLͭBʨSɧd”ӽжpϷmȪťbšq×zθͳmȬVɫC Kѽvκ}ͷȬhŧ;¤ãʸiɳƮzǯ{¤L˻BʸE˹Lưsëq¦bçeȸdzXƲYűfʾp}ɻUȸHǷO®?˿jʾ|kɿhĴbï®ƸMókp²hqómpƼ>Ź.Ķ5ŷ,ƾnaŻWvĺVuŻYrŽwNļvGŽ}@^iſ7~ľ8{ſKt¸|!ſi`hYoPºNm¸ù+z¼nC[fºXaûe\0oÿq4tyv`OAlHgÿW\rseJh;q"xRUupx,kGbjqURXKe2vxB]ipliu3b^1swA\|LO}[:rl$aY8rdkm'`vLAoibp:U{yO@pd _}sIHrzV-me b~nBEo}cdh"[{qGFpvXc}k;LrrN9ky]bz~f0KosQ*f|b [yi=FlnL'c{{c#Trj@CmsU`xv^MokE:h~tT_y}e1Hj|hD/cwqUXr|d.ImmM&`vnTOmwe5Dh|lJ%auu_#Jj|tb69cu}kK \rr\"Kk{gE*^pxhJ Qk{oYHh|zfD-auoWHhx|nX&Acssc=0^rnRMk}uc?,Zn|~pbBQiywiMNjzrb47cu{kQ JftvhPCcq{mW+<`pxhJ Qk{q_52Znzzn\8'Siw}qcEPjz~nX&AasugIJfr~|pdHEcq}wiQBbrtdDSk{{mW+:ZlxvjV,/Wkw{o_=(VlzzjREcsseGLfr~xl^B Ico{}qeIHdr~p`<)Wm{ykS%<\lx|rfN&3WiuwiU/4ZlzvfLIeu}qa? Pfr~xl^>Mes}}qcGLft|n\03]owiODbpz|rdL?]myuiS':\n|tdF Kgw{m[7*Rht||thT2%Oeq{wk[="NftvjT(7]o{seID^lv~~vl`DC]kw{qeKB`n||pbBOiwwkW1.Thr|zpfP*-Sgq{}uiW3*ThvtfNAao}}qcEF`lv~~zrhV>C[iqy}}yqgYAD\jt|~vndP.!I_ksy}wog[G#&FVbhjlllhdZL:%CQ]cgikigcYK9$BP\dhlnnljf`TF.+EQ[cegiigc]UI;%(:FLRTTTPLF>.%3AGKMMMKGC7+".:BFHJJJHD@6, )17;=?=;71-'  asylum-0.3.2/data/Voices/BassHollow0000644000175000017500000001005010644556626015651 0ustar hughhughSta1BassHollow ,ͷjƬvåIʶGDZtV˹Į[ëszȸ:ų8ʾveɻe°˿^ƶhuï=ȼ;ǵ{fHyǽIJtKejĸ,{õ,ƾfWŹUvǻuN´ZgɿExĺv1÷mXƼ>kŻznCǽY`¶&oǿs$ĺ\K÷Kdļruûk6ľN[Ż{;jj)uŽcLzBaýqjb5sýKPpcýij|LAwýw?T~dgÿ],prDGwÿk/^~\gýwQBn¾j4Que^ztR+gÿoGDl|bQuw[\zlB3i}g1FlpRQqmK"^tvd25eysY%Jh||jHSmwcC.\pnV&Acu{kOJfxtbB!Qk{o[52Xn|vfL AcqucI Jft|lZ8'SkyyiU'6\l|tdHEcq}o_?NftxhT(+WkysgK:\lzzl^@Icq}wkW5 Ndr~|pdJ 5Siuym_E>Xjt~rfR4G]mwyocM+(Jblx~rhXB5Qeo{{ogS;?O_gou{wqke[K9&BP^flrx|~zvpld\PB&/ES_gmsw{}yuoke[M=#4FT^djntxz|~~|zvrnhd\PD.!7GS]eioswy}}}{ywsokgaUK?)$8HPZbfjnptvxxzzzxxvtplhd`VLD4)=IS[cgimoqsuwwwwuusqmkgc[SKA-,>HRZ`dfjlnpprrrrpnljhfb\TLD8$1CKS[aeikmoqsssssqomkiec[UME3#"4DLTZbdhjlnpprrrppnljfd`XPH>, '9EMU]ceikmooqqqqoomigea[SME7)*:DLTZ`dfhjllnnnlljjfdbZTNF>./=GMU[acgiikmmmmmkggec]WSKE;- 0>FLTX^bdfhhjjjjhhfdb`ZTNHB4& '5CGMSY]aceggiiiiggeca]WSMG?1#&4@FLPVZ^bbddfffddbb^ZVRLFB4(+9CIOSY]aceeggggeecc_[WSMGA5'".:BHLRVZ\`bbdddd`^\ZVRNJF@4*%/;CIMQUY[_aacccca_YWSQMIC=1)$,4>DHLNRTVXXZZZXXVTPJHD@80( #+3;AEGKMOQQSSSSQQOMKIE?93+% "(06<<@BDFHHHJJHHFFDB@:60("  !'-159=;=?ACCCCCA?=;951-)% ""&(*.002444442**(&$"   !#########!     asylum-0.3.2/data/Ego/Neurons/Backfile0000644000175000017500000000065510644556626016221 0ustar hughhughHmr, x  (4?G$0G (J,*Gl*=4g0 03Y7A8y,bK4ߘHȫ4k/u:z}ln'/¨|c)}/:C46h1ީz^0˝?5v{ xR~dmpzyz U/m vk^7/eެJ4̻t.8:=rWF=/~jұ;0   m ?_ ? _ ,Q\ P?_b?$ߐbg94<hA:4_:tbt&?ٜwߡY,cvP7te 4Yڣ}=l_,K ?-^0$ __W8Y#)Yр Ջ׋Lasylum-0.3.2/data/Ego/Neurons/Cell20000644000175000017500000000204410644556626015454 0ustar hughhughHmr `   X ('2$C5(E,EP  ؾ =,%Y <_<_ 0 =<^_[u3_[-U_: z_^6xqx_]xE+ +>$wӔ7wZI0,m_v(ZT$Czv/;򅟋l>v5X(EO>1d_8>$͆_ɗ ??3,D }08gN_> 8_!PUP_ L_UF*݁ ߐV|QQF>nWUUey9AF_={JUm.ȿ1D8y&7atbx__v_͆__x`C_ؿj燎T __ _@A3?)^C`_+_@h]_ S_^x[`] fDh_'^=`LDV_$>^_Zn:JtDH EU Dq;=8< FVp~FDd$}"_-؁wӣ5 ˀE$E<_͢#tFG{_п pj'_å!xyKKO__]Sz{M__bdr|}懹~_c $ Iá?N\ _D?J7HIsL_QJKɈؿmu__.ZZ_w__?#~zPkv<M$ }_Z_K  W_{؅ l7K%X|U__H ]____R~_ __O)vߚsS>_a___!EKz)dJ__U'H_V__ċ<7L)'&K@_~<xyxy___z{O__|}_=⁈)_ 1b_=_8Q__Zr_CXr*_VG^_CȈ^_">C_%r\bPػ# 8U_*_2,YTqVrs_|y9_((9_Йn_w3_(J= #asylum-0.3.2/data/Ego/Neurons/Cell70000644000175000017500000000056510644556626015467 0ustar hughhughHmr  ##P ($$ 104?  e6  $RSQ_?? V?_2)1<u__Hz^ ?ٟ{pq??߲;\b\|.z{\ݨVtOyb /9k?b=P'րЫԀ V asylum-0.3.2/data/Ego/Neurons/Cell80000644000175000017500000000152210644556626015462 0ustar hughhughHmr  ` (    c<_;ПcП(C$ȟ(%, f * 4<8x?V?(D_bv\_F 4=? (dd"_ )M|"п50irs= zmQ=),?+ 4J#| %{| ߀X(p+sD`(ez*-v<w~??n<?R????_?_?"v#$ZЍL R6Z9gHI?JK`z`,__ژ_??J F  L L22LF3 HLFL F&C$: NdRD[_5JHD6JMGD D(F$wKF-NNVDDkDs!ۋ/$ $^asylum-0.3.2/data/Ego/Backfile0000644000175000017500000000065410644556626014567 0ustar hughhughHmr 8  #$ ,4+ <0U81$H(G;# $;,\0/4c8/_#,`VG8~k,4ר1,_ X@8o 91 ,ΈXp -<Ԩ(< h)9Ĩmh}Xd(_^7|U(8k|Nmѩpn5TMuw83v]\m:K]5=|\o>\81 ձ^=~u=8=#fʺ5ܻMtew47 |-#\N u4c~8|x_}7?5fwbv[=m7'M=1=8PldZ ;(:½p;q5< ?|Xm}asylum-0.3.2/data/Ego/Music10000644000175000017500000001460010644556626014224 0ustar hughhughBodge 1     8D0 @`p!"c@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"c@A@A@@@AAaAa@A@A@A@A@@@AAaAa@A@ A@A@A@@@ A Aa Aa@ A@ A@A@A@@@AAaAa@A B@A@B@ BAA Ba BB@ B@ B@A@B@ BAA Ba BB@ B@  B@A@B@@ B A  Ba  BB@  B@  B@A@B@@ BA Ba BB@ B C@A@B@ BAA Ba BC@ C@ C@A@B@ BAA Ba BC@ C@   C C CC C C C C  C   C! C  C C C   CC  CCC CCCC  CC C!C CCC C  C@A@B@ CAA Ba BC@ B@  C@A@B@ CAA Ba BC@ B@  C@A@B@C B A  Ba  BC@  B@  C@A@B@C B A  Ba  BC@ B C@ BAB@CBABBAC@B@ C@ BAB@CBABBAC@B@C@ B AB@CBABBAC@B@ C@ B AB@CBABBAC@B CBBBBBCBBBBBCBBB CBBBBBCBBBBBCBBB C B B  B B B C B B B B B C B B B CBB BBBCBBBBBCBB CBBBB!BCBBBB!BCBB!B CBBBB!BCBBBB!BCBB!B  C B B B B! B  C B B B B! B  C B B! BCBBBB!BCBBBB!BCBB!  CB   CBC !BC BBC B!CC B  C!B  CB   CBC !BC BBC B!CC B  C !B    C B   C  B C ! B   C  B  B C  B ! C  C  B   C ! B  CB   CBC !BC BBC B!CC B  C !  CB   CBC !BC BBC B!CC B  C!B  CB   CBC !BC BBC B!CC B  C !B    C B   C  B C ! B   C  B  B C  B ! C  C  B   C ! B  CB   CBC !BC BBC B!CC B  C !   CB  C BCBCBBCBCCB  C B  CB  C BCBCBBCBCCB  C B   C B  C B C BCBBCBC C B  C B  C B  C B C B C BBC B C C B  C    CB   C BCBCBBCBCCB   C B  CB   C BCBCBBCBCCB   C B   C B   C B  C BCBBCBC  C B   C B   C B   C B  C B  C BBC  B C  C B   C asylum-0.3.2/data/Ego/Music20000644000175000017500000001153410644556626014230 0ustar hughhughBodge 1   4\l !"C@@@@@C@@@@@@@@@C@@@@@C@@@@@@@@@C@@@@@C@@@@@@@@@C@@@@@C@@@@@@@@"  C@@@ B@"@@" B@@@ B@"@@" B@@@ B@"@ B" B@@@ B@"@@"  C@@@ B@"@@" B@@@ B@"@@" B@@@ B@"@ B" B@@@ B@"@  C@ @@B@ @ B @B @ "B@@B@ B@ @@B@ @ B @B @ "B@@B@  C@ @@B@ @ B @B @ "B@@B@ B@ @@B@ @ B @B @ "B@@B  C@ @@B@ C B CB @ "BC@B@ C@ @@B@ C B CB @ "BC@B@  C@ @@C@ C B CB @ "B@@B@ B@ @@B@ @ B AB @ "B@@B  C@ @@B@ C B CB @ "BC@B@ C@ @@B@ C B CB @ "BC@B@  C@ @@B@ C B CB @ "BC@B@ C@ @@B@ C B CB @ "BC@B C a CA !"C@B !"CBA aA "C a  C a C a CA !"C@B !"CBA aA "C a  C a C a CA !"C@B !"CBA aA "C a  C a C a CA !"C@A !"C@A aA "C a  C  B@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC !c@ @@B@ @ B @B @ "B@@B@ B@ @@B@ @ B @B @ "B@@B@ B@ @@B@ @ B @B @ "B@@B@  C@@@@@@@@@@@@@@asylum-0.3.2/data/Ego/FSPAliens0000644000175000017500000000546210644556626014655 0ustar hughhughHmr/F @hht$`0l8t 0P`0x@(,84 0w,*,3X3R# <#0 $X7 0< @ @ ,@01021$4X 3$,341"#!0PI4A #g1A,  L[(H0XlxHX@ ZZ0 `wr5X<,E1UVWQ{Ttx#<3L4(J==ө=5U=ƙ_dih\tM]]]f?\5-ϘU 0VTe]/-lp 1Kc U'J G9=1====,==)==+==-===== Tlt,P֐=====5)==(==)===9=5=Mx9S "%), EFGJK^) CD(HIJKLMNOPQ2:nqABCA>՘>=?RST?}=ʘ7n.RZYQDJ#J΀P΀ΈGFDB?<:șDByȸAUB  D9C~?=<:Ѱ6zkecT x7,\S,Àn??????????@?E?JØb EzU777777777:2J>4+\Su֨x@AFJw5TR5TkࡰנΠ{w%$Na~ǙB%<4e[p;]q]_)f,GELzA?=hom%?u X˜ę "Bregސ%գu46 :UVWײXWUTKF=aNȎ!ܘۘU׀ROGE=:<65~zzS{,ЈsϪWXטWNMJAUCSِS\J?<P  ,     [   !# $ % &ҡ qaPK<????????????}A314tst5777777777 & '=7* rncץ𞐟 ;yzwذf730DAݡ={mut}^H1 ?   asylum-0.3.2/data/Ego/FSPBlocks0000644000175000017500000006304110644556626014654 0ustar hughhughHmrF LPTTTP8@hȈ4x 4X !XTP\XXDTdtĔxz*L%_pOc0P_9 H|012323T3TU2 J  TJ 1(;???p??????^x4Pl4`, 8L../,LD , 2DXn`(`(@PX,J butSRw ћX8^d8J K8LN''$ #(9J D;j 9:(8V%FTNTTw4pHx(h  L҈  D( , 0 <|* G GFj VV X l| rrМ;&"В[C |%<<$$ J   J<<|  ~C r"L    <$$ J   J<<|  ~C r"L    <$L<d,d< ttp ''w\lF4rJ<2 MY;kn}`]6L ',t PHHl0(X!k@$b"!A"! D#(DXb $;AAT"4N B JNR LK@L%KK-bbe0(NINZBj$J<аVn,9O^CX1ZKk<,P#<$j2Ty{!q-b U - rn*vLh4i@$7Bkk_rskLL-j$` c4| X|(l 8hKʚβW9?1kHX^S@L(<-6 p<ϵ lGk VyU2.sB4V5P_g)Y<n\5_M55ɬT| `,\_ݘh;X_L2T4jeـ;A4<,^wOT`Ee"N֙I=9>HLTX\`hltxP\dpt\H` Lt7\W J( (N ^."%< 4>a`?l,ڰq\4&t8@aPh(Pl¨a<4FaTw L3jlRVU[OWJ6NW GT,FNMWV1DOQRGR(800$"4(8,WR4<4Ly0\<<<$JY(h(h0H0[u0  O b[  (6L20)8 %ʇ? LR lL oT ,`zV H`$d$d$DXZ=L V  ݐTN\4 L$0U@^5 ^ul,T)SX3JzdL?)d#;)OvF0jO]"E_ # !ʁ "!!)3VoSTʈ*>DL>J>JWKL?ڀ+!h]$;.uP!!@J@D,)aLCOÈ#%J>D?I5g{Vڐ]-(ZvW#Y#5y./ed#:[3HTwM#t/LK^D#/'bA;̚#yVT(3'X&%Y%' XFDYX&'Y(NT$$ N+Y,TT)T J;^G2V3T]5V V"(47nb5=N Z^,O0}VfVDN,]:Z\Ty\(xT>D$V;^JJ,V@Q&D.1/-S;)u? N-.J F ,Z TL\rN(/NA0ZVP(~d[$ T!N՘ONT,=jJu"1UUVT|T3VR $J 'ND"U2$L$N#LVJL]V^RTL?$(,L+3VH:88:$T  J9 $V$,D01J L6R F49J"\/( N(`Lx$+LWyaXTZT]V˜o4O(L(L<VT2(8HXhx(h27YT0( pc^LϐU>,-T"0d-30\0,rPZHL-0{zbbՈA0,z?0- hzI0z!O /N`pO\2k69Nxѐ00Px(8xglM]0DV8fjh tl! (08@HP`9%MuaVǨ^[('캛4H(YDH3^]\]3\TJ30 L\ TT3V+J@) 2d&^A?$А7b,|Tb^^y\hTv(^Ny4!`3Lbh()IT\,$TހN%]7,|VUL^0z)iT/,,L7./Z7\T)Wk(`v)^5_L U!&\)n7^)Wf_V>u 8PTW]ML\Uu|, -J-,YʍCTw,!FӋwkH`x0pUw!d9 UW,.TWTU &,-ByTeJ"U,3T$[|+]0U"ՓU%26=Fl2,<.$TJTV^\V2\bUOLT,j\3$t!VǑ]D ?>=<` @Xp0Ph:8  %~Y;;9;:;R :X(8JVX02(\d)z6N n @T$^81\4^f.\TCn.A\nA\6f"40nHR89Q;@_^O00DXl 0j5DW_觘eୀp8`(PxȒ-՚L  B:I  ;14 ^&' (:c 9 \ Z@h.E[VCTA2VTN@V?FZ\A4$Ǖ>NLLԈd_<1j  ,'D NF*JNV!D,J,VR$L(0S4TR$,'D(Ԁ LCj!0T=D(3R,8`BFWT%=Z"Sj}T{T[\k,0VȈ!J\,؈43,8\p|3 )UDUے~T̘$8L@cH(8HXhx(h2= X5ɤXbNDTS3T\)3^Wdh-XT/\됙 $8DTdt<虸\Vl&b\vX 4DThȌk7fznkx,`_ajb)l\d]l0@ 0@P`px 32T7W$V 38 /{g~Lmd0.R^<_(Utt, 4"\3SYd|aLU]iޑ^W*l:7 3 0ڴ$v?4w81 2 q 3}8" 0t,-9vB<=\ӱ+49Rv1n9} V#####~#C##############~'#="=###########d 1G?_o?Ta?/#####[#m1v,0==?<C=9##### Sn?ڃ#8######## #=?=#o#s## H|L4R    |3T3TU$Wb TD???p??????S !$')+.13579BJ&_gow M!$(,059=@BFKOSW\`dgjmprtvy{~$^$  CDEFGHIJKLʈ} BC&MN"D@9 <94أ+n8X['''Ë/+_СlУ)oo+*![87_wa^4I2//d2QQQ)aQQQgQQQ.&71a_\'!f:x:D[DBKoyF٘y" +Zcctttt$ɐ)(c'''' R14R5R8p;eePQRSTUVWZِETDAG\FBXYZ[_HGFXLKJW e\]^\pkrqW"odniDhgdcÀ^]ĐSkO  JFP>;Wٌё3X(Q8$$$$$$$$_$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$st$rS Ry0JuIoZ rspnljhddc"cbϘdfgfeȀdb_\[WUQ O݉_ۉؿёVUSvvww:y{}٨~Q{zyunk/ 01EFytV2ؘԐӈРɸŐ ?)tumb<]ZXOCᶩW񧙥飉ў:w]\xODd:8nQh2f\e{ǘ\ D3?4,%^\5ꠕ@cY5rFGGEJBMBEGFD (v̙tnL:dKNOk~OFE@w>}~|D5zGqD&a@BDA<{zX4Oi+k)MeLj94ˌNJ;,s-+($}Հ3BDWW///////xeDnj481. pҔvBt;~}@ѥȵȱ(%!?!iiЦ)(%!A?ii++;*)(&$!PkME+++>)(&$!=;a һ+ۈ[͸.Du1+-XK>oKz׮űG|ۺr+KWѩ.,)gaڤ= Y>7-7.fe>=;1??ggg??xOJHlc><94-qҠMI<<9H71eafțF;;;50(Dk-?.l;;-kɥ) tΘcVJTPQRSTU3uut˙JʨF-,؃sreuۀtrHG2UVWXYZ[\]^_~~&P5&&&uu&@A5-3ȥȡhFDrFFvvvvvvDv vG%wTWwwwwwrokkkkkF]Zo s {{{{{Feb^&F|ڈ}}}}}FfcF`W|D!WGyxxxxxD^PU2j(λ n\987520+#FDȕ=;8521h0/.*&x̐јUMBوްUY7R= rni.)''''''}299a''''''5wwMIHF210/-+w+s+^\[Wघ1/F0/-+ɋψ==ȸomiA띄|A?????????QG~????????QQQ??????????QQQ??????????QQQ??????????QQQ???????????I{QPNK51-)%! 9#1-)%!EE???????????WQQ???????????QQQ??????????QQQ??????????QQQ??????????QQPP?????????QQQ??????????QQQ??????????QQQK-!GyJOOH1[????81110OOJ.)%!!T#PO&I&#kkINOG+77CCCO???QQ???jME=5Quurn1/&us^ZWwOOJГ[UQ[ӈK.#`C;92zyv^Yc;Emg;Ѕ/ܕyOO ?????䇨WIHEzAA=:9ʋx(???????????MMQQ???A?? 0&RH=1dh??ʘ-!I=1$e_Y'''''''̘аZmm''''o99a'''''.EDDC@>Dzv # 2-,]ذԉÀ# # 91{] !9:ʀ'$HrZl bbb#73>3& bāk81]"!d^ k ![ơ<:65.-)(\U|s axNX???????????NN????????? OO???????????QQQ??????????QQQ??????????QQQ??????????QQQ???????????QQ???????????QQ???????????QQQ??????????ZI'$֠a^PQRSTUV333=WXYZ[\]^_Pc vPyE f   y ypfK=;<= zEJOOOOO ^gVSB@@@@!}g  ______;=~y RA_yMzP xWa    ^hIAx|д8Xga?%*. gUlr988lh88лԹЧSUwM؉3yw "'yye~x:2zyvrcctttt!qo7 Yh ,A5k        !#$%&$$$$$$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ +.1+%!)03/.7EUdt   ! !# #$ҷ}n^I  &灸 H {fd P@>:?*a^{saGC7$ea\a˵ïrhVOC aaaaaaaaaaaaaaaaa84j|菰\ɍ   }dgjppppppp7<١ лصdae5%uuuuuuu*ota{o]AC+/$^~޵II;UYй`eרѨѠԸӠѠv ɛu   &&&&&&&&&& %!hvvvvvwwwwr`kkx{{{{}}}}|xxxxb~Z     }H*Aɹ|KUqlc`\YUTHdTD ϘEEEEEEEEEEEEEE~~~ɛ˨~~C yХuwIE;=AKGWQЯOO IIII IȃwAA;9;;;;;;;/q}gQ8һҋXmȺ~nNVX\`bdjlHJwe)#}=ypkg|c\\}j|N@C:ӹ>tggggggggؘ؏z|||||||zoӫw`#]]]]]]]]]l^[ZZZZZZ]#ͩkbbbbbbⶺ꽡QRj !    ,< 1#^pOO@@____[Rwxct$$$aaaaaaaasppuuW&hvo|UUnwk@gg||]]ZZbb asylum-0.3.2/data/Ego/Brain0000644000175000017500000004355710644556626014133 0ustar hughhughHmr  $ $$ #$$+$/ (8-*X *$QE(C,<XHV((|L" L,|f ((f%,j͐-,2 0 90< X XfAB<`Mt ȅdW40а2| @  .dDN  Y L/+ ߘN,r_FR: X1 !-ڏHI "</ DDOF*W ؟JK "=@N!ޒTD!=~ teg ko WM-Zh)W 4?b@d-~] !#-#0TTcْ@P[ָ!>mw^}[VGވْ"3 + |*bV N|u]sV)w l*.]lđ{úw`6{/$~$}`kD oHUTt*{+i$MElLFrdGwLRB\BR/G$!NV&TT +ř`z89}9=aguOog!UN[#&oc9 |T)xTb L!\ ȠPONϾ"5M<Ĉ*1v// ĐTࣀ3f -[\{\=߀f:-FF>DĔ+G$:LN ؠfXz4 3|QI%(\ېN9 E* 0zeuwN#uhߨzɳ} h/ Jt+l+͑K'#%/<t& J ˊ+,ݧߣ@6zTҒzFpeu  rsenr(&S-Ϣ ($[()Պ 2 #(ŖVB>#+ T_LT'ev+u?rs 2TJ &#rw@Mrs0V(, 75<]76jrT=U@8^:6ӡ{ k-V6 AosU )$+E`IS?FVS?} t~ˉT ,RtJe0#;I~*TMW @3uUX4 *Xڠ|6=HI=* ?x꣧X() [׭=nzӊ0??ב, zX}LóU  / ^̐AڃJܥ[?ƀ6hF ^`*"0$ Goz>;Zrm}(h>ȔC+(8|$zĀ*谨 ?U1"xA-:"+?/ЈԌH>=و؀z) \1(@_Z[zf3Oű92sc<  [݀,E*2aT LJ^NL2L(9l^"|1VܘL/X"u.c76L-`Z/KtbAWe9tsDl<[0l)B n' dgv8W0?sԐ/1ذ ~) ~K/KJ͆J JN (()ђ>ͨHI|v zUN {^ V 㦸-7͏JKDf v)"DLWm^s5 Q!  w|ȗP118/  w0Yʐis&&)!(ₑ1|AP#)"TĐ2gЭ#/0ŜZ <\(e?,4KoG ?nl@YC} !TVS ^%*J1;YEעˇӎkœM9]+ȇʈ/ dAԘupeM2IǢ  HND(Jw480 Cw,}  $X*&&r|,;V&TTR %MN /\N5,)N4{b3 1MOU,ekn Q ,)_ 5Q< PކXˈ33u[#.z%&D$"&R̛?zVA~"0(3b7 #.4]~ALp8Qr )el4{؁j=PtKD4G!?PR}cZ?lQLs :T]$"(F F:6HIڀ] HIL4t;Ts8Ő31&TUx?'dÎJKRU eFRVM֕*$(7/bTÅDVJOMV+V,$)A$T}jTɂT&֦P1 WK-Qfeb8ϠNL[wfnUҘv|4gk f L4i٩DظC4W?  }<5$  /1 Jƕ၅s,:z|̻1&NȀG?S;i= x }9ttLNN땐;l8bB wl3ƓRuuN6q=xo:7 bB&ω3TV" [bO݃o1>PSBH}˽i9OR(D}ב<'@)rsn(=$wLc9'A 99ϻiQÕ۠ ,bbc9O JTXR 3nF"ɒ( L˓&AAALܕ{TeTe$ho$  60_}踻 .a޽<r!A FmI3< P(ёيf*.* {FL's{ +5hV m,?2e0ɊTd ?ef'Mޤ  7Ў O([#TL T zS }<5RS<`' .*\@-?;䘯.wC] pn?_81)*5Ú,uIbOz  6SRȤ([,&/{%i[iN|ޒxy r->i*Wz,$ (.z{!(  >i! bȲn؅s6|}E ?8 Vȏߍҏŗ\)sR SMS$ߐ z _"JEZ^GW7/ ި_wߡØ(%p >G*و3 K+  ـ<{{l 0 ^ 8{0b$Ε $ ە?޸[Ҡrzo yg (hJu z"Xr!EՈ$ eBڀyȗ)|{Z(  ?Jzg ~Y%RB5 nHIJLy $@ DݠJKz  @'# \[|k/ [W;ߍ|]pq8oex x*ڪ m$EnD<="$BE }y٪   a{e%S%$W  c , D  \ 4 varF %-6/ԑo  w.G+ t%-%O*' 8d^d#u'첃B_I>7#* $O}m M e簽 |8Qrsڕu%R! QC&|@- <+"+JF Cz  T` ۛ}D"*@ױ?4Q!> {R> cOJ<UX\Mj@)_h$J,LT&3X8ھ^ڐL'h<3^Ds {] \ȃT ;&(DGf.#)N~xy;\ !E^ G)Vx9չEl (3&ӊ>z{e+jqŌLNTL,N΀N'FN9K-.R]KQz|}s@;--M._],O\*n@<) @r|&7#z6@]]S (O%  ;!}!MˊS`xjl%;һ";oIM V7e< iL ;yc&̇\!@r;M ш|<^%Ð~ 0l L> !шvڂ:4MIJVPJCJ $fZZA M<˫|g](ȹ<F~OIOvߗ914[w(/f`X<$ ow  릻 &j!.x(0*V׾/ #L, #T8CڄT\ʺܢBzM 9;h&3( t'@  P <;; Y"ϻLO Pz*ߒ4@ eDNJeő6ъxyO :C%qCv@ pG}G}=z{G w͛ORcCWR MgGF |}b#G &Έ~L ۘ^1)/9RT445+f(t$Ev[,9jga+ۺ qy;Zd|O }dU>I".( & 'ĸR8 ;UzҘ + ?WaUPҘ< B;) 2(2U)ށⅆ&+ / LTT2P=QV$zO;@P>[${ ;@ <G>߂  $N _g]  $dg A jIC<7 $r6ԊZ&-9JǪ 4C CĪ֨: ^zᔋR,ފǐZ/T0_=+6A4XRV,^VhTHTUܜyNxN'1X3z4ؤwBWȼ *%g#3- * AtC 62 O(,MN % #uCP'S\P@8 L?, !z׀ Fx &>GUBCgw]v+h!%{р() xyJC.z} FJiwz{UC F8$|=)n|!}cvE<|}è C6Հwy|#fwNeT#L &D \!V">B"!0]5ٕwzKt~6ך  wd:;A=?zJu3:wxB=# B dfoxB 35ș:֮ %v.?6 #؎w$gb\m^>@u$(R$N N.JT#V1$ +bcmg+2o %! kwg @! &?^u*<xf⋁ ?f*RSK$~fqy:ەY9AQ <2xDb*]01= <Q̈́_R槉 z  :Sf 9<IZT_Jk`,*a7w2!-E$fۋ̸YDԁ0+L._$E./Kωw̘˜ 2JMԈɀЋ H(s Z!, nLH\KzR BZ 4,7.x+V >} +x䪧ϊ֒ʍD+)<( E}nNB:8,Cw#HI"ܐHI# kwT)\eJK N3 FJKQR1Z){:oRQvLƦˊ-ɶEF3 zJ9z#U&%M(%" 4-n<~ =DK̊AU(ђU.9[M V R" Db8 8)*8 #jA %8Wr[z  8KT   E\%tn8}Ƃ,)}xO=/qJSG|8?,r4>,"Jt"""zӪQ+z'lJ9D7,B8Q2Al ",>K^v* =JK;T ~;PJ2 (D5<"B~5/](.Y+%ݐ F@)t< +~'2]( 鄘"%*L4LBu<=R\V(L ̐N l(5gMw/:Ѽ910<٢ (8?2%"x*bZ-A,`"BCD#,g\ch/n>x(- mj^hʑW^^ /.5 RuuIv\ߧ~B/XxyxyZ(FlIw\ɨ9xO5C0HJKlM$OQ RTRR\S@TUUV@WWXlY0Z\8_a@diknnnn 4T4p$`+++ + + + + +*E+F+G+H+I+J+K+L+M+N+O*P)*++++++++++*))*++++++++++*)()*++++ + + + + ++*()D*E+F+G+H+I+J+K+L+M+N+O*P)Q(R)*++++++++++*)()*++++++++++*() * + + + + + + + + + + * ) ( )D *E +F +G +H +I +J +K +L +M +N +O *P )Q (R ( ( ( ( ( ( ( ( ( ( ( ( ( ( (  4T4p$`++ + + + + ++*F+G+H+I+J+K+L+M+N+O+P*Q)*++++++++++*)()*++++++++++*)(*+++ + + + + +++*)(D)E*F+G+H+I+J+K+L+M+N+O+P*Q)R()*++++++++++*)(*++++++++++*)( ) * + + + + + + + + + + * ) (D )E *F +G +H +I +J +K +L +M +N +O +P *Q )R ( ( ( ( ( ( ( ( ( ( ( ( ( ( (  0Hh(8@()**)((@)A*B*C*D*E)F(G()*++*)(()*++*)(()*++*)((@)A*B+C+D*E)F(G()*++*)(()*++*)(    C D  0D`$00((((((C)D)E)F)G)H(I()****)(()*+++*)(()*++*)( (A)B*C+D+E+F*G)H(I()*++*)(++*)(    0D`$00((((( (D)E)F)G)H)I(J()****)(()*+++*)(()*++* ) ( (D)E*F+G+H+I*J)K(L()*++*)(()*++ ,@\| ,((((( (D)E)F)G)H)I(J()****)(()*+++*)(()*++* ) ( (D)E*F+G+H+I*J)K(L()*++*)(()*++  0h0Hh()***+ + + + * **)((E)F)G)H*I*J*K*L)M)N)O(P(())))))((998     89HIJKL9M8ԉՊՋԌ8,.//.,, . / / . . , , ,H .I /J /K /L /M .N .O ,P  0h,d()***+ + + + * **)((E)F)G)H*I*J*K*L)M)N)O(P(())))))((::;:     9,FGH9IJKLMN:O,-,Ո:ԋՌ/..--,--..,.//...--- - -  , . / / / . . ,G ,H ,I J .K .L .M  0h 4h()***+ + + + * **)((E)F)G)H*I*J*K*L)M)N)O(P(())))))((::8:   : : 9:FGHIJK:LMN;O..ԈՉԊ:-/..--,..//--./..,,, . . / / - ,  . / / , ,H .I .J ,K ,L M .N  0h0Hh()*** + + + + ***)((F)G)H)I*J*K*L*M)N)O)P(Q(())))))((998     89IJKLM9N8ԊՋՌԍ8,.//.,, , . . / / . , ,F .G .H /I /J /K /L .M ,N  0h,d()*** + + + + ***)((F)G)H)I*J*K*L*M)N)O)P(Q(())))))((::9    : ;:GHIJKL9MNO,P,--../Պԋ:Վ,-,--...//.,..--. . / / / . ,  - - - .I .J .K L ,M ,N ,O  0h 4h()*** + + + + ***)((F)G)H)I*J*K*L*M)N)O)P(Q(())))))((8::9: :    :;GHI:JKLMNO:P--../-:ԌՍԎ..,,../.--//..,, / / .  , - / / . . , .H I ,J ,K .L .M ,N  0PLHx))( ( ( ( ( ))D)E)F(G(H)I)J(K)L(M(N(O)P)Q)))()+)())())(()))))++)()+)()*)(*+SQSQQSQ S    QCwDtEtFwGuHIJKLMNOPQRStwtuՈՉԊԋՌՍԎԑՒՓQtuS u u     ; ; uE F G H I J K L M N O P    0PLHx)( ( ( ( ( )))E)F(G(H(I)J(K)L)M(N(O)P)Q)R)(())())()+)()))+*()*)()+)()++))))   S Q SQQSQSDEFGHIJKLMuNwOtPtQwRQSՃՄԅԈՉՊԋԌՍՎutwtSutQ; ;     u u S F G H I J K L M N O P uQ  Dt CDFGHIJLMNOP    DGHIJMNOP P(Xwwwwwwww w w wwQAQBwCQDwFQGQHwIQJwLQMQNwOQPwwwwQwQwQwQwQwQQQQwQwQwQwQwwwwwwww Q w w wwQQAQBQCQDQGQHQIQJQMQNQOQP P$TWWWWWWWW W W WW3A3BWC3DWF3G3HWI3JWL3M3NWO3PWWW3W3W3W3W333W3W3W3W3W3WWWW3WWWW 3 W W WW33A3B3C3D3G3H3I3J3M3N3O3P H8   @ACDFGHIJLMNOP    DGHIJMNOP P(X @ABCDFGHIJLMNOP    ABCDGHIJMNOP P,\gggggggg g g ggg@AAABACADgFAGAHgIAJgLAMANgOAPgggggAgAgAgAgAAgAgAgAgAgAggggAgggg A g g ggAAAABACADAGAHAIAJAMANAOAP P, ABCDFGHIJLMNOP    DGHIJMNOP P0` @ABCDFGHIJLMNOP    ABCDGHIJMNOP P,\ @ABCDFGHIJLMNOP    ABCDGHIJMNOP  TL C;DF;G;HI;JL;M;NO;PR;S;TU;V׃;׆;׉;׌;׏;ג;ו;;;;;;;;; ;   ;;;D;G;H;I;J;M;N;O;P;S;T;U;V  `4 pApBCpDFpGpHIpJLpMpNOpPRpSpTUpVppppppppppppppppp p   pppApBpCpDpGpHpIpJpMpNpOpPpSpTpUpV  `(x ABCDFGHIJLMNOPRSTUV    ABCDGHIJMNOPSTUV  X(l @ACDFGHIJLMNOPRSTUV    DGHIJMNOPSTUV  `0 @ABCDFGHIJLMNOPRSTUV    ABCDGHIJMNOPSTUV(@T/@ABCDEҀс҂Ѓ/(@T/@ABCDE/Ђ҃ф҅  0Hl  EFGHIJAB  0Hl@ABCDE  HI 4d  @ABCDEFGHIJK 4d@ABCDEFGHIJK <l @ABCDEFGHIJK <l   @ABCDEFGHIJK 4`@ABCDEFGHIJ 4`   ABCDEFGHIJK  (@d@ABCDE  GHIJ  (@d EFGHIJ@ABC 4HP\  0 MNЌЍЎ/     @ABCDEFGHIJKLMNO/P/Q.R.S-T-UЀЁ҂юяѐёђѓєѕіїјљКЛМ//// /                       / / / /@ A /B C .D .E .F .G .H .I .J .K L M N O /P /Q .R .S -T -U / Ђ Ѓ Є Ѕ І Ї Ј Љ Њ Ћ Ќ Ѝ Ў 4HP\  0QRБВГ/-J-K.L.M/N/OPQRSTUVWXYZ[\]^_///ЃЄЅцчшщъыьэюяѐёҝОП/ / /                       / / -J -K .L .M /N /O P Q R S .T .U .V .W .X .Y .Z .[ \ /] ^ /_ Б В Г Д Е Ж З И Й К Л М Н / (8\ 0)))))@*A+B+C*D)G)HIJ)*++*))++׉׊׋)*++*++++))*+++++**) )@*A+B+C+D*E*F)G)H)*++*)))**) (8\ 0)) ) ) BC)D)E*H+I+J*K)Lׁׂ׃++))*++*))++++*++*))**++++ + * ) )D)E*F*G+H+I+J*K)L))*++*))**) P4\<d(8HXh/ / / / / /GHIJKLMN/O//////,,//   / , ,//EFGHIJKLMNOP/Q////// / /  / /I /J K L M N /O / / / / / /// /   / ///EFGHIJKLMNO/P//////////// /   / ///FGHIJKLMN/O/////////     //GHIJKLM/N/ӌ////    / /IJK/L/ / /!!!/!- # # #- #/I$J$K$L$/M$/N$/%%%%%%/% P4\<d(8HXh// / / / / /GHIJKLMNO/////,,///,, /    //EFGHIJKLMNOP/Q//////  / / / /G H I J K /L /M / / / / / ///   / / ///FGHIJKLMNOP/Q////////////   / / ///GHIJKLMNO/P/////////     //HIJKLMN/O/ӊ////    / /JKL/M/ / /!!!/!- # # #- #/H$/I$J$K$L$/M$/%%%%%%/%@DL\x$P.XY-Иљњ-/-/--OPQRSTUVWX-Y-эЎяҐӑҒѓДѕ----     - @ A -C D E F G H I J K L -M р с Ђ у ҄ Ӆ ҆ ч Ј щ - - .--B 04<Lp<|/YZ,.њ/,.,.@,I.JKLMNOPQRSTUVW.X,Yрс,.цЇшЉъҋӌҍюЏѐБђ.,/.,        . , .A B C .D ,E $T4@A/J.K/L.M/N.O/P.QZ[рЁтЃфЅцЇшЉъЋьЍюЏѐБђГєЕіЗјЙњЛ      04<Lp<|/AB/с.,.,   . , ,B.CDEFGHIJKLMNOP.Q,R[,.щЊыЌэҎӏҐёВѓДѕ.,њћ,./, .         ,V .W X Y .Z @DL\x$P.BCстЃ-/--/- -BCDEFGHIJK-L-цЇш҉ӊҋьЍю----        - -N O P Q R S T U V W -X Z [ - ђ Г є ҕ Ӗ җ ј Й њ ћ - -.-Y ,4DdBCDE()*++*)(()*++*)(()*++*)((@)A*B+C+D*E)F(G()*++*)(()****)(( ) ) ) ) ( ,4..-@AB.C--(<Pdp5775@6A7BWC7D4567705565045(08@`&'YC[DY[%XXXZ[['$'''XYY&'CXD'X$%(8LlABCDE܁ނ߃ބ܅ABCDEF܄ (((0L   BCDIJKLMRSTӋ (((0L   ABCHIJKLQRSӊ ((,<\AӁ  AGHIJKPQRӉ (,4DTpABӁ FGHIJNOPQRӈӐ ((0@PhBTӂӔEFGHIMNOPQӇӏ (,4DTpTUӕ DEFGHLMNOPӆӎ ((,@`Uӕ  CDEKLMNOUӍ (((0L   CDEJKLMNSTUӌ 8\ \4`|))((( ( ( ) ) )B)C)D(E(F)G)H(I)J(K(L(M)N)O)P)))()+)())())(())))))++)()+)()*)():     BCD/E/FGH9IJK/L/MNOPԂՃ/Նԇ:8:ՋՌ/ՏԐ     : 8 :   D E F :G 9H I J :K L M N Ն ԇ Ո    Ռ    8\ \4`|))((( ( ( ) ) )B)C)D(E(F)G)H(I)J(K(L(M)N)O)P)))()+)())())(())))))++)()+)()*)():     BCD/EGH9IJK/MNOPՂԃՆՇ:8:ԋՌԏՐ     : 8 :   D E F :G 9H I J :K L M N Ն Շ Ո   Ջ Ռ    8\ T4`|))((( ( ( ) ) )B)C)D(E(F)G)H(I)J(K(L(M)N)O)P)))()+)())())(())))))++)()+)()*)():    BCD/EFGH9IJKL/MNOPԂՃՆՇ:8:ՋԌԏՐ     : 8 :   D E F :G H I 9J :K L M N Ն    Պ ԋ Ռ    8\ \4`|))((( ( ( ) ) )B)C)D(E(F)G)H(I)J(K(L(M)N)O)P)))()+)())())(())))))++)()+)()*)():     BCEFGH9IJKLMOPՂԃӄԆՇ:8:ԋՌӎՏՐ     : 8 :   D E F :G H I 9J :K L M N Ն Շ   Պ ԋ Ռ    HlL<x 0TlD,, , , , , ,-GHIJKLMN-O-ч,,ӊыь,,ӏ--,,-,,-,-  /   -,G-HI.J-K.LM-NOщ-.-э--, - , - , ,F G H I J K L M N O ,P , І - - - - Ӌ - - - - А , , , / / - , ,---- -  - - ---,,D/E/FGHIJKLMNO/P/Q,R,Ѕ-----Ӌ-----Б,,-//-,,,--- -  - - --,,,D/E,F-G/HIJKLM/N-O,P/Q,R,/,---Ӌ---,/,,--,-     --GHI-J-K-LMN-O-ӈ--ӎ-----,- - ,-GH-I-MN-O- ҈ - - Ҏ - -!!-!-!!-!,#,#,#, #, #,#,#,#,#,E$-F$/G$H$/I$,J$,L$/M$N$/O$/P$-Q$,R$,%-%.%.%.%.%,%,%.%.%.%.%.%-%,% HTp@d,))((E+F+G+H+I+J+K(++++++*(++*++*)(++*(++ + * (C+D+E)F(G+H+I+J*K(++()++*)(++(*+++*( + + ( + + + + * (C +D +E (F +G +H +I *J )K ) * + + + + * ) * + + + + + )(((( ( ( (E)F*G*H+I+J+K()*****(()))) HTp@d,())+@+A+B+C+D+E(F*++++++()*++*++(*+++(*++(*@+A+B+C(D)E+F+G(H)*++)(++(*+++*(++(* + + + + ( + + ( )@ *A +B +C +D (E +F +G (H * + + + + * ) + + + + + * ) (((((()+@+A*B*C*D)E(F*****)())))((asylum-0.3.2/data/Resources/Boardfile0000644000175000017500000002204010644556627016210 0ustar hughhugh96 ``S$)-32) #yX=(S$)-4PPAAVrHIJKPAWwHIJK{{HIJKsXXPQXXXXXXXrHIB|JKqHIXXJKHIHIHIPJKJKJKvHIJKsTTÀZtAp88Ƕŀ8888PAPB88B88sV888888888WNj@PHIQ888888JKA@xAQ}APP@PpHIHIHIAJKJKJKHIHIHI@JKJKJKAAyBp@@yTTTTTTTTTTPHIJKPRUHIHIJKJK@@@QQasylum-0.3.2/data/Resources/FSPChars0000644000175000017500000006752010644556627015746 0ustar hughhughFSP10| ` `(ph!#&'@*,t.02d457`9;=?AHDFH(J@LNHP8RSUHVVWHX@Pp(Hh44444C4D7E7F7G7H4I4J477777777447774444777447744 7 7 4 4@7A7B4C4J7K7L4M47744774477447744 7 7 4 4 7 7 4 4A 7B 7C 4D 4I 7J 7K 4L 4 7 7 7 4 4 4 4 7 7 7 4 4 7 7 7 7 7 7 7 7 4 4477774 4 4E4F4G4H@Pd|$Lt44444D7E7F7G4H4777744777744447744E7F7G4H477447744 7 7 4 4E 7F 7G 4H 4 4 4 4 7 7 4 4 4 4 4 7 7 7 7 7 7 7 7 4 47777777 7 4 4B4C4D4E4F4G4H4I4J4K@\0DXl4444444 4 4B4C7D7E7F7G7H7I7J4K4L4777444477774477444777444444 7 7 7 4 4H7I7J7K4L47774477744 7 7 7 4 4D 7E 7F 7G 4H 4 7 7 7 4 4 4 4 4 4 4 4 7 7 7 7 7 7 7 7 7 7 4 477777777 7 7 7 4 4@4A4B4C4D4E4F4G4H4I4J4K4L4M@`,T|Hh4444444 4 4A4B7C7D7E7F7G7H7I7J4K4L47774444447774477447744444 7 7 4 4D4E4F4G4H4I7J7K7L4M477777777447777777744 4 4 4 4 4 7 7 7 4 4@ 4A 4B 4J 7K 7L 4M 4 7 7 4 4 7 7 4 4 7 7 7 4 4 4 4 4 4 7 7 7 4 447777777 7 4 4 4C4D4E4F4G4H4I4J@Pd|$\44 4 4 4G7H7I7J4K477774477447447744 7 4 4C7D7E4F4I7J4K477447447744744 7 7 4 4 7 4 4@ 7A 4B 4C 4D 4E 4F 4G 4H 4I 7J 4K 4L 4M 4 7 7 7 7 7 7 7 7 7 7 7 7 4 4 4 4 4 4 4 4 4 4 4 7 4 4 4 4 7 4 4I4J4K@x,` @d4444444444 4 4 4 4 4@7A7B7C7D7E7F7G7H7I7J7K7L4M474444444444444744744@7A4B4C4D4E4F4G4H4I4J4777777777744444444444477744 7 7 4 4K 7L 4M 4 4 4 4 4 7 7 4 4 7 7 7 4 4 4 4 4 4 7 7 7 4 4477777777 7 4 4 4B4C4D4E4F4G4H4I4J@d THh4444444 4 4 4A4B7C7D7E7F7G7H7I7J7K4L4777444444477447744444744@7A7B4C4D4E4F4G4H4I4J4777777777744477444444477744 7 4 4 7 7 4 4@ 7A 4B 4K 7L 4M 4 7 7 4 4 7 7 4 4 7 7 7 4 4 4 4 4 4 7 7 7 4 447777777 7 4 4 4C4D4E4F4G4H4I4J@x(8HXhx4444444444 4 4 4 4 4@7A7B7C7D7E7F7G7H7I7J7K7L4M4444444444447447744 7 7 4 4H7I7J4K477447744 7 7 4 4D 7E 7F 4G 4 7 7 4 4 7 7 4 47744@4A4B4C@` P@`4444444 4 4A4B7C7D7E7F7G7H7I7J4K4L47774444447774477447744744 7 4 4@7A7B4C4J7K7L4M4777777777744777777777744 7 7 4 4 7 7 4 4@ 7A 4B 4K 7L 4M 4 7 7 4 4 7 7 4 4 7 7 7 4 4 4 4 4 4 7 7 7 4 447777777 7 4 4 4C4D4E4F4G4H4I4J@`TDh4444444 4 4A4B7C7D7E7F7G7H7I7J4K4L47774444447774477447744744 7 4 4@7A7B4C4K7L4M4777444444477444777777777744 4 4 4 4 4 4 4 7 7 4 4K 7L 4M 4 4 4 4 7 7 4 4 7 7 4 4 4 4 4 4 4 7 7 7 4 477777777 7 4 4 4B4C4D4E4F4G4H4I4J@XP0`/// /B/CDEFGHIJ/K.//ЄЅцч҈҉ъЋ/.//-...//    / -@.A.B.C/D/EFGHIJKL/M-...//ІЇЈщҊыьЍ--...//, - . . . . / / / / ,@ -A -B .C .D .E .F /G /H /I /J /K /L /M , - - . . . . . . / / / , , - - . . . . . / / / ,,---... . . ,D,E-F-G-H-I @@@@@@h#A#B#C#D#E#F#G#H#I#J#CCCCCCCCCC##CCCCCCCCCC## # # # # # # # # # @`,@PX`p######## #ACBCCCDCECFCGCHCI#J#CCCCCCCCCC##CC######CC####CC C # #FCGCHCI#J#CCC##CCC## C C # #E #F # # # C C # #CC##E#F @@HXhx(8HX``#E#F#CC##CC##CC##ACBCC#D#E#F#G#H#I#J#CCCCCCCCCC##CCCCCCCCCC## C C # # # # # # # #B CC CD #E # C C # # C C # ## @H`8\###ACBCC#D#I#J#C##C##CC##C##C##CCC##CC##CCC # #B#C#ECFCGCH#I#CCC##CCC## C C C # # # #A CB CC CD #E #G CH CI #J # C C C # # C # # C # # C C # # C # # C # ###CC # #H#I @@@DP`t##C##C C # #GCHCICJ#K###CCC##CC##CCC## C C C # C C C # #A CB CC CD CE CF #G # C C C # # C # # @@Pp0XABIJ  BCDEFGHI        A B C D E F G H I J                      @PhHx(#####CCDCECFCG#H#CCCCCC##CCC##CCC##CCC##CC C # #@CACB#C#HCICJ#K#CC##CC##CC######CC## C C C C C C C C C C # #@ CA CB CC CD CE CF CG CH CI CJ #K # C C # # # # # # C C # # C C # # C C # #CC##C C # #A#B#I#J @`4` 8`#########@CACBCCCDCECFCGCH#I#CCCCCCCCC##CC#####CCC##CC##C C # #@CACB#C#D#E#F#GCHCICJ#K#CCCCCCCCC##CCCCCCCCC## C C # # # # # C C C # #@ CA CB #C #H CI CJ #K # C C # # # # # C C C # # C C C C C C C C C # #CCCCCCCC# #A#B#C#D#E#F#G#H @\$4L|####### #BCCCDCECFCGCHCI#J#CCCCCCCCC##CCC#####CC##CC## # #@CACB#C#CC##CC## C C # #@ CA CB #C #I #J # C C C # # # # # C C # # C C C C C C C C C # #CCCCCCC # #C#D#E#F#G#H#I @`$Dd(H#########@CACBCCCDCECFCGCH#I#CCCCCCCCC##CC#####CCC##CC##C C # #@CACB#C#HCICJ#K#CC##CC##CC##CC## C C # # C C # #@ CA CB #C #H CI CJ #K # C C # # # # # C C C # # C C C C C C C C C # #CCCCCCCC# #A#B#C#D#E#F#G#H @h(Px8`######### # #@CACBCCCDCECFCGCHCICJ#K#CCCCCCCCCC##CC#########CC##@CACB#C#D#E#F#G#H#CCCCCCCC##CCCCCCCC## C C # # # # # # #@ CA CB #C # C C # # # # # # # # # C C C C C C C C C C # #CCCCCCCCC C # #A#B#C#D#E#F#G#H#I#J @h$Hl######### # #@CACBCCCDCECFCGCHCICJ#K#CCCCCCCCCC##CC#########CC##@CACB#C#D#E#F#G#CCCCCCC##CCCCCCC## C C # # # # # #@ CA CB #C # C C # # C C # #CC##A#B @Xx<`#######BCCCDCECFCGCH#I#CCCCCCCC##CCC####CCC##CC### # #@CACB#C#CC#####CC##CCC## C C # # C C C # #@ CA CB #C #H CI CJ #K # C C C # # # # C C C # # C C C C C C C C # #CCCCCC# #C#D#E#F#G#H @Pp0` ### # #@CACB#C#HCICJ#K#CC##CC##CC##CC##CC##C C # #@CACB#C#D#E#F#G#HCICJ#K#CCCCCCCCCC##CCCCCCCCCC## C C # # # # # # C C # #@ CA CB #C #H CI CJ #K # C C # # C C # # C C # # C C # #CC##C C # #A#B#I#J @` 0Px######## #ACBCCCDCECFCGCHCI#J#CCCCCCCC####CC####CC##DCECF#G#CC##CC## C C # #D CE CF #G # # # C C # # # # C C C C C C C C # #CCCCCCCC # #B#C#D#E#F#G#H#I @HXhx Hh# # #HCICJ#K#CC##CC##C C # #HCICJ#K#CC##CC## # # C C # #@ CA CB #C #H CI CJ #K # C C C # # # # C C C # # C C C C C C C C # #CCCCCC# #C#D#E#F#G#H @Lh8\### #@CACB#C#HCI#J#CC##CCC##CC##CCC##CC##CCC# #@CACB#C#DCECFCG#H#CCCCCC##CCCCCC## C C # # C C C # #@ CA CB #C #E CF CG CH #I # C C # # C C C # # C C # # C C C # #CC##C # #A#B#I @HXhx4d###@CACB#C#CC##CC##CC##@CACB#C#CC##CC## C C # #@ CA CB #C # C C # # # # # # # # # C C C C C C C C C C # #CCCCCCCCC C # #A#B#C#D#E#F#G#H#I#J @Pp(X 0### # #@CACB#C#HCICJ#K#CCC##CCC##CCCC##CCCC##CCCCCCCCC C # #@CACB#CCDCECFCG#HCICJ#K#CC##CC##CC##CC####CC## C C # # C C # #@ CA CB #C #H CI CJ #K # C C # # C C # # C C # # C C # #CC##C C # #A#B#I#J @Pp8h 0### # #@CACB#C#HCICJ#K#CC##CC##CCC##CC##CCCC##C C # #@CACBCCCDCE#F#HCICJ#K#CC#CCC##CC##CC##CCC#CC## C C # # C C C C C # #@ CA CB #C #F CG CH CI CJ #K # C C # # C C C # # C C # # C C # #CC##C C # #A#B#I#J @Xx0Pp #######BCCCDCECFCGCH#I#CCCCCCCC##CCC####CCC##CC##C C # #@CACB#C#HCICJ#K#CC##CC##CC##CC## C C # # C C # #@ CA CB #C #H CI CJ #K # C C C # # # # C C C # # C C C C C C C C # #CCCCCC# #C#D#E#F#G#H @d@p ######### #@CACBCCCDCECFCGCHCI#J#CCCCCCCCCC##CC######CC##CC##C C # #@CACB#C#D#E#F#G#HCICJ#K#CCCCCCCCCC##CCCCCCCCC## C C # # # # # # # #@ CA CB #C # C C # # C C # #CC##A#B @`(Hh<\######## #ACBCCCDCECFCGCHCI#J#CCCCCCCCCC##CC######CC##CC##C C # #@CACB#C#HCICJ#K#CC##CC##CC##CC## C C # # # C C # #@ CA CB #C #F CG CH #I CJ #K # C C # # # # C C C # # C C C C C C # C C C # #CCCCCC#C C # #B#C#D#E#F#G#I#J @`4`8H#########@CACBCCCDCECFCGCH#I#CCCCCCCCC##CC#####CCC##CC##C C # #@CACB#C#D#E#F#GCHCICJ#K#CCCCCCCCC##CCCCCCCC## C C # C C C # # #@ CA CB #C #D CE CF CG #H # C C # # C C C # # C C # # C C C # #CC##CC # #A#B#H#I @\(Lp####### #BCCCDCECFCGCHCI#J#CCCCCCCC##CCC#######CC##@CACBCC#D#E#F#G#H#CCCCCCC##CCCCCCC## # # # # C C C # #H CI CJ #K # # # # # # C C C # # C C C C C C C C # #CCCCCCC# #B#C#D#E#F#G#H @h 0@P`p######### # #@CACBCCCDCECFCGCHCICJ#K#CCCCCCCCCC#####CC#####CC##DCECF#G#CC##CC## C C # #D CE CF #G # C C # # C C # #CC##E#F @Pp0Pp### # #@CACB#C#HCICJ#K#CC##CC##CC##CC##CC##C C # #@CACB#C#HCICJ#K#CC##CC##CC##CC## C C # # C C # #@ CA CB #C #H CI CJ #K # C C C # # # # C C C # # C C C C C C C C C C # #CCCCCCCC # #B#C#D#E#F#G#H#I @Pp0X### # #@CACB#C#HCICJ#K#CC##CC##CC##CC##CC##C C # #@CACB#C#HCICJ#K#CC##CC##CC##CC## C C C # # C C C # #A CB CC CD #E #F CG CH CI #J # C C C C C C # # C C C C # #CC##E#F @Pp8h 8### # #@BABB#C#HBIBJ#K#BB##BB##BB##BB##BB##B B # #@BABB#C#HBIBJ#K#BB##BB##BB####BB## B B # # B B # # B B # #@ BA BB #C #D BE BF #G #H BI BJ #K # B B # B B B B # B B # # B B B B B B B B B B # #BBB##BBB # #B#C#D#G#H#I @Pp0Px### # #@CACB#C#HCICJ#K#CC##CC##CCC##CCC##CCC##CCC # #BCCCDCECFCGCH#I#CCCC##CCCC## C C C C C C # #A CB CC CD #E #F CG CH CI #J # C C C # # C C C # # C C # # C C # #CC##C C # #A#B#I#J @Pp(8HXhx### # #@CACB#C#HCICJ#K#CC##CC##CCC##CCC##CCC##CCC # #BCCCDCECFCGCH#I#CCCC##CC## C C # #D CE CF #G # C C # # C C # #CC##E#F @h0DXl ######### # #@CACBCCCDCECFCGCHCICJ#K#CCCCCCCCCC########CCC##CCC # #ECFCGCH#I#CCC##CCC## C C C # #A CB CC CD #E # C C C # # # # # # # # C C C C C C C C C C # #CCCCCCCCC C # #A#B#C#D#E#F#G#H#I#J@@@@@@@@@@@HXhp# # # C C # #CC##A#B@@@@@@@@@@HXhx#B #C # C C # # C C # #CC##A#B@HXhx###@CACB#C#CC##CC##CC##@CACB#C#CC##CC## C C # #A #B # # # C C # #CC##A#B@HXhx###ACBCC#D#CC##CC###P (LDx,`  x $ DHl(h +,1267CDEFGQRSTUVWXYZ]^_`ajklmpqrsuvwx~      )*+,/0125678<=>?@BCDEFGIJKLMNDEFGHLMNOPQ]^_`hijklopqruvwx|}~                             ! ( ) * + . / 0 1 5 6 7 8 : ; < = > @ A B C F G H I J K L M N O D E F G H I L M N O ^ _ ` a b g h i j k n o p q u v w x z { | }                                                                                                        !"#$%&'()*-./05678:;<=@ABCDGHIJLMNODEFGHIJKMNOPQRabcdefghijmnopuvwxz{|}       %&'(,-./05678;<=>BCDEKLMNOCDEFGIJKLMQRSTUVWXYZ[defghlmnouvwx|}~        #$%&'+,-./6789=>?@CDEFJKLMBCDEJKLMNZ[\]^cdefgklmnovwxy}~         !"#$%*+,-.789:>?@ACDEFHIJKL@ABCDEFGHIJKLMNO[\]^abcdjklmwxyz~                                               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"""""" " " " " "#### # ############## #!#"###*#+#,#-#.#/#0#1#2#3#4#5#6#8#9#:#;#<#=#>#?#@#A#C#D#E#F#I#J#K#L#M#@$A$B$M$N$O$P$S$T$U$V$W$X$Y$Z$[$\$_$`$a$b$c$j$k$l$m$n$o$p$q$r$s$t$u$v$w$y$z${$|$}$~$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&''''' ' ' ''asylum-0.3.2/data/Resources/GameScreen0000644000175000017500000004342410644556627016343 0ustar hughhugh """333DUf""w33DU""f33wDDUUf"fw3w0303030030303003$3$3$33$3$3$3003$Z[$Z[$Z[$$Z[$Z[$Z[$3003$[$XYZ[$[$XYZ[$[$XYZ[$[[$XYZ[$[$XYZ[$[$XYZ[$[$3003$X[X$'XYZ$X$'XYZ$X$'XYZ$XX$'XYZ$X$'XYZ$X$'XYZ$X[$3003$X[$'X$'X$'X$$'X$'X$'X$X[$3003$X[$3$3$3$33$3$3$3$X[$3003$X[$3030303003030303$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$30,03$X[$3003$X[$30,,03$X[$3003$X[$30,,03$X[$3003$X[$30,,03$X[$3003$X[$30,,,03$X[$3003$X[$30,,,,-,03$X[$3003$X[$30,-.,,-/-,03$X[$3003$X[$30,,./.,, -,,03$X[$3003$X[$30,,-.-,,,03$X[$3003$X[$30,,,,,03$X[$3003$X[$30,,,03$X[$3003$X[$30,,03$X[$3003$X[$30,,03$X[$3003$X[$30,,03$X[$3003$X[$30,03$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$30$&'&%$'&$03$X[$3003$X[$30$&$$%&'&$'$$X%&03$X[$3003$X[$30'&$$&X'X'&$03$X[$3003$X[$30$X%&X$%&%%Y$&Y$&03$X[$3003$X[$30$Y'%$%&$$YX$$Y'&$03$X[$3003$X[$30%X'$&$&$'XYZX'$&Y$'&03$X[$3003$X[$30%&$'X$'X$$Y'$Y''&03$X[$3003$X[$30'$%YZ&YZ&'Y$'Y$'%03$X[$3003$X[$30$'$%$%$%Y'$Z'%X%03$X[$3003$X[$30%&$&$%X'$$$&Y$%X'$$&ZX$03$X[$3003$X[$30'&$&%Y'$Y'XZYZY%Y'%Y'$YX&YZYZY%YZ&03$X[$3003$X[$30X&$&XZ$%YXYZ'XZ$XZ$%Y&$YZ'XZ&03$X[$3003$X[$30$Y%%'&ZY%ZXZY$&ZY&ZY%ZXXZY$&ZY03$X[$3003$X[$30%Z%&'%Z&%Z&$YZ'%Z&&Z&%ZX$$YZ'&Z&03$X[$3003$X[$30&Z%X$'ZY$$'Z'%Z$$'ZY$$XZY$$'Z%%Z$$XZY$$03$X[$3003$X[$30'Y$%Y$&ZX$&%Y$'ZX%&ZX$&%&ZX$&%X'ZX%&ZX$&%03$X[$3003$X[$30XY$$YX'Z&'&X%Z&$%'Z&'&'Z&'&&'$Z&$%'Z&'&03$X[$3003$X[$30$XYXZXXZ%XZ&$X'X'$YZ$%&XZ&$X'XZ&$X''&XZ&'XZ&$X'03$X[$3003$X[$30&%$XZ''ZXXZY&XZX'&$XZX&'$XZY&XZXXZY&XZX&%$XZ&Z X$XZY&XZX03$X[$3003$X[$30&'&Z'$$%XZX&Z&%X$%YXZ'&Z&&Z&%'$%YX$Y'&Z&03$X[$3003$X[$30$YZY$%YZ&'ZY$&Y&%Z&'ZY$'ZY$%'X%'ZY$03$X[$3003$X[$30$$%XZY03$X[$3003$X[$30%&%Z'03$X[$3003$X[$30&'&Z%03$X[$3003$X[$30&'$'Y$03$X[$3003$X[$30$X$X'03$X[$3003$X[$30$&'&%&X%$'&$03$X[$3003$X[$30$&$$%&'&$X$$'$X%&03$X[$3003$X[$30'&$$'&%$X%X'&$03$X[$3003$X[$30$X%&X$&&%'&&Y$&03$X[$3003$X[$30$Y'%&%Y$%X%$Y'&$03$X[$3003$X[$30%X'%'%Z%$Y&'&Y$&03$X[$3003$X[$30'&&Y$$&$$Y'&'X$03$X[$3003$X[$30$X$%'$X'&Y$&%YZ&03$X[$3003$X[$30 %X%&%&&Y$$&%Y'$&%$&%$%$&%03$X[$3003$X[$30&'%&$&X$&'$$%'$$Y&$%X'$&'$&'03$X[$3003$X[$30X&&'&$'Y$%Y&'ZY$YX$X$$XY&%'$$Y%X%$'Y$%Y'$'Y$03$X[$3003$X[$30$Y&'%&Z'$XZ$$YZ'%YX'%&Z&$Y&%YX&X'%&Z'$XZ$'%&Z'$03$X[$3003$X[$30$Y%&&ZY$&Z'&ZY$%Z$X$%ZY'%$Y&%Z$&Z$&&ZY$&ZY&&ZY$03$X[$3003$X[$30%Z%%&'Z'%Z%XZ'%Z'%%Z$&Z$%Z'&Z&%&'Z'%Z&%&'Z'03$X[$3003$X[$30&Z$$&$ZY$'Z'$%Z$$'ZY%$'XZ&X$'ZY%'X$$&$ZY$'ZY$$&$ZY$03$X[$3003$X[$30XY$XY%&%Z%'ZX%Z'&%X$$Z&&$Z'$X$X'&%XY%&ZX$&%XY%&$03$X[$3003$X[$30Y$XY'%&Y$%Z&$%&Z&$'%$Z& 'Y$$&&Z%&$&XY'%'Z&'&XY'%03$X[$3003$X[$30$ZX%'$YZ&X$YZ$%&XZ%%'$&Y$ $Z'%'%&Z%%'%'$YZ&XZ&$X'%'$YZ&03$X[$3003$X[$30$'Z&%$'YZ''X$YZX&'$'Z&$'$X'Z%X$&Z%&X$%$'YZ'XZY&XZX%$'YZ'03$X[$3003$X[$30&YXZY$%$%Y$%Z&ZYXZ'%ZXY%$Y&'Z'$$ZX&'$%$%Y$&Z&%$%Y$03$X[$3003$X[$30'ZY$%'YZ'$&YZ&%Z&&X%$$'$%'YZ'$'ZY$%'YZ'$03$X[$3003$X[$30$%XZY$$03$X[$3003$X[$30%&%Z'03$X[$3003$X[$30&'&Z%03$X[$3003$X[$30&'$'Y$03$X[$3003$X[$30$X$X'03$X[$3003$X[$30&X%03$X[$3003$X[$30$X$$'03$X[$3003$X[$30$X%03$X[$3003$X[$30%'&03$X[$3003$X[$30%X%03$X[$3003$X[$30$Y&'03$X[$3003$X[$30$&$03$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$30,03$X[$3003$X[$30,,03$X[$3003$X[$30,,03$X[$3003$X[$30,,03$X[$3003$X[$30,,,03$X[$3003$X[$30,,,,-,03$X[$3003$X[$30,-.,,-/-,03$X[$3003$X[$30,,./.,, -,,03$X[$3003$X[$30,,-.-,,,03$X[$3003$X[$30,,,,,03$X[$3003$X[$30,,,03$X[$3003$X[$30,,03$X[$3003$X[$30,,03$X[$3003$X[$30,,03$X[$3003$X[$30,03$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3003$X[$3030303003030303$X[$3003$X[$3$3$3w33w3$3$3$X[$3003$X[$Z[$Z[$wZ[w$$wZ[w$Z[$Z[$X[$3003$X[$XYZ[$[$XYZ[$[wXYZ[w[[wXYZ[w[$XYZ[$[$XYZ[$[$3003$X$'XYZ$X$'XYZ$Xw'XYZwXXw'XYZwX$'XYZ$X$'XYZ$X$3003$'X$'X$w'Xw$$w'Xw$'X$'X$3003$3$3w33w3$3$3003030w,w00w,w03030w,ww,w.,0,,ӊ030,Ӏ,03030,,ӈ030030-ӀWW030030,,WVWW030030-ӀWWUVUVWUWTWW030030-WVUVUVTUWWUWTW030030)()/-/-UVWUVUWVTWVUWTWU030030)()()()-, /,,/-/-/UVWUTWUTVWUVUTWTUVW030030)()+)()()().--Ӏ,-,/VWTVUTWUTVWTVUTWTVWUW030030)+ )()+)()*)(*+.--Ѐ--Ӏ,-WUTUTUTVTUWUTWVTUWTTW030030SQSQSQSՀՄ. /--/--,/UVTUTWTWVTWU׀TVTUTT030030QwtwuՀԀԀՃ./Ҁ/-UTUTVTքTVUVUTW030030StwtuՀԀԀՂ./ҀӀ,-UT׀րԀׁր׀ԁUWT030030QtuՀԁՀԁՃ.ӀӀ-/֊ֆ030030SuՀ;,.,--//ր/030030uՆ,.,Ѐ--///ց030030+.,Ҁ,-/ց/׀Հ030030*+()*)(+*.Ӏ,Ӂ.Ӏ,-;ցՁ030030)*+()*)(+*).ӂ, .Ӂ,/;ցՀ׀Ղ׀Հ030030)*+()*+*)(+*)(.Ӏ..Ҁр-,;Ԁւ:ׂՂ׀ׅ030030)*+()*+*)(+*( 3,-..Ҁ .-,;ր:ր׊030030)*+()*+*)(+*)(33,/.Ѐ.;ԁ:׀Ԁց׀33030030)*+()*+*)(+*)(033Ӏ3ЀӁҁ;ր:׀Ձׁ303030030)*+()*+*)(+*(0330Ӏ3..,.-;:ׁր3Ӏ303030030)*+()*+*)(+*)(0.33030Ӏ3р..,р-;ւՀԄ:30Ӏ30.3030030)*+ׁ+*)(033 033030.Ҁ.,--;ՁՀԁ3030Ӏ303030030(ׅ(03303303../...3;ՂԁՂ׀Ԃ0330Ӏ303030030()*+*)(0330330.р.-Ӏ-0;Հ89ց98ԁ0330Ӏ303030030()*)(0303..--13131131;Հ8׀0330Ӏ303030030()(0303,-..-р -13W313W33W313W3;8803303030300309Ԃ9 0303,---/---1313113131;Ձ8Հׁ0330030300308ԀՀ803Ӏ3,,,,,,-131131313;ԀՀԀ133030300309Ԁ9030Ӏ3/,/,/,/313W33W313W3W1;01Ӏ33Ӏ030300308Ԁ8030Ӏ3 /Ҁ1311313131;ր01Ӏ330303030030-.//.0330Ӏ3Є/3Ԁ30Ӏ330303030030-//.-0330Ӏ330030Ӏ330303030030-./Ё/.-0330Ӏ3330Ӂ303030300300р330Ӂ303303030р30300300.33030330030.30300300 3300330300300300303300300303030300300asylum-0.3.2/data/Psyche/Neurons/Backfile0000644000175000017500000000105110644556627016732 0ustar hughhughHmr $((( + '  #/(V$ =#00@,2(^(*,&Op 0YX0F4ݸQ-T4 0*,],84A4.,r8((qai]z4N,@wX<ʈΈ//5,0 ͙&"0I{;WIΑ4z8rcdCl'5,&bWMl>(U.oʩ46Xz˺3]^k<1C))g#tUnlUij˜'e_l: jꐘr^ؙ%0+>j-!"gO5:V71l1uW90Ve"PH()+UneҸwz^hQ;]0q~dBjd nl3A1+·ml1fד;0X0¥@rA,k{R۝X0oTc-26'asylum-0.3.2/data/Psyche/Neurons/Cell10000644000175000017500000000651010644556627016177 0ustar hughhughHmr $`LSR #2 #HNE R0, $!/(($A"8(P(x, 08 + 1 h&d3-O$ N _^ȿ_~bB| L\bZHI f U M NxNCDEo1xNuT̀_`AJK$ JKJT JKD$L_( a_BD(7(RY}t"k _`_5u#]~jUΘQ8L_ #(e_AK +,A.[3)>9zW'MJNe%ܠ٩.i5=Θ_7A}xh $O)U*2Mи ȲN͋ӵW# M-TŸ+пi-<пgZ/RH}x_)$<}`"R~TNF@_HInpAJK55ٟ_yD__Ӑ_Hz]O0ٟ(__^<_CmH_Z,K( ZW$ÿV?_<_i_N-C_KLU_o/I)9Z88[j_ f{-N!d`_L)__ $'_;Wl_!]пZʟil|ogfn_߀J4_Cl_?k#S_ ?!& D?}ߤ̨XN_l_%1l¾ <_䃃v-_쉘Y1[WWZfl.__-vۿh_~1 _ϐZM֩ ߸ o_߂7._\Șo_NJ—7*'OK,O%7_^bH_s["U9ߚD߀,A?y_M__R|_=HI\(lѪ@r_(bJKeò)E|K1O>_#T _ $IP߂3b!ߩr4G݃_R_HI _?ӖG_`k_Űl_ 4)t~_ SzJݰ_nXؕNh_ڋY_탚쐷vY)?00xNcTaUd0g$$\Cn r_S(0 ١]nu)%.rX8O0/P-{oV 8Wz.T,p2W!mq}Cn3E͉r֟Ăl`z1}z__v`L`8KٯY`)LvϽzW[zPNXm"ɻуeN`Wb ֿJÛ3W ;E K?T >,|vCz<  6C^`_u?i__SRZ?ZbuY]R+F gTmEo=_B`P 0e vHI&_#_.wJK  <^A1 <_H)}4zH|A_~JO,S<|@п_"1uI1_@M!]LLE_q_T8Fh}r`_(VA2MOˈL t2ˀL0[b$u>_$aNƼ,xy?ʟ F wg&_!(64jz{3ǂD_Vw\远!L|}cۿ_-_FG_À (So׍_Na߈\,%J`? MN8aY%4_,:CCW]@ڨ5_ 4_5JLo >_v/B3m(#D\Y&q*7^9U{oMN C:/ {|JKN_ȧƩ!_wzǐej_!-޿ϸ࿰?)]п_2lS࿘_?]YӕZ30_xU MR8\ߢ&HI' Vpqߌd_d}"_6Ā?36QzMB\_I((yñ_d_jDEc9tEhgAȿSj.6ݨ_V V8W\ kb_{DȮ*#ӕAdp|ۀ{ |ψ&C}Kꈮѣ޼ۑ* ^i &J!_% ̆hks+/Ohb{~ ŪP;_^ TԀ _((_  ߲_%ɜ \U>(_?ȟ? ?ݜ0SHISкȸ %9JKJ!ܨȸ 7ZsdR\ Z\_HI']i tJKbf*_u| ("_/HIń>?|_6~h___-%G_o7_} DEZ_"%Տff?pq_Q_ZZ6MMo$?.;?YP" ?^Z/ӸȈ$_gT1 ?%! 3ⱐʃ?~B_o [lo WVʎW_2_[\/:_? ~y$=a߸ ~G`> ]%ȴ_ #D`JÉ S(C$6 Wno _똀#jր $wW79_r`KvE^(+Dgw%1Fv"%Mv[~__FG"EGDMLV_Dr)oJ XS DLE4`JDru_?-_ߌO(L +L VT T&(V:,# asylum-0.3.2/data/Psyche/Neurons/Cell30000644000175000017500000000624610644556627016207 0ustar hughhughHmr $`  X ('2$C5(E,EPhzP_ _V $[_(_ A $V _x4__R" \(b_"} Nbe_ }<_J  k_XHI5x?)1 _JK4_TLj&o"9tj&  @N'_Ҍ~ea_ W{_:  __?A_+^|b_ _$_>߉>l~___W_\g*p`T_ڱ]ؿ_/#1ڈ_s_ǚ V__Pg}:#bfPUҟ_ֈ+ D_*y_um__S4Y|oOc b_}k| _ɉ<м̂0Y_ _5w__ \_~+w>_t#ky5 "`?!_K_ހWВ 8 _ǐ ~u_ ?'Ŋ__ co8__uq? _&_8„}Ÿߞ?_cX8 o~ %BC NL_Fcw_;3_ӿ?l\?T_gױm1w<_Oؿ<_ ӉO<?߈YER sK+|zVR=_(^T0>#ģW_r|* 0+ٰ z^GxL%Md wpzk'2 x}@ #XTO> 5߸4& HLhGB}HIE`ɀ?h JK?)Sޙh05n&͸`B+o1Sov^n2m8*?بúqw"~`JG[?_!bEE!TBzoGdk$kG:XK N)[^QTE0߁8,OMcn_Du/8D0Lf bS]x (i "`T_@c^K`| 0`Y $ؿ^)_,_ BӃ9 KR|j\{dx[_bDEu߃T|^s\b.<H_^ɹJT _߂(P^k(TT(|E܈8W^ø^CM _`J]kߤ'?_k>ߘZNLk_Or9ߩ S i?FހyK.9u"V J_KZx0 M=9_ _G{C[:Ṉż#=}.QeiH:*r3Fӻ 3 :!?HI {JK<C_|a'}?" _jDE"Y >ڦc^N@ҟAl~*xy8c`O z{Є#Qš ߋ_ |}#MCd<_$`~I$__"|+ VJN轐^l(@ʽ=?=lhe$ą|.1J OGn!O򊔀O=]L J`J xZ_q^MN?#U_t4E9&ȿhFF_0~#.,ZXQ}$_ӿƄ:_&ZKHzf_ E"U?L߈_4Ϻ f9™_U_نSM?_8N<4a_vS`ڐNJh*߭eH_2U__ߊFJD Dn___x fQ0 _ߌ^c XTȡkPkM 4eT[y8] ` |?ÝO^п-|$*eŔ,50èҒ(_R_y\2с(Q /Mz $%b]vagC{3h__wtеel?ruеPe̱=o=п]ZR"*ֹ€b"& \ <M&I6Vݎؔ-z>_HI]d\.xDy1| TAJKPщ 0 !exy9&g')/z{:_iڲ=|}_'(.׏ d9f( ΀cD' b[$BŠǨ΃ۀ[JyJ5(J89EGNPLS~U$i0Tm(L-T(/N>VV(asylum-0.3.2/data/Psyche/Neurons/Cell60000644000175000017500000000700210644556627016201 0ustar hughhughHmr $`dgeMusic_Volume" ,, $,3 '$C$<0-/((@ j,K_$*VK_  4(V-{ӊ_ `<x1N75V= _UHI_~s^X5GFu_D!JKm?O] O\}@> X b {~ )uӓ+o p| "c/ؿ3[?p6:6 >˳ ,MQn~=пiߐ bE~iD^G݂R_._2ٍ]<) %ރ`q0 VW‚?;$]M?JVJ!K.۵J `5f}")$>;Qgfg\Uې*Mڇ_j(]_J_|j%4\R?' aD:Vc^J_ӈ`O&=@RZPNbqrL[l ʚ?iL_c/BudTh?X6(Ҋ__n($ˏ}LLֈV1x*0HI|cyu%|N\JKTݿ*9,M77s!"ҳC_>?l8ȈdcF]6zп? ԰r6_U+\~rl`_#]#>`__ք^ „'*?S&L *|/K$JV Lj_!T`fDeFg[_0Āfj_ʅvPpLite~) O#r( ]0U'] 8->/zL0o"ERO "b0>CM[)Lǐ,(^XMLD).DqCT__h^ _ԃC.dT(jĀF 1Q_ .\B_0Vez?194ư\!mM!]Ԕ`>5(xR*-vֱ-\eRhFMIh~q1_Le"5{ 0!ʠ_ \eU|fߩ|__?WϹF7_߃YÓ[!\^u 󘿴^ِ0W@__w{DĘXHI&KnрX߉_ģ[ИYJ)io[!n@GLG_@J$,M FT,R;SΉTFasylum-0.3.2/data/Psyche/Neurons/Cell70000644000175000017500000000454510644556627016213 0ustar hughhughHmr $` 3( $,2 $/4:3AQ>z__@_(/ӿ_ "g_;xf_K?"iJKpq߈WX!ȿN?؈_ߊ_DLlJJ 1q"~ }?2>TaL_D 35? _}_KDK__ @2_wyd_C'HTTNKSV5d680$.TD(P!asylum-0.3.2/data/Psyche/Neurons/Cell80000644000175000017500000000520610644556627016207 0ustar hughhughHmr $`  X ('2$C5(E,EPq_ ( 4i ?_|-d |[ٰ 4P K_ /~k<¹݁Rn=O_S_ወ (_({A<Az1=!RV =|_@Ln+;ؿ vؿ__ wbAEnRz2;ǘvښ=\]TV5Dǘw<ڐ^BvHI3e D0UwJK3_ }M0EpD|ҏ=NQH+.(QWYIҰ.Y9ЎI?zO?r'˸T VF(PN@L@uN!~h "( _('Vnؙ:7T8F[ J:E;a:-SňE7G6 €Ƚ`Q?lbK*QLX5׀d$…F-? \LɑaX߹"_5_Ћ-E z>`d _3z~fʁԈ _STz zʋ ۔)$ N_rDc"_ljƘ_3 Ít^ڟͷIv?ft4ʹ*>!xȦ_u5˙Nm`h_K=*N=D&ۼ__`_ȸ&ݠL_hD9kdDRN__M8Zz^J࿾w8;J_2<`__[ENʟFSqtN%h4m<LID >>qHIJKMJN  ʂQ_>~/Q_*K a_ _j_*$R z_% MQʧ_S Z_W< &4D J>x଄5zV#W X ^'`e7Dg&" ƉˡL Wى9e<*V$ge>_$K!JD N Jq\LV ^"&V0(/,-EL(,,asylum-0.3.2/data/Psyche/Backfile0000644000175000017500000000116210644556627015304 0ustar hughhughHmr,, $(-(( '  #/( V$> =#00@,$?(*,0Tp#(%X0yB,+ݸQ-T4 ,H0*,]H,84A),,'N a&'r]Ø4,[wX1 -ҠQ,0 ͑&%ƘClTWΑ4z0ژ(.dCl'5,&WM-ZI '<.oɉ4 z˺3]őPh6CR(NUw)-xNMnlUiu(_e'\R53%Y0+>j-!"082# llp3QPl‹+J,W]\0VT1G#f5+UneҸf\G,o_:Ȱ'asylum-0.3.2/data/Psyche/Music10000644000175000017500000002566010644556627014756 0ustar hughhughBodge 1    LXP $p< #&\'`)!"c@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ "ca Aa A Aa A Aa AaAAaA Aa Aa A Aa A Aa AaAAaAAaAaAAaAAaAaAAaAAaAaAAaAAaAaAAa Ca Ca B A!C B Aa CaCC!BC Ca Ca B A!C B Aa CaCC!BCCaCa BA!C BAa Ca CC!BCCaCaBA!CBAaCaCC!B C!  C C!  C C b!C  C   C!  C C!  CC C! C C C!  C C!  C C b!C  C   C!  C C!  CC C! C CC!  CC!  CCb!C  C  C!  CC!  CC C! C CC! CC! CCb!CC C! CC! CC C!C  C!  C C!  C C  b!C  C   C!  C C !  CC C! C  C C!  C C!  C C  b!C  C   C!  C C !  CC C! C  CC!  CC!  CC b!C  C  C!  CC !  CC C! C  CC! CC! CC b!CC C! CC ! CC C!C  C @@ @@@@ @ @ @@ @@@ @@ C @@ @@@@ @ @ @@ @@@ @@  C @@ @@@@ @ @ @@ @@@ @@@@@@@@@@@@@@@@@ C @ C  C C C C @  C  C C  C C@  C@ C @ C  C C C C @  C  C C  C C@  C@  C @ C  C C C C @  C  C C  C C@  C@C@CCCCC@CCCCC@ C  C   C  C   C  C  C  C   C   C   C  C   C  C  C   C  C  C   C  C   C  C  C  C   C   C   C  C   C  C  C   C  C   C   C  C   C  C  C  C   C   C   C  C   C  C  C   C  CCCCCCCCCCCCCCCC  C   C  C   C  C  C  C   C   C   C  C   C  C  C   C  C  C   C  C   C  C  C  C   C   C   C  C   C  C  C   C  C  C   C  C   C  C  C  C   C   C   C  C   C  C  C   C  CCCCCCCCCCCCCCCC  C    C  C    C  C " C  C   C    C    C  C    C  C   C   C   C  C    C  C    C  C " C  C   C    C    C  C    C  C   C   C   C  C    C  C    C  C " C  C    C    C    C  C    C  C   C   C   CC CC CC"CCC C CC CC CC  C!  C C!  C c b!C  C   C !  C  C !  C C  C ! C  C C!  C C!  C c b!C  C   C !  C  C !  C C  C ! C  CC!  CC!  Ccb!C  C   C !  C C !  CC C ! C CC! C C! C c b!C C C ! CC ! CC C !C C  CC  CcbC C  C   C C   C C  C  C  CC  CC  CcbC C  C   C C   C C  C  C  CC  CC  CcbC C   C   C C   CC C  C C C C C C c bC C  C  CC  CC C C C  CC  CcbC C   C   C C   C C C  C  CC  CC  CcbC C   C   C C   C C C  C  CC  CC  CcbC C  C   CC   CC  C  C C C CC CcbCC  C  CC  CC C C C  CC  CcbC C   C   C C  C C  C  C CC  CC  CcbC C   C   C C  C C  C  C CC  CC  CcbC C  C   C C   CC  C  C  C C CC CcbCC  C CC CC CC  "C@@CC@C@C@@CC@ C@CCC@CCCACCC@  CCC@C@@CC@C@C@@CC@ C@"C@@ CC@CACCCC CCC C@ BCC`  CBC BB C  C@ C` CC C@C C  CBC CC`    CCC`C@ BCC` CBC BB C C@ C`"C@ B CC` CBC CC C  CC  C  C C  C CC  C   CC C  C C  C   C C C  C  C C  C CC  C   CC C  C C  C   C C C  C C C  C CC  C  CC C  C C  C  C C C  C CC  CCC C CCC CC C CC C asylum-0.3.2/data/Psyche/Music20000644000175000017500000002043010644556627014745 0ustar hughhughBodge 1     @HH x xH"c aA aAA aAA aA aAA aAA aA aAA aAA aA aAA aAA aA aAA aAA aA aAA aAA aA aAA aAA aA aAA a  C aA aBA aBA aB aBA !  CA  C aA aBA aBA aB aBA !  CA  C aA aBA aBA aB aBA !  CA  C aA aBA aBA aB aBA !  C C aA aBA aBA aB aBA !  CA C aA aBA aBA aB aBA !  CA C aA aBA aBA aB aBA !  CA C aA aBA aBA aB aBA !  C C a"B aBA !"BBA aB aBA    C@ C a"B aBA !"BBA aB aBA    C@ C a"B aBA !"BBA aB aBA    C@ C a"B aBA !"BBA aB aBA    C  C a" CaC A!"CBA !C C! CC A!  CA  C a" CaC A!"CBA !C C! CC A!  CA  C a" CaC A!"CBA !C C! CCA!  CA  C a" CaC A!"CBA !C C! CC A!  C   C a " C a C A !"C B A !C  C ! C CA !  CA   C a " C a C A !"C B A !C  C ! C CA !  CA  Ca " CaCA!"CB A!C C! CCA!  CA  Ca " CaCA!"CB A!C C! CCA!  CC@@@C@@C@@C@@@C@C@@@C@@C@@C@@@C@C@@@C@@C@@C@@@C@C@@@C@@C@@C@@@CC aA aCA aCA aC aAA !CAC aA aCA aCA aC aAA !CAC aA aCA aCA aC aAA !CAC aA aCA aCA aC aAA !C  C@" C"cCC""cCC"c C ACC  CC  C@" C"cCC""cCC"c C ACC  CC  C@" C"cCC""cCC"c C ACC  CC  C@" C"cCC""cCC"c C ACC  C Ca "Ba B A!"BBAa Ba B A   C @ Ca"BaBA!"BBAaBaBA   C@ Ca "Ba B A!"BBAa Ba B A   C @ Ca"BaBA!"BBAaBaBA   C Ca  "Ba  B  A!"BBAa  Ba  B  A   C @ Ca "Ba B A!"B BAaBaBA   C@ Ca  "Ba  B  A!"BBAa  Ba  B  A   C @ Ca "Ba B A!"B BAaBaBA   CC@ A@ "c ACAA@ "c@ C A  C AC@A@"cACA A@ "c@ C A  C AC@ A@ "c ACAA@ "c@ C A  C AC@A@"cACA A@ "c@ C A  C @@@@@@@@@@@@@@@@@@@@@@@@ @@ @@ @ @@ @@@ @@ @ @@ @@@ @@ @ @@ @@@@@@@@@@@@@@@@ C a"B aBA !"BBA aB aBA !"c@ C a"B aBA !"BBA aB aBA !"c@ C a"B aBA !"BBA aB aBA !"c@ C a"B aBA !"BBA aB aBA !"casylum-0.3.2/data/Psyche/FSPAliens0000644000175000017500000001074110644556627015373 0ustar hughhughHmrpOF\D\tDt$`80l P|,\1\TO HT\ h<\10TVT$)D 3U13H1WJTdWV!$$ 8 V4W.V+m(;f*F6LV eVV\DFT`0i,LKTh p x5֘FܘTx8ʀVNZTL^Ɛܘ݈NT=(ZT@ސLېD$#JE0ހ> N$L [SG9=1====,==)==+==-===== Tlt,P֐=====5)==(==)===9=5=Mx9>,X@h86@p,Ѩ  \8Ӱ\ XL1  MHY̅:8yuNLWU RG_>1À_řRH{iP#nVVUVWWWXXWUTKF=aN4ېUסOGE=:<65~zzS{~ЈXϫ-[WXטWNMJAUCSFSTLJ?<zѦTcIЕ  D0LťE*T;~L"va!ɳc0\ +C+F)ΫN%NINB~|3ϘN(u߱a####DI$D4%D7'(ȑة)&FM$J͡P"EKǠ$F!̩% %M$Fz#E" #######"!>`$sL$ZשNLQ)'DJFTK&(K''''''oIH(p'ͱ&G%nCHOR=a_&D_ȉ,ש(()NG(F'Q))) (u&R?B1K0'vTsLqOOOOONDNMM艢OOML<81/&eVJA?;iġ ldsdUVakTjHW[WWW!$ *X`TS䈋vnР3ZVyĴƴɟפD6wlP )&    Ss  yB  !!##$$%%&&{_R}I@ABC NOOOOOOOOO¹ңEEEEEEEEEEEEEEEEEEEEDEEEE@EEE& 5xճGAA __sqqݣqoܱKBtf zlqk   ) 5?x9     ###$5()$8!%$"#####G!T$&D+'$K('''''''('"Ir(T)(t)))1/2 jRYyɢ ɱ !# $ %&ΩѶٰѮ|aB*1OE  sok ##'asylum-0.3.2/data/Psyche/FSPBlocks0000644000175000017500000007021210644556627015374 0ustar hughhughHmr&F$44p@x`@ptX8\d`pTPܰT tD<LX,ЬL@\؈8(X HH$\$l$ @LlTl4,$hx<$T|D t<Dx0H| d0H`t 0 "8 pl ,ѐ,-,./ЈGD(08G$B N L8FMPX`hpxȰg1"1HP\l$\lxb  -0B__ZO-_DFUEmT_>z*L%_eO0P_9 H|,-./ЂhӀ J  ҐJ K???p??????^Xp(`8h#6567JN64X 8 R04b" v8*N fE65 R 0@t#!CSvSRwF( 0/ b DNrs XX 8#Cd >$ #XIFJ \X g( 7.T<Z/!Z"/^j $Z^wZ;L-( [THT`t<` HF #R,TˈLND N VOTNۋ\|@|4p,<BCBCИCA# X L , @ B8 $ 81U$7.SL-.V(AD=b $)$H( V ( b)L+Zj @fpԑeP|sejdl \d(08)b\ HLT\d<|D(&W 5]?_,BJ#\CJ$v?l" ?L L!`$;zL!?j]bq? ?Z?~!X J>TCxz{(6} >{4\$87x u,БTV 7(t5ZWY8bV4M_ܰ(Je#`ch&J(R Q)V lt,Hd|8D4x*HX.#(0!J &v'(,=(N+)4A) R V[:L/VqTD)JW%2$i^1L]4jY(Jk VZ]tȌJY Oȋ:TtWV'kWINTkWq tșE >c^PaW~uM.tKoWb2H+QԘ Rՙ0,.K6PyH8HHHx X!f" L"%XqnF\"$ U'[M1,%lQ!"$=N!41NNFTVtZ@9ӤLL X\T|$UJW $;buN(4LҀNBVh6sZWTW0N7\((TɈWߕLVyMTfLϰV}}TFL%ِV[0bVSfUy\l1ۈTV5$u^ :)L<d,d< ttp \lF4rJ<2 MY;kn}`]6L ,t PHHl\(X!k@$bA" D#(DXb $;AAT"4 B JNR LK@L%KK-bbe0(NINZBj$J<аVn,9O^CX1ZKk<,P#<$j2Ty{!q-b U - rn*vLh4i@$7Bkk_rskLL-j$` c4| X|(l 8hKʚβW9?1kHX^S@L(<-6 p<ϵ lGk VyU2.sB4V5P_g)Y<n\5_M55ɬT| `,\_ݘh;X_L2T4jeـ;A4<,^wOT`Ee"N֙I=9>HLTX\`hltx P\dptH` Lt\ J( (N ^."%< 4>a`?l,ڰq\4&t8@aPh(Pl¨a<4FaL[Jf/vu//dw=(q,@@x0``!V\ [Z[̀ Z͙RF0xT̀͐̀/͈ ͈kz)vX L LďPט1J؀ GLja/ӈ 3 JR.$R9BDNF=/ 1Z  J0] 2Z $UX,ɫӫY$DT1GӁ)ԁԁLKJMf[/Ӂz)Ӏ  4HP\ 0$k$Ӏ R b]J ѐMJNM5)"0_!<3?O.VWu<ЀTp``8t ֈ^+^L58ۘRtH/,$@fzSSR ŸVL)oO;z, ^ .d ?EVL(},*/a %/$&-"=%.=Ɂ===+-==x =<5;=)1;=x?= =y6T==z_8= /$T4Ҙ@-l( v..07ڐ.7vp-L4= w/X w\Gj/0,Iw 8`@ҳܳ$ ZDZZ N7ܳ Hos{www{S % x}&UMQP& )^A)lv$)))v^  وI $OϐoFU[̀aL$oSpk(aSJ~o7E L$)LOL LSCT I{N`7/Dm7Z')V[uS`R(TqF҉E)?Z 1Ԉ M#7>}+,l,*)UkO[ ]<) k]EZ8LES  ɟJCJ+^jT Z(\<,?5Z9]G" YgmZC{){Q'׉UϚ97+U"͘USV󘻟̟\.ؐˆUgT^T=I10`,@P\dh(\& h<<} L-@<`Q Ul)qWWU]$TW9V5VC(&͐X(TZ[T=nqTK"\ KTvV/?.,e(x0&O$,:y<8.vZu-nf\D^!Q$0+\Bn+ b]D6L_m]Hٚ'/!+0\_jPOW^֓^\-(0\ dx.e#U^se?2 E ] T2"X0d1%w8WZ9ʀ\DS_)^6s14"!Sg|aL_p%f \#|a$sVsЮ2"/Aa,<(8HXhxF/ !?DS/ @h(Pxz:-j~{514\{Z`\l^O 8T0Z> W(]-ZKpdig,6d&=~ a,,6x B5fzxfuf>h @ۘ ^Ӫf ],ա/ j78R<5}< 1(2eݨl??l1bNZ = ^^;l9(%Ldk(\} dx V/T(jJ_&4l $@`޶(׈$ֈ L/Lwյ.V-J L̀ ;(, NFT,D;XL D 0eT]L$peѱƧ  Lw֠Jv\uu(md0.R^<_(Utt, 4"\3SYd|aLU]iޑ^W*l:7D|P L\xE뒐\.! t/-, -z:,lݰ&dr\l3,,Df/-J`e;;ch,T\o4 ,9 $؀,FdŨ3$lT\ b;zZ,j}>)* / R  Vz \# t/- & ' P Q8aLB,l\SD(_(|d  tPDfRuPQJeR ,DuX uTT,9  $FPF &dŨ 3$lT\ bzZ,j}>SPQQ R@x(T8x%&'$ $%'$$$&$-$f$$$X% &  N '(NC0! ,#0)C'Y&Jv3nVzT'ǘ'  L0p'$T9'9^>LY(Z 0J ;  Z$1ZY Y D Lw [ lDlJF X *DRBJJLY(Z l, J ;  Z$1>= = D Lw ? lDlJF < *DRBJJ81,RĶx.b]'˰$! ~G)=;츊'!rzL6؀LK BIJ7ww0EjC?^7TJ[%% 'z*/0R1 OPQRVWXYأ;,T|cSTUfZ[\knpt]^_y|~~~||zzwttrrookkff__VJYH;7xwtt͐ʘɡ0++''&&]]^^^^^\\\\]]ttZXʨUSSOID< JHߘf>ffqftfwwwwwttqqmd_ZZTB<6/&:c8bh TRPZZҷ0җ-r%pjdcbϘdfgfeȀdb_\[WUQ PO_Pк~ؿё]ړcvvww:y {}D~|{zyunk >ytV2ؘԐӈРɸŐ ?)tِumb<]ZXOCᶩW񧙥飉ў:^]\xODd:8nQ2f\e{ǘ\ D3?4,%^\5ꠕ@cY5rFGGEJBMBEGFD (v̙tnL:dKNOk~OFE@w>}~|D5zGqD&a@BDA<{z={>=;ՠ aaqDZZZL?YYX јcUIPQRSTUuut˙JʨF-,؃sreuۀtrHG2UVWXYZ[\]^_~~&P5&&&uu&@A5-3ȥȡhFDrFFvvvvvvDv vG%wTWwwwwwrokkkkkF]Zo s {{{{{Feb^&F|ڈ}}}}}FfcF`W|D!WGyxxxxxD^PU2j(λ n\987520+#FDȕ=;8521h0/.*&=5lԹn?>:0 RzplъЉ¶]Y.)''''''gм99a''''''wwMIHF210/-+w+s+^\[Wघ1/F0/-+ɋψ==ȸomid 6577777ܚ|HA=nK1Ȧ77777YF&&&^777777777K;;;s777777777;;s777777X>CC{777777^>1POME51-)%! F&951-)%!/??????????BNN????????K M???????? M???????? OO???????????QQQ??????????QQQ???????????QQ???????????kQQK?!ӈQF1/*ulPvK?轠轘NKGF.&n>~f6a7kkk-m??m~}O?????????> M????????? M???????? M???????? { %OO??>=;8520g!????>=<98530+'# ?????>;4,زh?=;:8541p0-i*(EF\#FPBGzȏ؋ǰOy︥eTO/`5L#!D LWLUUe!LTT~TGTBUQ#}##Հ>+;74sss?=ٛG@{okg'#c%򷰥ېA11???A????80'nn???80' څke_'''''''̼1c|mm''''o99a'''''.Ḵ4Q>;5sssssssޔ3qq??????????MO KHFF~|rho*^]44GDՀGFf̈˸˘,q4ɯѫ(DVͰİ;7ڀd[QxΠmF%NyyИ͙E1/*]XPº@qݹAQPM0-)VjLB;gfNLv1oMN=<:974/' `#??????????NN?????????D? OOO964p>;jdss964 pȰ74f'pss̘6ˠ840/,++_=}QQԀ842.,)^QjF'$֠PQRSTUV3336=WXYZ[\]^_PcvL<.&DjаP<4G{T, f   yz prr_V|RI\JGGGzHMF\>|:111  ha______jw~j{_{SMzP xW_    ^+A=E3!Ѓtlss%  o13575 Bokmmnmlko}uQQPRSs瀰~}{}\E:8:f{k9_ x}~vv7rpww4| ڿЩ~        !!##$$%&߮   ,- %|} $ҷ}n^I &灸 H {fd P@>:?*a^{saGC7$ea\a˵ïrhVOC aaaaaaaaaaaaaaaaa`5P A֧ƨ{uЂxnh.qqqqqqqzuoPKng zzzzzґyдofdbb`_Ec\[m&׸;ءؑLJtn MrBGY8+a!YYYYYYm       Gq[Ԩv ɟ׉  &&&&&&&&&& %!hvvvvvwwwwr`kkx{{{{}}}}|xxxxb~Z     }H*Aɹ|Юظا۞r>.ېE+_-~i<9PwZ~o[FJ"!D"z_!#G!z77~QSsN 8 PӎƎ^ʂ{RVdZ }ND|Ȅወ`vZ'D2Y2 %W(l/xyPn";z2 ~" z{3 υg%/x#DLJ &'1ۑP}|}AJχ݈w =P1).Lj# '؂y e U 2X$<݁ɴ9 >gɣʮ=m=*Ш7# %^-jr rzsF =ܣދ :"h 4#%eJ=x?vQQjۃൈ:=$\tEO+v&'p߄=&#jvzv ~ J*+#r +v͎irʰ сJӢ&>b2 NLD DHrА8/ F0cW[%S\ %;BŇW=X5<(|'AR nP $5ALۓNR+EG!oSѓ=+0?рmFV#+1ta_"S۝јP%4/ςLL E 7("ǯ@L0@5 $%C %#Ltjͪ'܈@Ű  Z3# B!  O̤J)0L # !   /!@8,ݭV _MѴ @<؊l**E)NE.5.Jr' ԘwDz?5mDND 76ǠEV (3DEōPA0&"w;E"؅T%F '0 S2HIܣM t VXفFMV&|˅ֿ֐20,I;!JKSu{Ud_n0ƀÀU LD8Ө*. =\ ~$ÉM   |@ "o&0< j3KɁ (T X @C@| ౉xyD17৿ urHW@?jNܗl&RihX>?P@ MtHI,Q Lױ>EAD}=uJKuBWx v xA5ۧܪ3 W~A> \hJTz+/S@,t%XV 0<$R"" ( </| )< ǹOz]< Q DEB ݁E{<W v Ǝ T~}"1/@u ) ݱ1yh ',xy7b?ϩJ&ܜ|-"z{u"el  oӺܰuU J- JѱR؈|} @~O  $ 0 d}.߲?o}4z6W} /e+ ۓ1?zܤ"RS?7 u>ͳ =۪ z{z{Хo2e.+Ј=|}|})(ߐF#v ,TTf\ψx/(T $,SwF`m"xF`d[-+R )߮M~zvDd8zx ۈ[$<*x 6m,'SBɧd$RS.~J HI1P!S #<`JKϰɇΣӫ8Wܺ1 2@#ܐ?w !#R^L\ v} ˖VpŪ4܉SV}R y} (#ܑ͈S`  oJ8섾ʈS` = ؠ<# Ju31 ͘#Jr4R@  #:Q(م{ % #t WR NL D LNsR̅ +N DE"C{ u?TP8 O1=!+ɦ޴v@&K+b c ֑ LLyĹӷr 4Lް x!ɝG+iRpq< D  ׻ 5  m@ɻ.֢(C2j˻ڻ5< 2߈JzlC"ЈbP,`$W W l :QӦ39e3 Ӵ t1W>RĆ Liu<, u}01SHI0 ː>՚7ּcCOtS JKי= 8 F{>+  ׺! g'"' - Ld>7 zΌB,%Ա&Lw4'-$D J L=f:Ψ  ٨4WAz 2(Ո~T-} ՘M4̉ôݢc ;R˕TۖF ؊) $ ;Mܹv S',VP/ Lͻw+G)S ZհQe S4=]uʘbW4Rט F!۷U+ʜ#44GN*Էs?=ʒ ʸϐ4>ק M n˱<9d;~ 0 ˘挟|7%/ ;Z΀؀0L$N$JV 4ƺưЁL %($m2. |$4MEۘ"//.%O)K5K2W6`KE$'N a$ ~<Ϡ|/Yg ܘא|/"R(,U֚׹Ǚb!,6.ي˔)1p\  'ʍ# <pq /)0Qӝaj""͘UT ~A33?0 -< 062,R=% xx h<)  %2"?xy a (ɑ lz{ HI""0b) 5;l|}DZJK%ש){%-+D"+oFV )+$lv"(4V}o`x 'Q(c@m5" =(. ו@o%5p=Ӌٓej=@5Szn`pq(?4RIWdplss+vL+(g~< (v֔b&Fv!|nUʈ )"(4vV Bn) 34v(&ߐ R*?m{Ո%ʈE4̍|PmՊʄ> EJ؎.c{U%Հ)W{ʝ2먞+V c0mm1֐|"0S؍ <3|!'z`b!.Rԉ߉݌ޔprx|ٮ(+1[O - ~Sb,6Kz5>*;~$7摦x}<<4č-@L;`)ʈ\kU}Yŀ g<;xْ4 Vlz݀(<99 HIg pq ْ((1K >~ JK}Kx(Vl?B ن  Vߠ : &֐ ؒeRb.ۀlL,vȥ-e|>-x~~* Ȓ/'4URLq2OаܐS |" ?'zVltV ġt {ǥʆ`uBy{'`fDLSrL -qZmлݒ6dl#=*`ϡO < !cА`c8^[R( W:L215=0_g+R`q Ro^yTnj q~q L$3Pњ%0{9i]UF_QA𴐆b?(&e2ĞlL&FJ&J N,J)JN+<VL5T"L83w3D>PT|‘"@ 軐pqҰWܨ b8GXL~<}J_!QD?dv Ȇ "О {HN=1t@0iaewu$$D9=Α~gS[AÐw@FP6?E R)eu .[ϓ8N^:ň>@E(wZm)è~SS#!Dmb ?ew+krd/<}<E+͸7a4<ӌהޛ&A4(!gߠmJ}~!t@,"<o" Ru F ;7z4+mƏ"3 !} HIMx =󋸔'*ø1aoQ(XÎ?JKx P莘јF,29E]l܍y|ХTL(DT%>F&)l*L$Rt.J|;.NBٜې^nuUCo्HҐl?.̽ ƒWNJ)1k+,_y66|O>< i0 "׸ <, )[V*m$o@o(}b<8T"p#7A-mxفox2!Z[ba i$jBܹo*į &NeTƳқ텡JX\#ysRA]vc`i # @ RP+TFMK87   U =249B3e~u:D[<+*F @DEɸ6Ι&%u"7F/tRSIڐV"@0.\gTb\,vvñ5ݰrBA`[=+ @l|`}5׸CMa8ߵԜJA3DZ_TPHI=6g<~-.='O + jKf3aӧm|PJK^Ď+Ana>5ƔKa<дz%ˈ~L_ƭ>v*A ^TVȘa9<Њ&4n&f1$N8N+2++‚M$A-SN6F_U/[| G4_տ f<C=񄷘$S),Ŭh$ÒfZn+>x@޸g!ٕ ,*t^Chގa8SGT C!~ئ$NDŽ (ėՏא٘ # C!C"`}? #}̦/հ Kj`-HKN-XkʊJ$|z'D-֦ "_XR RRDM6ѱ`7  #QRטԘ&ɛWH0Rh42@"%L/OOɊ=hU;$Wޘ.Цf<VenvX> } $ *Lcz@ a\fbuJ]y4/h}ddIf!9B8^Rѝ# b0/0+@RRc4I*TX_.|ͬȷ~.<35E+K ;M @(XGJ8f<25C@C`MǸLoҨ3B .zhɐ"[%dC>os:DFÈLόŢ * $ N=RpĴ',S0ls2>Of9VW>Kb1Yи B QDE<852 W$XfY- 4񑔳pq|EMV?яRMW>"r_8됾 u5>H+ @ge!"o-[̈=!6껠CXّ@P;@8.AA:C-:E}6i~xZJ[Z)`8*ϸրkFX|8zN2ظN~% !! m8W)}ĈQA0le !̚gn B%āfNv8rB~Э .pyI}J<3* OL# 8Š}и]DE5 :2HIwUNʐK1LV)!(1,$(WJKTA6\ш}8l nج> œU'N ޒҋ*םJ X  \'/*4)NfP(K,Jb>2/gcVV+dg<^]!T@Tc{OQ^fXTʐ4\0ߛ,zasylum-0.3.2/data/Id/Neurons/Backfile0000644000175000017500000000022010644556630016022 0ustar hughhughHmr -/ asylum-0.3.2/data/Id/Neurons/Cell10000644000175000017500000000530710644556630015275 0ustar hughhughHmr $`nd string S
  •  $  $ )#%/ ((?@?(X Ns1h@P( o- "/! = .CQBg??(Bn<{$I ǚDOM}Nfc*$/X_.b.sN *ś ~Q3(2]eђ(00^(?V/Fm(ؐőΐ@/G>-sXѽ|_T~TvҨKT$X=wlzfnٔ7K1Hd1̑-G\9&7Abls+C<^ecg1ۘ9|0-N-T(7\l"=u69`Pc]t<5'h,2^s=mcLa8+L[M-!Uʐ`˩k0gu[Nܚ gmЖ`f-wÚ=WΠśZ*{α4YP6&9->=.ػ'xfRˑ]2(*U84M%)ڐ˱9.=[}=:=RȨ(芿6ô^٤D9*m,'lw)zuÀ_+6zȫ{4$dګfy,B8يd36-.^(*6ш6DmQ۽06xO?;zZ7Uc,mX*6u5#6_`_&j|qL!DJĘ-޹Dž ?V9l*࠱{9x۳Sö tfmmIӘ8m\0f9jZؿM7hw];$ :׆<5c.ï?<d˖蓬Z_ٞΘ_fjmVO|r78Vge:e ᔷ4ߩ߬~-;eÜFnE=?1Z;+fI48>8ϒd?:#n1t>C5+z4ƮYdfH?wɹF\+(ٜi ^үˆ5W X%3ϱѨ m:5⛷\=ˢhjv}%t8 ^cBw^IG!,nG*Fȫ9גA'g/wŒHDd\6(l(Y 0{1)FVoޑ]LkR"Ik)5VƜ~|ZZ]ӱw|Ƥ=]e>V6m(<]t$5Va]ߑ6EѮAjE(;zI2ɔʒegsEeو5.C$>(.D֛\E& (=Ȑﴼ~6c;$z! ɑԘ_裘p矙_栮y m]vf]C/ԝglמԡ*j86İD ̸9?'/VȢٲ}b/I@9 oUīő$ĺI{Uپ@v*=ur,?3?uߘ_ʍ (W'T L2W7L.x&aW7EM P| ԁz^(ưtYz<<:-[6|s< ?JJ)p_ 8%JAPV̄? }黅P/_$P ])fx \b?؄ F!ԇ Z騐)zz __ێGv ڵrp^{]:OJ \ 4 ^L<_M ~ _ eaԆ\_) 䖂RJ^TK:R7{ ?Պ9vJo<Ә 8^~J~_9):k@.2Ӏ6 ?ĵ*߫eӋU )>__Jt7vt @Ƚ/''#f(-)Nj_W_Ky#%JԐ++_(|XٕYƝȰV(!%`+uLEO0 m_~0W>ߐܱ;"0]<;C׶ Fٝw8XH %>{Ɉ_"K>ΒKz??ŋ#_EG}_K. O!J_4>_NbŊi9~ڠj :s{~< D钬޽teݠu0͟ ^~m\ @_\M_ؿ?dD]#͍6)0`s!&)09_|wzR$Ѩ_( (bŌi(2Iҟ_p,݀ӏ."yI^UFz#Q!˛Tz=)߸_<\tdDrC ݟ|R5<z:ؿ% _ _~"J)HŸ;걀1J_E=Kؿ0._JT<5_ՀrSin ___jͬ "n_MGߑ d(M+_jE߸_ ?")?ؼ}[,W }cxW ! bLID +_"T`ߠ_ɂ YJ^_~‚G ?́;-!׋"'5n#!}#N~_4T-$JN ((%V.T7J#TT(Jj &T$Tasylum-0.3.2/data/Id/Neurons/Cell30000644000175000017500000000467010644556630015301 0ustar hughhughHmr $`$   %)$(-$0+6,*$ 'C&  PPpL^rA_Or_._M(n _MMn:ȿ|_@_w$|߂_QM$NɌ0_)0_} aҟ><́߀VgU?__!#" س=q?s=ڟ>_Q!Auؿ_???.# ȝ_O Rد9ʞОz(lWAL`_.!OO%_>UNh ՆR_!汄{_.{|K-O_.| Z~t>MI _(}&5_T_C_O?4_ UU|<_`__ T M$ DVNR`____ _1|_z_?Yw,>"__?=߷"_8 #R #"-_԰LS iߘ5'Wl)_?=4WLR _}u*0 H k|˼ߎ_je 8 z4[.?oՋ..p*&$V8,пpZ[^B_ɂ/-I,__/+X_uA__xZ_\ÿxW2ߠ_?}?m_࿭!_}_h _Ӵi'NfT+}wM$#8_ Z@@[x\aG?_<_Sخ|b_o=ʟ%_<>N_= ^'"MD=u_οdb_e.gg]LѠ~__F^!E _J^›,_GE q!me ^\߆@JvU]\Ǘk>\b24ÁGD JrL ^TJ,L+ L4ZJT;AVasylum-0.3.2/data/Id/Neurons/Cell40000644000175000017500000000473710644556630015306 0ustar hughhughHmr $`  X ('2$C5(E,EPaxLZ[((L_<0fؿ_ -vbZYN Y[(  VC (DOo \bX_ WU@Q&<\JL- ^, 0 ^R;U)bUK&{0R^DLm,m$J" $%*#LLZ)5b^m8Iȿ*__ٻK)WWWB91 (/R2+ef_#C 謀Jc#En*}mÙOVLD 4L  ??0a=+ %R $*T?9E|]^?_?U#! df_ _%G"M2^!_0_U\xf o3& #NK~_).TaGؐӿiT_ŸAh*؈?ҟa|Cϖ^YxNz ?+UFz}VW%` z_xE Ĉ*l`_#!dk⨿R$_Laڨ_&ю4ݒ9wݓ_?ƿؿ> __R4_P___(JWf>L¯_,tً?_???o_":#_WVW*M!_?KzĐzt+#: uo:=\}wn?W_ӿkw|?_=_!o}r__[01?[('޿zg =!?Q,z^X_9cFQJO1>0yeWy'_b _#R>щyZcy)W(O_y^%Eཐ?Ʉ_>m%).轀]gm$p+MB0VK__{9ϋ KzIy{20"謎4=glj-X4\ؿ{_9 .ؿKzW>5(}!H{(bIá o'ʄQ\ 5VRcȼ47_:_\bEEl__T ~Gȼ׸_X\J_?_E_ܑ__ߪt!'E׀N _ف_$<ꈧ#mA_r_)_Kʣ='?1_2_1p_1/??s__/U_Da6A0Q_ >B_?_ג l_B_OLM<YUW{`o,2₟|Lhbg%ę !С '?_rYVHIJ~$ ]+zo _S_yJK{)zm)!$"O'D?r???K8a]?RFNfj1oO$#E"2!i_D\|LT`"<`v_] - (.>V _|e Ÿÿ_`h_7 ?VJ_~_13_3__ l7J2qE y__Щ|_?iw__!_#w_(O_D%F*D =EJ[Tm[$JQQV__Ik!Q_"3>}Vg(_ n !Z~>UzU E|K} V,_"?_՘H_v#߄wх~##F 6?贠 ʼn2  Q ņ`G"N~ŸAM _~Ÿƅ?g-($YVbl*,T LV5,A2Xasylum-0.3.2/data/Id/Neurons/Cell60000644000175000017500000000463010644556630015300 0ustar hughhughHmr $`n 4  (,(($ ,< G A Pc `4_  _} | QsْU<@>LlWM)[_h]Y+`ntx[Ta:L/ƋVyO'ݠ!^'5 |c}BUlsOuh[yC<_ȵ؂Us5@D_9b361ۀgV9LK ځ*R[ȚC(\Es9V@=M0G"E1אA!_<"?!T*=.>2kEN 8DLWDAK ,$=FEFӿLJ$d#J?F _JDsNr=E܈TjL/LE$΀<%F i W#n$܀k+݀iD`D"&#_=xD/H%w$Nπ x#~D K_OBfgmL+$Ĥ-2f^cL!)I #$MbV>MX  |#ߺ  N h 6#<_w%_|C ?_.>|_{ ~vc3Y  ߨ_п JΨ B_/iK< #/M |#oȾC |#`׸_ JЀ9 TT' L"L  <Pʐn3_⠿_ _^ Gߨ_'~+fBCU!Fe jGɢ_b_ "(<-l߁Y^gJUn'#'8'DCB rsɑs<_SŸ____\J^__z[?ձX\_0 'mSBmm??r_)\΁ y_I˨ύޢ}5xD?V (B_rxyskn |z{W8}?|}W?~?0?vU_?P:_P,__:_ႃ_`_I!`<k_|c_!,i׃___ _&(__!ؿ_ߙAzY_ᠰk#_$:^(CeADP ??__u&JҸVR?_ ߿l\_DE J3XY1(__Gs\_{_0>__\>ߑ'Xp@Sjdг s_v"E_rБmC_{ϑ_г__Iг?__U$S2Oп_ʛ _lnJƍVT^(ߑ5/TT+8 ,.K asylum-0.3.2/data/Id/Neurons/Cell70000644000175000017500000000526410644556630015305 0ustar hughhughHmr $`    ( ) )($+ (C;$ < /0%_,$ _-p)c6)|Et_2+$B|EàND\JKLDmDL[]F F{D~_g_w)=FQh5HKG10ejK $t;.>\l~nɀF4dd ^2\l9̠Y~'*Ū7\7%sй?A C}{<_|?៉3e迌Fgw"( ANԐ#WEg#2#Q@FEDF!\G"7NT s'zFFP$DTDZXo_NwN ^ALĄ%( DŽTktt,gbw/ʋV*.| '@N$D %,0LM#y6MցိrGOJމ7L}߀_j{2xdȈЩ _Z1_CB@A@8?8<6GV_@=I|%tMJ_U$Jl^(W@ <q K@~k | bl+}\(@Q_R^_5_`g_+[bn޼4KITLU *\a\&4D.|<T:ӽ"d m4_^`=/^`z1=_^`SAZTb^153O|瑲"^ @^` ]:߀hј_T` $h/XD7`~_^` Ÿ $nݑпTֿE @ЇJ$L $ Z DD/RڊQ9 $f? FO<$k!F__ͥ_]!_9_yV߽BI"|Nd\<pq _|c_&2]΍_L J __#zQ`aRk RZ}kG%_wq4 _=݅/9?ؿS Ͱc?2Y'S|Ͱw&՘n9_*_8[ ɠ _?W%)fOƎJzOQv P" jhi _Ryꟸ_EBȿ9K@^_ؿ&7\0e6V__B/_J e=~ROأvQzWC__ TKe"<}'nMـKw(W^JVZ& 2L+S>^- J,-asylum-0.3.2/data/Id/Neurons/Cell80000644000175000017500000000520110644556630015275 0ustar hughhughHmr $`  X ('2$C5(E,EPq XX G `S | G<__T ,k T89 wZ`_ _kXB_ȷ "FSR{^| ٜVVR_2m<!{4 Y @|l/8Ee#/H`]/>i_i>? һ:@P|˒Ȱ?Yۅ˻?ݫ9[u}xto\1^l2HXMDx,h4 " #x#!"4 !\ $ .\L'0T2 J TdU!j+\=\sD(+ZL=z>|,:0'HDLP  4bDljdd 0)id@<\*-,Z8)-T(,#<@Xt4p$XXd$sup|{EL  FIJNON" DEFGH*KLMNOPQ1Ƹ7G Vc=C>R??=85Ȑ/ϐ#/g𨄥BSTUKQOjTUUUU{xg̐YJ=}tjv.,)vE;;;UUU D3yj[5EEEEEMEEUUUEEEEEEEEEEEEEUUUUBcRA/B<.@A|vGsؐǐvSŠxsojːA Ѹo 9S͙XTLJ@>Y̅:8yuNLWU RG_>1À_řRH`\iP#lֲŀDс2*!oic]ר! h``SVWɥ|bQB6؆vvn;:73.G@{7G74411WV0c0?obYR D0L~+tb*v0dːʍ3hLˆKaɰ0\ +C+FFՐ&VFIN~|ϘNNHB߱+####DI$D4%D7'(ȑ)&FM$-͡,"EKǠ$F!̩% %M$Fz#E" #######"!KNOŀǾ`$fETL$ZשNLQ)'DJFTK&(K''''''oIH(p'ͱ&G%nCHOR-a_&D_ȉ,ש(()˲NG(F'Q))) #!1K0HCT?;OOOOONDNM4ǿOOML<81/&eVJA?;iġ ld{dUVa764HW[WWW!Ъ&&;2^fZYꈑ|t֠3ZVנ}yàʴ̴ɥ ݤD6}llP %    t   yB  !!##$$%%&&ѳw]QIEEEEEEEEEEEE@EEEEEEEEEEEEEEEE& 5 __sqvnqXqotf\Ykǚ     ϑ ɦ|ѫ z}Qɜ j  ###$)&$%#"#####"!$&D+'$K('''''''('"Ir(T)(t)))1/2MQRYbh ɷ !# $ %&ѼٶѴgH.1E  sok ##' asylum-0.3.2/data/Id/FSPBlocks0000644000175000017500000005607410644556630014501 0ustar hughhughHmr0F4<Dd,$d04L()x$`D p`dXtHԘ7$d@ ԰pt$0H@Px`x0hPL(hdؠ`$ԄhT hDpL\0جT(Hh8Ph(+ << sXp ,8,ѐ M(4@LKHNIRT`lx#AA& H|89()*+À J  J +(;???p??????@PXhM@8hH8:D; ;Ԉ  9L !ՐJXՠ'L( X5 Z%c0W+,9Hp`(/ /01231 T1/. J -0J F Z J1/T-+MJr E+8p@h0457(L 4j p 3 NK)<<^HLTX\`hltx @P\dpt "HXp8 "\V 4 z! MN|0d $Hp(DTt~nunȸ!s^ݘ\|4Pl8pȷ1o@;|}ه9#<` L|t ɴt R>7Xh|,l8R v (<x(L 01  3^ 0dfC\E~:Kx?^Tx(X4Tpx|E>T| ?;<"Aj ,Lhx( < T  /z% 2@w8ò>C>;۬ whDhӳjbt? =$o Dy(~?|q~uO&$( 10$P|@h ƽt)o:< Bq+d "j=`<`N`"b"GF."" ZJd$-N?8KLP4ahm!z8 ?7pA8ELh}8$"0, )j,z0bkOvx4l^ HL4898R    ()*+À J  J +(;???p??????SL !#$N=.03ACEGILNPSUY[]^acfilnpsuwxz|~ U CDEFGHIJKL<M   BC'MN#EB; sB@OACB|su M8@AB!MрeFĀ_p F ؠXOL AG)ۉ7 Ab~&Aߩ7PQRSTUVWXYZ[\]^_O*ߘ vlO3~eMw𱰡x.([''&װ ("?c!!U4K%ECvlدخ51-)%!СC!ð}p/??{<94ڛzD*DTKEe]=:A9DNC8;;Б/E@k941M:/$cOkc77777UUtF8'FW؄'!ԬMDA:뙇JHV/DyEGG????ͳ1ccc?>=:6zzִe1e3n mRr&PQRSTUVWXYZ[Fئ[hi\]lort^*vvvtrrookkeeYF1@8Ђv11111II1l1o11t1v1v1r11k11111111111J1II1l1o1111v1v1r1ok11111111234r ňĀ?=,,٤@21rpnljdcbϘdfɀigfdb_\[WUQ POL_PкNؿё]5vvww:y>{}D~|{zyunk ? >ytV2ؘԐӈU?)tumb<]ZXOCW񧙥飉ў:^]\xODd:8nQh2f\e{ǘ\ D3?4,%^\5ꠕ@cY5rFGGEJBMBEGեn±.TRjlG@CEICCsvsN8sÈUaXRP>1'Ā{SŘ+&&N擠V*VcTN*b9s N ϘB~b"vW!2AGطPOP.搤 \[+o+l֩|ɣE߰320gLfC''k3+₏㊐b EJ BCLMⳙih9?#QϰLHO"#kpj+qFr©#L@H#}'2+*qD"DܤWN{$!Ѯ ȱ9vÜv0ؘ754d/BǩƸp/BD+è$=ѣ֢OM,LKIH4% ,J&DEpGh`fB821-aZZOEnU2Q}l.xѠǠFƒޢ@D@.Ω.?>; t`_։ƉD@RFW"b*MKe}GC R"‰kĻʢH̎ d݀bī~KOee ^WǕ̈πPQRSTUߩ`|uut˙FJʨF-,؃sreuۀtrHG2UVWXYZ[\]^_~~&P5&&&uu&@A5-3ȥȡhFDrFFvvvvvvDv vG%wTWwwwwwrokkkkkF]Zo s {{{{{Feb^&F|ڈ}}}}}FfcF`W|D!WGyxxxxxD^PUz&+λ  tpZXFDCЉtܘ&$!ȖPOFx#F)&O'TuV[G0+*%!S=NKHĸ.s`0n4.* %#͘X:V%#V<-%4}jD]4ONO-5S2,+Ez'[WD+}|ψ%͈%Ѩ#آ2/.SQGQ$[x%lzĈđD(MGE/B{w"Yۘ('KFN@ sDe,9eΐ9d)`۹\&MҢy,̪ʥOiKI"I#s)JDCR?9Ɠ $J%F2-cF=RB&t6}ާ鋴א/ы?'12X$ԅ-佲iniУ&g'PYl,WˁWI͜uoQ8řPJݐ0vq ŨݵؑB U$1-)%! MPeF!O6ѲϺ졤# NMQ~-4*ٺZX"ڀGGˈyxN+D+È݈L*  ¹GЙҋ騘׮ֈ A*퐀E_9n\5߆K"K%SQEТW*V3D0֮YYʣՀ.bEŐe+MgNؔː㨔K(AL _Գe՘•bХ%+O*/E0а--+[..V줵1]|+A@Ш9uX$Ș[0`"3ǀ.,bE109Fc񸐰ư[)?mHFؘF&2oFFYhX-*)@N$ʖW,쐬0;ǘGopp'5+_;.hdԐ%&VWjHA@𲳐"3*#B=ȇE7~ YXs:|s_QéiQ3X[#F"Xљ w,'PQ~HBb䘎XU["ژҗژNGK~;D%?ۡ;&AEM6!~t FEnءϠҔy!p)暛Kƻ1??{<94-ؠ8qH-<!_F܈C9.OGF@Iohg_) ?Jaaaa?E%TMF> ?9.MF>53ic'''''''NZmm''''o99a'''''.aVA@=lgw&ՙ4Nvp%pЯZ᮶ A@9NH;<˱ҎBc%#g?iNM=~nȟ֘w2a1VO~}{Ftު ED1[_YV%$T:RNԀNpFK@Cl$ţD+i GAܠA@ up|߸'ؘըDFΩ,FqВ=ife~zutrqpoV>˘iFę#J  & $ّRXcVmEe%:وܨT,Ω*(&G\ ֈ գؠ`ڡ * DCGeהfxwѐИϚ2)(<OD̉ :!8Mm Έ?-^حo")ە5O򁅐qo=鱽ΐҀDzjrفFƀʈ՘'E"ͤ FBĘ܈ ]DԚӈп-äŠ B¹ F4Ow-ml=Dx'#vzFQW7ƀ4~-ɠ)4Ԑ'٢\\֨0/ fyjMMKL݈L*mC3~2ǒgk9Ω??>=:5/؀}z??|:5l?|l?|4?|l?|4?|4?|Z9V֠PQRSTUV333˨=WXYZ[\]^_ۨP+c;vPH8E98ش[[ xðưYfM``b"^\a[VM #/ ~|us̀u*/-\HH#Ѕ ^ lؙݫUQd޹}Пi I9maaaaa[)ȚVuicY^Mo/ 𽰵spp1' |۱~~Иl+k|_tZT|QG?jehOh>< ''gy{wpkmli|KJR*],I{waЊvRx}sijscdzznvkhyîsrEDcDDVQܕb7蒨Zȕm{tv$%} 3' v1oVz  k  x  51LsMRAAqcDx 111 MNSUNVOJ~;cqqxUbQN&hvo|q}smas[?kJwxfwzr`vv asylum-0.3.2/data/Id/Brain0000644000175000017500000004376510644556630013751 0ustar hughhughHmr $$   X ('2$C5(E,EP ,(WijH(k <`$!(7$,F04*M0 6((;"  <(4~ z=䂿v 0b, < z&-3Z VT( T*( TLX$?3 TDm  $%HI@@( D= 8ϋ̢z.D.JK= ^0|  ;15&ȀNDl_L.!]#G0oM" 9!EFJ$GG T ) tށ過Jg"GDG"O݁D$/f* ( u|(٢̺*>KO WWXӀ&'c6>H٢Jd 6HIAe*M@""+ _8M9-$WXr \FJK,+K{!!Ձ"' '0` K%ښц% ?G" $'U )+8ˇ ݎ ֎KGDN4$Eۃ҂ɜM K*04 JF, z ݖNf@GA ~L}5=8 Ȟ#&)=>**!?Dӗ. !~8+$*!6s@觷Ɂ%%Ёѻ!"M!+6)Js$8Հ· GM*"D0'MއJ01*$F 5" ;"U XMs E %!L&?>_&1J 47>p,?, ⓑ͹,7#K-1>J$$ %;l}n+IψGEGNM %6E$J.CD' $J=s= R%PV,{TG&֎L ԅJ#(z *-*сލ 'z Dσ/వ.٩Q}*J1Ԋ$M9㐭&ρɊ$ KUN>,&4İ/*-a!)= &:1Ұ8a7C=1$+ (>jޅ̵#%y? zLK©Vu#UJV'{*(-dTtAeAԻ$c- A&  << 41{_3/%0= `}g Ӂ8lz|ul8&QT R 1 U_"l b >?ꃫr]>3X6Bnu*o& @z>ʩ=\ zҐ=Tui03Y ٹ'"=&I8ȸU͘;:=/,$gZP Pu= $^|x൘;'|)_?,C/c$wKw)ߙZx~Ѹ oФ ?T_"'omMo߰Ͱwt總= 1'x[O Z">8/ӱTdج?=ь'$-Ӛϐ␐*@z 1X_ g_Ts -0Ȉ>?.ђ ~):4wvsŽ~ c?8,$wz m-ː ϟz7/~)^GAUU}.:3 ע-!'֡087 R2.6 {w<W jٓz іΈ%0^e؛b9I jE_J! zHV'64dOe/O.ڪk6,'D#x0*X$R (](0zyR V(&[?^w_٬g q{|" =Uh_)[xm+T <X6&?76[< @} }@灌Jgyk@, t<&<aB]L|4?y2AB{@G@— > >ND$6@M$ @ K,Fկ  t̠a2\@X䛟R G@(8m,+86(!yK!V ­M@˙ J}=-=;Tb:mr= kN5+#\ HI $O+C [1! n;\DջMJK[Ţ"1)H%`*ՆL$V LLf%V,T&@ ?(A3  N 1=ITߺ _ EiħMω1Wbk$ AI1AJ<"zzړߕ]=i@=>/B!baޑ=9\ q$1NApq J4Fb3#DYF V*{x:rT( @Ԣ$Wk Td &"AA8 A-Jz<@ 6;=jRAEcE.Ћ @ؕ<ƿpZ>1D HI͋ ]/;X%0D!TJKnJhZJ`C #fs<4U< &  V</=  <?}<  %<<˭?'J%&  D4=s<h<a S ((* RJ) A:* g]l¿ R V՜ D< bce!_GK* .?ThК($& :? j$  |ӹ5  %"<* AZzeO 0R"r#%4];J(RA > Ep ѽ @A,lNiy9Ӯֽ|T @ l'gM% j*?RɫUSzDN5 d~ @Pv%ڠӮ" ]`$ =PeSz l%R !cv|"ԧJ<aOI} ڂkŭ/ʽ R A"k Z ?">EXP3E"O%zzRDF(D,7D25MB"m"<> ˆ&h  .De ^Yc=萮*'JU\Q?_<LOWg!mkAT " #(  VPg }-&"$(KS?a VݢP͡N .<W P<o1u뼕P> %J0R ׀ $ = +守> +բ+ѮHIY ɮJK]k 5*P=>"*RL  (4۱>۱TM Zخx V  "H :HIHI+eEJK#=TUg PER\) 4o)e c=i"n)3| MB]90|rLz@G'*G C ɯ fh ?>V7KT $ND SLRa%$( & VV?@b:$??HIVTRJ'0ϪbJKWDމD L D#V ))G0+U)lHJ)L GV$LU'%!>IPRK72| ,LD #$RVO¦Į&.ىЊҀ PZU#R-q.JZv$< VaO݉ր_*]dU6N26o 4]|N)RY}2u%- '͉PF76F%Pf)]})#٠eO.P^f߳-.qJKb5M'ƀeW0g bɍ #* R {  g |kie8TRDJ*/C'r1R1|k\f|JV ;|#MN(N\L Fu![\e͈҃ ?"5wlz&9[4 $X+u z  tx% "؈ܢM ,]N,׊bM[MS.I {谮~6B& 1ٌW_\5.%σda$4 " _.ڌ׾9j 2gx+_ <8 %*>׸)8gf*)\ (sݶڇ~t.Z [eOP=e,7ފ/*٨h6 (HI c5։>wc *q9\|v>}DJK2R-Mû}\4L  4);Đw~B((5D\8TdM,Tĸ(''!4,* \v28̃(⃟0-u =(G>ɩ6%j!'~ /DE,z# ,Z%?:4  W$(քؗ%Ṟ"צ?.t!1&(ő T +(RNJ4g͌[} O Z,Ѽ ?˒J2֛(n Rd #*5!y =Jx&1dL 1ֶS 5F%ȉ$J"([N(11T# +9؀fXd 'U&sM\  ۄO]5&)M 5*[^↌(,#8#͋ʃ + Ltd:(  JK $ V8ۘjhl<ֈD)$ ّ|TC}4[3x*‚Wb1,!~Cۗ_++ ?@$=ݪo}n DžL  7V;"ԛ-=<. ~KYƈEIL 0-:$5J!&L-V!2,\ X!ƀ|M 6KȀ 79XX|9*ɴ J,'7 6$!k/<XTD}l.+4Gʑ+$|LȠ_º <#ˆ5 ،h  B ʚ(4+$C Ԁ ݘ8(=$Jߒ/9o ϝ܍N ΕJ`Ġ՝پݔޠ;,_ F?&3`An z&;L-a%'70'ߠ*: !(/BӌՊ%>&7'K/2I]8 =4+JЛ& M #\"$7 ]̊݀ ]#FSQX1#N<: ""0"%&|O$A& V  Z(</892ʬѭπ*O?bsf_) !(/&zȠ!.9:4J>]&_()?$<+#eZ 0 4ڊ@Lv($Z$ߍ? 4+JJ$$˕5˜֮ı"}?3V ;.L|[7 $+t܊ο81 *"I7ӓ٥ _$5N@NWN٭'u2',5;ߩߺ7f&>"Kn*D J &U[ ]z[Џz) j5NW Cl ѡ>HI   +'$M#ሹ'ۯ))o>1ޗӌےT M/JKJDKJ L %)ՂJ3 * & RNK TN. ,-o &%ٵ^N V(U<ӳ PK&% ,7,H0+ǂ΋рNJ $z"OȹzޖR ) v%9߉PFהe %"'$Y/UT o+AAe+WL\TlT6T&GXV.PR L%(pVhX\20X,gTTD\V/ jw\\. */ #include #include "asylum.h" #include #define _firerange (128<<8) #define _sleeprange (512<<8) #define _explocontloss (1<<7) #define _alno 0x200 #define _bulspritebase 16 #define _expwidth (24<<8) #define _expheight (24<<8) #define _alheight (32<<8) #define _alwidth (16<<8) extern fastspr_sprite blokeadr[77], blockadr[256], alspradr[256], exploadr[32]; extern asylum_options options; const char _platblim = 64; const int _xofs = 159, _yofs = 96; const char _platno = 176; extern int boardwidth; extern int framectr; extern int xpos, ypos, xposmax, yposmax; extern char masterplotal; extern const char _blim; extern const char _extendno; extern const char _bonuslow, _bonushigh; extern const char _platlowlim = 176, _plathighlim = 190, _alplathighlim = 177; const int xblocks_disturb = 18, yblocks_disturb = 12; char plotal; //char lefthit, righthit, uphit, downhit; // word-aligned char alonobj, alonplat, colchplace; int sprlx; int sprly; int sprhx; int sprhy; int xtemp, ytemp; colchent* colchtab; colchent* colchptr; colchent* oldcolchtab; colchent* oldcolchptr; colchent* colchtabuse; colchent* colchptruse; alent* dodgypointer; bulcolchent* bulcolchptr; //colchofs=&5000 // two tables #define _colchlim 0x400 //bulcolchofs=&7000 #define _bulcolchlim 0x400 colchent colchofs[2*_colchlim]; bulcolchent bulcolchtab[_bulcolchlim]; //alofs=&F00 alent aladr[_alno]; int alctr; int* platsandstr; #define _savearealen (0x9c0/32) Mix_Chunk* CHUNK_EXPLO; Mix_Chunk* CHUNK_ATOM; Mix_Chunk* CHUNK_SPINFIRE; Mix_Chunk* CHUNK_SPINPOWERFIRE; Mix_Chunk* CHUNK_SHOOT; Mix_Chunk* CHUNK_SHOOTNUTTER; void moval() { //BL writeclip - active for release version sprlx = xpos-(((xblocks_disturb+2)*8)<<8); sprhx = xpos+(((xblocks_disturb+2)*8)<<8); sprly = ypos-(((yblocks_disturb+2)*8)<<8); sprhy = ypos+(((yblocks_disturb+2)*8)<<8); alent* r11 = aladr; for (int r9 = _alno; r9 > 0; r9 -= 8) { l8: if (r11->type) procal(r11);r11++; if (r11->type) procal(r11);r11++; if (r11->type) procal(r11);r11++; if (r11->type) procal(r11);r11++; if (r11->type) procal(r11);r11++; if (r11->type) procal(r11);r11++; if (r11->type) procal(r11);r11++; if (r11->type) procal(r11);r11++; } return; } void procal(alent* r11) { if ((r11->x <= xlowlim) || (xposmax <= r11->x) || (r11->y <= ylowlim) || (yposmax <= r11->y)) { aloffscr: if (r11->type != _Decoration) { r11->type = 0; return; } } noaloffscr: if ((r11->x >= sprlx) && (sprhx >= r11->x) && (r11->y >= sprly) && (sprhy >= r11->y)) plotal = masterplotal; else plotal = 0; switch ((r11->type)&0x1f) { aljumptab: t: case 1: explo(r11); return; case 2: ember(r11); return; case 3: plat1(r11); return; case 4: plat2(r11); return; case 5: case 6: plat3(r11); return; case 7: case 8: case 9: case 10: plat4(r11); return; case 11: plat5(r11); return; case 12: scoreobj(r11); return; case 13: dyingbonus(r11); return; case 14: flyingbonus(r11); return; case 15: booby(r11); return; case 16: decoration(r11); return; case 17: extender(r11); return; case 18: alien1(r11); return; case 19: alien2(r11); return; case 20: alien3(r11); return; case 21: alien4(r11); return; case 22: alien5(r11); return; case 23: alien6(r11); return; case 24: alien7(r11); return; case 25: alien8(r11); return; case 26: alien9(r11); return; case 27: alien10(r11); return; case 28: alien11(r11); return; case 29: alien12(r11); return; case 30: alien13(r11); return; case 31: alien14(r11); return; case 0:; } aljerr: return; } void alienwander(alent* r11, char* r5) { if ((r11->righthit == 1) || (r11->lefthit == 1)) almightjump(r11); else if (*r5 == 0) alpossjump(r11); else if (*(r5+1) == 0) alpossjump(r11); else if ((random()&0x3f) == 0) almightjump(r11); else almightjumpins(r11); } void almightjumpins(alent* r11) { if (((r11->dx) > (1<<5)) || ((r11->dx) < -(1<<5)) || ((r11->dy) > (1<<7)) || ((r11->dy) < -(1<<7))) return; alienstopped(r11); } void jumpyalwander(alent* r11) { if ((r11->righthit == 1) || (r11->lefthit == 1)) almightjump(r11); else if (((r11->dx) > (1<<5)) || ((r11->dx) < -(1<<5)) || ((r11->dy) > (1<<7)) || ((r11->dy) < -(1<<7))) return; else alienstopped(r11); } void alienwanderfly(alent* r11) { if ((random()&0xff) == 0) alienstoppedfly(r11); if (((r11->dx) > (1<<5)) || ((r11->dx) < -(1<<5)) || ((r11->dy) > (1<<5)) || ((r11->dy) < -(1<<5))) return; alienstoppedfly(r11); } void alienwandernojump(alent* r11) { if (((r11->dx) > (1<<5)) || ((r11->dx) < -(1<<5)) || ((r11->dy) > (1<<8)) || ((r11->dy) < -(1<<8))) return; alienstopped(r11); } void alienstopped(alent* r11) { if ((r11->downhit == 1) || (alonobj == 1)) r11->dx = (random()&(1<<9))-(1<<8); } void alienstoppedfly(alent* r11) { int r2 = random(); if ((r2&6) == 0) { flyup: r11->dx = 0; r11->dy = -(1<<7); } else if ((r2&1) == 0) { flyupdown: r11->dx = 0; r11->dy = (r2&(1<<9))-(1<<8); } else { r11->dx = (r2&(1<<10))-(1<<9); r11->dy = 0; } return; } void almightjump(alent* r11) { if (r11->downhit != 1) r11->dx = 0; else if ((random()&3) == 0) r11->dy = -(8<<8); almightjumpins(r11); } void alpossjump(alent* r11) { if (r11->downhit != 1) r11->dx = 0; else if ((random()&0x1f) == 0) r11->dy = -(8<<8); almightjumpins(r11); } void almightwelljump(alent* r11) { if (r11->downhit != 1) r11->dx = 0; else if ((random()&3) != 0) r11->dy = -(8<<8); almightjumpins(r11); } void alientestplat(alent* r11, char* r5) { if (!alonplat) return; plattoobj(r5); } void decoration(alent* r11) { if (--r11->r6 < 0) { r11->x += r11->dx; r11->y += r11->dy; r11->dy += (1<<4); } if ((r11->r5 -= (1<<16)) < 0) r11->type = 0; if (masterplotal == 0) return; mazescaleplot(blokeadr, r11->r5&0xff, _xofs+(r11->x>>8), _yofs+8+(r11->y>>8)); } void extender(alent* r11) { int tmpx = r11->x+r11->dx, tmpy = r11->y+r11->dy; if (!plcolcheck(r11->x+r11->dx, r11->y+r11->dy, (32<<8), (8<<8))) ; // horiz.size, vert. size r11->x += r11->dx, r11->y += r11->dy; char* r0 = fntranslate(tmpx, tmpy); char f = r11->r5&0xff; if (r11->r5&(1<<8)) { contracting: if ((*r0 == f) || (*r0 == 0)) f = *r0 = 0; else if ((*r0 != f+1) && (*r0 != f+2) && !block_gas(*r0)) { r11->type = 0; return; } } else { if (*r0 == 0) *r0 = f; if ((*r0 != f) && (*r0 != f+1) && (*r0 != f+2) && !block_gas(*r0)) { r11->dx = -r11->dx; r11->r5 |= (1<<8); } } nostopextend: if (plotal == 0) return; r0 = fntranslate(r11->x+r11->dx*15, r11->y); f = r11->r5&0xff; if ((*r0 != 0) && (*r0 != f) && (*r0 != f+1) && (*r0 != f+2)) return; relplot(blockadr, r11->r5&0xff, r11->x+r11->dx*7, r11->y); } int alspintab[40]; void init_alspintab() { for (int i = 0; i < 20; i++) { alspintab[i*2] = (int)((10<<8)*sin(i*2*M_PI/16)); alspintab[i*2+1] = (int)((10<<8)*cos(i*2*M_PI/16)); } } void alien1(alent* r11) { colcheck(r11, 2, r11->y-(8<<8)); char* r5 = albcheck(r11); r11->x += r11->dx; r11->y += r11->dy; r11->dy += 1<<7; // gravity if (r11->dy > (1<<11)) r11->dy = 1<<11; alienwandernojump(r11); bulcolchadd(r11); if (plcolcheck(r11->x, r11->y, _alwidth, _alheight/2)) { pllosestrength(_explocontloss); r11->r6 -= _explocontloss; } // [R11,#20] ; alien strength if (r11->r6 <= 0) { alkill(r11); return; } if (abs(r11->x-xpos) > _sleeprange) alsleep(1, r11); if (abs(r11->y-ypos) > _sleeprange) alsleep(1, r11); if (plotal == 0) return; relplot(alspradr, 8+(r11->dx > 0)*2+((framectr&8)>>3), r11->x, r11->y+(8<<8)); } void alien2(alent* r11) { colcheck(r11, 1, r11->y-(8<<8)); char* r5 = albcheck(r11); r11->x += r11->dx; r11->y += r11->dy; r11->dy += 1<<7; // gravity if (r11->dy > (1<<11)) r11->dy = 1<<11; alienwander(r11, r5); alientestplat(r11, r5); bulcolchadd(r11); if (plcolcheck(r11->x, r11->y, _alwidth, _alheight)) { pllosestrength(_explocontloss); r11->r6 -= _explocontloss; } // [R11,#20] ; alien strength if (r11->r6 <= 0) { alkill(r11); return; } if (abs(r11->x-xpos) > _sleeprange) alsleep(2, r11); if (abs(r11->y-ypos) > _sleeprange) alsleep(2, r11); if (plotal == 0) return; relplot(alspradr, 0, r11->x, r11->y); } void alien3(alent* r11) { colcheck(r11, 1, r11->y-(8<<8)); char* r5 = albcheck(r11); r11->x += r11->dx; r11->y += r11->dy; r11->dy += 1<<7; // gravity if (r11->dy > (1<<11)) r11->dy = 1<<11; alienwander(r11, r5); alientestplat(r11, r5); bulcolchadd(r11); if (plcolcheck(r11->x, r11->y, _alwidth, _alheight)) { pllosestrength(_explocontloss); r11->r6 -= _explocontloss; } // [R11,#20] ; alien strength if (r11->r6 <= 0) { alkill(r11); return; } if (abs(r11->x-xpos) > _sleeprange) alsleep(3, r11); if (abs(r11->y-ypos) > _sleeprange) alsleep(3, r11); if ((random()&0x3f) == 0) alshoot(r11); if (plotal == 0) return; relplot(alspradr, 1, r11->x, r11->y); } void alien4(alent* r11) { colcheck(r11, 1, r11->y-(8<<8)); char* r5 = albcheck(r11); r11->x += r11->dx; r11->y += r11->dy; r11->dy += 1<<7; // gravity if (r11->dy > (1<<11)) r11->dy = 1<<11; jumpyalwander(r11); alientestplat(r11, r5); bulcolchadd(r11); if (plcolcheck(r11->x, r11->y, _alwidth, _alheight)) { pllosestrength(_explocontloss); r11->r6 -= _explocontloss; } // [R11,#20] ; alien strength if (r11->r6 <= 0) { alkill(r11); return; } if (abs(r11->x-xpos) > _sleeprange) alsleep(4, r11); if (abs(r11->y-ypos) > _sleeprange) alsleep(4, r11); r11->r5 += (r11->r5<<16); if (r11->r5&(1<<29)) r11->r5 = alspinfire(r11); if (r11->r5&(1<<31)) r11->r5 -= 8;else r11->r5 += 4; if ((r11->r5&0xffff) == 0) r11->r5 = 0; if (plotal == 0) return; int x, y; relplot(alspradr, 2, r11->x, r11->y); relplot(alspradr, 4+((r11->r5>>24)&3), r11->x, r11->y-(7<<8)); if (r11->r5&(1<<31)) return; int f = (r11->r5>>26)&3; int r0 = (r11->r5>>24)&3; int* r3 = alspintab+r0*2; for (int r4 = 4; r4 > 0; r4--) { loop81: relplot(exploadr, _bulspritebase+((r4+f)&3), r11->x+r3[0], r11->y-(7<<8)+r3[1]); r3 += 8; // yes, that's 8 ints (32 bytes) } } void alien5(alent* r11) { colcheck(r11, 1, r11->y-(8<<8)); char* r5 = albcheck(r11); r11->x += r11->dx; r11->y += r11->dy; r11->dy += 1<<7; // gravity if (r11->dy > (1<<11)) r11->dy = 1<<11; alienwander(r11, r5); alientestplat(r11, r5); bulcolchadd(r11); if (plcolcheck(r11->x, r11->y, _alwidth, _alheight)) { pllosestrength(_explocontloss); r11->r6 -= _explocontloss; } // [R11,#20] ; alien strength if (r11->r6 <= 0) { alkill(r11); return; } if (abs(r11->x-xpos) > _sleeprange) alsleep(5, r11); if (abs(r11->y-ypos) > _sleeprange) alsleep(5, r11); r11->r5 += (r11->r5<<16); if (r11->r5&(1<<29)) r11->r5 = alspinpowerfire(r11, 0); if (r11->r5&(1<<31)) r11->r5 -= 2;else r11->r5 += 2; if ((r11->r5&0xffff) == 0) r11->r5 = 0; if (plotal == 0) return; int x, y; relplot(alspradr, 2, r11->x, r11->y); relplot(alspradr, 4+((r11->r5>>24)&3), r11->x, r11->y-(7<<8)); if (r11->r5&(1<<31)) return; int f = (r11->r5>>26)&3; int r0 = (r11->r5>>24)&3; int* r3 = alspintab+r0*2; for (int r4 = 4; r4 > 0; r4--) { loop83: relplot(exploadr, _bulspritebase+8+((r4+f)&1), r11->x+r3[0], r11->y-(7<<8)+r3[1]); r3 += 8; // yes, that's 8 ints (32 bytes) } } void alien6(alent* r11) { colcheck(r11, 1, r11->y-(8<<8)); char* r5 = albcheck(r11); r11->x += r11->dx; r11->y += r11->dy; r11->dy += 1<<7; // gravity if (r11->dy > (1<<11)) r11->dy = 1<<11; alienwander(r11, r5); alientestplat(r11, r5); bulcolchadd(r11); if (plcolcheck(r11->x, r11->y, _alwidth, _alheight)) { pllosestrength(_explocontloss); r11->r6 -= _explocontloss; } // [R11,#20] ; alien strength if (r11->r6 <= 0) { alkill(r11); return; } if (abs(r11->x-xpos) > _sleeprange) alsleep(6, r11); if (abs(r11->y-ypos) > _sleeprange) alsleep(6, r11); r11->r5 += (r11->r5<<16); if (r11->r5&(1<<29)) r11->r5 = alspinpowerfire(r11, 1); if (r11->r5&(1<<31)) r11->r5 -= 2;else r11->r5 += 8; if ((r11->r5&0xffff) == 0) r11->r5 = 0; if (plotal == 0) return; int x, y; relplot(alspradr, 3, r11->x, r11->y); relplot(alspradr, 4+((r11->r5>>24)&3), r11->x, r11->y-(7<<8)); if (r11->r5&(1<<31)) return; int f = (r11->r5>>26)&3; int r0 = (r11->r5>>24)&3; int* r3 = alspintab+r0*2; for (int r4 = 4; r4 > 0; r4--) { loop85: relplot(exploadr, _bulspritebase+10+((r4+f)&1), r11->x+r3[0], r11->y-(7<<8)+r3[1]); r3 += 8; // yes, that's 8 ints (32 bytes) } } int alspinfire(alent* r11) { int r0 = (random()&3); int* r6 = alspintab+(r0<<1); for (int r4 = 4; r4 > 0; r4--) { loop82: makebul(r6[0]+r11->x, r6[1]+r11->y-(7<<8), r6[8]>>2, r6[9]>>2, ((r4+r0)&3), (1<<8)*BULL_TTL); r6 += 8; } r6 -= 8; int r2 = 0x7f-abs(r6[0]-xpos)-abs(r6[1]-(7<<8)-ypos); // XXX scaling? if (r2 > 0x40) bidforsound(_Explochannel, _Sampsmallzap, r2, (fullpitch+0x1000) /*pitch*/, 0, 0, 2 /* lifetime (frames) */, (r6[1]-(7<<8))>>9, CHUNK_SPINFIRE); nospinzapsound: return 0x80000100; } int alspinpowerfire(alent* r11, int r7) { int r0 = (random()&3); int* r6 = alspintab+(r0<<1); for (int r4 = 4; r4 > 0; r4--) { loop84: makebul(r6[0]+r11->x, r6[1]+r11->y-(7<<8), r6[8]>>2, r6[9]>>2, 8+(r7<<1), (1<<8)*BULL_TTL); r6 += 8; } r6 -= 8; int r2 = 0x7f-abs(r6[0]-xpos)-abs(r6[1]-(7<<8)-ypos); // XXX scaling? if (r2 > 0x40) bidforsound(_Explochannel, _Sampbigzap, r2, fullpitch /*pitch*/, 0, 0, 2 /* lifetime (frames) */, (r6[1]-(7<<8))>>9, CHUNK_SPINPOWERFIRE); nopowerzapsound: return 0x80000040; } void alien7(alent* r11) { colcheck(r11, 1, r11->y-(8<<8)); char* r5 = albcheck(r11); r11->x += r11->dx; r11->y += r11->dy; r11->dy += 1<<7; // gravity if (r11->dy > (1<<11)) r11->dy = 1<<11; alienwander(r11, r5); alientestplat(r11, r5); bulcolchadd(r11); if (plcolcheck(r11->x, r11->y, _alwidth, _alheight)) { pllosestrength(_explocontloss); r11->r6 -= _explocontloss; } // [R11,#20] ; alien strength if (r11->r6 <= 0) { alkill(r11); return; } if (abs(r11->x-xpos) > _sleeprange) alsleep(7, r11); if (abs(r11->y-ypos) > _sleeprange) alsleep(7, r11); int rng = random(); if ((rng&0x3f) == 0) alshootnutter(r11); else if ((rng&0xf) == 0) alshootfast(r11); if (plotal == 0) return; relplot(alspradr, 16, r11->x, r11->y); } void alien8(alent* r11) { colcheck(r11, 1, r11->y-(8<<8)); char* r5 = albcheck(r11); r11->x += r11->dx; r11->y += r11->dy; r11->dy += 1<<7; // gravity if (r11->dy > (1<<11)) r11->dy = 1<<11; alienwander(r11, r5); alientestplat(r11, r5); bulcolchadd(r11); if (plcolcheck(r11->x, r11->y, _alwidth, _alheight)) { pllosestrength(_explocontloss); r11->r6 -= _explocontloss; } // [R11,#20] ; alien strength if (r11->r6 <= 0) { alkill(r11); return; } if (abs(r11->x-xpos) > _sleeprange) alsleep(8, r11); if (abs(r11->y-ypos) > _sleeprange) alsleep(8, r11); int rng = random(); if ((rng&0x3f) == 0) alshootnutter(r11); else if ((rng&0xf) == 0) alshootmental(r11); if (plotal == 0) return; relplot(alspradr, 16, r11->x, r11->y); } void alien9(alent* r11) { colcheck(r11, 1, r11->y-(8<<8)); char* r5 = albcheck(r11); r11->x += r11->dx; r11->y += r11->dy; r11->dy += 1<<7; // gravity if (r11->dy > (1<<11)) r11->dy = 1<<11; alienwander(r11, r5); alientestplat(r11, r5); bulcolchadd(r11); if (plcolcheck(r11->x, r11->y, _alwidth, _alheight)) { pllosestrength(_explocontloss); r11->r6 -= _explocontloss; } // [R11,#20] ; alien strength if (r11->r6 <= 0) { alkill(r11); return; } if (abs(r11->x-xpos) > _sleeprange) alsleep(9, r11); if (abs(r11->y-ypos) > _sleeprange) alsleep(9, r11); int rng = random(); if ((rng&0x1f) == 0) alshootnutterplus(r11); if (plotal == 0) return; relplot(alspradr, 17, r11->x, r11->y); } void alien10(alent* r11) { colcheck(r11, 1, r11->y-(8<<8)); char* r5 = albcheck(r11); r11->x += r11->dx; r11->y += r11->dy; r11->dy += 1<<7; // gravity if (r11->dy > (1<<11)) r11->dy = 1<<11; alienwander(r11, r5); alientestplat(r11, r5); bulcolchadd(r11); if (plcolcheck(r11->x, r11->y, _alwidth, _alheight)) { pllosestrength(_explocontloss); r11->r6 -= _explocontloss; } // [R11,#20] ; alien strength if (r11->r6 <= 0) { alkill(r11); return; } if (abs(r11->x-xpos) > _sleeprange) alsleep(10, r11); if (abs(r11->y-ypos) > _sleeprange) alsleep(10, r11); int rng = random(); if ((rng&0x1f) == 0) alshootnuttermental(r11); if (plotal == 0) return; relplot(alspradr, 17, r11->x, r11->y); } void alien11(alent* r11) { colcheck(r11, 1, r11->y-(8<<8)); char* r5 = albcheck(r11); r11->x += r11->dx; r11->y += r11->dy; // no gravity alienwanderfly(r11); bulcolchadd(r11); if (plcolcheck(r11->x, r11->y, _alwidth, _alheight)) { pllosestrength(_explocontloss); r11->r6 -= _explocontloss; } // [R11,#20] ; alien strength if (r11->r6 <= 0) { alkill(r11); return; } if (abs(r11->x-xpos) > 2*_sleeprange) alsleep(11, r11); if (abs(r11->y-ypos) > 2*_sleeprange) alsleep(11, r11); int rng = random(); if ((rng&0x1f) == 0) alshootfast(r11); if (plotal == 0) return; relplot(alspradr, 12+(random()&3), r11->x, r11->y); } void alien12(alent* r11) { colcheck(r11, 1, r11->y-(8<<8)); char* r5 = albcheck(r11); r11->x += r11->dx; r11->y += r11->dy; // no gravity r11->dx += r11->dx>>6; r11->dy += r11->dy>>6; if (r11->dx > _speedlim) r11->dx = _speedlim; if (r11->dx < -_speedlim) r11->dx = -_speedlim; if (r11->dy > _speedlim) r11->dy = _speedlim; if (r11->dy < -_speedlim) r11->dy = -_speedlim; alienwanderfly(r11); bulcolchadd(r11); if (plcolcheck(r11->x, r11->y, _alwidth, _alheight)) { pllosestrength(_explocontloss); r11->r6 -= _explocontloss; } // [R11,#20] ; alien strength if (r11->r6 <= 0) { alkill(r11); return; } if (abs(r11->x-xpos) > 4*_sleeprange) alsleep(12, r11); if (abs(r11->y-ypos) > 4*_sleeprange) alsleep(12, r11); int rng = random(); if ((rng&0x1f) == 0) alshootnuttermental(r11); if (plotal == 0) return; relplot(alspradr, 12+(random()&3), r11->x, r11->y); } void alien13(alent* r11) { colcheck(r11, 2, r11->y-(8<<8)); char* r5 = albcheck(r11); r11->x += r11->dx; r11->y += r11->dy; if (r11->dy > (1<<11)) r11->dy = 1<<11; alienwanderfly(r11); bulcolchaddshort(r11); if (plcolcheck(r11->x, r11->y, _alwidth, _alheight/2)) { pllosestrength(_explocontloss); r11->r6 -= _explocontloss; } // [R11,#20] ; alien strength if (r11->r6 <= 0) { alkill(r11); return; } if (abs(r11->x-xpos) > _sleeprange) alsleep(13, r11); if (abs(r11->y-ypos) > _sleeprange) alsleep(13, r11); if (plotal == 0) return; relplot(alspradr, 8+2*(r11->dx > 0)+((framectr&8) == 8), r11->x, r11->y); } void alien14(alent* r11) { colcheck(r11, 1, r11->y-(8<<8)); char* r5 = albcheck(r11); r11->x += r11->dx; r11->y += r11->dy; r11->dy++; if (r11->dy > (1<<9)) r11->dy = 1<<8; bulcolchadd(r11); if (r11->downhit == 1) hamsterspecial(r11); if (plcolcheck(r11->x, r11->y, _alwidth, _alheight)) { pllosestrength(_explocontloss); r11->r6 -= _explocontloss; } // [R11,#20] ; alien strength if (r11->r6 <= 0) { alkill(r11); return; } if (abs(r11->x-xpos) > _sleeprange) alsleep(14, r11); if (abs(r11->y-ypos) > _sleeprange) alsleep(14, r11); if (plotal == 0) return; relplot(alspradr, 18, r11->x, r11->y); } void hamsterspecial(alent* r11) { r11->type = _Alien1+11; r11->r6 = 12<<8; r11->dx = r11->dy = 0; } void alkill(alent* r11) { addtoscore(((r11->type-(_Alien1-1))&0x1f)*100); explogo(r11->x, r11->y, 0, 0, 0, /*r6*/ 0, r11 /*-4*/); exploins(r11); } void alshoot(alent* r11) { int r2 = xpos-r11->x; int r3 = (ypos+(8<<8))-(r11->y-(6<<8)); // aim at body if ((r2 > _firerange) || (r3 > _firerange)) return; if ((r2 < -_firerange) || (r3 < -_firerange)) return; int r4 = random()&7; if (r4 == 7) r4 = 6; makebul(r11->x, r11->y, (r2>>6), (r3>>6), r4, (1<<8)*BULL_TTL); bidforsound(_Explochannel, _Sampsmallzap, 0x78, fullpitch+0x1000, // pitch 0, (fullpitch<<16)|0xfe00, 2 /* lifetime (frames) */, 0, CHUNK_SHOOT); noshootsound:; } void alshootfast(alent* r11) { int r2 = xpos-r11->x; int r3 = (ypos+(8<<8))-(r11->y-(6<<8)); // aim at body if ((r2 > _firerange) || (r3 > _firerange)) return; if ((r2 < -_firerange) || (r3 < -_firerange)) return; int r4 = random()&7; if (r4 == 7) r4 = 6; makebul(r11->x, r11->y, (r2>>5), (r3>>5), r4, (1<<8)*BULL_TTL); bidforsound(_Explochannel, _Sampsmallzap, 0x6f, fullpitch+0x1000, // pitch 0, (fullpitch<<16)|0xfe00, 2 /* lifetime (frames) */, 0, CHUNK_SHOOT); } void alshootnutter(alent* r11) { int r2 = xpos-r11->x; int r3 = (ypos+(12<<8))-(r11->y-(8<<8)); //fire from sensible place; aim at body if ((r2 > _firerange) || (r3 > _firerange)) return; if ((r2 < -_firerange) || (r3 < -_firerange)) return; makebul(r11->x, r11->y, 0, -(1<<10), 12, (1<<6)*BULL_TTL); bidforsound(_Explochannel, _Sampbigzap, 0x6f, fullpitch, // pitch 0, (fullpitch<<16)|0xfe00, 2 /* lifetime (frames) */, 0, CHUNK_SHOOTNUTTER); } void alshootnutterplus(alent* r11) { int r2 = xpos-r11->x; int r3 = (ypos+(12<<8))-(r11->y-(8<<8)); //fire from sensible place; aim at body if ((r2 > _firerange) || (r3 > _firerange)) return; if ((r2 < -_firerange) || (r3 < -_firerange)) return; makebul(r11->x, r11->y, 0, -(1<<10), 13, (1<<5)*BULL_TTL); bidforsound(_Explochannel, _Sampbigzap, 0x6f, fullpitch, // pitch 0, (fullpitch<<16)|0xfe00, 2 /* lifetime (frames) */, 0, CHUNK_SHOOTNUTTER); } void alshootnuttermental(alent* r11) { int r2 = xpos-r11->x; int r3 = (ypos+(12<<8))-(r11->y-(8<<8)); //fire from sensible place; aim at body if ((r2 > _firerange) || (r3 > _firerange)) return; if ((r2 < -_firerange) || (r3 < -_firerange)) return; int r = random(); if (r&(1<<11)) { r2 = 0; r3 = -(1<<10); } else { r2 = (r&(1<<10)) ? (1<<10) : -(1<<10); r3 = 0; } makebul(r11->x, r11->y, r2, r3, 14, (1<<5)*BULL_TTL); bidforsound(_Explochannel, _Sampbigzap, 0x6f, fullpitch, // pitch 0, (fullpitch<<16)|0xfe00, 2 /* lifetime (frames) */, 0, CHUNK_SHOOTNUTTER); } void alshootmental(alent* r11) { int r2 = xpos-r11->x; int r3 = (ypos+(8<<8))-(r11->y-(6<<8)); // aim at body if ((r2 > _firerange) || (r3 > _firerange)) return; if ((r2 < -_firerange) || (r3 < -_firerange)) return; int r4 = 8+(random()&2); makebul(r11->x, r11->y, (r2>>6), (r3>>6), r4, (1<<8)*BULL_TTL); bidforsound(_Explochannel, _Sampsmallzap, 0x6f, fullpitch+0x1000, // pitch 0, (fullpitch<<16)|0xfe00, 2 /* lifetime (frames) */, 0, CHUNK_SHOOT); } void alsleep(int s, alent* r11) { char* r0 = translate(r11->x-(4<<8), r11->y-(8<<8)); if (*r0 != 0) return; *r0 = 240+(s-1); r11->type = 0; } void explo(alent* r11) { r11->x += r11->dx; r11->y += r11->dy; int r4 = r11->r5; int r5 = options.explospeed<<2; if (r4 <= r5) if (plcolcheck(r11->x, r11->y, _expwidth, _expheight)) // object size pllosestrength(_explocontloss); exploins(r11); } void exploins(alent* r11) { r11->r5 = r11->r5+options.explospeed; if (r11->r5 < 0) r11->r5 = 50<<8; //trap negatives char r0 = (r11->r5)&0xff; if (r0 >= (8<<2)) //explo frame length { r11->type = 0; return; } if (plotal == 0) return; relplot(exploadr, (r11->r5>>2)&0x3f, r11->x, r11->y); } void booby(alent* r11) { char* r0 = fntranslate(r11->x+r11->dx, r11->y); if (embertrybombtarget(r0, r11)) return; noboobybomb: if (*r0 >= _blim) r11->dx = -(r11->dx>>1); r0 = fntranslate(r11->x+r11->dx, r11->y+r11->dy); if (embertrybooby(r0, r11)) return; noboobybooby: if (*r0 >= _blim) r11->dy = -(r11->dy>>1); r11->x += r11->dx; r11->y += r11->dy; r11->dy += (1<<4); //gravity r11->r5++; if (r11->r5 < 0) r11->r5 = 1<<8; //trap negatives if (r11->r5 >= 140) // booby lifetime { r11->type = 0; return; } if (plotal == 0) return; relplot(exploadr, 12+((r11->r5>>2)&3), r11->x, r11->y); } void ember(alent* r11) { char* r0 = fntranslate(r11->x+r11->dx, r11->y); if (embertrybomb(r0, r11)) return; noemberbomb: if (*r0 >= _blim) r11->dx = -(r11->dx>>1); r0 = fntranslate(r11->x+r11->dx, r11->y+r11->dy); if (embertrygas(r0, r11)) return; noembergas: if (*r0 >= _blim) r11->dy = -(r11->dy>>1); r11->x += r11->dx; r11->y += r11->dy; r11->dy += (1<<4); //gravity r11->r5++; if (r11->r5 < 0) r11->r5 = 1<<8; //trap negatives if (r11->r5 >= 70) // ember lifetime { r11->type = 0; return; } if (plotal == 0) return; relplot(exploadr, 8+(((r11->r5)>>2)&3), r11->x, r11->y); } void normbomb(char* r0, alent* r11) { if ((r11->type&0x1f) != 15) // booby r11->type = 0; normbombsurvive(r0); } void bonusobjgot(alent* r11) { int r0 = r11->r6; bonuscommon(r0-_bonuslow, r11->x, r11->y); r11->type = 0; //r11->dx = (random()&(0xfe<<1))-0xfe; //r11->dy = -(random()&(0xfe<<2))-(1<<9); //r11->r5 = 0xf60+(r0<<8); //r11->type = _Scoreobj; } void flyingbonus(alent* r11) { int r4 = 0; // hit wall marker char* r0 = fntranslate(r11->x+r11->dx-(8<<8), r11->y-(8<<8)); if ((*r0 >= _bonuslow) || (r0[boardwidth] >= _bonuslow)) if (r11->dx <= 0) { r11->dx = -r11->dx; r4 = 1; } if ((r0[1] >= _bonuslow) || (r0[boardwidth+1] >= _bonuslow)) if (r11->dx >= 0) { r11->dx = -r11->dx; r4 = 1; } flyingskip: r0 = fntranslate(r11->x+r11->dx-(8<<8), r11->y+r11->dy-(8<<8)); if ((*r0 >= _bonuslow) || (r0[1] >= _bonuslow)) if (r11->dy <= 0) { r11->dy = -r11->dy; r4 = 1; } if ((r0[boardwidth] >= _bonuslow) || (r0[boardwidth+1] >= _bonuslow)) if (r11->dy >= 0) { r11->dy = -r11->dy; r4 = 1; } flyingvertskip: r0 = fntranslate(r11->x+r11->dx-(8<<8), r11->y+r11->dy-(8<<8)); if ((*r0 >= _bonuslow) || (r0[boardwidth] >= _bonuslow)) if (r11->dx <= 0) { r11->dx = -r11->dx; r4 = 1; } if ((r0[1] >= _bonuslow) || (r0[boardwidth+1] >= _bonuslow)) if (r11->dx >= 0) { r11->dx = -r11->dx; r4 = 1; } r0 = fntranslate(r11->x+r11->dx-(8<<8), r11->y+r11->dy-(8<<8)); if ((*r0 >= _bonuslow) || (r0[1] >= _bonuslow)) if (r11->dy <= 0) { r11->dy = -r11->dy; r4 = 1; } if ((r0[boardwidth] >= _bonuslow) || (r0[boardwidth+1] >= _bonuslow)) if (r11->dy >= 0) { r11->dy = -r11->dy; r4 = 1; } r11->x += r11->dx; r11->y += r11->dy; r11->dy += (1<<5); //gravity if (r4 != 0) { r11->dx -= (r11->dx>>2); r11->dy -= (r11->dy>>2); } flyingnoslow: r11->r5 -= (1<<16); if (r11->r5 < 0) { bonusdowngrade: r11->type = _Dyingbonus; r11->r5 = r11->r6|(1<<20); } if (plcolcheck(r11->x, r11->y, (16<<8), 0)) bonusobjgot(r11); if (plotal == 0) return; // r8=8-(r8>>17); ??? relplot(blockadr, r11->r6&0xff, r11->x, r11->y); } void dyingbonus(alent* r11) { r11->r5 -= (1<<16); if (r11->r5 < 0) { deleteobj(r11); return; } if (plotal == 0) return; plotdying(blockadr, r11->r5&0xff, r11->x, r11->y, r11->r5); } void scoreobj(alent* r11) { r11->x += r11->dx; r11->y += r11->dy; r11->dy += (1<<5); r11->r5 -= 1; if ((r11->r5&0xff) == 0) { r11->type = 0; return; } if (plotal == 0) return; relplot(blokeadr, (r11->r5>>8), r11->x, r11->y); } void plat1(alent* r11) // alien routines { r11->dx = 0; dvcheck(r11); r11->y += r11->dy; r11->dy += 1<<4; if (r11->dy > (1<<11)) r11->dy = 1<<11; if (r11->downhit != 0) platland(r11, _platno); colchadd(r11); platins(r11, _platno); } void plat2(alent* r11) { r11->dx = 0; dvcheck(r11); r11->y += r11->dy; r11->dy += 1<<4; if (r11->dy > (1<<11)) r11->dy = 1<<11; if ((r11->downhit != 0) || (r11->uphit != 0)) plattoexplo(r11 /*,_platno+2*/); colchadd(r11); platins(r11, _platno+2); } void plat3(alent* r11) { r11->dx = 0; dvcheck(r11); r11->y += r11->dy; r11->dy += 1<<4; if (r11->dy > (1<<11)) r11->dy = 1<<11; if (r11->downhit != 0) platland(r11, _platno+4); colchadd(r11); platins(r11, _platno+4); } void plat4(alent* r11) { r11->dx = 0; dvcheck(r11); r11->y += r11->dy; r11->dy += 1<<4; if (r11->dy > (1<<11)) r11->dy = 1<<11; if (r11->downhit != 0) platland(r11, _platno-8+(r11->type<<1)); colchadd(r11); platins(r11, _platno-8+(r11->type<<1)); } void plat5(alent* r11) { r11->dx = 0; dvcheck(r11); r11->y += r11->dy; r11->dy += 1<<2; if (r11->dy > (1<<9)) r11->dy = 1<<9; if (r11->downhit != 0) platland(r11, _platno+14); // .platlandins (duplicate label ignored) colchadd(r11); platins(r11, _platno+14); } void plattoobj(char* r0) { plattoobjins(r0, 0); } void plattoobjins(char* r0, int r4) { char r1 = *r0; if (1&r1) r0--; int x, y; backtranslate(r0, &x, &y); char r = (*r0-_platno+2*_Platbase)>>1; if (r == _Exploplat) r4 = -1-(1>>5); /* >> ???; stop instant explosion*/ if (r >= _Downplat) r++; int v = makeobj(r, x+(8<<8), y+(15<<8), 0, r4, (32<<16)+16, *r0); if (!v) { *r0 = 0; r0[1] = 0; } } //.platlandins //colchadd(r11); //goto platins; void platins(alent* r11, char r9) { if (plotal == 0) return; relplot(blockadr, r9, r11->x-(8<<8), r11->y); relplot(blockadr, r9+1, r11->x+(8<<8), r11->y); } //aldone: //LDMFD R13!,{R9,R11,PC} void colchadd(alent* r11) { if (colchptr-colchtab >= _colchlim) return; colchptr->r0 = r11; int xoff = (r11->r5)>>16; int yoff = (r11->r5)&0xffff; colchptr->xmin = r11->x-(xoff<<7); colchptr->ymin = r11->y-(yoff<<7); colchptr->xmax = r11->x+(xoff<<7); colchptr->ymax = r11->y+(yoff<<7); colchptr++; } void bulcolchadd(alent* r11) { if (bulcolchptr-bulcolchtab >= _bulcolchlim) return; bulcolchptr->r0 = r11; bulcolchptr->xmin = r11->x-(32<<7); bulcolchptr->ymin = r11->y-(32<<7); bulcolchptr->xmax = r11->x+(32<<7); bulcolchptr->ymax = r11->y+(32<<7); bulcolchptr++; } void bulcolchaddshort(alent* r11) { if (bulcolchptr-bulcolchtab >= _bulcolchlim) return; bulcolchptr->r0 = r11; bulcolchptr->xmin = r11->x-(32<<7); bulcolchptr->ymin = r11->y+(8<<8)-(16<<7); bulcolchptr->xmax = r11->x+(32<<7); bulcolchptr->ymax = r11->y+(8<<8)+(16<<7); bulcolchptr++; } void platland(alent* r11, char r9) { char* r0 = translate(r11->x, r11->y); char r1 = *r0; if (*r0 >= _platblim) r0 -= boardwidth; if ((*(r0+boardwidth) != _extendno) && (*(r0+boardwidth+1) != _extendno)) { *r0 = r9; r0[1] = r9+1; r11->type = 0; } } void plattoexplo(alent* r11) { blowup(r11); } void deleteobj(alent* r11) { r11->type = 0; } void blowup(alent* r11) { explogo(r11->x, r11->y, 0, 1<<6, 0, /*r6*/ 0, r11 /*-4*/); } void switchcolch() { oldcolchtab = colchtab; oldcolchptr = colchptr; colchplace = !colchplace; colchtab = colchptr = colchofs+(colchplace ? 0 : _colchlim+16); //+16 for safety bulcolchptr = bulcolchtab; //reset bullet checking table } alent* bulcolcheck(int x, int y) { bulcolchins: for (bulcolchent*r11 = bulcolchtab; r11 < bulcolchptr; r11++) { bl10: if ((r11->xmax >= x) && (r11->ymax >= y) && (x >= r11->xmin) && (y >= r11->ymin)) bullethit: return r11->r0; } bulcolched: return NULL; } int projhital(alent* al, int loss) { al->r6 -= loss; if (al->r6 > 0) return 0; int r0 = al->type; int r6 = (random()&7)+((r0 >= _Alien1) ? (r0-_Alien1) : 0)+_bonuslow; if (r6 > _bonushigh) r6 = _bonushigh-3; if (r6 < _bonuslow) r6 = _bonuslow; return r6; } void colcheck(alent* al, int colchecktype, int platypos) { int x, y; dodgypointer = al; if (colchecktype != 0) { x = al->x; y = al->y; } else { x = xpos; y = ypos; } alonobj = colchecktype; if (colchecktype == 0) //player check { platsandstr = NULL; colchtabuse = colchtab; colchptruse = colchptr; } else { colchtabuse = oldcolchtab; colchptruse = oldcolchptr; } //ADD R0,R0,R2 //ADD R1,R1,R3 xtemp = x; ytemp = y; int r4 = 24<<8, r5 = 32<<8; int xlo = x-(r4>>1); int ylo = y-(r5>>1); ylo += 8<<8; int xhi = xlo+r4; int yhi = ylo+r5; yhi += 2<<8; //so always in contact with platforms colchent* r11 = colchtabuse-1; while (1) { colchcon: colchins: do { l10: r11++; if (r11 >= colchptruse) colched: return; } while (!((r11->xmax >= xlo) && (r11->ymax >= ylo) && (xhi >= r11->xmin) && (yhi >= r11->ymin))); if ((r11->ymax-ylo >= (1<<8)) //lim for plat on head -> can move horiz. && (yhi-r11->ymin >= (3<<8))) //same for standing on plat { limr2: if (r11->xmax > xhi) if (al->dx > 0) al->dx = 0; if (r11->xmin < xlo) if (al->dx < 0) al->dx = 0; } nolimr2: if (((r11->xmax-xlo) >= (6<<8)) //margin for right on edge && ((xhi-r11->xmin) >= (6<<8))) //ditto { if ((yhi-r11->ymin) <= (16<<8)) //safety margin for platform under pl rise(r11->r0, al, colchecktype, platypos); if ((r11->ymax-ylo) <= (16<<8)) //ditto for plat on head platonhead(r11->r0, al, colchecktype); } } } void rise(alent* r6, alent* al, int colchecktype, int platypos) { if (colchecktype == 2) //no rise { dontrise: al->dy = 0; alonobj = 1; return; } int r0 = r6->type; if (r0 == _Fastplatfire) platfire(r6); if ((r0 == _Downplat) || (r0 == _Fallplat)) //plat type 5 falls { platfall: if (r0 == _Fallplat) r0 = r6->dy;else r0 = (1<<4)+r6->dy; if (r0 < -(1<<5)) r0 += (1<<5); //plat is moving up - more speed if (r0 > (1<<11)) r0 = 1<<11; r6->dy = r0; if (al->dy > r0) al->dy = r0; if (colchecktype == 0) { al->falling = 0xff; platsandstr = &r6->dy; } al->dy += r6->y-(32<<8)-platypos; return; } if (r0 > _Fastplat) //plat 6+ moves quickly r6->dy -= (1<<7); if (colchecktype == 0) r0 = al->pluphit; else r0 = alheadcheck(); if (r0 == 0) r0 = r6->dy /*hit*/-(1<<5); else r0 = headonroof(r6, al, colchecktype, platypos); if (r0 > (1<<5)) r0 -= 1<<5; //plat is moving down - more speed if (r0 < -(3<<10)) { r0 = -(3<<10); platmaxspeed: if (r6->type == _Fastplatstop) { platstop: platsurefire(r6); r0 = -(1<<9); } else if ((r6->type == _Fastplatexplo) || (r6->type == _Fastplatfire)) { platexplo: platdestroy(r6); return; } } platmaxspeedins:; r6->dy = r0; if (al->dy >= r0) al->dy = r0; if (colchecktype == 0) { al->falling = 0xff; platsandstr = &r6->dy; } al->dy += (r6->y-(32<<8)-platypos); if (colchecktype != 0) { alonobj = 1; al->dx >>= 2; } } //B colchcon void platonhead(alent* r6, alent* al, int colchecktype) { if (r6->type == _Exploplat) { platdestroy(r6); return; } if (r6->dy > 0) r6->dy = -r6->dy; if (r6->dy > al->dy) r6->dy += (al->dy>>1); // platuphit = 1; seems useless if (al->dy < 0) al->dy = 0; if (al->falling == 0xff) // only meaningful when colchecktype == 0 platsandwich: if ((colchecktype == 0) && (platsandstr != NULL)) *platsandstr = (1<<8); } //B colchcon void platdestroy(alent* r6) { explogo(r6->x, r6->y, 0, -(1<<6), 0, 0, r6); } void platfire(alent* r6) { // R3: best negative (up) int r4 = random(); if ((r4&(3<<24)) == 0) // firing rate makebul(r6->x, r6->y+(16<<8), (r4&(0xfe<<2))-(0xfe<<1), -((r4&(0xfe<<12))>>11), 8, (1<<8)*BULL_TTL); platfireskip: return; } void platsurefire(alent* r6) { // R3: best negative (up) int r4 = random(); makebul(r6->x, r6->y+(16<<8), (r4&(0xfe<<2))-(0xfe<<1), -((r4&(0xfe<<12))>>11), 14, (1<<8)*BULL_TTL); } //.colchcon //LDMFD R13!,{R0,R1,R4,R5,R6,R11} //B colchins int headonroof(alent* r6, alent* al, int colchecktype, int platypos) { int r0, r1; if (colchecktype != 0) { if ((random()&7) == 0) dodgypointer->y = (random()&(1<<9))-(1<<8); skipalrandload: r0 = 1; r1 = 0; } else { r0 = 1<<8; r1 = al->downpress; } skipalrand: r6->y = platypos+(32<<8); //force plat to player pos if (r1 > 64) r0 = 1<<11; if (r6->type == _Updownplat) r6->type = _Downplat; return r0; } int alheadcheck() { //ADD R1,R1,R3 char* r0 = translate(xtemp, ytemp); return (*(r0-boardwidth) >= _blim) || (*(r0-boardwidth+1) >= _blim); } char* albcheck(alent* r11) { r11->lefthit = r11->righthit = r11->uphit = r11->downhit = 0; // wipe all four alonplat = 0; xtemp = r11->x-(1<<8); ytemp = r11->y-(8<<8); int r6 = ytemp&(15<<8); char* z = translate(xtemp, ytemp+r11->dy); // up if ((*(z-boardwidth) >= _blim) || (*(z-boardwidth+1) >= _blim)) noup(r11); //down if ((*(z+boardwidth) >= _blim) || (*(z+boardwidth+1) >= _blim)) nodown(r11); if (r6 != (15<<8)) { z = translate(xtemp+r11->dx, ytemp); //left if ((*(z-boardwidth) >= _blim) || (*z >= _blim) || (*(z+boardwidth) >= _blim)) noleft(r11); //right if ((*(z-boardwidth+1) >= _blim) || (*(z+1) >= _blim) || (*(z+boardwidth+1) >= _blim)) noright(r11); } else { alshort: z = translate(xtemp+r11->dx, ytemp); if ((*z >= _blim) || (*(z+boardwidth) >= _blim)) noleft(r11); //right if ((*(z+1) >= _blim) || (*(z+boardwidth+1) >= _blim)) noright(r11); } albcheckins: z = translate(xtemp+r11->dx, ytemp+r11->dy); // up if ((*(z-boardwidth) >= _blim) || (*(z-boardwidth+1) >= _blim)) noup(r11); //down if ((*(z+boardwidth) >= _blim) || (*(z+boardwidth+1) >= _blim)) nodown(r11); char* r5 = (z+(boardwidth<<1)); //signal position to caller if ((*r5 <= _alplathighlim) && (*r5 >= _platlowlim)) alonplat = 1; return r5; } void noleft(alent* r11) { if (r11->dx < 0) { r11->dx = 0; r11->lefthit = 1; } } void noright(alent* r11) { if (r11->dx > 0) { r11->dx = 0; r11->righthit = 1; } } int fallinggap(alent* re) { char* r11 = translate(re->x+re->dx, re->y /*+dy*/-((re->dy < 0) ? (15<<8) : 0)); int r1 = (re->dx < 0) ? 0 : 1; if ((*(r11+r1) < _blim) && (*(r11+boardwidth+r1) < _blim)) { stopfall: if (re->dy > 0) { stopfalldown: if (*(r11-boardwidth+r1) < _blim) return 0; if (*(r11+boardwidth*2+r1) < _blim) return 0; if (*(r11+boardwidth*2+(1-r1)) < _blim) { nodown(re); return 1; } } else if (re->dy < 0) { stopfallup: if ((ytemp&(15<<8)) > (8<<8)) return 0; if (*(r11-boardwidth+r1) < _blim) return 0; if (*(r11+boardwidth*2+r1) < _blim) return 0; if (*(r11+boardwidth*2+(1-r1)) < _blim) { noup(re); return -1; } } } return 0; } void nodown(alent* r11) { if (r11->dy > 0) { r11->dy = ((15<<8)&((16<<8)-ytemp))-1; if (r11->dy < 0) r11->dy = 0; } nodownrel: r11->downhit = 1; } void nodownifplat(alent* r11) { if (r11->falling != 0xff) return; if (r11->dy > 0) { r11->dy = ((15<<8)&((16<<8)-ytemp))-1; if (r11->dy < 0) r11->dy = 0; } //nodownrel: r11->downhit = 1; } void noup(alent* r11) { if (r11->dy >= 0) return; r11->dy = -((ytemp+(1<<8))&(15<<8)); r11->uphit = 1; } void dvcheck(alent* r11) { xtemp = r11->x; ytemp = r11->y; r11->uphit = r11->downhit = 0; char* r6 = translate(r11->x, r11->y+r11->dy); // up if ((r6[-boardwidth] >= _platblim) || (r6[1-boardwidth] >= _platblim)) noup(r11); //down if ((r6[0] >= _platblim) || (r6[1] >= _platblim)) nodown(r11); } void wipealtab() { //aladr = alofs; alent* r10 = aladr; alctr = 0; for (int r9 = _alno; r9 >= 0; r9--) { l9: r10->type = 0; r10++; } boardreg(); // fallthrough? } void causeexplo(alent* r11) { explogomaybe(r11->x-r11->dx, r11->y-r11->dy-(8<<8), 0, 0, 1, -1, 0); } void causeexplonopyro(alent* r11) { explogonopyro(r11->x-r11->dx, r11->y-r11->dy-(8<<8), 0, 0, 1, -1, 0); } void explogonopyro(int r1, int r2, int r3, int r4, int r5, int r6, alent* r10) { explocreate(r1, r2, r3, r4, r5, r6, r10); } void explogonopyroquiet(int r1, int r2, int r3, int r4, int r5, int r6, alent* r10) { explocreatequiet(r1, r2, r3, r4, r5, r6, r10); } void explogoquiet(int r1, int r2, int r3, int r4, int r5, int r6, alent* r10) { explocreatequiet(r1, r2, r3, r4, r5, r6, r10); embercreate(r1, r2, r6); } void explogomaybe(int r1, int r2, int r3, int r4, int r5, int r6, alent* r10) { explocreate(r1, r2, r3, r4, r5, r6, r10); if ((random()&3) == 0) embercreate(r1, r2, r6); } void explogo(int r1, int r2, int r3, int r4, int r5, int r6, alent* r10) { explocreate(r1, r2, r3, r4, r5, r6, r10); embercreate(r1, r2, r6); } void explocreate(int r1, int r2, int r3, int r4, int r5, int r6, alent* r10) { if (r10 != NULL) { r1 = r10->x; r2 = r10->y; } int vol = 0x7f-((abs(r1-xpos)+abs(r2-ypos))>>12); if (vol >= 80) { bidforsound(_Explochannel, _SampExplo, ((vol&0x7f) > 0x7c) ? 0x7c : (vol&0x7f), // channel, , vol, 0x3800, 0, 0, 10, ((r1-xpos)>>9), CHUNK_EXPLO); //pitch, , ,lifetime (frames) } noexplosound: explocreatequiet(r1, r2, r3, r4, r5, r6, r10); } void explocreatequiet(int r1, int r2, int r3, int r4, int r5, int r6, alent* r10) { if (r10 == NULL) //(r10<8) noobject: softmakeobj(_Explo, r1, r2+(8<<8), r3, r4, (r5 != 0) ? (1<<15) : 0, r6); else { r10->type = _Explo; r10->dx = r3; r10->dy = r4; r10->r5 = 0; } noobjectins:; } void embercreate(int r1, int r2, int r6) { r2 += (8<<8); // The original code achieves this by modifying r2 // inside explocreatequiet. Arrgh. softmakeobj(_Ember, r1, r2, 1<<8, -(1<<8), 0, r6); softmakeobj(_Ember, r1, r2, -(1<<8), -(1<<8), 0, r6); } void atomexplogo(int r1, int r2, int r3, int r4, int r5, int r6, alent* r10) { explogoquiet(r1, r2, r3, r4, r5, r6, r10); explogoquiet(r1, r2-(16<<8), r3, -(1<<6), r5, r6, r10); explogoquiet(r1, r2-(32<<8), r3, -(1<<7), r5, r6, r10); explogoquiet(r1+(12<<8), r2-(24<<8), 1<<6, -(3<<5), r5, r6, r10); explogoquiet(r1-(12<<8), r2-(24<<8), -(1<<6), -(3<<5), r5, r6, r10); int r7 = (r1-xpos)>>9; r1 = 0x8f-((abs(r1-xpos)+abs(r2-ypos))>>12); if (r1 > 0x7f) r1 = 0x7f; if (r1 >= 60) /* AND R2,R1,#&7F:MOV R2,#&7F ??? */ bidforsound(_Explochannel, _SampAtomExplo, 0x7f, 0x2800, 0, 0, 50, r7, CHUNK_ATOM); noatomsound: return; } void save_alents(uint8_t store[_savearealen*28]) { uint8_t* st = store; uint8_t* st_end = st+(_savearealen-1)*28; alent* al = aladr; for (int r9 = _alno; r9 > 0; r9--) { procsaveal: if (st >= st_end) break; switch (al->type) { case _Explo: //don't save these case _Scoreobj: case _Flyingbonus: case _Dyingbonus: case 0: al++; break; default: write_littleendian(st, al->type); write_littleendian(st+4, al->x); write_littleendian(st+8, al->y); write_littleendian(st+12, al->dx); write_littleendian(st+16, al->dy); write_littleendian(st+20, al->r5); write_littleendian(st+24, al->r6); st += 28; al++; } } write_littleendian(st, 0xffffffff); // end marker } void restore_alents(uint8_t store[_savearealen*28]) { alent* al = aladr; uint8_t* st = store; uint8_t* st_end = st+(_savearealen-1)*28; for (; (read_littleendian(st) != 0xffffffff) && (st < st_end);) { sl1: al->type = read_littleendian(st); al->x = read_littleendian(st+4); al->y = read_littleendian(st+8); al->dx = read_littleendian(st+12); al->dy = read_littleendian(st+16); al->r5 = read_littleendian(st+20); al->r6 = read_littleendian(st+24); al++; st += 28; } } int softmakeobj(int r0, int r1, int r2, int r3, int r4, int r5, int r6) { alent* r10 = aladr; int r9 = _alno; if (alctr >= r9) alctr = 0; r9 -= alctr; if (r9 < 10) /* check 10 object spaces */ { alctr = 0; r10 = aladr; } else r10 += alctr; do { softloop: if (r10->type == 0) return foundmakeal(r10, alctr, r0, r1, r2, r3, r4, r5, r6); r10++; alctr++; } while (--r9 > 0); return 1; } int makeobj(int r0, int r1, int r2, int r3, int r4, int r5, int r6) { int tmpalctr = alctr; alent* r10 = aladr; int r9 = _alno; if (tmpalctr >= r9) tmpalctr = 0; r9 -= tmpalctr; r10 += tmpalctr; do { loop52: if (r10->type == 0) return foundmakeal(r10, tmpalctr, r0, r1, r2, r3, r4, r5, r6); r10++; tmpalctr++; } while (--r9 > 0); r10 = aladr; r9 = alctr; do { loop53: if (r10->type == 0) return foundmakeal(r10, tmpalctr, r0, r1, r2, r3, r4, r5, r6); r10++; tmpalctr++; } while (--r9 > 0); return 1; } int foundmakeal(alent* r10, int newalctr, int r0, int r1, int r2, int r3, int r4, int r5, int r6) { r10->type = r0; r10->x = r1; r10->y = r2; r10->dx = r3; r10->dy = r4; r10->r5 = r5; r10->r6 = r6; alctr = newalctr+1; if (alctr >= _alno) alctr = 0; return 0; } void init_chunk_alien() { CHUNK_EXPLO = make_sound(_SampExplo, 0x3800, 0, 0, 10); CHUNK_ATOM = make_sound(_SampAtomExplo, 0x2800, 0, 0, 50); CHUNK_SPINFIRE = make_sound(_Sampsmallzap, fullpitch+0x1000, 0, 0, 2); CHUNK_SPINPOWERFIRE = make_sound(_Sampbigzap, fullpitch, 0, 0, 2); CHUNK_SHOOT = make_sound(_Sampsmallzap, fullpitch+0x1000, 0, (fullpitch<<16)|0xfe00, 2); CHUNK_SHOOTNUTTER = make_sound(_Sampbigzap, fullpitch, 0, (fullpitch<<16)|0xfe00, 2); } asylum-0.3.2/asylum.c0000644000175000017500000005040511235410523013154 0ustar hughhugh/* asylum.c */ /* Copyright Hugh Robinson 2006-2008. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include "asylum_os.h" #include "asylum.h" #define _firstzone 0 #define _soundentlen 16 char bank; char masterplotal; char frameinc = 1; char rate50; char cheatpermit; char charsok, arm3, savestart; asylum_options options; board *boardadr; fastspr_sprite blokeadr[77]; fastspr_sprite blockadr[256]; char* backadr; int framectr; board *brainadr; board *neuronadr; int fspareat; fastspr_sprite exploadr[32]; fastspr_sprite charsadr[48]; fastspr_sprite alspradr[256]; int currentzone; int xpos, ypos; char plscore[8]; int plzone; void init() { // SWI "FastSpr_GetAddress"; // set up fspplot, fspvars, fspareat=fspvars+24 setdefaults(); loadconfig(); vduread(options); swi_removecursors(); bank = 1; switchbank(); //set up bank variables switchbank(); //set up bank variables checkifarm3(); if (getfiles()) abort_game(); //vduread(options); // set screen size from options scorezero(); cheatpermit = prelude(); if (cheatpermit == 2) abort_game(); for ( ; ; ) { playloop: osbyte_7c(); if (options_menu(0)) // not in game { abort_game(); return; } currentzone = 0; if (getlevelfiles()) { notgotlevel: if (1) abort_game(); // or, depending on what getlevelfiles() returned continue; } swi_bodgemusic_stop(); if (game()) continue; if (gotallneurons()) { zonedone: if (options.idpermit != 1) permitid(); swi_bodgemusic_start(1, 0); // ?? (3,0) in original } else // was "else if overflow clear" { if (options.soundtype == 2) swi_bodgemusic_start(2, 0); swi_sound_qtempo(0x980); swi_bodgemusic_volume(options.musicvol); } showhighscore(); } } int abort_game() { swi_bodgemusic_stop(); losehandlers(); osbyte_7c(); SDL_Quit(); exit(0); } int game() { wipetexttab(); setup(); switchcolch(); //setup colch vars startmessage(); startplayer(); getarms(); if (cheatpermit == 1) zonecheatread(&plzone); do { zonerestart: if (options.mentalzone == 4) loadgame(); else restartplayer(); do { mainrestart: showgamescreen(); if (options.soundtype == 2) swi_bodgemusic_start((plzone != 0), 0); swi_bodgemusic_volume(options.musicvol); frameinc = 1; rate50 = 1; swi_blitz_wait(1); while (!swi_readescapestate()) { mainloop: if (plzone != currentzone) { switchzone: loadzone(); goto zonerestart; } //BL saveal //BL restoreal if ((char)rate50 != 1) { plmove(); bonuscheck(); fuelairproc(); switchcolch(); masterplotal = 0; moval(); project(); bullets(); alfire(); wakeupal(xpos, ypos); } rate50link: plmove(); bonuscheck(); fuelairproc(); mazeplot(xpos, ypos); switchcolch(); masterplotal = 1; playerplot(true); moval(); project(); bullets(); alfire(); playerplot(false); bonusplot(); scoreadd(); update_show_strength(); texthandler(1); seeifdead(); //makesounds(); wakeupal(xpos, ypos); if (cheatpermit == 1) cheatread(); scorewipe(); plotscore(); frameinc = ((options.gearchange == 0) ? 2 : 1); swi_blitz_wait(frameinc); if ((rate50 != 1) && (frameinc < 2)) //rate 25 but one frame passed { swi_blitz_wait(1); frameinc = 2; rate50 = 1; } else if (frameinc > 1) rate50 = 0; rateskip: framectr += frameinc; switchbank(); //swi_blitz_smallretrieve(); switch (player_dead()) { case 1: goto zonerestart; case 2: return 0; case 0: ; } } swi_bodgemusic_stop(); redraw_bonus(); if (escapehandler()) return 1; backprep(backadr); } while (1); } while (1); } void showtext() { texthandler(0); switchbank(); } uint8_t store_for_neuron[30+78*28]; uint8_t store_for_savegame[30+78*28]; uint8_t store_player_state[25]; void saveal(uint8_t store[30+78*28]) { save_player(store); save_alents(store+30); } void restoreal(uint8_t store[30+78*28]) { if (restore_player(store)) return; wipealtab(); restore_alents(store+30); restored:; } void bonus1() { bonusnumb(10); message(96, 224, 0, -2, "Bonus 10000"); addtoscore(10000); } const int keydefs[] = { -SDLK_z, -SDLK_x, -SDLK_SEMICOLON, -SDLK_PERIOD, -SDLK_RETURN }; void setdefaults() { checkifarm3(); options.soundtype = 2; options.soundquality = (arm3 == 0) ? 0 : 1; options.soundvol = 0x7f; options.musicvol = 0x7f; options.leftkey = keydefs[0]; options.rightkey = keydefs[1]; options.upkey = keydefs[2]; options.downkey = keydefs[3]; options.firekey = keydefs[4]; options.gearchange = (arm3 == 0) ? 0 : 1; options.explospeed = (arm3 == 0) ? 2 : 1; options.fullscreen = 0; options.opengl = 1; options.size = 1; // 640 x 512 options.scale = 1; options.joyno = 0; options.mentalzone = 1; options.initials[0] = 'P'; options.initials[1] = 'S'; options.initials[2] = 'Y'; } void soundupdate() { return; } /* .soundupdate STMFD R13!,{R14} LDRB R5,[R12,#options.soundtype] LDRB R6,[R12,#options.soundquality] CMP R5,#0 BEQ soundkill MOV R0,#2 SWI "XSound_Enable" MOV R0,#129 MOV R1,#0 MOV R2,#&FF SWI "OS_Byte" MOV R8,R1 MOV R0,#8; channels CMP R5,#1 MOVEQ R0,#4 MOV R1,#208 MOV R2,#96 TST R6,#1 MOVNE R2,#48 CMP R8,#&A3 MOVLT R2,#0; RISC OS 2 bug MOV R3,#0 MOV R4,#0 SWI "XSound_Configure" ADR R0,sptunenorm TST R6,#1 ADRNE R0,sptunehq CMP R8,#&A3 ADRLT R0,sptunehq SWI "XOS_CLI" LDRB R0,[R12,#options.soundquality] TST R0,#1 MOV R0,#6 MOVNE R0,#12 SWI "XSound_QBeat" MOV R0,#&1000 SWI "XSound_QTempo" LDRB R0,[R12,#options.musicvol] SWI "XBodgeMusic_Volume" LDRB R0,[R12,#options.soundquality] MOV R0,R0,LSR #1 MOV R1,#1 SWI "XStasis_Control" LDMFD R13!,{PC} .sptunenorm EQUS "StasisTune &8000" EQUB 0 .sptunehq EQUS "StasisTune &4000" EQUB 0 ALIGN .soundkill MOV R0,#1 SWI "XSound_Enable" LDMFD R13!,{PC} */ // buf: void checkifarm3() { // The ARM3 is 25-33MHz with a 4Kb cache. If you have // less than that you should probably clear this flag. arm3 = 1; } int checkifextend() { return (NULL != find_game(0x40)); } char buffer[256]; //.hta void errorhandler() { losehandlers(); exit(printf("Error from Asylum:\n%s", buffer+4)); } void exithandler() { losehandlers(); exit(0); } void losehandlers() { SDL_Quit(); return; } void loadzone() { int r1 = currentzone; if ((currentzone = plzone) == 0) exitneuron(r1); else enterneuron(r1); } void change_zone(int zone) { plzone = zone; } void enterneuron(int r1) { if (r1 == 0) saveal(store_for_neuron); currentzone = plzone = getneuronfiles(plzone); if (!currentzone) { exitneuron(r1); return; } wipealtab(); getarms(); initweapon(); initprojtab(); initbultab(); backprep(backadr); boardreg(); prepfueltab(); startplayer(); } void exitneuron(int r1) { boardadr = brainadr; restoreal(store_for_neuron); initweapon(); initprojtab(); initbultab(); retrievebackdrop(); backprep(backadr); boardreg(); prepfueltab(); wipesoundtab(); } void setup() { framectr = 0; plzone = _firstzone; wipesoundtab(); initweapon(); initprojtab(); initbultab(); initrockettab(); getvars(); prepstrength(); scorezero(); backprep(backadr); boardreg(); wipealtab(); prepfueltab(); } void wipesoundtab() { //r10=&soundtabofs; temporarily undefined for (int r3 = _soundentlen*8; r3 > 0; r3 -= sizeof(int)) loop51:; //*(r10++)=0; for (int r0 = 7; r0 >= 0; r0--) soundkillloop: swi_stasis_volslide(r0, 0xfc00, 0); } void screensave() { plotscore(); //oscli("Mount"); //oscli("Screensave Screenfile"); } void c_array_initializers() { init_projsplittab(); init_rocketbursttab(); init_alspintab(); init_rockettab(); init_palette(); init_splittab(); load_voices(); init_keyboard(); } int main(int argc, char** argv) { find_resources(); if ((argc > 2) && !strcmp(argv[1], "--dumpmusic")) { dropprivs(); load_voices(); dumpmusic(argc,argv); exit(0); } open_scores(); dropprivs(); SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO); SDL_WM_SetCaption("Asylum", "Asylum"); SDL_EnableUNICODE(1); #ifndef _NO_SOUND init_audio(); #endif c_array_initializers(); swi_stasis_control(8, 8); init(); // while (snuffctr>=300); SDL_Quit(); exit(0); return 0; } char gamescreenpath[] = "GameScreen"; char chatscreenpath[] = "ChatScreen"; char blokepath[] = "FSPBloke"; char boardpath[] = "Brain"; char blockpath[] = "FSPBlocks"; char backpath[] = "Backfile"; char neuronbackpath[] = "Neurons/Backfile"; char neuronpath[] = "Neurons/Cell1"; char* neuronnumber = neuronpath+12; char explopath[] = "FSPExplo"; char charpath[] = "FSPChars"; char alienpath[] = "FSPAliens"; char resourcepath[] = "./Resources/"; char extendpath[] = "./Extend/"; char idpath[] = "./Id/"; char psychepath[] = "./Psyche/"; char egopath[] = "./Ego/"; char egomusic1path[] = "./Ego/Music1"; char egomusic2path[] = "./Ego/Music2"; char psychemusic1path[] = "./Psyche/Music1"; char psychemusic2path[] = "./Psyche/Music2"; char idmusic1path[] = "./Id/Music1"; char idmusic2path[] = "./Id/Music2"; char mainmusicpath[] = "./Resources/Music1"; char deathmusicpath[] = "./Resources/Music2"; int getfiles() { getvitalfiles(); showloading(); init_sounds(); getmusicfiles(); swi_bodgemusic_start(1, 0); getgamefiles(); return 0; } void getvitalfiles() { charsok = 0; char *chatscreenadr, *charsadr_load; loadvitalfile(&chatscreenadr, chatscreenpath, resourcepath); int charslen = loadvitalfile(&charsadr_load, charpath, resourcepath); initialize_sprites(charsadr_load, charsadr, 48, charsadr_load+charslen); initialize_chatscreen(chatscreenadr); charsok = 1; } void getmusicfiles() { swi_bodgemusic_load(1, mainmusicpath); swi_bodgemusic_load(2, deathmusicpath); } char* currentpath; void getgamefiles() { char *gamescreenadr, *blokeadr_load, *exploadr_load; load1: loadhammered_game(&gamescreenadr, gamescreenpath, resourcepath); initialize_gamescreen(gamescreenadr); load2: int blokelen = loadhammered_game(&blokeadr_load, blokepath, resourcepath); initialize_sprites(blokeadr_load, blokeadr, 77, blokeadr_load+blokelen); load3: int explolen = loadhammered_game(&exploadr_load, explopath, resourcepath); initialize_sprites(exploadr_load, exploadr, 32, exploadr_load+explolen); } void getlevelsprites() { char *blockadr_load, *alienadr_load; switch (options.mentalzone) { case 2: currentpath = psychepath; break; case 3: currentpath = idpath; break; case 4: currentpath = psychepath /*XXX*/; break; default: currentpath = egopath; } load4: int blocklen = loadhammered_level(&blockadr_load, blockpath, currentpath); initialize_sprites(blockadr_load, blockadr, 256, blockadr_load+blocklen); load5: int alienlen = loadhammered_level(&alienadr_load, alienpath, currentpath); initialize_sprites(alienadr_load, alspradr, 256, alienadr_load+alienlen); } int getlevelfiles() { showgamescreen(); switch (options.mentalzone) { case 2: currentpath = psychepath; break; case 3: currentpath = idpath; break; case 4: currentpath = psychepath /*XXX*/; break; default: currentpath = egopath; } getlevelsprites(); load6: loadhammered_level((char**)&brainadr, boardpath, currentpath); boardadr = brainadr; // hack: fix endianness boardadr->width = read_littleendian((uint32_t*)&boardadr->width); boardadr->height = read_littleendian((uint32_t*)&boardadr->height); loadhammered_level(&backadr, backpath, currentpath); char* r1; switch (options.mentalzone) { case 2: r1 = psychemusic1path; break; case 3: r1 = idmusic1path; break; default: r1 = egomusic1path; } swi_bodgemusic_load(0, r1); switch (options.mentalzone) { case 2: r1 = psychemusic2path; break; case 3: r1 = idmusic2path; break; default: r1 = egomusic2path; } swi_bodgemusic_load(1, r1); return 0; } int retrievebackdrop() { char* r9 = currentpath; load10: loadhammered_level(&backadr, backpath, currentpath); return 0; } int getneuronfiles(int plzone) { //STR R10,[R12,#backadr] load8: loadhammered_level(&backadr, neuronbackpath, currentpath); while (1) { neuronloadloop: *neuronnumber = '0'+plzone; if (filelength(neuronpath, currentpath)) break; if (--plzone == 0) noneuronshere: return 0; } load9: loadhammered_level((char**)&neuronadr, neuronpath, currentpath); boardadr = neuronadr; // hack: fix endianness boardadr->width = read_littleendian((uint32_t*)&boardadr->width); boardadr->height = read_littleendian((uint32_t*)&boardadr->height); return plzone; } char config_keywords[16][12] = { "LeftKeysym", "RightKeysym", "UpKeysym", "DownKeysym", "FireKeysym", "SoundType", "SoundQ", "FullScreen", "OpenGL", "ScreenSize", "ScreenScale", "SoundVolume", "MusicVolume", "MentalZone", "Initials", "You" }; char idpermitstring[] = "You are now permitted to play the ID!!!\n"; void loadconfig() { char keyword[12]; FILE* r0 = find_config(0x40); // read access if (r0 != NULL) { //swi_osgbpb(3, /* read bytes from pointer R4 */ //r0,&savestart,&saveend,0); while (fscanf(r0, " %12s", keyword) != EOF) { int i; for (i = 0; i < 16; i++) if (!strncmp(keyword, config_keywords[i], 12)) break; if (i == 14) { fscanf(r0, " %3c", options.initials); continue; } if (i == 15) { options.idpermit = 1; break; } // end of file if (i == 16) break; // parsing failed int temp; fscanf(r0, " %i", &temp); switch (i) { case 0: options.leftkey = -temp; break; case 1: options.rightkey = -temp; break; case 2: options.upkey = -temp; break; case 3: options.downkey = -temp; break; case 4: options.firekey = -temp; break; case 5: options.soundtype = temp; break; //case 6: options.soundquality=temp; break; case 7: options.fullscreen = temp; break; case 8: options.opengl = temp; break; case 9: options.size = temp; break; case 10: options.scale = temp; break; case 11: options.soundvol = temp; break; case 12: options.musicvol = temp; break; case 13: options.mentalzone = temp; break; } } fclose(r0); } findoutid:; if (!options.idpermit) if (options.mentalzone > 2) options.mentalzone = 2; //int idp=swi_osfile(5,options.idpermitpath,NULL,NULL); //options.idpermit=(idp==1)?1:0; } void saveconfig() { FILE* r0 = find_config(0x80); // create file with read/write access if (r0 == NULL) return; //swi_osgbpb(1, /* write bytes to pointer R4 */ //r0,&savestart,&saveend,0); fprintf(r0, "%s %i\n%s %i\n%s %i\n%s %i\n%s %i\n%s %i\n%s %i\n%s %i\n%s %i\n%s %i\n%s %i\n%s %i\n%s %i\n%s %c%c%c\n%s", config_keywords[0], -options.leftkey, config_keywords[1], -options.rightkey, config_keywords[2], -options.upkey, config_keywords[3], -options.downkey, config_keywords[4], -options.firekey, config_keywords[5], options.soundtype, //config_keywords[6], options.soundquality, config_keywords[7], options.fullscreen, config_keywords[8], options.opengl, config_keywords[9], options.size, config_keywords[10], options.scale, config_keywords[11], options.soundvol, config_keywords[12], options.musicvol, config_keywords[13], options.mentalzone, config_keywords[14], options.initials[0], options.initials[1], options.initials[2], ((options.idpermit == 1) ? idpermitstring : "")); fclose(r0); } void loadgame() { FILE* r0 = find_game(0x40); if (r0 == NULL) /* XXX failing silently is bad */ return; //uint8_t dimensions[8]; fread(&options.mentalzone, 1, 1, r0); fread(&plzone, 1, 1, r0); currentzone = plzone; fread(store_player_state, 1, 25, r0); restore_player_state(store_player_state); getlevelfiles(); fread(store_for_savegame, 1, 30+78*28, r0); fread(store_for_neuron, 1, 30+78*28, r0); restoreal(store_for_savegame); //fread(dimensions, 8, 1, r0); //brainadr->width = read_littleendian(dimensions); //brainadr->height = read_littleendian(dimensions+4); fread(brainadr->contents, brainadr->width, brainadr->height, r0); if (plzone) { getneuronfiles(plzone); /* HACK determine dimensions and allocate neuronadr */ //neuronadr->width = read_littleendian(dimensions); //neuronadr->height = read_littleendian(dimensions+4); fread(neuronadr->contents, neuronadr->width, neuronadr->height, r0); } fclose(r0); backprep(backadr); boardreg(); reinitplayer(); } void savegame() { FILE* r0 = find_game(0x80); if (r0 == NULL) /* XXX failing silently is bad */ return; //uint8_t dimensions[8]; fwrite(&options.mentalzone, 1, 1, r0); fwrite(&plzone, 1, 1, r0); save_player_state(store_player_state); fwrite(store_player_state, 1, 25, r0); saveal(store_for_savegame); fwrite(store_for_savegame, 1, 30+78*28, r0); fwrite(store_for_neuron, 1, 30+78*28, r0); //write_littleendian(dimensions, brainadr->width); //write_littleendian(dimensions+4, brainadr->height); //fwrite(dimensions, 8, 1, r0); fwrite(brainadr->contents, brainadr->width, brainadr->height, r0); if (plzone) { //write_littleendian(dimensions, neuronadr->width); //write_littleendian(dimensions+4, neuronadr->height); fwrite(neuronadr->contents, neuronadr->width, neuronadr->height, r0); } fclose(r0); } void permitid() { //swi_osfile(10,options.idpermitpath,idpermitstring,idpermitstring+40); FILE* r0 = find_config(0xc0); if (r0 != NULL) { fprintf(r0, "%s", idpermitstring); fclose(r0); } options.idpermit = 1; } asylum-0.3.2/asylum_haiku.c0000644000175000017500000000057211040506032014330 0ustar hughhugh#include #include char *get_exe_path(char *buf, int bufsize) { int r; int32 cookie; image_info info; char *p; cookie = 0; r = get_next_image_info(0, &cookie, &info); if( r == B_OK ) { strncpy(buf, info.name, bufsize); buf[bufsize-1] = '\0'; p = strrchr(buf, '/'); if (p) *p = '\0'; } else { return NULL; } return buf; } asylum-0.3.2/asylum_win.c0000644000175000017500000000036611040506032014025 0ustar hughhugh#include char *get_exe_path(char *buf, int bufsize) { char *p; GetModuleFileName(NULL, buf, bufsize); while (p = strchr(buf, '\\')) *p = '/'; p = strrchr(buf, '/'); if (p) *p = '\0'; buf[bufsize-1] = '\0'; return buf; } asylum-0.3.2/bullet.c0000644000175000017500000001645111040473712013137 0ustar hughhugh/* bullet.c */ /* Copyright Hugh Robinson 2006-2008. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include "asylum.h" #define _bulno 64 #define _bullim 0x1000 bulent bulofs[_bullim]; bulent* buladr; int bulctr; extern char _targetlowlim, _targethighlim, _translowlim, _transhighlim; extern int xposmax, yposmax; extern fastspr_sprite exploadr[]; extern char masterplotal; extern int xpos, ypos, pllx, plly, plhx, plhy; extern int framectr; Mix_Chunk* CHUNK_BULLET_1; Mix_Chunk* CHUNK_BULLET_2; Mix_Chunk* CHUNK_BULLET_3; #define _bulspritebase 16 int splittab[14]; void init_splittab() { for (int i = 0; i < 7; i++) { splittab[i*2] = (int)(0x200*sin((0.5+i)/3.5*M_PI)); splittab[i*2+1] = (int)(0x200*cos((0.5+i)/3.5*M_PI)); } } void init_chunk_bullet() { CHUNK_BULLET_1 = make_sound(_Sampsmallzap, fullpitch+0x1000, 0, (fullpitch<<16)|0xfe00, 2); CHUNK_BULLET_2 = make_sound(_Sampbigzap, fullpitch+0x1800, 0, (fullpitch<<16)|0xfe00, 2); CHUNK_BULLET_3 = make_sound(_Sampbigzap, fullpitch+0x1000, 0, (fullpitch<<16)|0xfe00, 2); } void bullets() // the bullet handler (aliens fire these) { bulent* r11 = buladr; int i; for (i = _bulno; i > 0; i--, r11++) { loop71: if (r11->type == 0) continue; foundbul: r11->x += r11->dx; r11->y += r11->dy; if ((r11->x <= xlowlim) || (xposmax <= r11->x) || (r11->y <= ylowlim) || (yposmax <= r11->y)) { // goto projoffscr r11->type = 0; continue; } if ((r11->dx <= (1<<12)) && (-r11->dx <= (1<<12))) if (r11->flags&BULL_ACCEL) { r11->dx += (r11->dx>>4); r11->dy += (r11->dy>>4); } bulnoacc: if ((r11->flags&BULL_HOME) && (r11->flags <= (3<<6)*BULL_TTL)) { int r6 = 1<<6; if (!(r11->flags&BULL_SLOWHOME)) { r6 = 1<<4; r11->dx -= (r11->dx>>5); r11->dy -= (r11->dy>>5); } r11->dx += (r11->x < xpos) ? r6 : -r6; r11->dy += (r11->y < ypos) ? r6 : -r6; } bulnohome: if (r11->dx > _speedlim) r11->dx = _speedlim; if (r11->dx < -_speedlim) r11->dx = -_speedlim; if (r11->dy > _speedlim) r11->dy = _speedlim; if (r11->dy < -_speedlim) r11->dy = -_speedlim; r11->flags -= BULL_TTL; /* decrement the life counter */ if (r11->flags < 0) { // out of time // goto buldestroy if ((r11->flags)&BULL_SPLIT) goto bulsplit; r11->type = 0; continue; } if (!((r11->x <= pllx) || (plhx <= r11->x) || (r11->y <= plly) || (plhy <= r11->y))) { // goto bulletkill; bulletkill: r11->type = 0; // goto causeexplobullet; int DX = r11->dx>>4, DY = r11->dy>>4; explogonopyroquiet(r11->x-r11->dx, r11->y-(8<<8)-r11->dy, DX+DY, DY-DX, 0, DX+DY, 0); explogonopyro(r11->x-r11->dx, r11->y-(8<<8)-r11->dy, DX-DY, DX+DY, 0, DX-DY, 0); continue; } { char r1 = *fntranslate(r11->x, r11->y); if ((r1 >= 16) // hit a block // bulhit: && !((r1 >= _translowlim) && (r1 <= _transhighlim)) && !((r1 >= _targetlowlim) && (r1 <= _targethighlim))) ; else { bulhitins: if (masterplotal == 0) continue; int r0 = (r11->type); if ((r0 == _bulspritebase+8) || (r0 == _bulspritebase+10)) r0 ^= (framectr&4)>>2; relplot(exploadr, r0, r11->x, r11->y); continue; } } nobultarget: r11->type = 0; bulnodestroy: if ((r11->flags&BULL_EXPLO) != 0) { // causeexplobullet: int DX = r11->dx>>4, DY = r11->dy>>4; explogonopyroquiet(r11->x-r11->dx, r11->y-(8<<8)-r11->dy, DX+DY, DY-DX, DX+DY, 0, 0); explogonopyro(r11->x-r11->dx, r11->y-(8<<8)-r11->dy, DX-DY, DX+DY, DX-DY, 0, 0); continue; } buldestroy: if ((r11->flags&BULL_SPLIT) == 0) { r11->type = 0; continue; } bulsplit:; int newtype = (random()&7); if (newtype == 7) newtype = 0; int r7 = r11->type; if (r7 == _bulspritebase+13) newtype = 7; if (r7 == _bulspritebase+14) newtype = 10; if (r7 == _bulspritebase+15) newtype = 12+(newtype&3); if (newtype == 15) newtype = 0; for (int i = 0; i < 14; i += 2) loop75: (void)makebul(r11->x, r11->y, (r11->dx>>2)+splittab[i], (r11->dy>>2)+splittab[i+1], newtype, (1<<6)*BULL_TTL); r11->type = 0; } } int makebul(int x, int y, int dx, int dy, int type, int flags) { int i; bulent* r10 = buladr; type += _bulspritebase; r10 += bulctr; for (i = bulctr; i < _bulno; i++, r10++) loop72: if (r10->type == 0) { bulctr = i; break; } if (i == _bulno) { r10 = buladr; for (i = 0; i < bulctr; i++, r10++) loop69: if (r10->type == 0) { bulctr = i; break; } if (i == bulctr) return 1; // failed } foundmakebul: if (flags < BULL_TTL) flags |= (1<<6)*BULL_TTL; if (type >= _bulspritebase+8) flags |= BULL_SLOWHOME|BULL_EXPLO; if (type >= _bulspritebase+12) flags = ((1<<5)*BULL_TTL)|BULL_SPLIT; if ((type == _bulspritebase+7) || (type == _bulspritebase+8)) flags |= BULL_HOME; if (type == _bulspritebase+10) flags |= BULL_ACCEL; r10->type = type; r10->x = x; r10->y = y; r10->dx = dx; r10->dy = dy; r10->flags = flags; bulctr = (bulctr+1)%_bulno; // loop68: // if (bulctr==0) return; // XXX why??? int r7 = (r10->x-xpos)>>9; x = abs(r10->x-xpos); y = abs(r10->y-ypos); int vol = (0x7f-((x+y)>>12)); if (vol >= 80) { bidforsound(_Explochannel,(type>=_bulspritebase+8)?_Sampbigzap:_Sampsmallzap, (((vol&0x7f)>0x7c)?0x7c:(vol&0x7f))-((type==_bulspritebase+8)?0x10:0), (type==_bulspritebase+8)?(fullpitch+0x1800):(fullpitch+0x1000), 0,(fullpitch<<16)|(0xfe<<8),2,r7, // lifetime (frames) (type>_bulspritebase+8)?CHUNK_BULLET_3:(type==_bulspritebase+8)?CHUNK_BULLET_2:CHUNK_BULLET_1); } nozapsound:; return 0; } void initbultab() { buladr = bulofs; bulent* r10 = buladr; bulctr = 0; for (int r9 = _bulno; r9 > 0; r9--) { loop74: *(int*)r10 = 0; r10++; } } asylum-0.3.2/file.c0000644000175000017500000002524211117640655012574 0ustar hughhugh/* file.c */ /* Copyright Hugh Robinson 2006-2008. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include #include #include "asylum.h" #define STOREAREALEN (16*0x40000) char storage[STOREAREALEN]; #define storageend (storage+STOREAREALEN) //const char idpermitpath[]="Idpermit"; static char resource_path[240]; static char score_path[240]; char configname[] = "/.asylum"; //"Config"; char savegamename[] = "/.asylum_game"; static const char* score_name[4] = { "/EgoHighScores", "/PsycheHighScores", "/IdHighScores", "/ExtendedHighScores" }; FILE* score_file[4]; FILE* find_game(int op) { char fullname[240] = ""; char* home = getenv("HOME"); if (home) strcat(fullname, home); else return NULL; strcat(fullname, savegamename); switch (op) { case 0x40: return fopen(fullname, "rb"); case 0x80: return fopen(fullname, "wb"); case 0xc0: return fopen(fullname, "ab"); default: return NULL; } } FILE* find_config(int op) { char fullname[240] = ""; char* home = getenv("HOME"); if (home) strcat(fullname, home); else strcat(fullname, resource_path); strcat(fullname, configname); switch (op) { case 0x40: return fopen(fullname, "rb"); case 0x80: return fopen(fullname, "wb"); case 0xc0: return fopen(fullname, "ab"); default: return NULL; } } void dropprivs() { #ifndef _WIN32 setregid(getgid(), getgid()); setreuid(getuid(), getuid()); #endif } uint32_t read_littleendian(uint8_t* bytes) { return (*bytes)|(bytes[1]<<8)|(bytes[2]<<16)|(bytes[3]<<24); } uint32_t read_littleendian(uint32_t* word) { return read_littleendian((uint8_t*)word); } void write_littleendian(uint8_t* bytes, uint32_t word) { *bytes = word & 0xff; bytes[1] = (word>>8) & 0xff; bytes[2] = (word>>16) & 0xff; bytes[3] = (word>>24) & 0xff; } int loadhammered_game(char** spaceptr, char* r1, char* path) { int reload; do { reload = loadhammered(spaceptr, r1, path); if (reload == -1) { badload(); return 0; } } while (reload == 1); return reload; } int loadhammered_level(char** spaceptr, char* r1, char* path) { int reload; do { reload = loadhammered(spaceptr, r1, path); if (reload == -1) reload = badlevelload(); } while (reload == 1); return reload; } int loadvitalfile(char** spaceptr, char* r1, char* path) { // if VS or if r0==1 char fullname[240] = ""; strcat(fullname, path); strcat(fullname, r1); int r4 = swi_osfile(15, fullname, 0, 0); if (r4 <= 0) fatalfile(); *spaceptr = (char*)malloc(r4); if (swi_osfile(14, fullname, *spaceptr, 0)) fatalfile(); return r4; } int loadhammered(char** spaceptr, char* r1, char* path) { int r3 = swi_blitz_hammerop(0, r1, path, NULL); if (r3 == -1) { filenotthere(); return -1; } if (r3 == 0) return loadfile(spaceptr, r1, path); *spaceptr = (char*)malloc(r3); if (*spaceptr == NULL) { nomemory(); return 1; } int k; if ((k = swi_blitz_hammerop(1, r1, path, *spaceptr)) < 0) { printf("Error %i\n", -k); filesyserror(); return 1; } return k; } int loadfile(char** spaceptr, char* r1, char* path) { int r4 = filelength(r1, path); char fullname[240] = ""; // hack: +4 as feof doesn't trigger until we've passed the end *spaceptr = (char*)malloc(r4+4); strcat(fullname, path); strcat(fullname, r1); if (r4 == -1) { filenotthere(); return 1; } if (*spaceptr == NULL) { nomemory(); return 1; } if (swi_osfile(14, fullname, *spaceptr, 0)) { filesyserror(); return 1; } return r4; } void set_paths() { #ifdef RESOURCEPATH if (chdir(RESOURCEPATH) == 0) { strcpy(resource_path, RESOURCEPATH); strcpy(score_path, SCOREPATH); /* We could fall back to ~/.asylum/ if SCOREPATH is not writable. However just assuming the current directory is ok is not cool. */ return; } #endif fprintf(stderr, "Running as uninstalled, looking for files in local directory.\n"); #ifdef HAVE_GET_EXE_PATH char exe_path[240]; if (get_exe_path(exe_path, sizeof(exe_path))) { strcpy(resource_path, exe_path); strncat(resource_path, "/data"); strcpy(score_path, exe_path); strcat(score_path, "/hiscores"); return; } #endif strcpy(resource_path, "data"); strcpy(score_path, "../hiscores"); /* relative to resource_path */ } void open_scores() { char filename[PATH_MAX]; for (int i = 0; i < 4; ++i) { strcpy(filename, score_path); strcat(filename, score_name[i]); score_file[i] = fopen(filename, "r+b"); if (score_file[i] == NULL) { // Perhaps the file didn't exist yet score_file[i] = fopen(filename, "w+b"); if (score_file[i] == NULL) { // Perhaps we don't have write permissions :( score_file[i] = fopen(filename, "rb"); if (score_file[i] == NULL) fprintf(stderr, "Couldn't open %s, check if the directory exists\n", filename); else fprintf(stderr, "Opening %s read-only, high scores will not be saved\n", filename); } } } } void find_resources() { set_paths(); if (chdir(resource_path) != 0) { fprintf(stderr, "Couldn't find resources directory %s\n", resource_path); exit(1); } } void savescores(char* highscorearea, int mentalzone) { highscorearea[13*5] = swi_oscrc(0, highscorearea, highscorearea+13*5, 1); if (mentalzone >= 1 && mentalzone <= 4 && score_file[mentalzone - 1] != NULL) { FILE * f = score_file[mentalzone - 1]; fseek(f, 0, SEEK_SET); fwrite(highscorearea, 1, 13*5+1, f); fflush(f); } } void loadscores(char* highscorearea, int mentalzone) { if (mentalzone >= 1 && mentalzone <= 4 && score_file[mentalzone - 1] != NULL) { FILE * f = score_file[mentalzone - 1]; fseek(f, 0, SEEK_SET); if (fread(highscorearea, 1, 13*5+1, f) == 13*5+1 && swi_oscrc(0, highscorearea, highscorearea+13*5, 1) == highscorearea[13*5]) { return; } } setdefaultscores(); } int filelength(char* name, char* path) { char fullname[240] = ""; strcat(fullname, path); strcat(fullname, name); int r4 = swi_osfile(15, fullname, NULL, NULL); if (r4 == -1) { filesyserror(); return 0; } //if (r0!=1) {fileerror: return -1;} return r4; } void swi_osgbpb(int op, FILE* f, char* start, char* end, int b) { switch (op) { case 3: for (char* i = start; (i < end) && !feof(f); i++) *i = fgetc(f); break; case 1: for (char* i = start; (i < end) && !feof(f); i++) fputc(*i, f); break; } } int swi_osfile(int op, const char* name, char* start, char* end) { FILE* f; int x; //printf("Looking for %s\n",name); switch (op) { case 10: // save file f = fopen(name, "wb"); for (char* i = start; i < end; i++) fputc(*i, f); fclose(f); return 0; case 5: // test file existence f = fopen(name, "rb"); if (f == NULL) return 0; fclose(f); return 1; case 15: // file length f = fopen(name, "rb"); if (f == NULL) return -1; fseek(f, 0, SEEK_END); x = ftell(f); fclose(f); return x; case 0xff: case 14: // load file f = fopen(name, "rb"); if (f == NULL) return -1; for (char* i = start; !feof(f); i++) *i = fgetc(f); fclose(f); return 0; } } int swi_blitz_hammerop(int op, char* name, char* path, char* space) { char fullname[240] = ""; strcat(fullname, path); strcat(fullname, name); FILE* f = fopen(fullname, "rb"); if (f == NULL) return -1; // file does not exist if ((getc(f) != 'H') || (getc(f) != 'm') || (getc(f) != 'r')) { fclose(f); return op; } // file is not Hammered if (op == 0) return 0x24000; // hack: should return length char a[524288]; int p = 0; char c; int fmt = getc(f); int len = 0; for (int i = 0; i < 4; i++) len = ((len>>8)&0xffffff)|((getc(f)<<24)&0xff000000); while (!feof(f)) { c = getc(f); if (c == 0xff) break; // end flag else if (c < 0x10) { // type 1 int n = (c == 15) ? 256 : c+2; char d = getc(f); for (int i = 0; i < n; i++) a[p++] = d; } else if (c < 0x20) { // type 2 int n = (c&0xf)+1; for (int i = 0; i < n; i++) a[p++] = getc(f); } else if (c < 0x40) { // type 3 char d = getc(f); int P = p-1-((c&3)<<8)-d; if (P < 0) { fclose(f); return -3; } int n = ((c&0x1c)>>2)+2; for (int i = 0; i < n; i++) a[p++] = a[P--]; } else if (c < 0x80) { // type 4 char d = getc(f); int D = 1<<(((c&4) ? ((c&6)+2) : (c&6))>>1); int P = p-1-((c&1)<<8)-d; if (P < 0) { fclose(f); return -4; } int n = ((c&0x38)>>3)+2; for (int i = 0; i < n; i++) a[p++] = a[P+(i*D)/4]; } else { // type 5 char d = getc(f); int P = p-1-((c&7)<<8)-d; if (P < 0) { fclose(f); return -5; } int n = ((c&0x78)>>3)+2; for (int i = 0; i < n; i++) a[p++] = a[P++]; } } if (fmt != 0) { int wlen = (len+3)>>2; for (int i = 0; i < p; i++) space[i] = a[(i%4)*wlen+(i>>2)]; } else for (int i = 0; i < p; i++) space[i] = a[i]; fclose(f); return p; } asylum-0.3.2/keyboard.c0000644000175000017500000001224511235410523013442 0ustar hughhugh/* keyboard.c */ /* Copyright Hugh Robinson 2006-2008. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "asylum.h" extern asylum_options options; static char keyboard[512]; static int keybuf; static int unibuf; static int mouse; static int exposed; #define ESC_VALUE 27 void init_keyboard() { for (int i = 0; i < 512; i++) keyboard[i] = 0; } void swi_removecursors() { ; } int swi_readescapestate() { return keyboard[ESC_VALUE]; } int readmousestate() { return mouse; } int osbyte_79(int c) { update_keyboard(); int key = keybuf; keybuf = -1; return key; //for (int i=0;i<512;i++) if (keyboard[i]) {/*printf("Returning %i\n",i);*/ return i;} return -1; } int osbyte_79_unicode(int c) { update_keyboard(); int uni = unibuf; unibuf = -1; return uni; } int osbyte_7a() { update_keyboard(); for (int i = 0; i < 512; i++) if (keyboard[i]) return i;return -1; } void osbyte_7c() { keyboard[ESC_VALUE] = 0; } int osbyte_81(int c) { if (c >= 0) return osbyte_79(c); update_keyboard(); return keyboard[-c]; } char swi_oscrc(int w, char* start, char* end, int bytes) { return 0xff; } int swi_joystick_read(int a, int* x, int* y) { ; } void update_keyboard() { SDL_Event e; SDL_KeyboardEvent* ke; SDL_MouseButtonEvent* me; while (SDL_PollEvent(&e)) { // why not SDL_PeepEvents(&e, 1, SDL_GETEVENT, SDL_KEYDOWNMASK|SDL_KEYUPMASK)>0)? switch (e.type) { case SDL_KEYDOWN: ke = (SDL_KeyboardEvent*)&e; keyboard[ke->keysym.sym] = 0xff; keybuf = ke->keysym.sym; if (ke->keysym.unicode) unibuf = ke->keysym.unicode; else unibuf = -1; break; case SDL_KEYUP: ke = (SDL_KeyboardEvent*)&e; keyboard[ke->keysym.sym] = 0; break; case SDL_MOUSEBUTTONDOWN: me = (SDL_MouseButtonEvent*)&e; switch (me->button) { case SDL_BUTTON_LEFT: mouse |= 4; break; case SDL_BUTTON_MIDDLE: mouse |= 2; break; case SDL_BUTTON_RIGHT: mouse |= 1; break; } break; case SDL_MOUSEBUTTONUP: me = (SDL_MouseButtonEvent*)&e; switch (me->button) { case SDL_BUTTON_LEFT: mouse &= ~4; break; case SDL_BUTTON_MIDDLE: mouse &= ~2; break; case SDL_BUTTON_RIGHT: mouse &= ~1; break; } break; case SDL_VIDEOEXPOSE: exposed = 1; break; case SDL_QUIT: exithandler(); break; } } } void zonecheatread(int* zone) { char r1 = osbyte_79_unicode(0); // was _81(0) if ((r1 < 48) || (r1 > 56)) return; *zone = r1-48; } void cheatread() { if (osbyte_81(-282) == 0xff) getmpmg(); if (osbyte_81(-283) == 0xff) getrocket(); if (osbyte_81(-285) == 0xff) screensave(); if (osbyte_81(-284) == 0xff) prepstrength(); } void keyread(key_state* ks) { int r4 = -1; if (options.joyno) { int r0, r1; int v = swi_joystick_read(options.joyno-1, &r0, &r1); if (v) { nostickerr: message(32, 32, 0, 1, "Can't see a joystick!"); r4 = -1; options.joyno = 0; } else r4 = -1; /* MOV R1,R0,ASL #24 CMN R1,#32<<24 BICLT R4,R4,#8; down CMP R1,#32<<24 BICGT R4,R4,#4; up BIC R0,R0,#&FF MOV R1,R0,ASL #16 CMN R1,#32<<24 BICLT R4,R4,#1; left CMP R1,#32<<24 BICGT R4,R4,#2; right TST R0,#1<<16 BICNE R4,R4,#16; fire TST R0,#1<<17 BICNE R4,R4,#4; up on fire button 2 */ } nojoystick: if ((osbyte_81(options.leftkey) == 0xff) || !(r4&1)) { if (++ks->leftpress == 0) ks->leftpress = 0xff;} else ks->leftpress = 0; if ((osbyte_81(options.rightkey) == 0xff) || !(r4&2)) { if (++ks->rightpress == 0) ks->rightpress = 0xff;} else ks->rightpress = 0; if ((osbyte_81(options.upkey) == 0xff) || !(r4&4)) { if (++ks->uppress == 0) ks->uppress = 0xff; } else ks->uppress = 0; if ((osbyte_81(options.downkey) == 0xff) || !(r4&8)) { if (++ks->downpress == 0) ks->downpress = 0xff; } else ks->downpress = 0; if ((osbyte_81(options.firekey) == 0xff) || !(r4&16)) { if (++ks->fire == 0) ks->fire = 0xff; } else ks->fire = 0; if (ks->leftpress || ks->rightpress || ks->uppress || ks->downpress || ks->fire) ks->keypressed = 1; } int need_redraw() { int e = exposed; exposed = 0; return e; } asylum-0.3.2/maze.c0000644000175000017500000004150111137476644012614 0ustar hughhugh/* maze.c */ /* Copyright Hugh Robinson 2006-2008. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "asylum.h" #include extern const char _bonuslow = 16, _bonushigh = 31, _megabonuslim = 35; const char _neuronlowlim = 40, _neuronhighlim = 47; const char _gaslowlim = 54, _gashighlim = 55; const char _animlowlim = 54, _animhighlim = 63; const char _eleclowlim = 56, _elecvertlowlim = 60, _elechighlim = 63; const char _fuelairno = 68; const char _bomblowlim = 64, _bombhighlim = 79; const char _atomlowlim = 72, _atomhighlim = 75; const char _boobylowlim = 76, _boobyhighlim = 79; extern const char _targetlowlim = 80, _powertarget = 84, _nuttertarget = 88, _targethighlim = 95; const char _weaplowlim = 96, _weaphighlim = 111; const char _solidlowlim = 128, _solidhighlim = 131; const char _crumblelowlim = 160, _crumblehighlim = 167; const char _crumblestandlowlim = 168, _crumblestandhighlim = 175; const char _starsno = 15; const char _markerno = 255; const char _triggerlim = 193; #define _boxwidth 20 #define _boxheight 16 #define _boardhdrlen 32 extern fastspr_sprite blockadr[256]; extern board *boardadr; extern int framectr; int boardwidth; int xposmax; int yposmax; char *boardlowlim, *boardhighlim; extern char atombombctr; inline int block_anim(char b) {return ((b >= _animlowlim) && (b <= _animhighlim));} inline int block_solid(char b) {return ((b >= _solidlowlim) && (b <= _solidhighlim));} inline int block_crumblestand(char b) {return ((b >= _crumblestandlowlim) && (b <= _crumblestandhighlim));} inline int block_bomb(char b) {return ((b >= _bomblowlim) && (b <= _bombhighlim));} inline int block_target(char b) {return ((b >= _targetlowlim) && (b <= _targethighlim));} inline int block_booby(char b) {return ((b >= _boobylowlim) && (b <= _boobyhighlim));} int block_gas(char b) {return ((b >= _gaslowlim) && (b < _gashighlim));} #define targetscore 500 #define bombloss (4<<8) #define atomloss (32<<8) Mix_Chunk* CHUNK_FUELAIR; Mix_Chunk* CHUNK_BONUS_1; Mix_Chunk* CHUNK_BONUS_2; #define _windspeed (1<<8) #define _fuelairduration 0x18 #define _fueltablim 0x3c0 char* fueltabofs[2][_fueltablim]; // &8000 // don't forget there's two of these char** fueltabread; char** fueltabwrite; int fueltabctr; int fuelairlastframe; void fuelairproc() { if (framectr < fuelairlastframe+((_fuelairduration-fueltabctr)>>1)) return; fuelairlastframe = framectr; char **ftr, **ftw; ftr = fueltabread; fueltabread = ftw = fueltabwrite; fueltabwrite = ftr; if (--fueltabctr < 0) { *ftw = 0; return; } for (char** r7 = ftw+_fueltablim; r7 > ftw;) { loop22:; char* r8 = *(ftr++); if (r8 == NULL) { *ftw = 0; return; } char r0 = (*r8)&~1; if (r0 != _gaslowlim) skipfuelair : continue; char* r1 = r8-1; if (*r1 == 0) { *r1 = _gaslowlim; *(ftw++) = r1; } r1 = r8+boardwidth; if (*r1 == 0) { *r1 = _gaslowlim; *(ftw++) = r1; } r1 = r8+1; if (*r1 == 0) { *r1 = _gaslowlim; *(ftw++) = r1; } r1 = r8-boardwidth; if (*r1 == 0) { *r1 = _gaslowlim; *(ftw++) = r1; } } fuelprocdone: *ftw = 0; } void prepfueltab() { fueltabread = fueltabofs[0]; fueltabwrite = fueltabofs[1]; *fueltabread = 0; *fueltabwrite = 0; fueltabctr = 0; fuelairlastframe = 0; } int embertrybomb(char* r0, alent* r11) { if (block_bomb(*r0)) { emberbomb(r0, r11); return 1; } else return 0; } int embertrybombtarget(char* r0, alent* r11) { if (block_bomb(*r0) || block_target(*r0)) // was excluding _targethighlim { emberbomb(r0, r11); return 1; } else return 0; } int embertrybooby(char* r0, alent* r11) { if (block_booby(*r0)) { emberbomb(r0, r11); return 1; } else return 0; } int embertrygas(char* r0, alent* r11) { if (block_gas(*r0)) { emberbomb(r0, r11); return 1; } else return 0; } //void emberbooby(char* r0) //{ //if ((*r0 < _atomlowlim) || (*r0 > _atomhighlim)) normbombsurvive(r0); //else atombomb(r0); //} void emberbomb(char* r0, alent* r11) { if ((*r0 < _atomlowlim) || (*r0 > _atomhighlim)) normbomb(r0, r11); else atombomb(r0); } void normbombsurvive(char* r0) { if ((*r0 == _fuelairno) || (*r0 == _fuelairno+1)) { fuelbomb(r0); return; } normbombins: destroy(r0); } void fuelbomb(char* r0) { if (*r0 != _fuelairno) r0--; *r0 = 0; r0[1] = 0; int x, y; backtranslate(r0, &x, &y); explogo(x+(8<<8), y, 0, -(1<<7), 0, 0, 0); } int seeifwind(char* r1, int* dx, int* dy, int retval) { if (*r1 == 2) { *dx -= _windspeed*4; retval = 1; } if (*r1 == 3) { *dx += _windspeed*4; retval = 1; } if (*r1 == 12) { *dy -= _windspeed; retval = 1; } if (*r1 == 13) { *dy += _windspeed; retval = 1; } return retval; } void crumblecheck(char* r1) { if (!block_crumblestand(*r1)) return; (*r1)++; if (((*r1)&3) == 0) *r1 = 0; } char* translate(int r0, int r1) { return (char*)boardadr->contents+(r0>>12)+(r1>>12)*boardadr->width; } char* fntranslate(int r0, int r1) { return (char*)boardadr->contents+((r0+(8<<8))>>12)+((r1-(8<<8))>>12)*boardadr->width; } void backtranslate(char* r, int* x, int* y) { int r0 = r-boardadr->contents; int r1 = boardwidth; *x = (r0%r1)<<12; *y = (r0/r1)<<12; } /*LDR R1,[R12,#boardadr] ADD R1,R1,#boardhdrlen SUB R0,R0,R1 LDR R1,[R12,#boardwidth] MOV R2,#0 MOV R3,#0 MOV R4,#1<<31 .l9 MOVS R0,R0,ASL #1 ADC R3,R3,R3 CMP R3,R1 SUBGE R3,R3,R1 ORRGE R2,R2,R4 MOVS R4,R4,LSR #1 BNE l9 MOV R0,R3,LSL #12 MOV R1,R2,LSL #12 MOV PC,R14*/ int block_weapon(char b) { if ((b < _weaplowlim) || (b > _weaphighlim)) return 0; return b-_weaplowlim+1; } int plbombcheck(char* r5) { int r1 = bombcheck(r5); if ((*r5 >= _targetlowlim) && (*r5 <= _targethighlim)) r1 = normalbomb(r5); nopltarg: return r1; } int bombcheck(char* r5) { char r0 = *r5; if ((r0 < _bomblowlim) || (r0 > _bombhighlim)) return 0; if ((r0 == _fuelairno) || (r0 == _fuelairno+1)) return fuelairbomb(r5); if (r0 >= _boobylowlim) return boobybomb(r5); if ((r0 < _atomlowlim) || (r0 > _atomhighlim)) return normalbomb(r5); return atombomb(r5); } int atombomb(char* r5) // Caution - recursive routine { if (atombombctr >= 0x1f) atomabandon: return atomloss; atombombctr++; char r0 = (*r5)-_atomlowlim; if (r0&1) r5 -= 1; if (r0&2) r5 -= boardwidth; *r5 = 0; *(r5+1) = 0; *(r5+boardwidth) = 0; *(r5+boardwidth+1) = 0; // delete this a-bomb procatom(r5-boardwidth); procatom(r5-boardwidth+1); procatom(r5-1); procatom(r5+2); procatom(r5+boardwidth-1); procatom(r5+boardwidth+2); procatom(r5+2*boardwidth); procatom(r5+2*boardwidth+1); int x, y; backtranslate(r5, &x, &y); atomexplogo(x+(8<<8), y+(24<<8), 0, 0, 0, 0, 0 /*signal no existing object*/); return atomloss; } void procatom(char* r5) { char r0 = *r5; if ((r0 >= _targetlowlim) && (r0 <= _targethighlim)) shoottarget(r5); noatomtarget: *r5 = 0; if ((r0 < _atomlowlim) || (r0 > _atomhighlim)) return; *r5 = r0; //replace bomb segment atombomb(r5); } int fuelairbomb(char* r5) { deletetwin(r5); char* r0 = r5-boardwidth; *r0 = _gaslowlim; *(r0+1) = _gaslowlim; if ((*fueltabread == 0) || (*(fueltabread+1) == 0)) *(fueltabread+2) = 0; // replace end marker if overwritten *fueltabread = r0; *(fueltabread+1) = r0+1; fueltabctr = _fuelairduration; // fuel-air duration bidforsound(_Explochannel, _SampHiss, 0x6f, 0x6000, 0xff80, 0x2000ff00, 50, 0, CHUNK_FUELAIR); return 0; } int normalbomb(char* r5) { elecdestroy(r5); *r5 = 0; int x, y; backtranslate(r5, &x, &y); explogo(x, y+(8<<8), 0, 0, 0, 0, 0 /*signal no existing object*/); return bombloss; } int boobyvectab[] = { -0x400, -0x80, 0x400, -0x80, 0, -0x400, 0, 0x400 }; int boobybomb(char* r5) { int* r6 = boobyvectab+2*((*r5-_boobylowlim)&3); *r5 = 0; int x, y; backtranslate(r5, &x, &y); explogonopyro(x, y+(8<<8), -(r6[0]>>2), -(r6[1]>>2), 0, 0, 0 /*;signal no existing object*/); makeobj(_Booby, x, y+(8<<8), r6[0], r6[1], 0, 0); return bombloss; } void bonuslim(char* r5) { if ((*r5 >= _neuronlowlim) && (*r5 <= _neuronhighlim)) { plsetneuronzone(*r5-(_neuronlowlim-1)); *r5 = 0; return; } noneuron: if ((*r5 >= _eleclowlim) && (*r5 <= _elechighlim)) { electrocute(r5); return; } bonuslimcont: if (*r5 < _bonuslow) return; if (*r5 > _megabonuslim) return; if (*r5 > _bonushigh) megabonus(r5); else bonusgot(r5); // was bonusgot } void deadbonuslim(char* r5) { char r0 = *r5; if ((r0 < _bonushigh-2) || (r0 > _bonushigh)) return; bonusgot(r5); } void bonusgot(char* r5) { // MOV R1,R0 ??? int r0 = *r5; *r5 = 0; int x, y; backtranslate(r5, &x, &y); bonuscommon(r0-_bonuslow, x, y); //makescoreobj(x, y, 0xf60+(r0<<8)); } void megabonus(char* r5) { char r0 = *r5; *r5 = 0; bidforsound(_Playerchannel, _SampBonus, 0x7e, 0x2200, 0, 0, 5, 127, CHUNK_BONUS_1); bidforsound(_Sparechannel, _SampBonus, 0x7e, 0x2000, 0, 0, 5, -127, CHUNK_BONUS_2); if (r0 == _bonushigh+1) { bonus1: bonusnumb(10); message(96, 224, 0, -2, "Bonus 10000"); addtoscore(10000); } else if (r0 == _bonushigh+2) { bonus2: bonusnumb(20); message(96, 224, 0, -2, "Bonus 20000"); addtoscore(20000); } else if (r0 == _bonushigh+3) { bonus3: bonusnumb(30); message(96, 224, 0, -2, "Bonus 30000"); addtoscore(30000); } else if (r0 == _bonushigh+4) { bonus5: bonusnumb(50); message(96, 224, 0, -2, "Bonus 50000"); addtoscore(50000); } else { bonus10: bonusnumb(100); message(96, 224, 0, -2, "Bonus 100000"); addtoscore(100000); } return; } void destroy(char* r5) { /*LDR R1,[R12,#boardlowlim] CMP R0,R1 ??? LDR R1,[R12,#boardhighlim] CMP R0,R1*/ bombcheck(r5); char r0 = *r5; if ((r0 == _gaslowlim) || (r0 == _gashighlim)) { normalbomb(r5); return; } if ((r0 >= _bonuslow) && (r0 <= _bonushigh)) { int x, y; backtranslate(r5, &x, &y); y += (8<<8); makeobj(_Dyingbonus, x, y+(7<<8), 0, 0, (*r5)|(1<<20), 666); *r5 = 0; } noshootbonus: if ((r0 >= _targetlowlim) && (r0 <= _targethighlim)) { shoottarget(r5); return; } noshoottarget: if ((r0 >= _crumblelowlim) && (r0 <= _crumblehighlim)) if (0 == (3&(++ (*r5)))) *r5 = 0; nocrumble: return; } void atomrocket(projent* r11, char* r0) { char r1 = *r0; /* switched r1 and r0 from ARM */ if (block_solid(r1)) { causeexplo(r11); return; } atomdest: if (((r1 >= _eleclowlim) && (r1 <= _elechighlim)) || ((r1 >= _targetlowlim) && (r1 <= _targethighlim))) elecatom: elecdestroy(r0); noelecatom2: if ((r1 >= _neuronlowlim) && (r1 <= _neuronhighlim)) { causeexplo(r11); return; } notreasatom: *r0 = 0; causeexplo(r11); } int foundtarget(int x, int y, int dx, int dy) { char target = *translate(x, y); if (!block_target(target)) return 0; y += 16<<8; // aim at body char* r0 = translate(x+(8<<8)+(dx>>4), y-(8<<8)+(dy>>4)); if (*r0 > _targethighlim) return 1; target &= ~3; int r4 = random()&7; if (r4 == 7) r4 = 6; if (target >= _powertarget) r4 -= 6; if (target == _powertarget) r4 = 8+(r4&2); if (target == _nuttertarget) r4 = 12+(r4&3); makebul(x, y, dx, dy, r4, (1<<8)*BULL_TTL); return 1; } void shoottarget(char* r5) { char r3 = *r5; *r5 = 0; addtoscore(targetscore); if (r3 >= _powertarget) elecdestroy(r5); int x, y; backtranslate(r5, &x, &y); explogo(x, y+(8<<8), 0, 0, 0, 0, 0 /* signal no existing object */); makescoreobj(x, y, 0xf60+((targetscore/100)<<8)); } void elecdestroy(char* r5) { eleccheck(r5-boardwidth); eleccheck(r5-1); eleccheck(r5+1); eleccheck(r5+boardwidth); } void eleccheck(char* r10) { char r0 = *r10; if ((r0 < _eleclowlim) || (r0 > _elechighlim)) return; int r4 = (r0 >= _elecvertlowlim) ? boardwidth : 1; elecdelete(r4, r10); elecdelete(-r4, r10); } void elecdelete(int r4, char* r10) { char r2 = _eleclowlim; for (; (r2 >= _eleclowlim) && (r2 <= _elechighlim); r2 = *(r10 += r4)) loop78: *r10 = 0; } void deletetwin(char* r5) { if ((*r5)&1) *(r5-1) = 0; else *(r5+1) = 0; *r5 = 0; } void screenwakeup(int xpos, int ypos) { char* r7 = translate(xpos, ypos)-_boxwidth-(boardwidth<<4); char* r8 = boardadr->contents; //set up outer limits: start char* r9 = r8+boardadr->width*boardadr->height; // end for (int r5 = _boxheight*2; r5 > 0; r7 += boardwidth, r5--) loopa4: linecheck(r7, r8, r9); } void linecheck(char* r7, char* r8, char* r9) { for (int r4 = _boxwidth*2; r4 > 0; r4--) { loopa3: if ((r7 > r8) && (r9 > r7) && (*r7 > _triggerlim)) dowakeup(r7); r7++; } } void wakeupal(int xpos, int ypos) { char* r7 = translate(xpos, ypos)-(_boxwidth/2)-(boardwidth<<3); char* r8 = boardadr->contents; //set up outer limits: start char* r9 = r8+boardadr->width*boardadr->height; // end boxcheck(_boxwidth, 1, &r7, r8, r9); boxcheck(_boxheight, boardwidth, &r7, r8, r9); boxcheck(_boxwidth, -1, &r7, r8, r9); boxcheck(_boxheight, -boardwidth, &r7, r8, r9); } void boxcheck(int r4, int r5, char** r7, char* r8, char* r9) { for (; r4 > 0; r4--) { loop80: if ((*r7 > r8) && (r9 > *r7) && (**r7 > _triggerlim)) dowakeup(*r7); *r7 += r5; // badalmarker: *(*r7-r5)=0; wakeinsert:; } } void findplayer(int *initplx, int *initply) { char* r5 = NULL; for (int r3 = boardadr->width*boardadr->height; r3 > 0; r3--) { loop60: if (*(boardadr->contents-1+r3) == _markerno) { *(boardadr->contents-1+r3) = 0; r5 = boardadr->contents-1+r3; } } int x, y; if (r5) backtranslate(r5, &x, &y); else x = y = 64<<8; *initplx = x; *initply = y-(1<<8); } char* normtelep(char* start, int dir, char find) { char* r1; char* r2 = boardadr->contents; char* r3 = r2+boardadr->width*boardadr->height; for (r1 = start;; r1 += dir) { loop62: if (r1 <= r2) telepoffleft: return NULL; if (r1 >= r3) telepoffright: return NULL; if (*r1 == find) return r1; } } char* bonusfind() { char* r11 = boardadr->contents; for (int bdx = boardadr->width*boardadr->height; bdx > 0; r11++, bdx--) { if (*r11 == _starsno) return r11; } return NULL; } void boardreg() { boardwidth = boardadr->width; xposmax = boardwidth<<12; yposmax = boardadr->height<<12; boardlowlim = boardadr->contents; boardhighlim = boardlowlim+boardadr->width*boardadr->height; } void draw_block(fastspr_sprite* blockadr, int block, float x, float y, int layer) { if (layer) { if ((block >= 8) && (block < 12)) mazescaleplot(blockadr, block, x, y); return; } if ((block == 0) || ((block >= 8) && (block < 12))) return; // was if (block==0) if ((block&~7) == _neuronlowlim) block = _neuronlowlim+((framectr&(7<<2))>>2); if (block <= _crumblestandhighlim) { if (block >= _crumblelowlim) block &= ~8; //alter for crumbles if (block_anim(block)) { int r1 = random()&7; if ((block == _gaslowlim) || (block == _gashighlim)) block ^= r1>>2; else block ^= r1>>1; } } noanimate: if ((block >= _weaplowlim+1) && (block <= _weaplowlim+6)) block = _weaplowlim+1; mazescaleplot(blockadr, block, x, y); } void init_chunk_maze() { CHUNK_FUELAIR = make_sound(_SampHiss, 0x6000, 0xff80, 0x2000ff00, 50); CHUNK_BONUS_1 = make_sound(_SampBonus, 0x2200, 0, 0, 5); CHUNK_BONUS_2 = make_sound(_SampBonus, 0x2000, 0, 0, 5); } asylum-0.3.2/menus.c0000644000175000017500000004773111235410523013001 0ustar hughhugh/* menus.c */ /* Copyright Hugh Robinson 2006-2008. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include "asylum.h" extern fastspr_sprite charsadr[48]; extern char sound_available; extern asylum_options options; extern char plscore[8]; char highscorearea[13*5+1]; //=&D000 char hstindex; int escapehandler() { //frameinc = 1; showchatscreen(); swi_fastspr_clearwindow(); wipetexttab(); message(36, 40-256, 0, 4, " Game Interrupted "); message(32-256, 72, 4, 0, "Please select action"); message(46+256, 104, -4, 0, "ESC - Abandon game"); message(40-256, 136, 4, 0, "Q - lose this life"); message(40, 168+256, 0, -4, "R - Return to Game"); message(40, 200+256, 0, -4, "O - Alter Options"); showtext(); osbyte_7c(); //clear escape for (int r9 = 64; swi_readescapestate() == 0;) { loopb8: swi_blitz_wait(0); if (r9 != 0) { r9--; switchbank(); swi_fastspr_clearwindow(); texthandler(1); } else if (need_redraw()) { showchatscreen(); showtext(); } switch (osbyte_79_unicode(1)) { case 'q': case 'Q': loselife(); return 0; case 'o': case 'O': adjustopt(); return 0; case 'r': case 'R': rejoin(); return 0; } } osbyte_7c(); return 1; } void rejoin() { wipetexttab(); showgamescreen(); } void adjustopt() { options_menu(1); // mark as in game rejoin(); } int options_menu(int gameon) { while (1) { clearkeybuf(); wipetexttab(); showchatscreen(); swi_fastspr_clearwindow(); message(128, 48, 0, 0, "Options"); message(32, 96, 0, 0, "1. Define Controls"); message(32, 128, 0, 0, "2. Tune Game Options"); message(88, 224, 0, 0, "Fire - Play"); if (gameon == 0) message(32, 160, 0, 0, "3. Choose Mental Zone"); else message(32, 160, 0, 0, "3. Save Position"); // if (savedornot==1) message(32,192,0,0,"4. Save Settings"); showtext(); swi_blitz_wait(20); // switch (readopt((gameon == 0) ? 3 : 3)) { case -1: optionexit: return 1; case 1: choosecontrol(); dosaveconf(); break; case 2: tunegame(); dosaveconf(); break; case 3: if (gameon == 0) { getzone(); dosaveconf(); } else savegame(); break; //case 4: if (savedornot==1) dosaveconf(); break; default: soundupdate(); return 0; } } } void dosaveconf() { saveconfig(); } void getzone() { int r0; wipetexttab(); showchatscreen(); message(88, 48, 0, 0, "Choose which"); message(96, 68, 0, 0, "mental zone"); message(64, 96, 0, 0, "1. Ego"); message(64, 128, 0, 0, "2. Psyche"); message(64, 160, 0, 0, "3. Id"); if (checkifextend()) { message(64, 192, 0, 0, "4. Saved Game"); r0 = 4; } else r0 = 3; showtext(); r0 = readopt(r0); if (r0 == -1) return; if ((r0 == 3) && ( /*testid:*/ options.idpermit != 1)) { wipetexttab(); showchatscreen(); message(80, 100, 0, 0, "To play the id"); message(32, 128, 0, 0, "you need to complete"); message(80, 156, 0, 0, "the ego first."); showtext(); readopt(0); } else options.mentalzone = r0; } void completedzone() { completedzone: message(114, 64, 0, 0, "WELL DONE!"); message(44, 96, 0, 0, "You have completed"); if (options.mentalzone == 3) message(114, 128, 0, 0, "The game!!!"); else message(114, 128, 0, 0, "This zone!"); } void choosecontrol() { wipetexttab(); showchatscreen(); message(96, 48, 0, 0, "Controls"); message(64, 96, 0, 0, "1. Keyboard"); message(64, 128, 0, 0, "2. Joystick"); showtext(); switch (readopt(2)) { case-1: return; case 1: choosekeys(); return; case 2: choosestick(); return; } } void choosekeys() { wipetexttab(); showchatscreen(); options.leftkey = selectkey(48, 128, 0, 0, "Press Key For Left"); options.rightkey = selectkey(48, 128, 0, 0, "Press Key For Right"); options.upkey = selectkey(48, 128, 0, 0, "Press Key For Up"); options.downkey = selectkey(48, 128, 0, 0, "Press Key For Down"); options.firekey = selectkey(48, 128, 0, 0, "Press Key to Fire"); } void choosestick() { wipetexttab(); showchatscreen(); message(88, 48, 0, 0, "Joystick"); message(64, 96, 0, 0, "Joystick Number"); message(136, 128, 0, 0, "0-3"); showtext(); options.joyno = 1+readopt(3); if (options.joyno == 0) return; wipetexttab(); showchatscreen(); message(96, 48, 0, 0, "Reminder"); message(48, 96, 0, 0, "To jump, you can"); message(32, 128, 0, 0, "1. Use Joystick Up"); message(32, 160, 0, 0, "2. Use Fire Button 2"); message(64, 180, 0, 0, "If you have one."); message(32, 212, 0, 0, "3. Use The Up Key"); showtext(); (void)readopt(9); } void tunegame() { wipetexttab(); showchatscreen(); message(96, 48, 0, 0, "Tune Game"); if (sound_available) { message(64, 96, 0, 0, "1. Sound System"); message(64, 128, 0, 0, "2. Sound Volume"); } else { message(48, 96, 0, 0, "\x11"); message(48, 128, 0, 0, "\x11"); message(64, 96, 0, 0, "1."); message(64, 128, 0, 0, "2."); message(115, 101, 0, 0, "Sound Not"); message(112, 123, 0, 0, "Available"); } message(64, 160, 0, 0, "3. Video System"); showtext(); while (1) switch (readopt(3)) { case-1: return; case 1: if (sound_available) { tunesound(); return; } else break; case 2: if (sound_available) { tunevolume(); return; } else break; case 3: tunespeed(); return; } } char sound1[] = "-1. No Sound"; char sound2[] = "-2. 4 Channels"; char sound3[] = "-3. 4 Channels"; char sound4[] = "-4. 8 Channels"; char sound5[] = "-5. Normal Quality"; char sound6[] = "-6. High Quality"; char sound7[] = "-7. Overdrive"; void tunesound() { showchatscreen(); for (;; /*tunesoundloop:*/ soundupdate(), swi_stasis_link(1, 1), swi_sound_control(1, -15, 0x20, 0xfe)) { tunesoundins: wipetexttab(); soundfillin(); message(96, 32, 0, 0, "Tune Sound"); message(32, 60, 0, 0, sound1); message(32, 80, 0, 0, sound2); message(32, 100, 0, 0, sound3); message(80, 120, 0, 0, "and music"); message(32, 140, 0, 0, sound4); message(32, 160, 0, 0, sound5); message(32, 180, 0, 0, sound6); message(32, 200, 0, 0, sound7); message(96, 220, 0, 0, "ESC - Exit"); swi_blitz_wait(0); swi_fastspr_clearwindow(); showtext(); switch (readopt(7)) { case 1: options.soundtype = 0; break; case 2: options.soundtype = 1; break; case 3: options.soundtype = 2; break; case 4: options.soundtype = 3; break; case 5: options.soundquality &= ~1; break; case 6: options.soundquality |= 1; break; case 7: options.soundquality ^= 2; break; default: return; } } } void soundfillin() { sound1[0] = (options.soundtype == 0) ? 16 : 17; sound2[0] = (options.soundtype == 1) ? 16 : 17; sound3[0] = (options.soundtype == 2) ? 16 : 17; sound4[0] = (options.soundtype == 3) ? 16 : 17; sound5[0] = (options.soundquality&1) ? 17 : 16; sound6[0] = (options.soundquality&1) ? 16 : 17; sound7[0] = (options.soundquality&2) ? 16 : 17; } char tunevol1[] = "-5. Speaker on"; void tunevolume() { showchatscreen(); wipetexttab(); if (sound_available && (options.soundtype == 2)) swi_bodgemusic_start(1, 0); swi_bodgemusic_volume(options.musicvol); message(80, 32, 0, 0, "Change volume"); message(48, 96, 0, 0, "1. Louder effects"); message(48, 116, 0, 0, "2. Quieter effects"); message(48, 136, 0, 0, "3. Louder music"); message(48, 156, 0, 0, "4. Quieter music"); message(48-14, 176, 0, 0, tunevol1); message(96, 220, 0, 0, "ESC - Exit"); do { tunevolumeloop: swi_bodgemusic_volume(options.musicvol); if (swi_sound_speaker(0)) *tunevol1 = 17; else *tunevol1 = 16; swi_blitz_wait(0); swi_fastspr_clearwindow(); showtext(); int r0 = readopt(5); if (r0 == -1) return; if (r0 == 1) { if (options.soundvol < 0x40) options.soundvol = options.soundvol*2+1; maketestsound(options.soundvol); continue; } if (r0 == 2) { if (options.soundvol > 0) options.soundvol = (options.soundvol-1)/2; maketestsound(options.soundvol); continue; } if (r0 == 3) { if (options.musicvol < 0x40) options.musicvol = options.musicvol*2+1; maketestsound(options.musicvol); continue; } if (r0 == 4) { if (options.musicvol > 0) options.musicvol = (options.musicvol-1)/2; maketestsound(options.musicvol); continue; } if (r0 != 5) return; swi_sound_speaker(3-swi_sound_speaker(0)); } while (1); } char speed1[] = "-1. Full Screen"; char speed2[] = "-2. Use OpenGL"; char speed3[] = "-4. Half scale"; char sizedesc[][16] = {" 3. 320 x 256", " 3. 640 x 512", " 3. 960 x 768", " 3. 1280 x 1024"}; void tunespeed() { do { showchatscreen(); do { tunespeedloop: wipetexttab(); if (options.fullscreen == 1) speed1[0] = 16; else speed1[0] = 17; if (options.opengl == 1) speed2[0] = 16; else speed2[0] = 17; if (options.scale == 2) speed3[0] = 16; else speed3[0] = 17; message(96, 48, 0, 0, "Tune Video"); message(32, 96, 0, 0, speed1); message(32, 120, 0, 0, speed2); if (options.opengl) { message(32, 144, 0, 0, sizedesc[options.size&3]); message(32, 168, 0, 0, speed3); message(80, 188, 0, 0, "-experimental-"); } message(96, 220, 0, 0, "ESC - Exit"); swi_blitz_wait(0); swi_fastspr_clearwindow(); showtext(); int r0 = readopt(4); if (r0 == -1) return; else if (r0 == 1) { options.fullscreen ^= 1; vduread(options); break; } else if (r0 == 2) { options.opengl ^= 1; if (options.opengl == 0) { options.size = 0; options.scale = 1; } vduread(options); getvitalfiles(); getgamefiles(); getlevelsprites(); break; } else if (options.opengl == 0); else if (r0 == 3) { options.size = (options.size+1) % 4; vduread(options); getvitalfiles(); getgamefiles(); getlevelsprites(); break; } else if (r0 == 4) { options.scale ^= 3; vduread(options); break; } } while (1); } while (1); } int selectkey(int x, int y, int xv, int yv, const char* a) { int r1; wipetexttab(); showchatscreen(); clearkeybuf(); message(x, y, xv, yv, a); showtext(); do { if (need_redraw()) { showchatscreen(); showtext(); } swi_blitz_wait(1); } while ((r1 = osbyte_79(0)) == -1); // scan keyboard if (swi_readescapestate()) return 0; return -r1; // and r4 (?) } int readopt(int maxopt) { int r1; for (;;) { keyloop: if (options.joyno != 0) { swi_joystick_read(options.joyno-1, NULL, NULL); // MOVVS R0,#0 //if (r0&(1<<16)) {/*optfire:*/ return 0;} } nooptstick: r1 = osbyte_79_unicode(1); // read key in time limit if (swi_readescapestate()) { optescape: osbyte_7c(); // clear escape return -1; } if (r1 >= '0' && r1 <= '0' + maxopt) return r1 - '0'; if (osbyte_81(options.firekey) == 0xff) return 0; if (need_redraw()) { showchatscreen(); showtext(); } swi_blitz_wait(1); } } const int _x = 250; const int _v = -1; int prelude() { int cheatpermit = 0; //frameinc = 1; showchatscreen(); swi_fastspr_clearwindow(); wipetexttab(); message(2048, _x, 0, _v, "Digital Psychosis"); message(2108, _x+24, 0, _v, "Presents"); message(2152, _x+(24*5)/2, 0, _v, "#"); message(2040, _x+4*24, 0, _v, "Young Sigmund has a"); message(2056, _x+5*24, 0, _v, "Few problems. Can"); message(2056, _x+6*24, 0, _v, "you help him find"); message(2028, _x+7*24, 0, _v, "the rogue brain cells"); message(2036, _x+8*24, 0, _v, "in his mind and shut"); message(2100, _x+9*24, 0, _v, "Them down?"); message(2096, _x+10*24, 0, _v, "PRESS SPACE"); message(2088, _x+12*24, 0, _v, "Cheat Mode!!!"); message(2028, _x+14*24, 0, _v, "F1, F2 Get Weapons"); message(2028, _x+15*24, 0, _v, "F3 - Restore Strength"); message(2096, _x+17*24, 0, _v, "HAVE FUN !!!"); showtext(); for (int scroll = 256+8; swi_readescapestate() == 0;) { loope0: swi_blitz_wait(2); if (scroll != 0) { scroll--; switchbank(); swi_fastspr_clearwindow(); texthandler(1); } else if (need_redraw()) { showchatscreen(); showtext(); } preludetextstop:; int r1 = osbyte_7a(); if ((r1 != -1) && (r1 != 307) && (r1 != 308)) // escape endprelude: return cheatpermit; if (readmousestate()&2) { gocheat: if (osbyte_81(-SDLK_LALT) != 0xff) return cheatpermit; if (osbyte_81(-SDLK_RALT) != 0xff && osbyte_81(-SDLK_MODE) != 0xff) return cheatpermit; cheatpermit = 1; scroll = 1024; } } osbyte_7c(); return 2; } void fatalfile() { exit(printf("A file vital to the game cannot be loaded. Please reset your machine and try again")); } void showloading() { wipetexttab(); showchatscreen(); message(88, 64, 0, 0, "Please Wait"); message(48, 128, 0, 0, "Loading Game files"); showtext(); } void filenotthere() { showerror(); message(56, 64, 0, 0, "A file is missing."); message(48, 96, 0, 0, "It cannot be loaded"); showtext(); errorwait(); } void filesyserror() { showerrorok(); message(40, 64, 0, 0, "Unable to Load File"); message(56, 96, 0, 0, "Please Check Disc"); showtext(); errorwait(); } void badload() { showerrorok(); message(32, 32, 0, 0, "A game file could not"); message(48, 64, 0, 0, "be loaded. Program"); message(80, 96, 0, 0, "Must exit now."); showtext(); errorwait(); abort_game(); } int badlevelload() { showerrorok(); message(40, 32, 0, 0, "The level cannot be"); message(32, 64, 0, 0, "Loaded. Please check"); message(48, 96, 0, 0, "the disc, or press"); message(48, 128, 0, 0, "escape to end game."); showtext(); return errorwait(); // 'clear carry if carry clear (???)' } void nomemory() { showerrorok(); message(48, 32, 0, 0, "There is not enough"); message(48, 64, 0, 0, "memory available to"); message(48, 96, 0, 0, "load the game files."); showtext(); errorwait(); } void showerror() { //frameinc = 1; showchatscreen(); swi_fastspr_clearwindow(); wipetexttab(); message(72, 200, 0, 0, "RET - Try Again"); message(72, 224, 0, 0, "ESC - Abandon"); } void showerrorok() { //frameinc = 1; showchatscreen(); swi_fastspr_clearwindow(); wipetexttab(); message(72, 200, 0, 0, "RET - OK"); message(72, 224, 0, 0, "ESC - Abandon"); } int errorwait() { if (osbyte_81(-74) != 0xff) loopb9: while (osbyte_81(-61) != 0xff) if (swi_readescapestate()) { wipetexttab(); return 0; } waitover: wipetexttab(); return 1; } const char defscore[] = "00000000 PSY\n"; void setdefaultscores() { char* r10 = highscorearea; for (int r3 = 5; r3 > 0; r3--) { loopd4:; const char* r11 = defscore; for (int r2 = 13; r2 > 0; r2--) loopd5: *(r10++) = *(r11++); } } int showhighscore() { loadscores(highscorearea, options.mentalzone); updatehst(); showhst(); message(96, 224, 0, 0, "press fire"); releaseclip(); showtext(); readopt(0); return swi_readescapestate(); } void updatehst() { hstindex = 5; char* r10 = highscorearea; r10 += 4*13; //4*entry length while (comparescore(r10)) { loopd1: r10 -= 13; //entry length if (--hstindex == 0) break; } lessthan: r10 += 13; //entry length if (hstindex != 5) { if (4-hstindex > 0) { char* r9; int r3; for (r9 = highscorearea+4*13-1, r3 = 13*(4-hstindex); r3 > 0; r9--, r3--) loopd7: r9[13] = *r9; } noshiftscore:; char* r11 = plscore; for (int r3 = 8; r3 > 0; r3--) loopda: *(r10++) = *(r11++)+'0'; r10++; //int r9=1024; key_state ks; swi_blitz_wait(20); // for (int i = 0; i < 3; i++) r10[i] = options.initials[i]; for (int r8 = 3; r8 > 0; r8--, r10++) { while (osbyte_81(0) != -options.firekey) { scorekeyloop: //if (--r9<0) goto scoreexit; keyread(&ks); if (ks.leftpress == 0) { (*r10)++; } if (ks.rightpress == 0) { (*r10)--; } if (*r10 < '0') *r10 = '0'; if (*r10 > 'Z'+4) *r10 = 'Z'+4; showhst(); swi_blitz_wait(4); } options.initials[3-r8] = *r10; swi_stasis_link(1, 18); swi_stasis_volslide(1, 0, 0); swi_sound_control(1, 0x17c, 140, 0); /*if (r8>1)*/ swi_blitz_wait(20); } scoreexit: savescores(highscorearea, options.mentalzone); dosaveconf(); } notontable:; } int comparescore(char* r10) { char* r11 = plscore; for (int r3 = 8; r3 > 0; r3--) { loopd0: if (*r10-'0' < *r11) scoregreater: return 1; else if (*r10-'0' > *r11) scoreless: return 0; r10++; r11++; compnext:; } return 1; } void showhst() { swi_blitz_wait(0); switchbank(); showchatscores(); wipetexttab(); message(64, 32, 0, 0, "Zone High Scores"); int x = 32, y = 64, i, j; char * ptr = highscorearea; for (i = 0; i < 5; ++i) { char line[13]; for (j = 0; j < 12 && *ptr > 0xa; ++j, ++ptr) line[j] = *ptr; line[j] = 0; message(x, y, 0, 0, line); y += 32; ++ptr; /*skip over newline*/ } if (hstindex < 5) message(280, (hstindex+2)<<5, 0, 0, "="); texthandler(0); } asylum-0.3.2/player.c0000644000175000017500000010743711133250061013142 0ustar hughhugh/* player.c */ /* Copyright Hugh Robinson 2006-2008. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include "asylum.h" extern fastspr_sprite blokeadr[77], blockadr[256], alspradr[256], exploadr[32]; extern const char _translowlim = 54, _transhighlim = 63; const char _weapmpmgblam = 102, _weaprocketblam = 111; extern const char _blim = 112; extern const char _platlowlim, _plathighlim; const char _teleplowlim = 192, _telephighlim = 199; extern const char _extendno = 152; const char _shutdownno = 200; #define _neuronstoget 8 #define _rockettablen 192 int* rockettabadr; char falling; char plframe, plface; char plfired, plweapontype, plweaponspeed; char pluphit, firerate; char rocketflag, electrocuting, platuphit; char blamctr, rocketblamctr, plotterofs, hiddenplatctr, extending; char bonusctr; int16_t bonusreplot; int windctr; int firelastframe; int rocketctr; int shutdownctr; char atombombctr; int laststrength; int telepctr; int telepxpos; int telepypos; int bonusxpos; int bonusypos; int bonustimer; int lagerctr, plstrength; int neuronctr; int snuffctr; int lives; int plscoreadd; extern char plscore[8]; extern int boardwidth; extern int framectr; extern char frameinc; extern int xpos, ypos, xposmax, yposmax; key_state ks; int initplx, initply, hvec, vvec; const char _mpmgblamno = 8, _rocketblamno = 16; #define _funnyfacesprbase 66 #define _scoresprbase 16 #define _skelspriteno 46 #define _starssprbase 58 #define _deadsprbase 70 #define _rockbase 9 #define _mpmgbase 1 #define _plheight (32<<8) #define _plwidth (16<<8) #define _strengthinit (108<<8) Mix_Chunk* CHUNK_ELEC_1; Mix_Chunk* CHUNK_ELEC_2; Mix_Chunk* CHUNK_ELEC_3; Mix_Chunk* CHUNK_JUMP; Mix_Chunk* CHUNK_SHUTDOWN_1; Mix_Chunk* CHUNK_SHUTDOWN_2; Mix_Chunk* CHUNK_SHUTDOWN_3; Mix_Chunk* CHUNK_TELEP_1; Mix_Chunk* CHUNK_TELEP_2; Mix_Chunk* CHUNK_TELEP_3; Mix_Chunk* CHUNK_BLAM; Mix_Chunk* CHUNK_FIRE; Mix_Chunk* CHUNK_BLAMFIRE; Mix_Chunk* CHUNK_ROCKET; Mix_Chunk* CHUNK_STUNNED[17]; Mix_Chunk* CHUNK_WEAPON_1; Mix_Chunk* CHUNK_WEAPON_2; Mix_Chunk* CHUNK_WEAPON_3; Mix_Chunk* CHUNK_WEAPON_4; Mix_Chunk* CHUNK_OBJGOT[10]; char *pladr1, *pladr2, *pladr3, *pladr4, *pladr5, *pladr6, *pladr7, *pladr8; int pllx, plly, plhx, plhy; const int _savevalid = 0x4b4f6349; void save_player_state(uint8_t store[24]) { write_littleendian(store, lives); write_littleendian(store+4, plstrength); write_littleendian(store+8, neuronctr); write_littleendian(store+12, shutdownctr); memcpy(store+16, plscore, 8); } void restore_player_state(uint8_t store[24]) { lives = read_littleendian(store); plstrength = read_littleendian(store+4); neuronctr = read_littleendian(store+8); shutdownctr = read_littleendian(store+12); memcpy(plscore, store+16, 8); } void save_player(uint8_t store[30]) { write_littleendian(store, _savevalid); write_littleendian(store+4, xpos); write_littleendian(store+8, ypos); write_littleendian(store+12, initplx); write_littleendian(store+16, initply); write_littleendian(store+20, hvec); write_littleendian(store+24, vvec); store[28] = bonusctr; store[29] = plweapontype; } int restore_player(uint8_t store[30]) { if (_savevalid != read_littleendian(store)) return 1; write_littleendian(store, 0); xpos = read_littleendian(store+4); ypos = read_littleendian(store+8); initplx = read_littleendian(store+12); initply = read_littleendian(store+16); hvec = read_littleendian(store+20); vvec = read_littleendian(store+24); bonusctr = store[28]; plweapontype = store[29]; return 0; } void electrocute(char* r5) { electrocuting = 1; int x, y; backtranslate(r5, &x, &y); explogonopyro(x, y+(16<<8), (random()&(0xfe<<2))-(0xfe<<1), (random()&(0xfe<<2))-(0xfe<<1), 0, 0, 0); } void playerplot(int whendead) { if ((!whendead) ^ (!snuffctr)) return; set_player_clip(); if (snuffctr) { snuffhandler: snuffctr += frameinc; plotterofs = ((snuffctr-96 < 0) ? 0 : (snuffctr-96))>>1; blokeplot(blokeadr, 70, 0, 8); // goto playerplotins; seestars(); writeclip(); return; } if (telepctr) { int telepinc = frameinc; if (telepinc > 2) telepinc = 2; if (telepctr == 31) telepinc = 1; telepctr += telepinc; if (telepctr > 64) telepctr = 0; if (telepctr == 32) { dotelep: xpos = telepxpos; ypos = telepypos; screenwakeup(xpos, ypos); } } telepskip: plotterofs = (telepctr > 32) ? (64-telepctr) : telepctr; plframe = (xpos>>10)&3; if (plframe == 2) plframe = 0; else if (plframe == 3) plframe = 2; if (plface == 1) plframe += 3; if (electrocuting) { plotskel: blokeplot(blokeadr, _skelspriteno+(plface == 1), 0, 8); plotskelins: seestars(); writeclip(); return; } blokeplot(blokeadr, (plface == 1) ? 1 : 0, 0, 8); blokeplot(blokeadr, plframe+6, 0, 19); int r0; if (plstrength < laststrength) r0 = _funnyfacesprbase+((framectr>>2)&3); else nofunnyface: if (plface == 1) r0 = 15; else r0 = 12; plotface: blokeplot(blokeadr, r0, 0, -2); //head if (plweapontype == 0) plotarms(); else if (plweapontype == _mpmgblamno) plotmpmgblam(); else if (plweapontype == _rocketblamno) plotrocketblam(); else if (plweapontype < _rockbase) plotmpmg(); else plotrocket(); playerplotins: seestars(); writeclip(); } void plotarms() { blokeplot(blokeadr, (plframe%3)+2, (plframe > 2), 9); } void plotmpmg() { blokeplot(blokeadr, 42+(plface == 1), -6+(plface != 1)*12+(plfired ? 0 : 2*plface-1), 10); blokeplot(blokeadr, 44+(plface == 1), 0, 8); plfired = 0; } void plotmpmgblam() { int r2; if (blamctr&8) r2 = (blamctr&15)-15; else r2 = blamctr&15; blokeplot(blockadr, _weapmpmgblam+(plface == 1), -6+(plface != 1)*12+(plfired ? plface*2-1 : 0), 11+(r2>>1)); blokeplot(blokeadr, 44+(plface == 1), 0, 8+(r2>>1)); plfired = 0; } void plotrocket() { int r0 = rockettabadr[rocketctr]; blokeplot(blokeadr, 50+(r0 > 170)+(r0 > 60)-(r0 < -60)-(r0 < -170), (plfired ? (plface*2-1) : 0), 1); blokeplot(blokeadr, 53, plface, 6); plfired = 0; if (rocketflag == 0) rocketctr = 0; } void plotrocketblam() { int r2; if (blamctr&8) r2 = (blamctr&15)-15; else r2 = blamctr&15; blokeplot(blockadr, _weaprocketblam, (plfired ? 0 : 2*plface-1), (r2>>1)); blokeplot(blokeadr, 53, 0, (r2>>2)+6); plfired = 0; } int rockettab[_rockettablen]; void initrockettab() { rocketctr = 0; rocketflag = 0; rockettabadr = rockettab; } void init_rockettab() { for (int i = 0; i < 184; i++) rockettab[4+i] = (int)(256*sin(i*2*M_PI/(192-8))); for (int i = 0; i < 4; i++) rockettab[i] = rockettab[188+i] = 0; } void seestars() { if (plstrength >= laststrength) { laststrength = plstrength; return; } laststrength -= 1<<8; int r2, r1 = (framectr>>1)&7; int r0 = _starssprbase+r1; if ((r1&3) == 0) r2 = -6; else if (r1 > 4) r2 = -7; else r2 = -5; blokeplot(blokeadr, r0, 0, r2); int r4 = laststrength-plstrength; if (r4 == 0) return; if (electrocuting) { elecsound: bidforsound(_Playerchannel, _Samprave, 0x7f, 0x2000, (0xff)<<8, 0, 10, 0, CHUNK_ELEC_1); bidforsound(_Firechannel, _Samprave, 0x7f, 0x2400, (0xff)<<8, 0, 10, 127, CHUNK_ELEC_2); bidforsound(_Sparechannel, _Samprave, 0x7f, 0x2800, (0xff)<<8, 0, 10, -127, CHUNK_ELEC_3); } else bidforsound(_Playerchannel, _SampStunned, 0x70, 0x4000-((r4 > 0x1000) ? 0x1000 : r4), 0, 0, 50, 0, CHUNK_STUNNED[(r4 >= 0x1000) ? 16 : ((r4 < 0) ? 0 : (r4>>8))]); } void seeifdead() { if ((plstrength > 0) || (snuffctr > 0)) return; snuffctr = 1; makeobj(_Decoration, 1<<8, (2<<8)-(12<<8), 0, -(2<<8), _deadsprbase-3+(250<<16), 24); makeobj(_Decoration, (1<<8)-(5<<8), 2<<8, -(1<<8), -(3<<8), _deadsprbase+1+(250<<16), 24); makeobj(_Decoration, (1<<8)+(6<<8), 2<<8, 1<<8, -(3<<8), _deadsprbase+2+(250<<16), 24); deathmessage(); if (lives == 0) endgamemessage(); } alent fraudalent; void bcheck() { fraudalent.uphit = fraudalent.downhit = 0; int ytemp; //AND R6,R1,#15<<8 fraudalent.x = xpos; ytemp = fraudalent.y = ypos; fraudalent.dx = hvec; fraudalent.dy = vvec; fraudalent.falling = falling; char* r11 = translate(fraudalent.x, fraudalent.y+fraudalent.dy); // up if ((*(r11-boardwidth) >= _blim) || (*(r11-boardwidth+1) >= _blim)) noup(&fraudalent); //down if ((*(r11+boardwidth) >= _blim) || (*(r11+boardwidth+1) >= _blim)) nodown(&fraudalent); if ((*(r11+boardwidth*2) >= _blim) || (*(r11+boardwidth*2+1) >= _blim)) nodownifplat(&fraudalent); //fallinggap(&fraudalent); // CMP R6,#15<<8 // not sure how the original game manages without fallinggap's return value. int fg = fallinggap(&fraudalent); if ((!fg) && ((ytemp&(15<<8)) != (15<<8))) { r11 = translate(fraudalent.x+fraudalent.dx, fraudalent.y); char* r10 = translate(fraudalent.x+fraudalent.dx, fraudalent.y /*+(4<<8)*/); // 4<<8 was commented out //left if ((*(r10-boardwidth) >= _blim) || (*(r11) >= _blim) || (*(r11+boardwidth) >= _blim)) noleft(&fraudalent); //right if ((*(r10-boardwidth+1) >= _blim) || (*(r11+1) >= _blim) || (*(r11+boardwidth+1) >= _blim)) noright(&fraudalent); } else if (fg == -1) { r11 = translate(fraudalent.x+fraudalent.dx, fraudalent.y); if ((*(r11-boardwidth) >= _blim) || (*r11 >= _blim)) noleft(&fraudalent); //right if ((*(r11-boardwidth+1) >= _blim) || (*(r11+1) >= _blim)) noright(&fraudalent); } else { shorT: r11 = translate(fraudalent.x+fraudalent.dx, fraudalent.y); if ((*(r11) >= _blim) || (*(r11+boardwidth) >= _blim)) noleft(&fraudalent); //right if ((*(r11+1) >= _blim) || (*(r11+1+boardwidth) >= _blim)) noright(&fraudalent); } bcheckins: r11 = translate(fraudalent.x+fraudalent.dx, fraudalent.y+fraudalent.dy); //up if ((*(r11-boardwidth) >= _blim) || (*(r11-boardwidth+1) >= _blim)) noup(&fraudalent); //down if ((*(r11+boardwidth) >= _blim) || (*(r11+boardwidth+1) >= _blim)) nodown(&fraudalent); falling = fraudalent.falling; xpos = fraudalent.x; ypos = fraudalent.y; hvec = fraudalent.dx; vvec = fraudalent.dy; } void plmove() { if (extending) extending--; if (shutdownctr != 0) shutdownctr++; if (shutdownctr == 150) change_zone(0); else if (shutdownctr != 0) deletepoint(); keyread(&ks); //if (fire) goto cheatmove; if (snuffctr != 0) ks.uppress = ks.downpress = ks.leftpress = ks.rightpress = ks.fire = 0; vvec -= vvec>>5; hvec -= hvec>>5; if (ks.leftpress != ks.rightpress) plface = (ks.leftpress > ks.rightpress) ? 1 : 0; int r2; if ((ks.leftpress < 4) && (ks.rightpress < 4)) r2 = 1<<8; else r2 = 2<<8; if (ks.leftpress > ks.rightpress) r2 = -r2; if (ks.leftpress == ks.rightpress) r2 = 0; if (falling <= 4) hvec = r2; else hvec += r2>>5; cheatins: if (ks.downpress >= 32) windctr = (1<<10); if (windctr) windcheck(); if (hvec > _speedlim) hvec = _speedlim; if (hvec < -_speedlim) hvec = -_speedlim; if (vvec > _speedlim) vvec = _speedlim; if (vvec < -_speedlim) vvec = -_speedlim; fraudalent.x = xpos; fraudalent.y = ypos; fraudalent.dx = hvec; fraudalent.dy = vvec; fraudalent.falling = falling; fraudalent.pluphit = pluphit; fraudalent.downpress = ks.downpress; colcheck(&fraudalent, 0, ypos); falling = fraudalent.falling; xpos = fraudalent.x; ypos = fraudalent.y; hvec = fraudalent.dx; vvec = fraudalent.dy; //pluphit = platuphit; seems useless //if ((!)fire) bcheck(); pluphit = fraudalent.uphit; int dy = vvec; if (dy > (1<<12)) dy = 1<<12; if (dy < -(1<<12)) dy = -(1<<12); xpos += hvec; ypos += dy; if ((xpos <= xlowlim) || (xposmax <= xpos) || (ypos <= ylowlim) || (yposmax <= ypos)) restartplayer(); int x = xpos, y = ypos; if (!snuffctr) { y += (6<<8); vvec = dy; pllx = x-(_plwidth/2); plhx = x+(_plwidth/2); plly = y-(_plheight/2)+(plotterofs<<8); plhy = y+(_plheight/2); y = ypos-(6<<8); // - adjustment } else { fakecolch: plhx = plhy = 0; pllx = plly = 1; } fakeins: pladr1 = translate(x, y); pladr2 = pladr1+1; pladr3 = pladr1+boardwidth; pladr4 = pladr3+1; pladr5 = pladr1+2*boardwidth; pladr6 = pladr5+1; if (((falling == 0) || (falling == 0xff)) && (ks.uppress != 0)) { if (ks.downpress > ks.uppress) vvec = -((0x100-(ks.downpress-ks.uppress))<<3); else vvec = -(19<<7); falling = 1; bidforsound(_Playerchannel, _SampJump, 0x5f, 0x4600, 0, 0, 4, 0, CHUNK_JUMP); } char* r11; jumpins: r11 = translate(xpos, ypos+(1<<8)); pladr7 = r11+boardwidth; pladr8 = pladr7+1; if (falling >= 8) if (vvec >= (2<<8)) { crumblecheck(pladr7); crumblecheck(pladr8); } if ((*pladr7 < _blim) && (*pladr8 < _blim)) { if (++falling == 0xff) falling = 0xfe; if (falling) // [else] standing on a platform if (falling > 1) if (vvec < (12<<8)) vvec += (8<<4); } else nofall: falling = 0; nofallins:; fallins: if ((*pladr8 >= _platlowlim+1) && (*pladr8 <= _plathighlim+1) && (1&*pladr8)) pladr8[-1] = *pladr8-1; noplatrebuild: if ((*pladr7 >= _platlowlim) && (*pladr7 <= _plathighlim)) { if (*pladr7 != _plathighlim) { hiddenplatctr = 0; nohidplat: if (!(1&*pladr7)) { plplattoobj(pladr7); return; } } else { hiddenplatctr += frameinc; if ((hiddenplatctr >= 50) && !(1&*pladr7)) { /* I added */ hiddenplatctr = 0; plplattoobj(pladr7); return; } } } fallinscont: if ((!(1&*pladr7)) && (*pladr7 >= _teleplowlim) && (*pladr7 <= _telephighlim)) telep(); notelep: if ((*(pladr1-boardwidth) >= _platlowlim) && (*(pladr1-boardwidth) <= (_plathighlim-1))) //not hidden platforms plplattoobj(pladr1-boardwidth); else notelepcont1 : if ((*(pladr1-boardwidth+1) >= _platlowlim) && (*(pladr1-boardwidth+1) <= (_plathighlim-1))) //not hidden platforms plplattoobj(pladr1-boardwidth+1); else notelepcont2 : if (*pladr7 == _extendno+1) { doextendfromleft: if (!extending) if (*(pladr7+1) == 0) { int x, y; backtranslate(pladr7, &x, &y); makeobj(_Extender, x-(8<<8), y+(15<<8), 1<<8, 0, _extendno, 0); extending = 20; } } else if (*pladr8 == _extendno+2) { doextendfromright: if (!extending) if (*(pladr8-1) == 0) { int x, y; backtranslate(pladr8, &x, &y); makeobj(_Extender, x+(8<<8), y+(15<<8), -(1<<8), 0, _extendno, 0); extending = 20; } } else if (*pladr7 == _shutdownno) { *pladr7 = 14; shutdownctr = 1; neuronctr++; int soundvol = 0x7f; bidforsoundforce(3, _Samprave, 0x1f, (3<<8)|0x3000, (soundvol<<25)|0x1000, 0x100ff00, 100, (3<<6)-96, CHUNK_SHUTDOWN_1); bidforsoundforce(2, _Samprave, 0x1f, (2<<8)|0x3000, (soundvol<<25)|0x1000, 0x100ff00, 100, (2<<6)-96, CHUNK_SHUTDOWN_2); bidforsoundforce(1, _Samprave, 0x1f, (1<<8)|0x3000, (soundvol<<25)|0x1000, 0x100ff00, 100, (1<<6)-96, CHUNK_SHUTDOWN_3); } //plattoins: playerfire(); } void windcheck() { if (*pladr1 == 0) return; if (!seeifwind(pladr4, &hvec, &vvec, seeifwind(pladr3, &hvec, &vvec, seeifwind(pladr2, &hvec, &vvec, seeifwind(pladr1, &hvec, &vvec, 0))))) windctr -= 64; if (--windctr < 0) windctr = 0; } void deletepoint() { for (int r3 = 16; r3 > 0; r3--) { delloop:; dodeletepoint:; int x, y; x = xpos+(((random()&15)+(random()&7)-11)<<12); if (x < (1<<12)) return; y = ypos+(((random()&15)-7)<<12); if (y < (1<<12)) return; if (x > xposmax-(1<<12)) return; if (y > yposmax-(1<<12)) return; x &= ~0xfff; y &= ~0xfff; char* z = translate(x, y); if (*z == 0) return; *z = 0; makeobj(_Dyingbonus, x, y+(15<<8), 0, 0, r3|(1<<20), 666); } } void alfire() { int x = xpos+(((random()&15)+(random()&7)-11)<<12); int y = ypos+(((random()&15)-7)<<12); if (x < (1<<12)) return; if (y < (1<<12)) return; if (x > xposmax-(1<<12)) return; if (y > yposmax-(1<<12)) return; x &= ~0xfff; y &= ~0xfff; if (foundtarget(x, y, (xpos-x)>>6, ((ypos+(12<<8))-y-(16<<8))>>6)) return; nofoundtarget: if (foundtarget(x+(1<<12), y, (xpos-x-(1<<12))>>6, ((ypos+(12<<8))-y-(16<<8))>>6)) return; return; } void makescoreobj(int x, int y, int type) { makeobj(_Scoreobj, x, y, (random()&(0xfe<<1))-(0xfe)+(hvec>>2), -(random()&(0xfe<<2)), type, 666); } void foundmarker(char* r11) { bonusxpos = xpos; bonusypos = ypos; foundresetmarker(r11); } void foundresetmarker(char* r11) { *r11 = 0; backtranslate(r11, &telepxpos, &telepypos); telepypos -= (1<<8); telepctr = 1; bonustimer = 0x180; } void normreset() { telepctr = 1; telepxpos = bonusxpos; telepypos = bonusypos; bonustimer = 0; } void dowakeup(char* r7) { char r0 = *r7; int r1, r2; if ((r0 < 240) || (r0 > 253)) return; // r7-=r5; not for me *r7 = 0; backtranslate(r7, &r1, &r2); r0 = r0-(240-_Alien1); makeobj(r0, r1+(8<<8), r2+(7<<8), 0, 0, 0, (r0<<9)-((_Alien1-1)<<9)); } void telep() { initplx = xpos; initply = ypos; if (ks.downpress < 16) return; if (telepctr) return; char r4 = *pladr7; int r5 = (r4&2) ? 1 : -1; if ((ks.leftpress >= 64) && (ks.uppress == 0) && (ks.fire != 0) && (ks.fire <= ks.downpress) && (ks.rightpress >= 64)) { r5 = -r5; bidforsound(_Explochannel, _SampJump, 0x7f, 0x1000, 0, 0, 50, 0, CHUNK_TELEP_1); } ks.downpress = 0; char* r1 = normtelep(pladr7, r5, r4^2); if (r1 == NULL) return; telepfound: backtranslate(r1, &telepxpos, &telepypos); telepxpos += (8<<8); telepypos -= (17<<8); telepctr = 1; bidforsound(_Playerchannel, _Samporgan, 0x7f, 0x1000, 0xff00, 0x50000a00, 25, 127, CHUNK_TELEP_2); bidforsound(_Sparechannel, _Samporgan, 0x7f, 0x4000, 0xff00, 0x1000f400, 25, -127, CHUNK_TELEP_3); } void playerfire() { if (snuffctr) return; if (blamctr) blamctr += 2; if (blamctr >= 224) { goblam(); return; } if (plweapontype == 0) return; if (ks.fire) dofire(); else // I added this, can't find it in the source if (rocketflag) launchrocket(); } void goblam() { if (plweapontype == _rocketblamno) { rocketblam(); return; } for (int r9 = 32; r9 > 0; r9--) { loopa0:; int r3 = r9-16; int r4 = (r3 < 0) ? -r3 : r3; int r2, r0; if (plface == 1) { r0 = xpos-(20<<8); r2 = (r4<<5)-(4<<8); } else { r0 = xpos+(20<<8); r2 = (4<<8)-(r4<<5); } makeproj(r0, ypos+(12<<8), r2, r3<<6, 57, PROJ_ROCKET); } int r1, r3; if (plface == 1) { r1 = xpos-(24<<8); r3 = -(1<<8); } else { r1 = xpos+(24<<8); r3 = (1<<8); } explogonopyroquiet(r1, ypos+(4<<8), r3, 0, 0, 0 /*r6?*/, 0); plfired = 1; blamctr = 0; bidforsound(_Firechannel, _SampAtomExplo, 0x7f, fullpitch, 0, 0, 8, 0, CHUNK_BLAM); } void rocketblam() { int r0, r1, r2, r3, r4; for (int r9 = 32; r9 > 0; r9--) { loopa1: r1 = ypos+(2<<8); r3 = *(rockettabadr+r9*6); if (plface == 1) { r0 = xpos-(12<<8); r4 = 1; r2 = -(4<<8); r3 = -r3; } else { r0 = xpos+(12<<8); r4 = 0; r2 = (4<<8); } r3 *= 2; if (r3 > 170) r4 += 2; if (r3 > 60) r4 += 2; if (r3 < -60) r4 -= 2; if (r3 < -170) r4 -= 2; // ??? CMP R3,#1 r4 += 36; makeproj(r0+r2*2, r1+r3*2, r2, r3, r4, PROJ_WEIRDSPLIT|PROJ_ATOM); } if (plface == 1) { r1 = xpos+(24<<8); r3 = (1<<9); } else { r1 = xpos-(24<<8); r3 = -(1<<9); } explogonopyroquiet(r1, ypos-(8<<8), r3, 0, 1, /*r6*/ 0, 0); plfired = 1; blamctr = 0; bidforsound(_Firechannel, _SampAtomExplo, 0x7f, fullpitch, 0, 0, 8, 0, CHUNK_BLAM); rocketblamctr -= 1; if ((rocketblamctr&(1<<7)) == 0) return; plweapontype = _rockbase; explogoquiet(xpos, ypos+(4<<8), 0, -(1<<7), 0, /*r6*/ 0, 0); } void dofire() { if (plweapontype >= _rockbase) { firerocket(); return; } // no return firempmg: if (plweapontype == _mpmgblamno) { blamfire(); return; } if (framectr-firelastframe < firerate) return; firelastframe = framectr; int r2 = (plface == 1) ? -(hvec>>1)-(plweaponspeed<<8) : (hvec>>1)+(plweaponspeed<<8); int r5; switch (plweapontype&7) { case 2: r5 = (4*PROJ_TTL)|PROJ_SPLIT; break; case 3: r5 = (4*PROJ_TTL)|PROJ_SPLIT|PROJ_FIVEWAY; break; case 4: r5 = (4*PROJ_TTL)|PROJ_SPLIT|PROJ_FIVEWAY|PROJ_SLOWSPLIT; break; case 5: r5 = (20*PROJ_TTL)|PROJ_SPLIT|PROJ_SLOWSPLIT|PROJ_WEIRDSPLIT; r2 >>= 2; break; case 6: r5 = (4*PROJ_TTL)|PROJ_SPLIT|PROJ_EXPLO; break; case 7: r5 = (4*PROJ_TTL)|PROJ_SPLIT|PROJ_FIVEWAY|PROJ_EXPLO; break; default: r5 = (64*PROJ_TTL); } makeproj(xpos+((plface == 1) ? -(14<<8) : (14<<8)), ypos+(12<<8), r2, (random()&0xff)-0x7f, (plface == 1) ? 31 : 30, r5); plfired = 1; bidforsound(_Firechannel, _SampCannon, 0x7e, fullpitch, 0, 0, 2, 0, CHUNK_FIRE); } void blamfire() { if (blamctr != 0) return; if (plweapontype == 8) blamctr = 128; else blamctr = 1; bidforsound(_Firechannel, _Samprave, 0x7e, fullpitch, 0, (fullpitch<<17)+0x200, 40, 0, CHUNK_BLAMFIRE); } void firerocket() { if (plweapontype == _rocketblamno) { blamfire(); return; } rocketflag = 1; int r2 = 2; if (plweapontype == _rockbase+6) r2 = 8; else if (plweapontype >= _rockbase+1) r2 = 4; if (plface == 1) rocketctr += r2; else rocketctr -= r2; if (rocketctr >= _rockettablen) rocketctr = 0; if (rocketctr < 0) rocketctr = _rockettablen-1; } void launchrocket() { if (framectr-firelastframe < (int)firerate) return; firelastframe = framectr; int r0, r1, r2, r3, r4; if (plface == 1) { r0 = xpos-(12<<8); r2 = -(plweaponspeed<<8); r3 = -*(rockettabadr+rocketctr); r4 = 1; } else { r0 = xpos+(12<<8); r2 = plweaponspeed<<8; r3 = *(rockettabadr+rocketctr); r4 = 0; } r1 = ypos+(2<<8); if (r3 > 170) r4 += 2; if (r3 > 60) r4 += 2; if (r3 < -60) r4 -= 2; if (r3 < -170) r4 -= 2; // ??? CMP R3,#1 r4 += 36; int r6 = plweapontype-_rockbase; if (r6 >= 6) r6 = random()&7; int r5; switch (r6) { case 1: r5 = (8*PROJ_TTL)|PROJ_SPLIT|ROCK_DIVIDE; // split break; case 2: r5 = (8*PROJ_TTL)|PROJ_SPLIT|ROCK_DIVIDE|ROCK_REDIVIDE; //split twice break; case 3: r5 = (20*PROJ_TTL)|PROJ_SPLIT|PROJ_ROCKET|ROCK_BURST; // burst a safe distance away break; case 4: r5 = (14*PROJ_TTL)|PROJ_SPLIT|PROJ_ROCKET|ROCK_DIVIDE|ROCK_BURST; // dual burst break; case 5: r5 = (8*PROJ_TTL)|PROJ_SPLIT|PROJ_ROCKET|ROCK_DIVIDE|ROCK_REDIVIDE|ROCK_BURST; // quad burst /*(1<<18)*/ break; default: r5 = (64*PROJ_TTL); } r5 |= PROJ_ROCKET; makeproj(r0+r2+r2, r1+r3+r3, r2, r3, r4, r5); plfired = 1; bidforsound(_Firechannel, _SampRocket, 0x7e, fullpitch, 0, 0, 2, 0, CHUNK_ROCKET); rocketflag = 0; } void getarms() { blamctr = 0; plweapontype = 0; } void getrocket() { plweapontype = _rockbase+(random()&7); plweaponspeed = 2; firerate = 12; blamctr = 0; } void getmpmg() { plweapontype = _mpmgbase+(random()&7); plweaponspeed = 8; firerate = 4; blamctr = 0; } void prepstrength() { laststrength = plstrength = _strengthinit; snuffctr = lagerctr = 0; } void loselife() { lagerctr = 0; plstrength = 0; //no return rejoin(); } void update_show_strength() { if (lagerctr != 0) { if ((lagerctr -= frameinc) < 0) lagerctr = 0; plstrength += frameinc<<6; if (plstrength > _strengthinit) plstrength = _strengthinit; laststrength += frameinc<<6; if (laststrength > _strengthinit) laststrength = _strengthinit; } showstrength(plstrength); } void bonuscheck() { if (snuffctr) { deadbonuscheck: atombombctr = 0; electrocuting = 0; deadbonuslim(pladr1); deadbonuslim(pladr2); deadbonuslim(pladr3); deadbonuslim(pladr4); return; } atombombctr = 0; electrocuting = 0; plstrength -= plbombcheck(pladr1); bonuslim(pladr1); weaponcheck(pladr1); plstrength -= plbombcheck(pladr2); bonuslim(pladr2); weaponcheck(pladr2); plstrength -= plbombcheck(pladr3); bonuslim(pladr3); weaponcheck(pladr3); plstrength -= plbombcheck(pladr4); bonuslim(pladr4); weaponcheck(pladr4); } void bonuscommon(int bonus, int x, int y) { sortbonus(bonus); int score = (bonus+2)>>1; if (score > 10) score = 10; addtoscore(score*100); makescoreobj(x, y, 0xf60+(score<<8)); bidforsound(_Playerchannel, _SampBonus, 0x6e, 0x3000+(score<<6), 0, 0, 3, 0, CHUNK_OBJGOT[score-1]); } void sortbonus(char r0) { if ((r0 == 13) || (r0 == 14)) { bonusstrength: lagerctr += (r0 == 14) ? 150 : 50; laststrength = plstrength; } if (r0 == bonusctr) { advancebonus: bonusctr++; //sortreplot: bonusreplot = 28; return; } if (r0 == 15) { bonusctr = 0; if (snuffctr) if (plstrength > 0) { prepstrength(); message(48, 24, 0, 0.5, "A potion and Skull!"); message(48, 176, 0, -0.5, "Rise from the dead!"); } sortreplot: bonusreplot = 28; } return; } void bonusnumb(int r9) { int r6 = -1; for (r9 &= 0xff; r9 > 0; r9 -= (r6+1)) { loopc3: r6 = (r6+1)&3; // was random()&3 makescoreobj(xpos, ypos, 0xf60+(10<<8)+(r6<<8)); } } void initweapon() { firelastframe = 0; if (plweapontype >= _rockbase) { plweaponspeed = 2; firerate = 12; } else { plweaponspeed = 8; firerate = 4; } rocketblamctr = 5; } int plcolcheck(int x, int y, int dx, int dy) // returns 0 for EQ { return (x+(dx>>1) > pllx) && (plhx > x-(dx>>1)) && (y+(dy>>1) > plly) && (plhy > y-(dy>>1)); } void settestal() { makeobj(_Alien1+13, xpos-(65<<8), ypos-(24<<8), 0, 0, 0x100020, 1<<10); } void weaponcheck(char* r5) { int weap = block_weapon(*r5); if (!weap) return; plweapontype = weap; *r5 = 0; if (plweapontype >= _rockbase) { plweaponspeed = 2; firerate = 12; } else { plweaponspeed = 8; firerate = 4; } rocketblamctr = 5; int r2 = plweapontype-1; int r7, r0; if ((r2&7) == 7) { r7 = _scoresprbase+12; r0 = 4000; } else if (r2&4) { r7 = _scoresprbase+10; r0 = 2000; } else { r7 = _scoresprbase+9; r0 = 1000; } addtoscore(r0); makescoreobj(xpos, ypos, 60+(r7<<8)); bidforsound(_Playerchannel, (r7 == _scoresprbase+12) ? _Samprave : _Samporgan, 0x7f, 0x3000, 0xff00, (r7 == _scoresprbase+12) ? 0x60000800 : 0x60000200, 10, 127, (r7 == _scoresprbase+12) ? CHUNK_WEAPON_3 : CHUNK_WEAPON_1); bidforsound(_Sparechannel, (r7 == _scoresprbase+12) ? _Samprave : _Samporgan, 0x7f, 0x3800, 0xff00, (r7 == _scoresprbase+12) ? 0x60000800 : 0x60000200, 10, -127, (r7 == _scoresprbase+12) ? CHUNK_WEAPON_4 : CHUNK_WEAPON_2); /* XXX Original code also kills message so the same one is never redisplayed */ switch ((plweapontype-1)&15) { case 0: message_scroll("Standard Mini-Gun"); break; case 1: message_scroll("Mini-Gun with spray"); break; case 2: message_scroll("Five Stream Gun"); break; case 3: message_scroll("Fast 5 way - zap those nasties!"); break; case 4: message_scroll("A weird one!"); break; case 5: message_scroll("Three Way Blitzer"); break; case 6: message_scroll("Blitzing Five Way - Lets Party"); break; case 7: message_scroll("MegaBlam 5000 Mini-Gun!!!!"); break; case 8: message_scroll("Standard Rocket Launcher"); break; case 9: message_scroll("Twin Rocket Launcher"); break; case 10: message_scroll("Quad Launcher - Open Fire!"); break; case 11: message_scroll("Launcher with starburst"); break; case 12: message_scroll("Twin rockets with starburst - let's see some fireworks!"); break; case 13: message_scroll("Quad Launcher with starburst! Arrgghhhh!!!!"); break; case 14: message_scroll("A Pot Pourri Rocket Launcher - mix and match!"); break; case 15: message_scroll("MegaBlam Rocket Launcher!!!! Six Shots Only!"); break; } } void scoreadd() { if (!plscoreadd) return; char* r10 = plscore; int placeval = 100000000; for (int r6 = 8; r6 > 0; r6--) { placeval /= 10; loop37: if (plscoreadd >= placeval) { char digit = 0; if (plscoreadd >= (placeval<<3)) { digit += 8; plscoreadd -= (placeval<<3); } if (plscoreadd >= (placeval<<2)) { digit += 4; plscoreadd -= (placeval<<2); } if (plscoreadd >= (placeval<<1)) { digit += 2; plscoreadd -= (placeval<<1); } if (plscoreadd >= (placeval<<0)) { digit += 1; plscoreadd -= (placeval<<0); } *r10 += digit; } scoreaddskip: r10++; } char carry = 0; for (int r6 = 8; r6 > 0; r6--) // now handle carries { loop38: r10--; *r10 += carry; if (*r10 >= 10) { *r10 -= 10; carry = 1; } else carry = 0; } } void plplattoobj(char* r0) { plattoobjins(r0, vvec>>3); vvec = 0; plattoins: playerfire(); } void plotscore() { showscore(plscore); } void addtoscore(int sc) { plscoreadd += sc; } void pllosestrength(int str) { plstrength -= str; } void plsetneuronzone(int zone) { initplx = xpos; initply = ypos; change_zone(zone); } void bonusplot() { int r2 = (frameinc > 2) ? 2 : frameinc; if (bonustimer != 0) bonustimer -= r2; if ((bonustimer == 1) || (bonustimer == 2)) bonusreset(); if (bonusreplot) { bonusreplot -= r2; //from above if (bonusreplot < 0) bonusreplot = 0; } else if (bonusctr >= 13) bonusbonus(); plotbonus(bonusctr, bonusreplot); } void bonusbonus() //not to be called by BL { bonusctr = 8; bonusreplot = 28; ks.keypressed = 0; char* r11 = bonusfind(); if (r11) foundmarker(r11); else bonus1(); } void bonusreset() { if (ks.keypressed) { normreset(); return; } bonusctr = 0; bonusreplot = 28; ks.keypressed = 1; char* r11 = bonusfind(); if (r11) foundresetmarker(r11); else { bonus1(); normreset(); return; } } void restartplayer() { xpos = initplx; ypos = initply; screenwakeup(xpos, ypos); reinitplayer(); } void reinitplayer() { telepctr = 33; //bonusctr=0; (commented out in original) bonusreplot = 28; pladr1 = 0; windctr = 0; bonustimer = 0; rocketblamctr = 0; shutdownctr = 0; if (gotallneurons()) { completedzone(); lives = 0; snuffctr = 1; } return; } void redraw_bonus() { bonusreplot = 4; } int gotallneurons() { return (neuronctr >= _neuronstoget); } int player_dead() { if (snuffctr >= 300) { playerdead: showgamescreen(); if (lives == 0) return 2; lives--; if (lives > 9) lives = 9; prepstrength(); return 1; } else return 0; } void showlives() { showlives(lives); } void scorezero() { plscoreadd = 0; *(uint64_t*)plscore = 0; lives = 2; neuronctr = 0; } void startplayer() { bonusctr = 0; findplayer(&initplx, &initply); } void getvars() { //getstrengthtab(); xpos = 64<<8; ypos = 48<<8; initplx = 0; initply = 0; hvec = 0; vvec = 0; pladr1 = 0; pladr2 = 0; plface = 0; } void init_chunk_player() { int soundvol = 0x7f; CHUNK_ELEC_1 = make_sound(_Samprave, 0x2000, 0xff00, 0, 10); CHUNK_ELEC_2 = make_sound(_Samprave, 0x2400, 0xff00, 0, 10); CHUNK_ELEC_3 = make_sound(_Samprave, 0x2800, 0xff00, 0, 10); CHUNK_JUMP = make_sound(_SampJump, 0x4600, 0, 0, 4); CHUNK_SHUTDOWN_1 = make_sound(_Samprave, 0x3300, (soundvol<<25)|0x1000, 0x100ff00, 100); CHUNK_SHUTDOWN_2 = make_sound(_Samprave, 0x3200, (soundvol<<25)|0x1000, 0x100ff00, 100); CHUNK_SHUTDOWN_3 = make_sound(_Samprave, 0x3100, (soundvol<<25)|0x1000, 0x100ff00, 100); CHUNK_TELEP_1 = make_sound(_SampJump, 0x1000, 0, 0, 50); CHUNK_TELEP_2 = make_sound(_Samporgan, 0x1000, 0xff00, 0x50000a00, 25); CHUNK_TELEP_3 = make_sound(_Samporgan, 0x4000, 0xff00, 0x1000f400, 25); CHUNK_BLAM = make_sound(_SampAtomExplo, fullpitch, 0, 0, 8); CHUNK_FIRE = make_sound(_SampCannon, fullpitch, 0, 0, 2); CHUNK_BLAMFIRE = make_sound(_Samprave, fullpitch, 0, (fullpitch<<17)+0x200, 40); CHUNK_ROCKET = make_sound(_SampRocket, fullpitch, 0, 0, 2); for (int i = 0; i < 17; i++) CHUNK_STUNNED[i] = make_sound(_SampStunned, 0x4000-i*0x100, 0, 0, 50); CHUNK_WEAPON_1 = make_sound(_Samporgan, 0x3000, 0xff00, 0x60000200, 10); CHUNK_WEAPON_2 = make_sound(_Samporgan, 0x3800, 0xff00, 0x60000200, 10); CHUNK_WEAPON_3 = make_sound(_Samprave, 0x3000, 0xff00, 0x60000800, 10); CHUNK_WEAPON_4 = make_sound(_Samprave, 0x3800, 0xff00, 0x60000800, 10); for (int i = 0; i < 10; i++) CHUNK_OBJGOT[i] = make_sound(_SampBonus, ((i+1)<<6)+0x3000, 0, 0, 3); } void blokeplot(fastspr_sprite* sprites, char n, int x, int y) { blokeplot_cen(sprites, n, x, y+plotterofs); } void relplot(fastspr_sprite* sprites, char n, int x, int y) { cenplot(sprites, n, (x>>8)-(xpos>>8), (y>>8)-(ypos>>8)); } void plotdying(fastspr_sprite* sprites, char n, int x, int y, int r5) { cenplotdying(sprites, n, (x>>8)-(xpos>>8), (y>>8)-(ypos>>8), r5); } asylum-0.3.2/projectile.c0000644000175000017500000001735011040474032014003 0ustar hughhugh/* projectile.c */ /* Copyright Hugh Robinson 2006-2008. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include "asylum.h" #define _projno 32 #define _projlim 0x1000 #define _projsmallno 54 #define _rocketspriteno 32 #define _rocketspritelim 41 #define bulletloss (2<<8) const char _spcrumblelowlim = 140, _spcrumblehighlim = 143; extern const char _translowlim, _transhighlim; extern int xposmax, yposmax; extern fastspr_sprite blokeadr[]; extern char masterplotal; projent projofs[_projlim]; projent* projadr; int projctr; void causeexplo(projent* r11) { explogomaybe(r11->x-r11->dx, r11->y-r11->dy-(8<<8), 0, 0, 1, -1, 0); } void causeexplonopyro(projent* r11) { explogonopyro(r11->x-r11->dx, r11->y-r11->dy-(8<<8), 0, 0, 1, -1, 0); } void project() // the projectile handler { int i = _projno; // get table length projent* r11 = projadr; for (; i > 0; i--, r11++) { loop41: if (r11->type == 0) continue; foundproj: r11->x += r11->dx; r11->y += r11->dy; if ((r11->x <= xlowlim) || (xposmax <= r11->x) || (r11->y <= ylowlim) || (yposmax <= r11->y)) { // goto projoffscr r11->type = 0; continue; } if (r11->flags&PROJ_ROCKET) { r11->dx += r11->dx>>4; r11->dy += r11->dy>>4; } projnoacc: if (r11->dx > _speedlim) r11->dx = _speedlim; if (r11->dx < -_speedlim) r11->dx = -_speedlim; if (r11->dy > _speedlim) r11->dy = _speedlim; if (r11->dy < -_speedlim) r11->dy = -_speedlim; r11->flags -= PROJ_TTL; // decrement the life counter if (r11->flags < 0) // out of time { projdestroy: if (r11->flags&PROJ_SPLIT) { projsplit(r11); continue; } projoffscr: r11->type = 0; continue; } alent* rs = bulcolcheck(r11->x, r11->y); if (rs != NULL) { int r6; if (r11->flags&PROJ_ROCKET) r6 = projhital(rs,bulletloss<<2); else r6 = projhital(rs, bulletloss); r11->type = 0; if (r6 == 0) continue; makeobj(_Flyingbonus, r11->x, r11->y, r11->dx>>2, -(1<<10), (0x200<<16), r6); if (r11->flags&PROJ_ROCKET) causeexplo(r11); else causeexplonopyro(r11); continue; } char* r0 = fntranslate(r11->x, r11->y); char r1 = *r0; if ((r1 < 16) || // projhit: // hit a block ((r1 >= _translowlim) && (r1 <= _transhighlim) && !(r11->flags&PROJ_ATOM))) { projhitins: if (masterplotal == 0) continue; relplot(blokeadr, r11->type, r11->x, r11->y); continue; } projhitcont: if ((r1 >= _spcrumblelowlim) && (r1 <= _spcrumblehighlim) && ((r11->type == _projsmallno+2) || (r11->flags&PROJ_WEIRDSPLIT))) // hack, better than original && (plweapontype == 5) { *r0 = 0; explogo(r11->x, r11->y, 0, 0, 0, 0, 0); } nospcrumble: r11->type = 0; destroy(r0); if (r11->flags&PROJ_ATOM) { atomrocket(r11, r0); continue; } if (r11->flags&PROJ_EXPLO) { causeexplonopyro(r11); continue; } if (r11->flags&PROJ_ROCKET) { causeexplo(r11); continue; } } } int projsplittab[10]; void init_projsplittab() { for (int i = 0; i < 5; i++) { projsplittab[i*2] = (int)(0x40*(0.5-sin(i/4.0*M_PI))); projsplittab[i*2+1] = 0x100*(i-2); } } void projsplit(projent* r11) { int x = r11->x, y = r11->y, dx = (r11->dx)>>1, dy = (r11->dy)>>1; int flags = r11->flags; int* r10; int r9; if (flags&PROJ_ROCKET) { rocketsplit(r11); return; } int r7 = r11->type, r4, r6; if (flags&PROJ_FIVEWAY) { r10 = projsplittab; r9 = 5; r4 = _projsmallno+1; } else { r10 = projsplittab+2; r9 = 3; r4 = _projsmallno; } if ((flags&PROJ_SLOWSPLIT) == 0) dx >>= 1; if (flags&PROJ_WEIRDSPLIT) { r4 = _projsmallno+2; dx <<= 2; } if (flags&PROJ_EXPLO) { r4 = _projsmallno+3; r6 = PROJ_ROCKET; } else r6 = 64*PROJ_TTL; for (; r9 > 0; r9--) { loop76: makeproj(x, y, dx+r10[0], dy+r10[1], r4, r6); r10 += 2; } r11->type = 0; } int rocketbursttab[10]; void init_rocketbursttab() { for (int i = 0; i < 5; i++) { rocketbursttab[i*2] = (int)(0x200*sin((0.5+i)/2.5*M_PI)); rocketbursttab[i*2+1] = (int)(0x200*cos((0.5+i)/2.5*M_PI)); } } void rocketsplit(projent* r11) { int x = r11->x, y = r11->y, dx = (r11->dx)>>3, dy = (r11->dy)>>3; int flags = r11->flags; if (flags&ROCK_DIVIDE) { rocketpair(r11); return; } rocketburst:; int r5 = (64*PROJ_TTL)|PROJ_ROCKET|PROJ_EXPLO; int* r10 = rocketbursttab; for (int r9 = 5; r9 > 0; r9--) { loop77: makeproj(x, y, dx+r10[0], dy+r10[1], _projsmallno+3, r5); r10 += 2; } r11->type = 0; causeexplonopyro(r11); } void rocketpair(projent* r11) { int x = r11->x, y = r11->y, dx = r11->dx, dy = r11->dy; int flags = r11->flags; int type = r11->type; int newflags = 64*PROJ_TTL; if (flags&ROCK_BURST) newflags = (16*PROJ_TTL)|ROCK_BURST|PROJ_SPLIT; if (flags&ROCK_REDIVIDE) // continue splitting { newflags &= ~(64*PROJ_TTL); newflags |= (16*PROJ_TTL)|ROCK_DIVIDE|PROJ_SPLIT; } newflags |= PROJ_ROCKET; int newtype = type-2; if (newtype < _rocketspriteno) newtype += 2; if (type&1) makeproj(x, y, dx-(dy>>2), dy+(dx>>2)-(dy>>4), newtype, newflags); else makeproj(x, y, dx+(dy>>2), dy-(dx>>2)+(dy>>4), newtype, newflags); newtype = type+2; if (newtype > _rocketspritelim) newtype -= 2; if (type&1) makeproj(x, y, dx+(dy>>2), dy-(dx>>2)+(dy>>4), newtype, newflags); else makeproj(x, y, dx-(dy>>2), dy+(dx>>2)-(dy>>4), newtype, newflags); r11->type = 0; } int makeproj(int x, int y, int dx, int dy, int type, int flags) { projent* r10 = projadr+projctr; int r9 = _projno-projctr; int r8 = projctr; for (; r9 > 0; r9--) { loop42: if (r10->type == 0) return foundmakeproj(r10, r8, x, y, dx, dy, type, flags); r10++; r8++; } r10 = projadr; for (r9 = projctr; r9 > 0; r9--) { loop43: if (r10->type == 0) return foundmakeproj(r10, r8, x, y, dx, dy, type, flags); r10++; r8++; } return 1; } int foundmakeproj(projent* r10, int r8, int x, int y, int dx, int dy, int type, int flags) { if (flags < (1*PROJ_TTL)) flags |= (64*PROJ_TTL); r10->type = type; r10->x = x; r10->y = y; r10->dx = dx; r10->dy = dy; r10->flags = flags; for (r8++; r8 >= _projno; r8 -= _projno) loop45:; projctr = r8; return 0; } void initprojtab() { projadr = projofs; projent* r10 = projadr; projctr = 0; for (int r9 = _projno; r9 > 0; r9--) { loop44: *(int*)r10 = 0; r10++; } } asylum-0.3.2/sound.c0000644000175000017500000003337611040473563013011 0ustar hughhugh/* sound.c */ /* Copyright Hugh Robinson 2006-2008. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include "asylum.h" extern asylum_options options; char sound_available; void bidforsoundforce(int r0, char r1, char r2, int r3, int r4, int r5, char r6, int r7, Mix_Chunk* chunk) { if (options.soundtype && sound_available) { r2 = (r2 > options.soundvol) ? options.soundvol : r2; soundclaim(r0&7, r1, r2, r3, r4, r5, r6, r7, chunk); } } void bidforsound(int r0, char r1, char r2, int r3, int r4, int r5, char r6, int r7, Mix_Chunk* chunk) { if (options.soundtype && sound_available) { r2 = (r2 > options.soundvol) ? options.soundvol : r2; if ((r0&7)==_Explochannel) soundclaimexplo(r0&7, r1, r2, r3, r4, r5, r6, r7, chunk); else soundclaimmaybe(r0&7, r1, r2, r3, r4, r5, r6, r7, chunk); } } void soundclaimmaybe(int r0, char r1, char r2, int r3, int r4, int r5, char r6, int r7, Mix_Chunk* chunk) { //soundtab=soundtabofs+(r0<volume < r2)) soundclaim(r0, r1, r2, r3, r4, r5, r6, r7, chunk); } void soundclaimexplo(int r0, char r1, char r2, int r3, int r4, int r5, char r6, int r7, Mix_Chunk* chunk) { //soundtab=soundtabofs+(r0<volume < r2)) soundclaim(3, r1, r2, r3, r4, r5, r6, r7, chunk); else if ((!Mix_Playing(4)) || (Mix_GetChunk(4)->volume < r2)) soundclaim(4, r1, r2, r3, r4, r5, r6, r7, chunk); else if ((!Mix_Playing(5)) || (Mix_GetChunk(5)->volume < r2)) soundclaim(5, r1, r2, r3, r4, r5, r6, r7, chunk); else if ((!Mix_Playing(6)) || (Mix_GetChunk(6)->volume < r2)) soundclaim(6, r1, r2, r3, r4, r5, r6, r7, chunk); else if ((!Mix_Playing(7)) || (Mix_GetChunk(7)->volume < r2)) soundclaim(7, r1, r2, r3, r4, r5, r6, r7, chunk); } typedef struct { int time; int tempo; char* tune; int pitch[4]; int inst[4]; int start_time[4]; char* section; int pointer; } music_state; music_state music; char voice[32][30000]; char tuneload[4][30000]; Sint16 mulaw[256]; Mix_Music* oggmusic[4]; void init_audio() { sound_available = !Mix_OpenAudio(22050, MIX_DEFAULT_FORMAT, 2, 1024); if (!sound_available) fprintf(stderr, "Sound disabled: opening audio device failed: %s\n", Mix_GetError()); } void init_mulaw() { Sint16 exp[8] = { 0, 132, 396, 924, 1980, 4092, 8316, 16764 }; for (int i = 0; i < 256; i++) mulaw[i] = ((i&1) ? -1 : 1)*(exp[i>>5]+((i&0x1e)<<(2+(i>>5)))); } Mix_Chunk* make_sound(char samp, int initpitch, int volslide, int pitchslide, char frames) { int numsamples = (int)(frames*22050.0/50.0*2); // frames are 50Hz? Mix_Chunk* mc = (Mix_Chunk*)malloc(sizeof(Mix_Chunk)); Uint16* s = (Uint16*)malloc(numsamples*2*sizeof(Uint16)); mc->abuf = (Uint8*)s; mc->alen = numsamples*2*sizeof(Uint16); mc->allocated = 0; // don't automatically free buffer mc->volume = 0xff; // XXX volume int time = 0; double ps = ((Sint16)(pitchslide&0xffff))*22/22050.0; double vs = ((Sint16)(volslide&0xffff))/22050.0; Sint16 psmax = pitchslide>>16; double matching = 0; fprintf(stderr, "."); fflush(stderr); for (int i = 0; i < numsamples*2*sizeof(Uint16); i += 4, time++, s += 2) { Uint16 mono = 0; double pitch = initpitch+ps*time; // XXX pitchslide //if ((ps>0)&&(pitch>psmax)) pitch=psmax; //if ((ps<0)&&(pitch= len) if (rep == 0) continue;else jj = (len-rep)+((jj-len)%rep);double w; if (jj >= len-gap) w = ((jj-(len-gap))*(double)mulaw[voice[samp][jj+44-rep]] +(len-jj)*(double)mulaw[voice[samp][jj+44]])/gap/4; else w = mulaw[voice[samp][jj+44]]/4; double vscale = 0x7f+vs*time; if (vscale > 0xff) vscale = 0xff; if (vscale > 0) w *= (vscale/0x7f);else w = 0; double x = M_PI*(j-matching); if (x == 0) mono += (Sint16)(w/1.3); else mono += (Sint16)(w*sinf(x)/(1.3*x)); } s[1] = *s = mono; // XXX stereo } return mc; } void soundclaim(int c, char samp, char initvol, int initpitch, int volslide, int pitchslide, char frames, int stereo, Mix_Chunk* static_chunk) { //int* argv = (int*)vargv; //int c = argv[0]; char samp = argv[1]; char initvol = argv[2]; int initpitch = argv[3]; //int volslide = argv[4]; int pitchslide = argv[5]; char frames = argv[6]; int stereo = argv[7]; Mix_Chunk* old_chunk = Mix_GetChunk(c); Mix_Chunk* chunk = static_chunk ? static_chunk : make_sound(samp, initpitch, volslide, pitchslide, frames); Mix_HaltChannel(c); Mix_Volume(c, initvol); Mix_SetPanning(c, 254-stereo, stereo); Mix_PlayChannel(c, chunk, 0); //if (old_chunk) Mix_FreeChunk(old_chunk); XXX memory leak } FILE* musicdumpfile; void sdl_music_hook(void* udata, Uint8* stream, int len) { music_state* m = (music_state*)udata; char* tuneload = m->tune; Sint16* s = (Sint16*)stream; int window = (len < 0) ? 16 : 4; unsigned long ln = (len < 0) ? -ftell(musicdumpfile) : 0; for (int i = 0; (len < 0) || (i < len); i += 4, m->time++, (len < 0) || (s += 2)) { if (0 == (m->time%m->tempo)) { // new beat if (len == -2) { ln += ftell(musicdumpfile); fseek(musicdumpfile, 8, 0); fputc(ln>>24, musicdumpfile); fputc((ln&0xff0000)>>16, musicdumpfile); fputc((ln&0xff00)>>8, musicdumpfile); fputc(ln&0xff, musicdumpfile); break; } int inst = 0; int pitch = 8; char first; char second; do { first = tuneload[m->pointer++]; second = tuneload[m->pointer++]; if (first) { // pitch word inst = first&0x1f; pitch = second&0x3f; } else { m->pitch[second&3] = pitch; m->inst[second&3] = inst; m->start_time[second&3] = m->time; inst = 0; pitch = 8; } } while ((second&0xc0) == 0); if (second&0x80) { m->section++; if (0x80&*m->section) { m->section = tuneload+8; if (len < 0) len = -2; } m->pointer = read_littleendian(((uint32_t*)tuneload)+0x42+*m->section); } } *s = 0; s[1] = 0; for (int v = 0; v < 4; v++) { if (m->inst[v] == 0) continue; int pitch = m->pitch[v]; int off = m->time-m->start_time[v]; double old_sample_rate = 4000.0*pow(2, pitch/12.0); double matching = off*old_sample_rate/22050; for (int j = (int)matching-window; j <= (int)matching+window; j++) { if ((j < 0)) continue; int jj = j; uint32_t len = read_littleendian(((uint32_t*)voice[m->inst[v]])+6); uint32_t gap = read_littleendian(((uint32_t*)voice[m->inst[v]])+7); // ??? uint32_t rep = read_littleendian(((uint32_t*)voice[m->inst[v]])+8); /*if (m->inst[v]==16) while (jj>=6960+1000) jj-=6960; else if (jj>=8192) continue;*/ if (jj >= len) jj = rep ? ((len-rep)+((jj-len)%rep)) : 0; double w; if (jj >= len-gap) w = ((jj-(len-gap))*(double)mulaw[voice[m->inst[v]][jj+44-rep]] +(len-jj)*(double)mulaw[voice[m->inst[v]][jj+44]])/gap/4; else w = mulaw[voice[m->inst[v]][jj+44]]/4; double x = M_PI*(j-matching); if (x == 0) s[v&1] += (Sint16)(w/1.3); else s[v&1] += (Sint16)(w*sinf(x)/(1.3*x)); } } if (len < 0) { /* .au is big-endian format */ fputc(s[0]>>8, musicdumpfile); fputc(s[0]&0xff, musicdumpfile); fputc(s[1]>>8, musicdumpfile); fputc(s[1]&0xff, musicdumpfile); } } } void load_voices() { if (!sound_available) return; load_voice(1, "./Voices/Jump"); load_voice(2, "./Voices/Bonus"); load_voice(3, "./Voices/Explo"); load_voice(4, "./Voices/AtomExplo"); load_voice(5, "./Voices/Cannon"); load_voice(6, "./Voices/Rocket"); load_voice(7, "./Voices/Hiss"); load_voice(8, "./Voices/Stunned"); load_voice(9, "./Voices/SmallZap"); load_voice(10, "./Voices/BigZap"); load_voice(16, "./Voices/Organ"); load_voice(17, "./Voices/Plink"); load_voice(18, "./Voices/PlinkHard"); load_voice(19, "./Voices/Raver"); load_voice(20, "./Voices/Dome"); load_voice(21, "./Voices/NasalStr"); load_voice(22, "./Voices/BassHollow"); load_voice(23, "./Voices/NasalBass"); load_voice(24, "./Voices/BassDrum"); load_voice(25, "./Voices/Snare"); load_voice(26, "./Voices/Cymbal"); } void init_sounds() { if (!sound_available) return; init_mulaw(); fprintf(stderr, "Building sound effects "); init_chunk_bullet(); init_chunk_player(); init_chunk_alien(); init_chunk_maze(); fprintf(stderr, " done.\n"); } void load_voice(int v, const char* filename) { SDL_RWops* file = SDL_RWFromFile(filename, "r"); if (file == NULL) { fprintf(stderr, "Loading sound effect %s failed\n", filename); return; } SDL_RWseek(file, 0, SEEK_END); int file_len = SDL_RWtell(file) /*-44*/; SDL_RWseek(file, 0 /*44*/, SEEK_SET); SDL_RWread(file, voice[v], 1, file_len); } void initialize_music(int a) { swi_sound_qtempo(0x1000); music.time = 0; music.tune = tuneload[a]; music.section = tuneload[a]+8; music.pointer = read_littleendian(((uint32_t*)(tuneload[a]))+0x42+*music.section); for (int v = 0; v < 4; v++) { music.pitch[v] = 0; music.inst[v] = 0; music.start_time[v] = 0; } } void dumpmusic(int argc,char** argv) { init_mulaw(); Uint8 wav[4]; char musicdumppath[1024] = ""; char* musicinputpath = argv[2]; strncat(musicdumppath, musicinputpath, 1000); strncat(musicdumppath, ".au", 20); fprintf(stderr, "Dumping music "); //swi_bodgemusic_load(1,musicinputpath); musicdumpfile = fopen(musicdumppath, "w"); SDL_RWops* tune = SDL_RWFromFile(musicinputpath, "r"); SDL_RWread(tune, tuneload+1, 1, 30000); initialize_music(1); if (argc > 3) if (!strcmp(argv[3], "--slower")) swi_sound_qtempo(0x980); fputs(".snd", musicdumpfile); fputc(0, musicdumpfile); fputc(0, musicdumpfile); fputc(0, musicdumpfile); fputc(32, musicdumpfile); // data start fputc(255, musicdumpfile); fputc(255, musicdumpfile); fputc(255, musicdumpfile); fputc(255, musicdumpfile); // length fputc(0, musicdumpfile); fputc(0, musicdumpfile); fputc(0, musicdumpfile); fputc(3, musicdumpfile); // 16-bit linear fputc(0, musicdumpfile); fputc(0, musicdumpfile); fputc(22050>>8, musicdumpfile); fputc(22050&0xff, musicdumpfile); fputc(0, musicdumpfile); fputc(0, musicdumpfile); fputc(0, musicdumpfile); fputc(2, musicdumpfile); // stereo fputs("blotwell", musicdumpfile); sdl_music_hook(&music, wav+2, -1 /* dump entire track into buffer */); fclose(musicdumpfile); exit(0); } void maketestsound(int r1) { swi_stasis_link(1, 1); swi_sound_control(1, 0x100|r1, 0x20, 0xfe); //swi_bodgemusic_volume(musicvol); } void swi_bodgemusic_start(int a, int b) { if (!sound_available) return; swi_bodgemusic_stop(); if (oggmusic[a]) Mix_PlayMusic(oggmusic[a], -1); else { initialize_music(a); Mix_HookMusic(sdl_music_hook, &music); } } void swi_bodgemusic_stop() { if (!sound_available) return; Mix_HaltMusic(); Mix_HookMusic(NULL, NULL); } void swi_bodgemusic_volume(int v) { Mix_VolumeMusic(v); } void swi_bodgemusic_load(int a, char* b) { char name[1024] = ""; strncpy(name, b, 1000); strncat(name, ".ogg", 20); if (oggmusic[a]) Mix_FreeMusic(oggmusic[a]); oggmusic[a] = Mix_LoadMUS(name); if (oggmusic[a]) return; SDL_RWops* tune = SDL_RWFromFile(b, "r"); //SDL_RWseek(tune, 8+256+64, SEEK_SET); SDL_RWread(tune, tuneload+a, 1, 30000); } void swi_sound_qtempo(int t) { music.tempo = (2756*0x1000)/t; } void swi_sound_control(int c, int a, int p, int d) { ; } int swi_sound_speaker(int s) { ; } void swi_stasis_link(int a, int b) { ; } void swi_stasis_control(int a, int b) { ; } void swi_stasis_volslide(int a, int b, int c) { ; } asylum-0.3.2/vdu.c0000644000175000017500000007237411235410523012451 0ustar hughhugh/* vdu.c */ /* Copyright Hugh Robinson 2006-2009. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include "asylum.h" #include #include #include extern fastspr_sprite charsadr[48]; extern fastspr_sprite blockadr[256]; extern board *boardadr; extern int boardwidth; extern const char _bonuslow; #define _strengthmax (108<<8) struct vduvar { int xreso; int yreso; int width; int height; int gamex; int gamey; int gameh; int gamew; int backh; int backw; int scorex; int scorey; int sprw; int sprh; int xblocks; int yblocks; int livesx; int livesy; int strengthx; int strengthy; int strengthw; int strengthh; int bonusx; int bonusy; int bonush; int opengl; } vduvar; SDL_Surface* ArcScreen; //SDL_Surface* GameScreen; //SDL_Surface* ChatScreen; fastspr_sprite GameScreen; fastspr_sprite ChatScreen; SDL_Surface* backsprite; SDL_Surface* wipescr; SDL_Surface* redness; SDL_Surface* greyness; SDL_Rect clip; #define _textno 32 #define _textlen (20+60) #define _charwidth 16 extern int framectr; extern char frameinc; typedef struct textinfo { int count; int x; int y; int dx; int dy; char text[60]; } textinfo; textinfo texttabofs[_textno]; void switchbank() { //osbyte_71(); //swi_blitz_screenretrieve(); if (vduvar.opengl) SDL_GL_SwapBuffers(); else SDL_Flip(ArcScreen); } void fspplotscaled(fastspr_sprite* sprites, char n, float x, float y, float xs, float ys) { fastspr_sprite sprite = sprites[(char)n]; static SDL_Rect pos; float w = sprite.w*xs, h = sprite.h*ys; float posx = x-sprite.x*xs, posy = y-sprite.y*ys; if (vduvar.opengl) { // This rescales as requested ... if ((sprite.w==0) || (sprite.h==0)) return; glBindTexture(GL_TEXTURE_2D, sprite.t); glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glColor4f(1,1,1,1); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBegin(GL_TRIANGLE_STRIP); glTexCoord2f(0.5/sprite.texw, 0.5/sprite.texh); glVertex3f(posx-0.5*xs, posy-0.5*ys, 0.0); glTexCoord2f((sprite.w+1.5)/sprite.texw, 0.5/sprite.texh); glVertex3f(posx+w+0.5*xs, posy-0.5*ys, 0.0); glTexCoord2f(0.5/sprite.texh, (sprite.h+1.5)/sprite.texh); glVertex3f(posx-0.5*xs, posy+h+0.5*ys, 0.0); glTexCoord2f((sprite.w+1.5)/sprite.texw, (sprite.h+1.5)/sprite.texh); glVertex3f(posx+w+0.5*xs, posy+h+0.5*ys, 0.0); glEnd(); } else { // ... this doesn't. pos.x = (int)posx; pos.y = (int)posy; SDL_BlitSurface(sprite.s, NULL, ArcScreen, &pos); } } void fspplot(fastspr_sprite* sprites, char n, int x, int y) { fspplotscaled(sprites, n, x, y, 1.0, 1.0); } void mazescaleplot(fastspr_sprite* sprites, char n, float x, float y) { fspplotscaled(sprites, n, x, y, vduvar.sprw/16.0, vduvar.sprh/16.0); } void cenplot(fastspr_sprite* sprites, char n, int x, int y) { mazescaleplot(sprites, n, ((x-1)*vduvar.sprw)/16.0+vduvar.gamex+(vduvar.gamew/2), (y*vduvar.sprh)/16.0+vduvar.gamey+(vduvar.gameh/2)-(vduvar.sprh/2)); } void cenplotdying(fastspr_sprite* sprites, char n, int x, int y, int r5) { int fsplx, fsply, fsphx, fsphy; int r8 = 8-(r5>>17); int r1 = x+vduvar.gamex+(vduvar.gamew/2); int r2 = r8+y+vduvar.gamey+(vduvar.gameh/2)-(vduvar.sprh/2); fsply = vduvar.gamey; fsplx = vduvar.gamex; fsphy = r2; if (fsphy <= vduvar.gamey+vduvar.gameh) if (fsply < fsphy) { fsphx = r1; swi_fastspr_setclipwindow(fsplx, fsply, fsphx, fsphy); if (fsphx <= vduvar.gamex+vduvar.gamew) if (fsplx < fsphx) fspplot(sprites, n, fsphx+r8, fsphy+r8); fsphx = vduvar.gamex+vduvar.gamew; fsplx = r1; swi_fastspr_setclipwindow(fsplx, fsply, fsphx, fsphy); if (fsplx >= vduvar.gamex) if (fsphx > vduvar.gamex) fspplot(sprites, n, fsplx-r8, fsphy+r8); } nodyingtop: fsphy = vduvar.gamey+vduvar.gameh; fsplx = vduvar.gamex; fsply = r2; if (fsply >= vduvar.gamey) if (fsply < fsphy) { fsphx = r1; swi_fastspr_setclipwindow(fsplx, fsply, fsphx, fsphy); if (fsphx <= vduvar.gamex+vduvar.gamew) if (fsplx < fsphx) fspplot(sprites, n, fsphx+r8, fsply-r8); fsphx = vduvar.gamex+vduvar.gamew; fsplx = r1; swi_fastspr_setclipwindow(fsplx, fsply, fsphx, fsphy); if (fsplx >= vduvar.gamex) if (fsphx > fsplx) fspplot(sprites, n, fsplx-r8, fsply-r8); } nodyingbot: writeclip(); } void blokeplot_cen(fastspr_sprite* sprites, char n, int x, int y) { mazescaleplot(sprites, n, (x*vduvar.sprw)/16.0+vduvar.gamex+(vduvar.gamew/2), (y*vduvar.sprh)/16.0+vduvar.gamey+(vduvar.gameh/2)-(vduvar.sprh/2)); } void message_scroll(const char* a) { message(vduvar.gamex+vduvar.gamew+32, vduvar.gamey+vduvar.gameh-8, -3, 0, a); } void message(int x, int y, float xv, float yv, const char* a) { int time = 400; char b[60]; char* q = b; if (x > 1000) { x -= 1000; time = 50; } if (x > 1000) { x -= 1000; time = 0x10000; } //int32_t z[5]={time,x<<8,y<<8,(int)(xv*256),(int)(yv*256)}; // might be non-integers for (const char* p = a; *p != 0; p++, q++) { switch (*p) { case '-': *q = ';'; break; case 164: *q = ':'; break; case '\'': *q = '~'; break; case '.': *q = '{'; break; case ',': *q = '|'; break; case '?': *q = '<'; break; case '!': *q = '}'; break; case '%': *q = '>'; break; case 200: *q = '?'; break; case 215: *q = '@'; break; case '#': *q = 127; break; default: *q = *p; } if (*q >= 96) *q -= 32; if (*q == ' ') *q = 0xff; else if ((*q&~1) != 16) { *q -= 47; if (*q > 55) exit(printf("Bad message character %c (%i)", *p, *p)); } } *q = 0; { textinfo* r11 = texttabofs; int r9; for (r9 = _textno; r9 > 0; r9--) { loopa8: if (r11->count == 0) break; r11++; } if (r9 == 0) return; messageproc: r11->count = time; r11->x = x<<8; r11->y = y<<8; r11->dx = (int)(xv*256); r11->dy = (int)(yv*256); if (strlen(b) > 58) exit(printf("Bad string %s", b)); strncpy(r11->text, b, 60); } } void wipetexttab() { char* r10 = (char*)texttabofs; for (int r3 = _textno*_textlen; r3 > 0; r3 -= 1) loopa5: *(r10++) = 0; } void texthandler(int do_animation) { textinfo* r11 = texttabofs; int r9 = _textno; for (; r9 > 0; r11++, r9--) { if (r11->count == 0) continue; if (do_animation) { int r4 = (frameinc > 4) ? 4 : frameinc; r11->count -= r4; if (r11->count < 0) r11->count = 0; for (; r4 > 0; r4--) { r11->x += r11->dx; r11->y += r11->dy; } } int XxX = r11->x>>8; int YyY = r11->y>>8; for (char* r10 = r11->text; *r10 != 0; r10++) { char r0; loopa7: r0 = *r10; if ((*r10-1) < 48) // only plot known characters (charsadr is [48]) fspplot(charsadr, *r10-1, XxX, YyY); XxX += 14; if (*r10 <= 10) XxX += 2; if (*r10 > 43) XxX -= 6; } } textdone:; //textdelete: r11->count = 0; } void mazeplot(int xpos, int ypos) { if (vduvar.opengl) showgamescreen(); writeclip(); backdrop(xpos, ypos); int r0 = (xpos-((vduvar.xblocks*8)<<8))>>8; int r1 = (ypos-((vduvar.yblocks*8)<<8))>>8; int r8 = ((15-(r0&15)-16)*vduvar.sprw)/16+vduvar.gamex; int r9 = ((15-(r1&15)-8)*vduvar.sprh)/16+vduvar.gamey; int r5 = 0, r7 = (r1>>4); if (r7 < 0) { r5 = -r7; r7 = 0; } // Draw midground elements for (; /*ins2:*/ (r5 < vduvar.yblocks+2) && (r7 < boardadr->height); r5++, r7++) { int r4 = 0, r6 = ((xpos>>8)-(vduvar.xblocks*8))>>4; if (r6 < 0) { r4 = -r6; r6 = 0; } for (; /*ins1:*/ (r4 < vduvar.xblocks+3)&(r6 < boardadr->width); /*skip1:*/ r4++, r6++) { r0 = *(boardadr->contents+boardwidth*r7+r6); draw_block(blockadr, r0, (r4*vduvar.sprw*15.0)/16+vduvar.xblocks/2+1+r8, (r5*vduvar.sprh*15.0)/16+vduvar.yblocks/2+1+r9, 1); } } // Now foreground ones r5 = 0, r7 = (r1>>4); if (r7 < 0) { r5 = -r7; r7 = 0; } for (; /*ins2:*/ (r5 < vduvar.yblocks+2) && (r7 < boardadr->height); r5++, r7++) { l2:; int r4 = 0, r6 = ((xpos>>8)-(vduvar.xblocks*8))>>4; if (r6 < 0) { r4 = -r6; r6 = 0; } for (; /*ins1:*/ (r4 < vduvar.xblocks+3)&(r6 < boardadr->width); /*skip1:*/ r4++, r6++) { l1: r0 = *(boardadr->contents+boardwidth*r7+r6); draw_block(blockadr, r0, r4*vduvar.sprw+r8, r5*vduvar.sprh+r9, 0); } } skip2:; } GLuint batex[1]; void backdrop(int xpos, int ypos) { // swi_fastspr_clearwindow(); static SDL_Rect back_to_blit; static SDL_Rect loc_to_blit; int r3 = ((xpos>>8)-(xpos>>10)+3072-768); // parallax int r2 = (44+48-(r3%48))%48; float float_r3 = (xpos*3.0/1024)+3072-768; float float_r2 = fmod(44+48-fmod(r3,48.0),48.0); int r4 = 0x1f&((ypos>>8)-(ypos>>10)); // parallax float float_r4 = fmod(ypos*3.0/1024,32.0); modpos: back_to_blit.x = ((48-r2)*vduvar.backw)/48; back_to_blit.y = (r4*vduvar.backh)/32; back_to_blit.w = vduvar.backw; back_to_blit.h = vduvar.backh; if (vduvar.opengl) { float btbx = 0.375*(48-float_r2)/48.0; float btby = 0.5*float_r4/32.0; glBindTexture(GL_TEXTURE_2D, *batex); glEnable(GL_TEXTURE_2D); //glColor4f(1,1,1,1); for (loc_to_blit.y = vduvar.gamey; loc_to_blit.y < vduvar.gamey+vduvar.gameh; loc_to_blit.y += vduvar.backh) for (loc_to_blit.x = vduvar.gamex; loc_to_blit.x < vduvar.gamex+vduvar.gamew; loc_to_blit.x += vduvar.backw) { glBegin(GL_TRIANGLE_STRIP); glTexCoord2f(btbx+0.0, btby+0.0); glVertex3f(loc_to_blit.x, loc_to_blit.y, 0.0); glTexCoord2f(btbx+0.375, btby+0.0); glVertex3f(loc_to_blit.x+vduvar.backw, loc_to_blit.y, 0.0); glTexCoord2f(btbx+0.0, btby+0.5); glVertex3f(loc_to_blit.x, loc_to_blit.y+vduvar.backh, 0.0); glTexCoord2f(btbx+0.375, btby+0.5); glVertex3f(loc_to_blit.x+vduvar.backw, loc_to_blit.y+vduvar.backh, 0.0); glEnd(); } } else { for (loc_to_blit.y = vduvar.gamey; loc_to_blit.y < vduvar.gamey+vduvar.gameh; loc_to_blit.y += vduvar.backh) for (loc_to_blit.x = vduvar.gamex; loc_to_blit.x < vduvar.gamex+vduvar.gamew; loc_to_blit.x += vduvar.backw) SDL_BlitSurface(backsprite, &back_to_blit, ArcScreen, &loc_to_blit); } } void plotbonus(char bonusctr, int16_t bonusreplot) { int fsplx, fsply, fsphx, fsphy; fsplx = vduvar.bonusx-16/2; // align to write clip window to FastSpr fsply = vduvar.bonusy-vduvar.bonush; fsphx = vduvar.bonusx+16/2; fsphy = vduvar.bonusy+vduvar.bonush; swi_fastspr_setclipwindow(fsplx, fsply, fsphx, fsphy); swi_fastspr_clearwindow(); int r3 = (((bonusreplot > 7) ? bonusreplot-8 : 0)*vduvar.bonush)/20; fspplot(blockadr, (bonusctr+16 > _bonuslow+12) ? 0 : (bonusctr+16), vduvar.bonusx, vduvar.bonusy+r3); if (bonusctr != 0) fspplot(blockadr, (bonusctr+15 > _bonuslow+12) ? 0 : (bonusctr+15), vduvar.bonusx, vduvar.bonusy-vduvar.bonush+r3); nosecond: if (bonusctr != 12) fspplot(blockadr, (bonusctr+17 > _bonuslow+12) ? 0 : (bonusctr+17), vduvar.bonusx, vduvar.bonusy+vduvar.bonush+r3); nothird: writeclip(); // reset the clip window } GLuint redtex[1], greytex[1]; void showstrength(int r3) { nolager:; if (r3 > _strengthmax) r3 = _strengthmax; if (r3 < 0) r3 = 0; releaseclip(); static SDL_Rect strengthloc, strengthpart; strengthloc.x = vduvar.strengthx; strengthloc.y = vduvar.strengthy; strengthpart.x = 0; strengthpart.y = framectr&0x1f; strengthpart.w = vduvar.strengthw; strengthpart.h = vduvar.strengthh; if (vduvar.opengl) { glBindTexture(GL_TEXTURE_2D, *greytex); glBegin(GL_TRIANGLE_STRIP); glTexCoord2f(0.0, strengthpart.y/64.0); glVertex3f(strengthloc.x, strengthloc.y, 0.0); glTexCoord2f((_strengthmax>>8)/128.0, strengthpart.y/64.0); glVertex3f(strengthloc.x+strengthpart.w, strengthloc.y, 0.0); glTexCoord2f(0.0, (6+strengthpart.y)/64.0); glVertex3f(strengthloc.x, strengthloc.y+strengthpart.h, 0.0); glTexCoord2f((_strengthmax>>8)/128.0, (6+strengthpart.y)/64.0); glVertex3f(strengthloc.x+strengthpart.w, strengthloc.y+strengthpart.h, 0.0); glEnd(); } else { SDL_BlitSurface(greyness, &strengthpart, ArcScreen, &strengthloc); } strengthpart.w = (vduvar.strengthw*r3)/_strengthmax; if (vduvar.opengl) { glBindTexture(GL_TEXTURE_2D, *redtex); glBegin(GL_TRIANGLE_STRIP); glTexCoord2f(0.0, strengthpart.y/64.0); glVertex3f(strengthloc.x, strengthloc.y, 0.0); glTexCoord2f((strengthpart.w*(_strengthmax>>8))/(vduvar.strengthw*128.0), strengthpart.y/64.0); glVertex3f(strengthloc.x+strengthpart.w, strengthloc.y, 0.0); glTexCoord2f(0.0, (6+strengthpart.y)/64.0); glVertex3f(strengthloc.x, strengthloc.y+strengthpart.h, 0.0); glTexCoord2f((strengthpart.w*(_strengthmax>>8))/(vduvar.strengthw*128.0), (6+strengthpart.y)/64.0); glVertex3f(strengthloc.x+strengthpart.w, strengthloc.y+strengthpart.h, 0.0); glEnd(); } else { SDL_BlitSurface(redness, &strengthpart, ArcScreen, &strengthloc); } writeclip(); return; } void scorewipe() { static SDL_Rect scorearea; scorearea.x = vduvar.scorex; scorearea.y = vduvar.scorey-16/2; scorearea.w = 128; scorearea.h = 16; releaseclip(); if (!vduvar.opengl) { SDL_BlitSurface(wipescr, NULL, ArcScreen, &scorearea); } writeclip(); } void scorewiperead() { static SDL_Rect scorearea; scorearea.x = vduvar.scorex; scorearea.y = vduvar.scorey-16/2; scorearea.w = 128; scorearea.h = 16; if (!vduvar.opengl) { SDL_BlitSurface(ArcScreen, &scorearea, wipescr, NULL); } } void showscore(char plscore[8]) { releaseclip(); int i = 0; int x = vduvar.scorex; int y = vduvar.scorey; if (plscore[0] == 0) { x += _charwidth/2; i = 1; if (plscore[1] == 0) { x += _charwidth/2; i = 2; } } score10mil: /*r7=0*/; for (; i < 8; i++) { loop36: if (plscore[i] <= 10) { fspplot(charsadr, plscore[i], x, y); /*r8=1*/; } scoreskip: x += _charwidth; } } void writeclip() { swi_fastspr_setclipwindow(clip.x, clip.y, clip.x+clip.w, clip.y+clip.h); //SDL_SetClipRect(ArcScreen, &clip); } void releaseclip() { if (vduvar.opengl) { glDisable(GL_CLIP_PLANE0); glDisable(GL_CLIP_PLANE1); glDisable(GL_CLIP_PLANE2); glDisable(GL_CLIP_PLANE3); } else SDL_SetClipRect(ArcScreen, NULL); } void clearkeybuf() { do clearkbloop:; while (osbyte_79(0) != -1); do clearkbloop2 :; while (osbyte_81(1) != -1); } void showlives(int lives) { releaseclip(); fspplot(charsadr, lives&7, vduvar.livesx, vduvar.livesy); //switchbank(); writeclip(); } void showgamescreen() { releaseclip(); //SDL_BlitSurface(GameScreen, NULL, ArcScreen, NULL); fspplot(&GameScreen, 0, 0, 0); #if 0 if (!vduvar.opengl) switchbank(); #endif clip.x = vduvar.gamex; clip.y = vduvar.gamey; clip.w = vduvar.gamew; clip.h = vduvar.gameh; writeclip(); scorewiperead(); showlives(); } void showchatscreen() { releaseclip(); //SDL_BlitSurface(ChatScreen, NULL, ArcScreen, NULL); fspplot(&ChatScreen, 0, 0, 0); #if 0 switchbank(); if (vduvar.opengl) fspplot(&ChatScreen, 0, 0, 0); #endif clip.x = 20; clip.y = 20; clip.w = 319 - 20*2; clip.h = 255 - 20*2; writeclip(); } void showchatscores() { releaseclip(); //SDL_BlitSurface(ChatScreen, NULL, ArcScreen, NULL); fspplot(&ChatScreen, 0, 0, 0); writeclip(); } void initialize_chatscreen(char* chatscreenadr) { decomp(&ChatScreen, chatscreenadr); } void initialize_gamescreen(char* gamescreenadr) { decomp(&GameScreen, gamescreenadr); } void init_strengthcol() { Uint32* redpixels; Uint32* greypixels; int redpitch, greypitch; int w = vduvar.strengthw, h = 32+vduvar.strengthh; if (vduvar.opengl) { glEnable(GL_TEXTURE_2D); glGenTextures(1, redtex); glGenTextures(1, greytex); redpixels = (Uint32*)malloc(128*64*sizeof(Uint32)); greypixels = (Uint32*)malloc(128*64*sizeof(Uint32)); redpitch = greypitch = 128; } else { redness = SDL_CreateRGBSurface(SDL_HWSURFACE, w, h, 32, 0xff, 0xff00, 0xff0000, 0); greyness = SDL_CreateRGBSurface(SDL_HWSURFACE, w, h, 32, 0xff, 0xff00, 0xff0000, 0); SDL_LockSurface(redness); SDL_LockSurface(greyness); redpixels = (Uint32*)redness->pixels; greypixels = (Uint32*)greyness->pixels; redpitch = redness->pitch/4; greypitch = greyness->pitch/4; } for (int j = 0; j < 32; j++) for (int i = 0; i < w; i++) { redpixels[j*redpitch+i] = 0xff000000+0x11*(11+(random()%5)); // varying shade of red greypixels[j*greypitch+i] = 0xff000000+0x111111*(3&random()); // varying shade of dark grey } for (int j = 32; j < 32+vduvar.strengthh; j++) for (int i = 0; i < w; i++) { redpixels[j*redpitch+i] = redpixels[(j-32)*redpitch+i]; greypixels[j*greypitch+i] = greypixels[(j-32)*greypitch+i]; } if (vduvar.opengl) { glBindTexture(GL_TEXTURE_2D, *redtex); gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, 128, 64, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, (char*)redpixels); free(redpixels); glBindTexture(GL_TEXTURE_2D, *greytex); gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, 128, 64, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, (char*)greypixels); free(greypixels); } else { SDL_UnlockSurface(greyness); SDL_UnlockSurface(redness); } } int palette[256]; void init_palette() { for (int i = 0; i < 256; i++) palette[i] = 0xff000000 // opaque +((i&0x80) ? 0x880000 : 0)+((i&0x40) ? 0x8800 : 0) +((i&0x20) ? 0x4400 : 0)+((i&0x10) ? 0x88 : 0) +((i&0x08) ? 0x440000 : 0)+((i&0x04) ? 0x44 : 0) +(i&0x03)*0x111111; } void decomp(fastspr_sprite* DecompScreen, char* r11) { Uint32* data; Uint32* r10; Uint32* r9; if (vduvar.opengl) { glEnable(GL_TEXTURE_2D); glGenTextures(1, &DecompScreen->t); glBindTexture(GL_TEXTURE_2D, DecompScreen->t); data = (Uint32*)malloc(512*512*sizeof(Uint32)); r10 = data; r9 = 512*256 + r10; } else { DecompScreen->s = SDL_CreateRGBSurface(SDL_HWSURFACE, 320, 256, 32, 0xff, 0xff00, 0xff0000, 0); SDL_LockSurface(DecompScreen->s); r10 = (Uint32*)DecompScreen->s->pixels; r9 = 0x14000 + r10; } r11 += 68; while (r9 > r10) // > or >=? { loopb4:; char r0 = *(r11++); if (r0&0x80) { sequence:; Uint32 s = palette[0xff&*(r11++)]; for (int r3 = (r0&0x7f)+2; (r9 > r10) && (r3 != 0); r3--) { loopb6: *(r10++) = s; if (vduvar.opengl) if (((r10-data)%512) == 320) r10 += (512-320); } } else pattern: for (int r3 = (r0&0x7f)+1; (r9 > r10) && (r3 != 0); r3--) { loopb5: *(r10++) = palette[0xff&*(r11++)]; if (vduvar.opengl) if (((r10-data)%512) == 320) r10 += (512-320); } decompdone:; } DecompScreen->w = vduvar.width; DecompScreen->h = vduvar.height; DecompScreen->texw = (vduvar.width*8)/5; DecompScreen->texh = vduvar.height*2; if (vduvar.opengl) { DecompScreen->x = -1; DecompScreen->y = -1; gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, 512, 512, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, (char*)data); free(data); } else { DecompScreen->x = 0; DecompScreen->y = 0; SDL_UnlockSurface(DecompScreen->s); } } void vduread(asylum_options options) { int viewsize = 8*options.scale; vduvar.xreso = 320*(options.size+1); vduvar.yreso = 256*(options.size+1); vduvar.width = 320; vduvar.height = 256; vduvar.gamex = 2*8; vduvar.gamey = 8; vduvar.gamew = 2*18*8; vduvar.gameh = 2*12*8; vduvar.backw = (48*8)/viewsize; vduvar.backh = (32*8)/viewsize; vduvar.scorex = 160-(16*7)/2; vduvar.scorey = 220; vduvar.xblocks = (18*viewsize)/8; vduvar.yblocks = (12*viewsize)/8; vduvar.livesx = 44; vduvar.livesy = 234; vduvar.strengthx = 108; vduvar.strengthy = 239; vduvar.strengthw = (_strengthmax>>8); vduvar.strengthh = 6; vduvar.bonusx = 290; vduvar.bonusy = 232; vduvar.bonush = 20; vduvar.sprw = (16*8)/viewsize; vduvar.sprh = (16*8)/viewsize; SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 5 ); SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 5 ); SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 5 ); SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 4 ); SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); ArcScreen = SDL_SetVideoMode( vduvar.xreso, vduvar.yreso, 24 /*bpp*/, (options.opengl ? SDL_OPENGL : 0) | (options.fullscreen ? SDL_FULLSCREEN : 0)); if (ArcScreen == NULL) { printf("Failed to set video mode: %s\n", SDL_GetError()); abort_game(); } vduvar.opengl = ((ArcScreen->flags & SDL_OPENGL) != 0); wipescr = SDL_CreateRGBSurface(SDL_HWSURFACE, 128, 16, 32, 0xff, 0xff00, 0xff0000, 0); // backsprite contains four copies of the backdrop tile backsprite = SDL_CreateRGBSurface(SDL_HWSURFACE, 2*48, 2*32, 32, 0xff, 0xff00, 0xff0000, 0); /* initialise screenstart(149), modesize(7), hbytes(6) */ init_strengthcol(); SDL_ShowCursor(SDL_DISABLE); if (vduvar.opengl) { glViewport(0,0,vduvar.xreso,vduvar.yreso); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(vduvar.width/2,vduvar.height/2,-64, vduvar.width/2,vduvar.height/2,0, 0,1,0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(vduvar.width/4,-vduvar.width/4,vduvar.height/4,-vduvar.height/4,32,256); } } void backprep(char* backadr) { if (vduvar.opengl) { Uint32 ba[64*128]; for (int j = 63; j >= 0; j--) for (int i = 127/*95*/; i >= 0; i--) ba[j*128+i] = palette[backadr[(j%32)*48+(i%48)]]; glEnable(GL_TEXTURE_2D); glGenTextures(1, batex); glBindTexture(GL_TEXTURE_2D, *batex); gluBuild2DMipmaps(GL_TEXTURE_2D, 4, 2*64, 2*32, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, (char*)ba); } else { SDL_LockSurface(backsprite); Uint32* ba = (Uint32*)backsprite->pixels; for (int j = 63; j >= 0; j--) for (int i = 95; i >= 0; i--) ba[j*96+i] = palette[backadr[(j%32)*48+(i%48)]]; SDL_UnlockSurface(backsprite); } } void startmessage() { message(1000+vduvar.gamex+vduvar.gamew/2-32, vduvar.gamey+(vduvar.gameh*2)/3, 0, 0, "Let's Go!"); } void deathmessage() { message(vduvar.gamex+vduvar.gamew/2-88, vduvar.gamey+vduvar.gameh+8, 0, -1, " Snuffed It! "); } void endgamemessage() { message(vduvar.gamex+vduvar.gamew/2-88, vduvar.gamey+vduvar.gameh+56, 0, -1, "- GAME OVER -"); } void swi_blitz_wait(int d) { SDL_Delay(d*10); } void swi_fastspr_clearwindow() { if (vduvar.opengl) { glDisable(GL_TEXTURE_2D); glDisable(GL_BLEND); glColor4f(0,0,0,1); glRectf(0, 0, vduvar.width, vduvar.height); } else SDL_FillRect(ArcScreen, NULL, 0); } void swi_fastspr_setclipwindow(int x1, int y1, int x2, int y2) { static SDL_Rect clip; clip.x = x1; clip.y = y1; clip.w = x2-x1; clip.h = y2-y1; if (vduvar.opengl) { double clipplane0[4] = { 1.0, 0, 0, 0}; double clipplane1[4] = {-1.0, 0, 0, 0}; double clipplane2[4] = { 0, 1.0, 0, 0}; double clipplane3[4] = { 0,-1.0, 0, 0}; clipplane0[3] =-x1; clipplane1[3] = x2; clipplane2[3] =-y1; clipplane3[3] = y2; glClipPlane(GL_CLIP_PLANE0, clipplane0); glClipPlane(GL_CLIP_PLANE1, clipplane1); glClipPlane(GL_CLIP_PLANE2, clipplane2); glClipPlane(GL_CLIP_PLANE3, clipplane3); glEnable(GL_CLIP_PLANE0); glEnable(GL_CLIP_PLANE1); glEnable(GL_CLIP_PLANE2); glEnable(GL_CLIP_PLANE3); } else SDL_SetClipRect(ArcScreen, &clip); } void set_player_clip() { int fsphy = vduvar.gamey+(vduvar.gameh/2)-(vduvar.sprh/2)+24; swi_fastspr_setclipwindow(vduvar.gamex, vduvar.gamey, vduvar.gamex+vduvar.gamew, fsphy); } /*uint32_t maze_neighbours[256] = { 0, 0, 0, 0, 0x506, 0x40007, 0x4000700, 0x5060000, 0, 0, 0, 0, 0, 0, 0, 0, // teleporters 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // collectables 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // large collectables 0, 0, 0, 0, 0, 0, 0x36363636, 0x37373737, // gas 0x38383838, 0x39393939, 0x3a3a3a3a, 0x3b3b3b3b, 0x3c3c3c3c, 0x3d3d3d3d, 0x3e3e3e3e, 0x3f3f3f3f, // electricity 0, 0, 0, 0, 0x4500, 0x440000, 0, 0, 0x494a, 0x48004b, 0x48004b00, 0x494a0000, 0, 0, 0, 0, // bombs 0x8f000000, 0x8e, 0x8d0000, 0x8c00, 0x8f000000, 0x8e, 0x8d0000, 0x8c00, 0x8f000000, 0x8e, 0x8d0000, 0x8c00, 0, 0, 0, 0, // shooters 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // weapons 0x7100, 0x700000, 0x72007372, 0x73720073, 0x75, 0x74000000, 0x77, 0x76000000, // pillars 0x797a, 0x78007b, 0x78007b7c, 0x797a007d, 0x7a007d00, 0x7b7c0000, 0x7f00, 0x7e0000, // big object 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };*/ int initialize_sprites(char* start, fastspr_sprite* sprites, int max_sprites, char* end) { uint32_t* s = (uint32_t*)start; if (read_littleendian(s) != 0x31505346) return 0; // "FSP1" int num_sprites = read_littleendian(s+3); if (num_sprites > max_sprites) num_sprites = max_sprites; for (int i = 0; i < num_sprites; i++) { if (read_littleendian(s+4+i) == 0) { sprites[i].s = NULL; continue; } uint32_t* p = s+(read_littleendian(s+4+i)>>2); uint32_t* r = s; if (i == num_sprites-1) r = (uint32_t*)end; else for (int j = 0; (r == s) && (i+j < num_sprites-1); j++) r = s+(read_littleendian(s+5+i+j)>>2); if (r == s) r = (uint32_t*)end; uint8_t* pp = (uint8_t*)p; int wid = pp[0], hei = pp[1], xcen = pp[2], ycen = pp[3]; sprites[i].x = xcen; sprites[i].y = ycen; uint32_t* data; if (vduvar.opengl) { sprites[i].w = wid; sprites[i].h = hei; sprites[i].texw = 256; sprites[i].texh = 256; glGenTextures(1, &sprites[i].t); glBindTexture(GL_TEXTURE_2D, sprites[i].t); data = (uint32_t*)malloc(256*256*sizeof(uint32_t)); for (int z = 0; z < 256*256; z++) data[z] = 0x0; } else { sprites[i].s = SDL_CreateRGBSurface(SDL_HWSURFACE|SDL_SRCALPHA, wid, hei, 32, 0xff, 0xff00, 0xff0000, 0xff000000); SDL_LockSurface(sprites[i].s); data = (uint32_t*)sprites[i].s->pixels; for (int z = 0; z < wid*hei; z++) data[z] = 0x0; } for (uint32_t* q = p+2+hei; q < r; q++) { int x = ((0x0fffff00&read_littleendian(q))>>8)%320; int y = ((0x0fffff00&read_littleendian(q))>>8)/320; if ((y*wid+x < 0) || (y*wid+x >= wid*hei)) printf("%i: x=%i y=%i wid=%i hei=%i: bad idea\n", i, x, y, wid, hei); else if (vduvar.opengl) data[(y+1)*256/*wid*/+(x+1)] = palette[0xff&read_littleendian(q)]; else data[y*wid+x] = palette[0xff&read_littleendian(q)]; } if (vduvar.opengl) { //uint32_t neighbours = maze_neighbours[i]; for (int y=1; y<=hei; y++) { data[y*256] = data[y*256+1]&0xffffff; data[y*256+wid+1] = data[y*256+wid]&0xffffff; /*data[y*256] = alldata[(neighbours&0xff0000)>>16][y*256+wid]; data[y*256+wid+1] = alldata[(neighbours&0xff00)>>8][y*256+1];*/ } for (int x=0; x<=wid+1; x++) { data[x] = data[x+256]&0xffffff; data[x+hei*256+256] = data[x+hei*256]&0xffffff; /*data[x] = alldata[(neighbours&0xff000000)>>24][x+hei*256]; data[x+hei*256+256] = alldata[(neighbours&0xff)][x+256];*/ } //Without this line I don't get textures unless I use gluBuild2DMipmaps glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, (char*)data); free(data); } else SDL_UnlockSurface(sprites[i].s); } return num_sprites; } asylum-0.3.2/asylum.h0000644000175000017500000004041411235410523013160 0ustar hughhugh/* asylum.h */ /* Copyright Hugh Robinson 2006-2008. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include #include #include #include #include #define PROJ_TTL (1<<16) #define PROJ_ROCKET (1<<15) #define PROJ_FIVEWAY (1<<14) #define PROJ_SLOWSPLIT (1<<13) #define PROJ_WEIRDSPLIT (1<<12) #define ROCK_DIVIDE (1<<14) #define ROCK_REDIVIDE (1<<13) #define ROCK_BURST (1<<12) #define PROJ_EXPLO (1<<11) #define PROJ_SPLIT (1<<10) #define PROJ_ATOM (1<<9) #define BULL_TTL (1<<16) #define BULL_EXPLO (1<<15) #define BULL_ACCEL (1<<14) #define BULL_HOME (1<<13) #define BULL_SLOWHOME (1<<12) #define BULL_SPLIT (1<<10) #define xlowlim 0 #define ylowlim (15<<8) #define _speedlim (15<<8) #define _Playerchannel 0 #define _Explochannel 3 #define _Firechannel 1 #define _Sparechannel 2 #define _SampJump 1 #define _SampBonus 2 #define _SampExplo 3 #define _SampAtomExplo 4 #define _SampCannon 5 #define _SampRocket 6 #define _SampHiss 7 #define _SampStunned 8 #define _Sampsmallzap 9 #define _Sampbigzap 10 #define _Samporgan 16 #define _Samprave 19 // alien object types #define _Explo (1) #define _Ember (2) #define _Platbase (3) #define _Riseplat (_Platbase) #define _Exploplat (_Platbase+1) #define _Updownplat (_Platbase+2) #define _Downplat (_Platbase+3) #define _Fastplat (_Platbase+4) #define _Fastplatstop (_Platbase+5) #define _Fastplatexplo (_Platbase+6) #define _Fastplatfire (_Platbase+7) #define _Fallplat (_Platbase+8) #define _Scoreobj (12) #define _Dyingbonus (13) #define _Flyingbonus (14) #define _Booby (15) #define _Decoration (16) #define _Extender (17) #define _Alien1 (18) const int fullpitch = 0x2155; typedef struct fastspr_sprite { int x; int y; int w; int h; GLuint t; int texw; int texh; SDL_Surface* s; } fastspr_sprite; typedef struct board { int first_int; int width; int height; int fourth; int fifth; int sixth; int seventh; int eighth; char contents[65536]; } board; typedef struct alent { int type; int x; int y; int dx; int dy; int r5; int r6; // transient flags for colcheck char colchecktype; char downpress; char falling; char pluphit; char lefthit; char righthit; char uphit; char downhit; } alent; typedef struct colchent { alent* r0; int xmin; int ymin; int xmax; int ymax; } colchent; typedef struct bulcolchent { alent* r0; int xmin; int ymin; int xmax; int ymax; } bulcolchent; typedef struct projent { int type; int x; int y; int dx; int dy; int flags; } projent; typedef struct bulent { int type; int x; int y; int dx; int dy; int flags; } bulent; typedef struct asylum_options { char soundtype, soundquality, explospeed, gearchange; char fullscreen, opengl, size, scale, mentalzone; int leftkey, rightkey, upkey, downkey, firekey; char soundvol, musicvol, joyno; char idpermit; char initials[3]; } asylum_options; typedef struct key_state { char uppress, downpress, leftpress, rightpress, fire, keypressed; } key_state; void fspplot(fastspr_sprite*, char, int, int); void mazescaleplot(fastspr_sprite*, char, float, float); void relplot(fastspr_sprite*, char, int, int); void cenplot(fastspr_sprite*, char, int, int); void blokeplot(fastspr_sprite*, char, int, int); void blokeplot_cen(fastspr_sprite*, char, int, int); void plotdying(fastspr_sprite*, char, int, int, int); void cenplotdying(fastspr_sprite*, char, int, int, int); void init(); int abort_game(); int game(); void switchcolch(); void switchbank(); void showtext(); void texthandler(int do_animation); void deathmessage(); void endgamemessage(); void alfire(); int foundtarget(int x, int y, int dx, int dy); void bullets(); // the bullet handler (aliens fire these) int makebul(int x, int y, int dx, int dy, int type, int flags); void project(); // the projectile handler void atomrocket(projent* r11, char* r0); void projsplit(projent* r11); void rocketsplit(projent* r11); void rocketpair(projent* r11); int makeproj(int x, int y, int dx, int dy, int type, int flags); int foundmakeproj(projent* r10, int r8, int x, int y, int dx, int dy, int type, int flags); int softmakeobj(int r0, int r1, int r2, int r3, int r4, int r5, int r6); int makeobj(int r0, int r1, int r2, int r3, int r4, int r5, int r6); int foundmakeal(alent* r10, int newalctr, int r0, int r1, int r2, int r3, int r4, int r5, int r6); void seestars(); void seeifdead(); void plotscore(); void showscore(char plscore[8]); void scoreadd(); void showstrength(int r3); void update_show_strength(); void fuelairproc(); int block_gas(char b); int block_weapon(char b); void explogoquiet(int r1, int r2, int r3, int r4, int r5, int r6, alent* r10); void explogomaybe(int r1, int r2, int r3, int r4, int r5, int r6, alent* r10); void explogo(int r1, int r2, int r3, int r4, int r5, int r6, alent* r10); void explocreate(int r1, int r2, int r3, int r4, int r5, int r6, alent* r10); void explocreatequiet(int r1, int r2, int r3, int r4, int r5, int r6, alent* r10); void embercreate(int r1, int r2, int r6); void atomexplogo(int r1, int r2, int r3, int r4, int r5, int r6, alent* r10); void screenwakeup(int xpos, int ypos); void linecheck(char* r7, char* r8, char* r9); void wakeupal(int xpos, int ypos); void boxcheck(int r4, int r5, char** r7, char* r8, char* r9); void dowakeup(char* r7); void saveal(); void restoreal(); void save_player_state(uint8_t*); void restore_player_state(uint8_t*); void save_player(uint8_t*); int restore_player(uint8_t*); void save_alents(uint8_t*); void restore_alents(uint8_t*); void moval(); void procal(alent* r11); void alienwander(alent* r11, char* r5); void almightjumpins(alent* r11); void jumpyalwander(alent* r11); void alienwanderfly(alent* r11); void alienwandernojump(alent* r11); void alienstopped(alent* r11); void alienstoppedfly(alent* r11); void almightjump(alent* r11); void alpossjump(alent* r11); void almightwelljump(alent* r11); void alientestplat(alent* r11, char* r5); void decoration(alent* r11); void extender(alent* r11); void alien1(alent* r11); void alien2(alent* r11); void alien3(alent* r11); void alien4(alent* r11); void alien5(alent* r11); void alien6(alent* r11); int alspinfire(alent* r11); int alspinpowerfire(alent* r11, int r7); void alien7(alent* r11); void alien8(alent* r11); void alien9(alent* r11); void alien10(alent* r11); void alien11(alent* r11); void alien12(alent* r11); void alien13(alent* r11); void alien14(alent* r11); void hamsterspecial(alent* r11); void alkill(alent* r11); void alshoot(alent* r11); void alshootfast(alent* r11); void alshootnutter(alent* r11); void alshootnutterplus(alent* r11); void alshootnuttermental(alent* r11); void alshootmental(alent* r11); void alsleep(int s, alent* r11); void explo(alent* r11); void exploins(alent* r11); void booby(alent* r11); void ember(alent* r11); void flyingbonus(alent* r11); void dyingbonus(alent* r11); void scoreobj(alent* r11); void plat1(alent* r11); void plat2(alent* r11); void plat3(alent* r11); void plat4(alent* r11); void plat5(alent* r11); void platins(alent* r11, char r9); void colchadd(alent* r11); void bulcolchadd(alent* r11); void bulcolchaddshort(alent* r11); void platland(alent* r11, char r9); int embertrybomb(char* r0, alent* r11); int embertrybombtarget(char* r0, alent* r11); int embertrybooby(char* r0, alent* r11); int embertrygas(char* r0, alent* r11); void emberbooby(char* r0); void emberbomb(char* r0, alent* r11); void normbomb(char* r0, alent* r11); void normbombsurvive(char* r0); void fuelbomb(char* r0); int plcolcheck(int x, int y, int dx, int dy); void settestal(); void dvcheck(alent* r11); void playerplot(int whendead); void plotmpmg(); void plotmpmgblam(); void plotrocket(); void plotrocketblam(); void plotbonus(char bonusctr, int16_t bonusreplot); void bonusplot(); void bonusbonus(); void bonusreset(); void foundmarker(char* r11); void foundresetmarker(char* r11); void normreset(); void zonecheatread(int* zone); void cheatread(); void keyread(key_state* ks); void plmove(); void windcheck(); int seeifwind(char* r1, int* dx, int* dy, int retval); void plattoobjins(char* r0, int r4); void plplattoobj(char* r0); void crumblecheck(char* r1); void telep(); char* normtelep(char* start, int dir, char find); void playerfire(); void goblam(); void rocketblam(); void dofire(); void blamfire(); void firerocket(); void launchrocket(); void getarms(); void getrocket(); void getmpmg(); alent* bulcolcheck(int x, int y); int projhital(alent* al, int loss); void colcheck(alent* al, int colchecktype, int platypos); void rise(alent* r6, alent* al, int colchecktype, int platypos); void platonhead(alent* r6, alent* al, int colchecktype); void platdestroy(alent* r6); void platfire(alent* r6); void platsurefire(alent* r6); int headonroof(alent* r6, alent* al, int colchecktype, int platypos); int alheadcheck(); char* albcheck(alent* r11); void bcheck(); void noleft(alent* r11); void noright(alent* r11); int fallinggap(alent* re); void nodown(alent* r11); void nodownifplat(alent* r11); void noup(alent* r11); char* translate(int r0, int r1); char* fntranslate(int r0, int r1); void backtranslate(char* r, int* x, int* y); void bonuscheck(); void weaponcheck(char* r5); int plbombcheck(char* r5); int bombcheck(char* r5); int atombomb(char* r5); void procatom(char* r5); int fuelairbomb(char* r5); int normalbomb(char* r5); int boobybomb(char* r5); void bonusobjgot(alent* r11); void bonuslim(char* r5); void deadbonuslim(char* r5); void bonusgot(char* r5); void bonuscommon(int bonus, int x, int y); void sortbonus(char r0); void bonusnumb(int r9); char* bonusfind(); void bonus1(); void megabonus(char* r5); void addtoscore(int sc); void pllosestrength(int str); void plsetneuronzone(int zone); void makescoreobj(int x, int y, int type); void electrocute(char* r5); void destroy(char* r5); void shoottarget(char* r5); void elecdestroy(char* r5); void eleccheck(char* r10); void elecdelete(int r4, char* r10); void deletetwin(char* r5); void deletepoint(); void mazeplot(int xpos, int ypos); void draw_block(fastspr_sprite* blockadr, int block, float x, float y, int layer); void backdrop(int xpos, int ypos); int escapehandler(); void loselife(); void rejoin(); void adjustopt(); void copyscreen(); void set_player_clip(); void writeclip(); void releaseclip(); void restartplayer(); void reinitplayer(); void redraw_bonus(); void completedzone(); void findplayer(int *initplx, int *initply); void startplayer(); void showgamescreen(); void showlives(); void showlives(int lives); void showchatscreen(); void showchatscores(); void clearkeybuf(); void setdefaults(); int options_menu(int gameon); void dosaveconf(); void getzone(); void choosecontrol(); void choosekeys(); void choosestick(); void tunegame(); void tunesound(); void soundfillin(); void tunevolume(); void maketestsound(int r1); void tunespeed(); int selectkey(int x, int y, int xv, int yv, const char* a); int readopt(int maxopt); int prelude(); void checkifarm3(); int checkifextend(); void permitid(); void dropprivs(); void loadconfig(); void saveconfig(); void loadgame(); void savegame(); int getfiles(); void getvitalfiles(); void getmusicfiles(); void getgamefiles(); void getlevelsprites(); int getlevelfiles(); int retrievebackdrop(); int getneuronfiles(int plzone); int loadvitalfile(char** spaceptr,char* r1, char* path); int loadhammered_game(char** spaceptr, char* r1, char* path); int loadhammered_level(char** spaceptr, char* r1, char* path); int loadhammered(char** spaceptr, char* r1, char* path); int loadfile(char** r1, char* path, char* name); void find_resources(); void open_scores(); void savescores(char* highscorearea, int mentalzone); void loadscores(char* highscorearea, int mentalzone); void setdefaultscores(); void fatalfile(); void showloading(); void filenotthere(); void filesyserror(); void badload(); int badlevelload(); void nomemory(); int filelength(char* name, char* path); void showerror(); void showerrorok(); int errorwait(); void errorhandler(); void exithandler(); void loadzone(); void change_zone(int zone); void enterneuron(int r1); void exitneuron(int r1); int showhighscore(); void updatehst(); int comparescore(char* r10); void showhst(); void setup(); void wipesoundtab(); void wipetexttab(); void initprojtab(); void initbultab(); void initweapon(); void prepfueltab(); void scorezero(); void wipealtab(); void boardreg(); void backprep(char* backadr); void prepstrength(); int gotallneurons(); int player_dead(); void screensave(); void getvars(); void init_palette(); void vduread(asylum_options); int main(int argc, char** argv); void load_voices(); void init_sounds(); void init_keyboard(); void message_scroll(const char* a); void message(int x, int y, float xv, float yv, const char* a); void startmessage(); void causeexplo(alent* r11); void causeexplo(projent* r11); void causeexplonopyro(alent* r11); void causeexplonopyro(projent* r11); void scorewipe(); void scorewiperead(); void explogonopyro(int r1, int r2, int r3, int r4, int r5, int r6, alent* r10); void explogonopyroquiet(int r1, int r2, int r3, int r4, int r5, int r6, alent* r10); void plattoexplo(alent* r11); void deleteobj(alent* r11); void blowup(alent* r11); void plotarms(); void plattoobj(char* r0); //SDL_Surface* decomp(char* r11); void decomp(fastspr_sprite* DecompScreen, char* r11); void soundupdate(); void losehandlers(); void initrockettab(); void initialize_music(int a); void swi_bodgemusic_start(int a, int b); void swi_bodgemusic_stop(); void swi_bodgemusic_volume(int v); void swi_bodgemusic_load(int a, char* b); void swi_sound_qtempo(int t); void swi_sound_control(int c, int a, int p, int d); int swi_sound_speaker(int s); void swi_stasis_link(int a, int b); void swi_stasis_control(int a, int b); void swi_stasis_volslide(int a, int b, int c); void swi_removecursors(); int osbyte_79(int c); int osbyte_79_unicode(int c); int osbyte_7a(); void osbyte_7c(); int osbyte_81(int c); char swi_oscrc(int w, char* start, char* end, int bytes); FILE* find_game(int op); FILE* find_config(int op); void swi_osgbpb(int n, FILE* f, char* start, char* end, int b); int swi_osfile(int op, const char* name, char* start, char* end); int swi_joystick_read(int a, int* x, int* y); void swi_blitz_wait(int d); void swi_blitz_screenflush(); int swi_blitz_hammerop(int op, char* name, char* path, char* space); void swi_fastspr_clearwindow(); void swi_fastspr_setclipwindow(int x1, int y1, int x2, int y2); int swi_readescapestate(); int readmousestate(); int swi_joystick_read(int a, int* x, int* y); void initialize_chatscreen(char* data); void initialize_gamescreen(char* data); int initialize_sprites(char* start, fastspr_sprite* sprites, int max_sprites, char* end); void dumpmusic(int argc, char** argv); void update_keyboard(); void load_voice(int v, const char* filename); Mix_Chunk* make_sound(char samp, int initpitch, int volslide, int pitchslide, char frames); void soundclaim(int r0, char r1, char r2, int r3, int r4, int r5, char r6, int r7, Mix_Chunk* static_chunk); void bidforsound(int r0, char r1, char r2, int r3, int r4, int r5, char r6, int r7, Mix_Chunk* chunk); void bidforsoundforce(int r0, char r1, char r2, int r3, int r4, int r5, char r6, int r7, Mix_Chunk* chunk); void soundclaimmaybe(int r0, char r1, char r2, int r3, int r4, int r5, char r6, int r7, Mix_Chunk* chunk); void soundclaimexplo(int r0, char r1, char r2, int r3, int r4, int r5, char r6, int r7, Mix_Chunk* chunk); void init_mulaw(); void init_audio(); uint32_t read_littleendian(uint8_t* word); uint32_t read_littleendian(uint32_t* word); void write_littleendian(uint8_t* bytes, uint32_t word); void init_projsplittab(); void init_rockettab(); void init_rocketbursttab(); void init_alspintab(); void init_splittab(); void init_chunk_bullet(); void init_chunk_maze(); void init_chunk_alien(); void init_chunk_player(); int need_redraw(); asylum-0.3.2/asylum_os.h0000644000175000017500000000016711040506032013655 0ustar hughhugh#if defined(__HAIKU__) || defined(_WIN32) #define HAVE_GET_EXE_PATH char *get_exe_path(char *buf, int bufsize); #endif asylum-0.3.2/COPYING0000644000175000017500000010451310644556631012547 0ustar hughhugh GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . asylum-0.3.2/Instruct0000644000175000017500000000341610644556631013252 0ustar hughhughAsylum ====== Young Sigmund has a few problems. To help him resolve his mental instability you must enter the surreal world of his inner mind and shut down the malfunctioning brain cells which are causing him these problems. Playing ======= Well, you don't really need any instructions to play the game. Just remember, the object is to find things that look like brain cells and shut them down! Good luck! Zones ===== There are three zones for you to complete, the Ego, Psyche and Id. You must complete the Ego before you can tackle the Id. Try the Ego first. Controls ======== You can use Acorn standard joysticks - if you have other joystick which don't work with the game you should contact the supplier to see if they can help. With a joystick, you can choose one of the mouse buttons as the jump key using the Define Keys options. The Options =========== There are lots of options to select when the game starts up. Most are self explanatory. Here are a few which may not be obvious. * Speed Tweaks - There are a lot of different Acorn machines available, which vary in their computing power. The game will look at the machine when you first play it and select the ideal combination. You may change these if you wish. Ticked options require more computing power. * Normal/High Quality Sound - High quality sound takes more computing power. This New Version ================ Version 2.00 of Asylum has a few new features. The game is now compressed using a specially developed technique. The game is RISC PC compatible, and can now run in mode 49 for use with VGA monitors. If for any reason you don't want to use mode 49 if it is available, press F12 and type: Set AsylumMode 13 and press return twice. To return to using mode 49, type Set AsylumMode 49 in the same way. asylum-0.3.2/Makefile0000644000175000017500000000546411147622313013147 0ustar hughhughHOST=generic #HOST=mingw #HOST=haiku CC=g++ RM=rm CFLAGS= -O3 COPTS= $(CFLAGS) -funsigned-char \ -DRESOURCEPATH=\"$(INSTALLRESOURCEPATH)\" \ -DSCOREPATH=\"$(INSTALLHISCORES)\" LIBS= -lm -lSDL -lSDL_mixer -lGL -lGLU SRCS= alien.c asylum.c bullet.c file.c keyboard.c maze.c menus.c player.c projectile.c sound.c vdu.c RESOURCES=data/Resources data/Ego data/Psyche data/Id data/Voices INSTALLGROUP=games CHGRP=chgrp CHMOD=chmod # For a non-root install, try something like this: # #INSTALLBIN=/home/blotwell/bin/asylum #INSTALLRESOURCEPATH=/home/blotwell/lib/asylum #INSTALLHISCORES=/home/blotwell/.asylum-hiscores # #INSTALLGROUP=foo #CHGRP=echo #CHMOD=echo ifeq ($(HOST),haiku) CC=i586-pc-haiku-gcc COPTS+=$(CPPFLAGS) -D_NO_SOUND INSTALLBIN=/boot/common/games/asylum/asylum INSTALLRESOURCEPATH=/boot/common/games/asylum/data INSTALLHISCORES=/boot/common/games/asylum/hiscores OS_SOURCE=asylum_haiku.c LIBS=-lSDL_mixer -lSDL -lbe -lroot -ldevice -lgame -lGL -ltextencoding -lmedia endif ifeq ($(HOST),mingw) INSTALLBIN="c:/program files/asylum/asylum.exe" INSTALLRESOURCEPATH="c:/program files/asylum/data" INSTALLHISCORES="c:/program files/asylum/hiscores" OS_SOURCE=asylum_win.c RM=del EXE=.exe LIBS=-lm -lmingw32 -lSDL_mixer -lSDLmain -lSDL -mwindows endif ifeq ($(HOST),generic) INSTALLBIN=/usr/games/asylum INSTALLRESOURCEPATH=/usr/share/games/asylum INSTALLHISCORES=/var/games/asylum endif default: build ifneq ($(HOST),mingw) $(INSTALLBIN): asylum$(EXE) Makefile cp asylum$(EXE) $(INSTALLBIN) $(CHGRP) $(INSTALLGROUP) $(INSTALLBIN) $(CHMOD) g+s $(INSTALLBIN) $(CHMOD) a+x $(INSTALLBIN) install-resources: $(RESOURCES) Makefile mkdir -p $(INSTALLRESOURCEPATH) cp -r $(RESOURCES) $(INSTALLRESOURCEPATH)/ $(CHGRP) -R $(INSTALLGROUP) $(INSTALLRESOURCEPATH)/ $(CHMOD) -R a+rX $(INSTALLRESOURCEPATH)/ install-hiscores: Makefile mkdir -p $(INSTALLHISCORES) touch $(INSTALLHISCORES)/EgoHighScores touch $(INSTALLHISCORES)/PsycheHighScores touch $(INSTALLHISCORES)/IdHighScores touch $(INSTALLHISCORES)/ExtendedHighScores $(CHGRP) -R $(INSTALLGROUP) $(INSTALLHISCORES)/* $(CHMOD) -R 660 $(INSTALLHISCORES)/* install-binary: $(INSTALLBIN) install: install-resources install-hiscores install-binary uninstall: rm -rf $(INSTALLBINARY) $(INSTALLRESOURCEPATH) $(INSTALLHISCORES) endif oggs: bash -c 'pushd data; for i in */Music?; do pushd ..; ./asylum --dumpmusic $$i `if (echo \$$i|grep Resources.Music2>/dev/null); then echo -n --slower; fi`; \ popd;\ tail -c +33 $$i.au| \ oggenc - --raw --raw-endianness=1 --raw-rate=22050 --artist="Andy Southgate" \ --album="Background music for Asylum computer game" \ >$$i.ogg;\ rm $$i.au;\ done; popd' build: asylum$(EXE) asylum$(EXE): $(SRCS) $(OS_SOURCE) asylum.h Makefile $(CC) $(COPTS) $(LDFLAGS) -o asylum$(EXE) $(SRCS) $(OS_SOURCE) $(LIBS) clean: $(RM) asylum$(EXE) asylum-0.3.2/README0000644000175000017500000000315210663730103012356 0ustar hughhughSDL Asylum ========== Young Sigmund has a few problems. To help him resolve his mental instability you must enter the surreal world of his inner mind and shut down the malfunctioning brain cells. SDL Asylum is a C port of the computer game Asylum, which was written by Andy Southgate in 1994 for the Acorn Archimedes and is now public domain. It has been tested on Linux and Cygwin, but it should be possible to run it on other platforms which support the SDL graphics library. Installing and running ====================== make sudo make install # optional asylum You'll need SDL and SDL_mixer. If you don't have (or don't want to be) root, you can invoke the game as "./asylum" from this directory. Instructions ============ The game revolves around shooting anything which moves, collecting anything which doesn't move, and, most importantly, finding your way to each of the eight pulsating neurons scattered throughout the immense map. Use 'Z', 'X', ';' and '.' to move and 'Enter' to fire, or remap the keys to something you like better. The one game feature which does merit explicit instruction is teleporting. In the first level ("Ego") the teleporters look like candelabra. To use a teleporter, stand in its centre and press "down" (that's '.' with the default key settings.) See the file 'Instruct' for the instructions included with the original game. Licensing ========= SDL Asylum is distributed under GPL version 3. The original game music and graphics are Andy Southgate 1993, and have been placed in the public domain by Andy Southgate. Web site ======== http://sdl-asylum.sourceforge.net/ asylum-0.3.2/asylum0000755000175000017500000052577311242122054012752 0ustar hughhughELF4MA09O_R81(W?U2-QYX$D Fc!G=<*N'#VIZ/ ]3%^ )&bB6H+` ;5\"[  ` []bBE|KzqX9yIkKyto=X.<D  Qt^Lk ` b5rYF {h6yJ4R#od d  \$_`KF  ' V^AlibSDL-1.2.so.0__gmon_start___Jv_RegisterClassesSDL_UnlockSurface_initSDL_EnableUNICODESDL_GetErrorSDL_UpperBlitSDL_FlipSDL_WM_SetCaptionSDL_RWFromFileSDL_FillRectSDL_GL_SetAttributeSDL_PollEventSDL_CreateRGBSurfaceSDL_InitSDL_ShowCursorSDL_DelaySDL_SetVideoModeSDL_QuitSDL_GL_SwapBuffersSDL_LockSurfaceSDL_SetClipRect_finilibSDL_mixer-1.2.so.0Mix_HaltMusicMix_HaltChannelMix_VolumeMix_FreeMusicMix_LoadMUSMix_GetChunkMix_PlayMusicMix_OpenAudioMix_SetPanningMix_VolumeMusicvoiceMix_HookMusicMix_PlayingMix_PlayChannelTimedlibGL.so.1glTexImage2DglGenTexturesglClipPlaneglVertex3fglDisableglMatrixModeglViewportglBeginglTexParameteriglTexCoord2fglRectfglLoadIdentityglBindTextureglEnableglFrustumglColor4fglBlendFuncglEndlibGLU.so.1gluLookAtgluBuild2DMipmapslibstdc++.so.6__gxx_personality_v0libm.so.6sinpowsincossinffmodlibgcc_s.so.1libc.so.6_IO_stdin_usedfflushstrcpyexitfopenstrncmpsetregidftellstrncpysetreuidfeoffgetcfseekchdirfputcfputsfclosemallocstrcatgetgidgetenvstderrgetuidfscanfstrncatfwritefreadfprintf_IO_getc__libc_start_mainrandomfree_edata__bss_start_endCXXABI_1.3GLIBC_2.1GLIBC_2.02 ӯkV0ii ii ii ii U a,048<@DHL P T X \ `dhlptx| !"#$%&ı'ȱ(̱)б*Ա+ر,ܱ-./012345678 :;<=> ?$@(A,B0C4D8E<F@GDHHILJPKTcXL\M`NdOhPlQpRtSxT|UVWXYZUS[t^IX[5$%(%,h%0h%4h%8h%<h %@h(%Dh0%Hh8p%Lh@`%PhHP%ThP@%XhX0%\h` %`hh%dhp%hhx%lh%ph%th%xh%|h%h%h%hp%h`%hP%h@%h0%h %h%h%h%h%h%h%h%h %h(%ıh0%ȱh8p%̱h@`%бhHP%ԱhP@%رhX0%ܱh` %hh%hp%hx%h%h%h%h%h%h%h%hp% h`%hP%h@%h0%h % h%$h%(h%,h%0h%4h%8h%<h %@h(%Dh0%Hh8p%Lh@`%PhHP%ThP@%XhX0%\h` %`hh%dhp%hhx%lh%ph%th%xh%|h%h%h%hp%h`%hP1^PTRhP^h`^QVhP_US=$u@( -X9sB((9r$[]Ív'Utt $ÐUE@ @@ ÐUWVS]=`+\=O;Cs)ʉW[%)‰WO ؉GG`[^_fUMx-V=O6 A-BA-BAB ABBxfUMx-V=O1 A-BABAB ABBxÍvUEfU\d`h=CCu`\xVÍvUSM] xVv#Vv9H |9X| ;H|;X} 9r1[Ë[ÍvUEP xÐ@ @ ÍvUEH ~ @ @!fUUB~+X%HB@tB#fBB#ÍvUUztfB~+X%HB@tB#BvUUBxÐX%؉BB"fUS~61ۉ$t3@J[ú)ڃ Y1UU QUQUQ UQUQU Q@=~ 1[Íۍ lUS~>1$:t@@Iڹ$@tnJ[Ð)ٍۍ؃:uM M JMJMJ MJMJM J@=~H1[ÍvUU QUQUQ UQUQU Q@=1[ÐUUEEBEBEB E BE$BE(BE @=~ 1ÍvUj jjh8j~j2jjh(j~jjjhU1j l~jjjhU!j R~jhU!jhU1j 5~jhU!jhU!j ~ fUVS]v S@tTu e[^f SӹC$ƹFC$踹FC $誹F C$蜹FC$莹FC$耹F$svUWVS ElƍvS܅x ~lBvdRV肹YXsFPtXZsFPfYXsF PXXZsFPJYXsFP<XZsFP.t $9ujV e[^_ÍvUVSuEu1U BU V@~O>u[^ÍvOtE FӐt-%-Cf믐USUB+E B~ 1Z[Ív(1 7h8h9~B9}ˉfSՍvUS]t5t%-C CY[ÐC %-CY[C CY[fUS]{#t=At[[Ív7%-C [[fUf$=ufUS ]CTSXC#C"SRP#I؃<?w>)Ѐx?w49?wy?v"C~+X%HC@t/C#]fCyšX%؉CC"뫍vCȍvUWVSuVF%)RF FPwV jp8sXI<:vJ~~@):9w;<:w1):Dv)+X%HF@t~F# vuf1e[^_f=X}%=݉)؉Ǡjp:9wǠjp:w):DvE%؉FF"뙍vFvUWVS]C#C"C!C BSTC5XCPRCI߃jp89n):Gajp:v:Dw&{~+X%HC@C#%=q5XTC P‹ Iރjp:2%s )Πjp:FC ~ C C!XCPTC PTIރjp:1v_):FvVjp:v:Dw&C~+X%HC@C#QP<wBЍe[^_ÍvCyX%؉CC"뉍vCX%؉CC"w:B:D :: f5XTC PIƒ jp:wrC xwjp:BI:LvC C )Πjp:FoZfCC#CC#I: wC C yUS 5X5T‹ Ijp؃8s)1:Z]Ív]fUVS]u ssBƒ8?w0I kp8 t:LtFBe[^ÍvI)̍vUS ] C-PC-P8uU]US]Yhj R%-PCPs ]ÐU©tfhj% PPUBPrj ÐUWVS }dC+_hCGn)Ɓ^|V|N}hPVSww5jjhU!jhU1joj j0e[^_US]dC+ChCK=~)ʁn=|g|_u]%%1҃h jRPssP5jjhU!jhU!joj jp0]Ív1밍vUVSEpdC) hCX`)=Q|I=|Bh j hjSV躦5jjhU!jhU!joj j0ve[^ÐUVSEpdC) hCX`)=Q|I=|Bh@j hjSV.5jjhU!jhU!joj jN0ve[^ÐUWVS }dC+_hCGr)Ɓb|Z|RtMhPVSww荥5jjhU!jhU1joj j~0fe[^_ðUWVS }dC+_hCGr)Ɓb|Z|RqtMhPVSww5jjhU!jhU1jxj j ~0fe[^_ðUWVS uU TU{ hRS$RS RVSRFPWC@EhuG$PC@PF-GPC FP {`huUB$PC`PF-BPC@FPhuG$PG PF-GPC`FP踣CdC`+dCxZ)Љ+hCxE)у @~* 5 PjjjhU!Pj j|0@e[^_fUWVS uE{ hPC$PC PF-CPFPC@EhEPG$PC@PF-GPC FP询{`hEPUB$PC`PF-BPC@FPqhE@PG$PG PF-GPC`FP;CdC`+dCxY)Љ+hCxD)у @~* 5 PjjjhU1Pj j%{0e[^_ÐUVS]u =@t?sC-PPh@_sCPFPh@?e[^ÐUUB BBBB BHBt =@u ÐrrPhÍvUUbBBx<vfB22=@trr?Ph`ÍvUUB-Bx,=@uÐ PrrPh@ ÍvUS]ss7hC)PN>]UMU tMffUVS]sC CPYXSVSjp8sS CCPSRXZSVjuOjp:v^C CCCCC@CxOEQ=@tssPh`7e[^ÐS ډS uC؉CCe[^UVS]sC CPYXSVjp8S CCPSRXZSVuSjp:vbC CCCCC@CxS=S=@tss Ph`Ife[^ÐS ډS qC؉CCe[^UWVS1ۍ}uvVW_S $ _$wE_E}fE޴ fEmmmmރ(ue[^_ÐUWVS }w w__hh SVG GGGXZSVfWӃt=8tˍA9t*A9t# R^uvu=@uKe[^_Ív8tˍA9tۍA9tԃ Ru_ O=@twG @GPWt 8tʍA9tA9ufwW )GPQh@Ge[^_UUBHBx\BJxD=AuÐBhP$$BP$$Ph@Ív봋B BBBBfUWVS]C-PCC -P57h8sI:\S E:Av=I:D9+x ډS ECC-PCP,:v :PS IM}: 8v :L8x ډSECPCC -P:vI:`S :Av=I:D96x ډS ECC-PCPW:v :ACpIU}:9v :T9x؉CS SCC )‰S C)ЉCC-Cxnjhss=@tssCPh@e[^_ÐS SCC }{C-Cy C C|vCS S SVS!S S EQssЋC)P%71vډSEvډS EYv؉CEvډS EvUVSu 1ۉf$tK@J=~z1ۉv$@J[^UQqA AAUQ@=~ )ڃ 1pv)ڃ p1fUQqA AAUQ@=-[^Íۍ ۍ US]C CSSS b9C~PCCx<v]ÐC22=@tss?Ph`]hhRs u  b덐 hS bpUWVS uEPEPV^>VEE؋EE҉U~A1v$:t@@I򺀦v$@ t&Ke[^_Ð)ٍۍ؃:uM M܉JM؉JB M JB z@=~ Fe[^_fE !UWVS0uEPEPV:>VvBEEE؋EE҉U~>1$:t@@I򺀦v$@ t&Ke[^_Ð)ٍۍ؃:uM M܉JM؉JB MԉJB z@=~ Fe[^_fE$US]C @wC=}X[À{#t =AuX%-C ِUS]C @wC= =}fZ[À{#t =Au%-C ِUS]{#t@C C=}Y[f{#t =Au%-C אtCC @vY[ÐUS]{!t${ tC @wC=} [[À{#t"C C=~v]X['uCC @w먍vUS]{#t@C C=}X[f{#t =Au%-C אuCC @vX[ÐUS]{#t@C C=}X[f{#t =Au\%-C אGuCC @vX[ÐUVSE t UP UP@[^Ív}ց~41ۉf$t/@J[^ú)ڃ a1ÐUQU QUQ UQqUQ@=K<ۍ fUWVSE UP UP@} =1ۉv$tO@J=~~1ۉv$1@J[^_ÍvUQyA AAUQ@=~ )ڃ H1lUQyUQ UQqUQ@=~ )ڃ 1UQyA AAUQ@=[^_f}ց} ~;1ۉ$@Jv)ڃ 11뼍ۍ +ۍ ۍ 뒍vUVSE t UP UP@[^Ív}ց~41ۉf$t/@J[^ú)ڃ a1ÐUQU QUQ UQqUQ@=K<ۍ fUWVS }u ] t{s+ dC+hCʅ )ƒO'tVEC ECCe[^_f 5 Qj jjh8Ѓ|zPjje0u}%E~c1v$t_CJe[^_Ív5#|Pjjye0|)ڃ `1뜐yAEA EAEAEAC=ۍ @UWVS ] {s+ dC+hCʅ )ƒOUS ECCu =/1ۉ$9tO@J=~~1ۉv$@Je[^_UQqA AAUQ@=~ )ڃ 1lyAUQ EAUQEAC=~ u v)ڃ c1 5 Qj jjh8Ѓ|Pjjb08}%E1v$CJfUQqA AAUQ@==e[^_ÍvgU|Pjj b0$}u )ڃ 41=ۍ ۍ _ۍ UWVS }u ] t{s+ dC+hCʅ )ƒO'tVEC ECCe[^_f 5 Qj jjh8Ѓ|zPjja0u}%E~c1v$t_CJe[^_Ív5#|Pjj`0|)ڃ `1뜐yAEA EAEAEAC=ۍ @UWVS Ex+xp+p + dC+hC- ʅ )ƒOj~81ۉf$tk@Je[^_ú)ڃ 1뻐 5 Qj jjh8Ѓ|nPjj_0bqyA AAA@=ge[^_Ð|Pjj^0ۍ fUWVS ] \{s+ dC+hCʅ )ƒO5thUS ECCCe[^_Ív 5 Qj jjh8Ѓ|BPjj]0u}%E1v$CJ[fu )ڃ 1ۉ$@J=1ۉv$9@Je[^_we1q|Pjj\0UQqA AAUQ@=~ )ڃ 1(v}u UQqA AAUQ@=f)ڃ 1 fyAUQ EAUQEAC=;,ۍ Jۍ ۍ vUWVSuF FTVXF#F"VRPfI؃<?)Ѐx?9?wy?v&F~+X%HF@FF#FFF=~F~#=`+\=O=7FVU)ʉW^%)‰WMO ؉GG`=@tVvBEEE؋EE҉U)ٍۍ$:t#@I򺀦vKP$@ uM M܉JM؉JB MԉJB z@=~ Ff1zvE%UWVS u^~+ dC+hCʅ )ƒO9F F@F1ۉ$tO@J=~|1ۉv$@Je[^_yqA AAA@=~ )ڃ 1n)ڃ 1f 5 Qj jjh8Ѓ|nPjjpN0yqA AAA@=e[^_Ð+|PjjM0 ۍ ۍ KvUS]tC @wC }9X[迸ttK%-C CC C苸tSt3%-C C륐C %-CrvC %-CovC CYUWVSuPQ^~+ dC+hCIʅ7 )ƒOF FF]A1ۉv$@J=1ۉv$3@JbFFx<ve[^_ÐF22=@tvv?Ph`(e[^_ÐyUQA AAA@=~ )ڃ 1f)ڃ 1f 5 Qj jjh8Ѓ|nPjjJ0-yUQA AAA@=|PjjaJ0ۍ 7ۍ vUWVS u^~+ dC+hCʅ )ƒO9F F@F1ۉ$tO@J=~|1ۉv$@Je[^_yqA AAA@=~ )ڃ 1n)ڃ 1f 5 Qj jjh8Ѓ|nPjjH0yqA AAA@=e[^_Ð+|PjjH0 ۍ ۍ KvUS]E {!tm{ tg8txt?t{C @vUX[À{#C C=|܀{#t =Au蠲%-C 빐{#tNC C=|]X[ {#u]uCC @k{f7uCC @E똍vt뻐UWVSu} ]EE tk 59GuF  F;GGtJGF- +EGA e[^_ËF|Y=~F;G}Gu GFGF- +EGe[^_ÐGAe[^_f 뮍v=V  5Ӱ©u6hj% PPFPv3l F5X5T̡‹ IMكjp8 s+U1:JFu0GU V@~|>h]t;E Fѐ V7fue[^_ tE軯%-UB릸fUWVS Ex+xp+p + dC+hC-ʅ )ƒOz~H1ۉf$@J tge[^_Ív)ڃ >1뫐 5 Qj jjh8Ѓ|PjjC0N)ڃ 1ۉ$@J=1ۉv$@Je[^_qyA AAA@=VD1(|PjjeB0+qyA AAA@=~ )ڃ _1qyA AAA@=ۍ ۍ Aۍ qvUWVSu x EF UVFE E=1ۉf$@J=%1ۉv$9 @JE -EE EF FFU U=71ۉ$_@J=1ۉv$9@JEF FFU U=1ۉ$@J=1ۉv$9+@JE EiF @FF=1ۉ$G@J=u1ۉv$9@J} F FF=1ۉf$@J=1ۉv$1@JM+ dCE +hCʅ )ƒ~1 5 Qj2jjh(jjj=0e[^_Ív;ʍe[^_ÍvyUQA AAUQ@=~ )ڃ 1yUQA AqUQ@=~ f)ڃ t1VUQUQA AAUQ@=~ )ڃ 1uUQUQA @AyUQ@=~ )ڃ z1UQUQA AAUQ@=~ )ڃ 1UQUQUQ AyUQ@=~ )ڃ 1@UQUQA AAUQ@=~ )ڃ 1]UQUQUQ AyUQ@=~ )ڃ w1UQUQA AAUQ@=~ )ڃ 1UQUQUQ UQyUQ@=~ f)ڃ 1yUQA AAUQ@= fUQUQA AAUQ@= } v}ց1ۉf$4@JvUQUQA AAUQ@=E E}ׁX1ۉf$W@JYvUQUQA AAUQ@=:0}ׁE -E1ۉv${@JvUQUQA AAUQ@=E -E}ׁU U,1ۉf$@J|v'}ׁE E1ۉv$@JGv)ڃ 1f)ڃ Q1f)ڃ 1'f)ڃ 1f)ڃ 1ۍ ۍ Cۍ ۍ cۍ ۍ ۍ Yۍ ۍ ۍ ۍ nۍ ۍ ۍ Nۍ UWVSuF FTVXF#F"VRP"I؃<?)Ѐx?9?wy?v&~~+X%HF@F#FFF=~Ff~"`+\=O:3VF)ȉCF)ЉCNK VSC`=@tvFPhh@ e[^_ÐFX%؉FF"^~+ dC+hCʅ )ƒOMF F@F])ڃ 1ۉf$tw@J=1ۉv$@JJv1FyUQA AAA@=~ )ڃ 1Gf 5 Qj jjh8Ѓ|~|Pjj00zvyUQA AAA@=;,ۍ ۍ UvUWVS ]M ;tdS~ډSA9|x yt'e[^_ÍvCAyAyuًEuҡte[^_fs{+ dC+hCʅ )ƒO9C CC1ۉ$tO@J=~|1ۉv$@Je[^_yqA AAA@=~ )ڃ 1n)ڃ 1f 5 Qj jjh8Ѓ|Pjj.0|yqA AAA@='ۍ nۍ vUWVSEtU HPE Adlhp TXE MUlX쐃;pS 9C9EK9M|ڋ{9}|+EE=~5E)=~)9U}Ex ~@ 9~Ex v)~E)=vE)=~p}]Wu u3;Gve[^_Ë dChCA\l`p@ juu u3CEE)ElfUS]C-PjSE$譥C CCC@C=~Cx-V=O6C-BC-BCB CBBx{# h hssKS+dC=iC+hC$=@tssjh`#]]Ð-PC-P18ufC-PP8sC+hCjfa hCK]]1C CC US]C-PjSe$ͣC CCC=~CsC @wC  vx-V=O1C-BCBCB CBBxhhssC/S+dCg=C+hC~(-PC-PX8u =@t.C ssDTPRh`#]ÍvC-PP8\C+hCSfJctO%-C Ccf hCC]]C C"t_t?%-C CfC %-CvC %-CvC CUVSuPF-PjV4$&V VNNV ȉF~F =F'F @wF  x-V=O62F-BF-BFB FBBxh hvv)F"V+dC^=F+hC9=@t!^vSV Ph`#ne[^=Fܐ%-F Fv}F q-PF-Pف87g.vdC+FhCN=)ʁ=R1h jRPvvK5jjhU!jhU!joj j$0F-PP8=F+hC4f+ hFFue[^'vF F)+t_t?%-F FfF %-FvF %-FvF F%%1fUWVSuF-PjV4$;F FFFb'F @wF  {vx-V=O62F-BF-BFB FBBxh hvvuFV+dC=/F+hC^>艍ti=@t!^vqSV Ph`#e[^_Ív-PF-P~8u#uvdC+^hCFy)ǁeYM͌|hPWSvvAH5jjhU!jhU1joj ja!0F-PP}8F+hCf+tS%-F Ff h[FF"ue[^_fF Fj軋t_t?%-F FbfF %-F vF %-F#vF F }fUWVS0uF-PjVw4$ߙNjF FFF耉F=~FWV=Bx-V=O62F-BF-BFB FBBxh hvvFV+dC=F+hCJ2)t]=@tvvjh`#ne[^_Ív-PF-P={8uωuvdC+FhCN=)ʁw=l`耉1h jRPvvD5jjhU!jhU!joj j0F-PPlz8F+hCfPEPEPWmzE-vBEEE؋EE҉U)ٍۍf$:t#@I򺀦vKc$@ uM M܉JM؉JB MЉJB MԉJ@=~ G v h7FF^ Ve[^_Ð1Bv?E%%1UWVS0uF-PjV4$ NjF FFF耉F=~FWV=Bx-V=O62F-BF-BFB FBBxh hvvA~VV+dC= F+hC:2Ut]=@tvvjh`#蚽e[^_Ív-PF-Piw8uuv^dC)؋hCN=)ʁu=j^h j hjQS3A5jjhU!jhU!joj jS0vF-PPv8F+hCfPEPEPWvE-vBEEE؋EE҉U)ٍۍf$:t#@I򺀦vKs$@ uM M܉JM؉JB MЉJB MԉJ@=~ Gv hsFVn Ve[^_Ð1BvOEUWVS0uF-PjV4$cNjF FFF耉F=~FWV\=Bx-V=O62F-BF-BFB FBBxh hvv虴VV+dCR=F+hCB:譂?tei=@tvvjh`#e[^_Ív-PF-Ps8uK?uv^dC)؋hCN=)ʁu=j^h@j hjQS=5jjhU!jhU!joj j0vF-PPr8F+hCfPEPEPWrE-vBEEE؋EE҉Ug)ٍۍf$:t#@I򺀦vKk$@ uM M܉JM؉JB MЉJB MԉJ@=~ Gv höFVf V$e[^_ÐdC+^hCFy)ǁeYMhPWSvvc;5jjhU!jhU1joj j0v1vECUWVS0uF-PjV4$NjF FFF耉F=~FWV =Bx-V=O62F-BF-BFB FBBxh hvvIVV+dCR=F+hCB:]~?tei=@tvvjh`#蚵e[^_Ív-PF-Pio8u}?uv^dC)؋hCN=)ʁu=j^h@j hjQS395jjhU!jhU!joj jS0vF-PPn8F+hCfPEPEPWnE-vBEEE؋EE҉Ug)ٍۍf$:t#@I򺀦vKk$@ uM M܉JM؉JB MЉJB MԉJ@=~ Gv hsFVf Ve[^_ÐdC+^hCFy)ǁeYM{tqhPWSvv75jjhU!jhU1joj j101vECUWVS0}G-PjWW<$迉ƋG GGG耉G=~GVW=Bx-V=O5:G-BG-BGB GBxh hww'W;W+dC=G+hCcWЉG Gft=@ue[^_ÐG=@twwjh`#G-PwGPh`#GxÃG-FPGP؃Ph`螰G-F$PF GPCPh`qG-FDPF@GP؃Ph`EG-FdPF`GPCSh`e[^_Ív-PG-Pi8zlvG-PPi8(G+hCfPEPEPViE-vvBEEEԋEE҉U܋)ٍۍf$:t#@I򺀦vK$@ uM܉ M؉JMԉJB M̉JB MЉJ@=~ Fsv hGW We[^_Ðvs hj S$RS RWSRGPH2C@Ehj F$PC@PG-FPC GP2s`hj UB$PC`PG-BPC@GP1hj F$PF PG-FPC`GP1CdC`+dC)Љ+hCxq)у @%G@>1v 5 PjjjhU!Pj jm 0NEsyUWVS0}G-PjW<$ƋG GGG耉G=~GVW=Bx-V=O5:G-BG-BGB GBxh hww:'W;W+dC=G+hCcWЉG Gft=@ue[^_ÐG=@twwjh`#RG-PwGPh`#.GxÃG-FPGP؃Ph`G-F$PF GPCPh`赪G-FDPF@GP؃Ph`艪G-FdPF`GPCSh`^e[^_Ív-PG-P-d8zlvG-PPc8(G+hCfPEPEPVcE-vvBEEEԋEE҉U܋)ٍۍf$:t#@I򺀦vK$@ uM܉ M؉JMԉJB M̉JB MЉJ@=~ Fsv hçGW W$e[^_Ð3qs hjS$RS RWSRGP,C@EhjF$PC@PG-FPC GPV,s`hjUB$PC`PG-BPC@GP ,hjF$PF PG-FPC`GP+CdC`+dC)Љ+hCxq)у @%G@>1v 5 PjjjhU!Pj j0NEsyUWVS0}G-PjW<$G~ƋW WGG耉G=~G! B @wG=| W{v=Bx-V=O5:G-BG-BGB GBxh hwwQjW~W+dC=G+hCRWЉG B Gft=@ue[^_G=@twwjh`#jG-PwGPh`#FGxÃG-FPGPCPh`G-F$PF GPCPh`դG-FDPF@GPCPh`諤G-FdPF`GPCSh`胤e[^_Ã-PG-PU^8}vG-PP ^89G+hC0f'#"G G=YP#t =A=Xl%-G &fPEPEPV]E-vBEEEЋEE҉U؋)ٍۍf$:t#@I򺀦vK$@ uM؉ MԉJMЉJB MȉJB M̉J@=~ F0v h藡GW We[^_ÐkE܉s hPC$PC PG-CPGP]&C@EhE܃PF$PC@PG-FPC GP&s`hE܃PUB$PC`PG-BPC@GP%hE@PF$PF PG-FPC`GP%CdC`+dC)Љ+hC)у @(Gv1v 5 PjjjhU1Pj je0EkgiuGG @-aDUWVS0uF-PjVk4$wNjF FFF耉F=~FWV̵=Bx-V=O62F-BF-BFB FBBxh hvv VV+dC=F+hCN2h?t]=@tvvjh`#be[^_Ív-PF-P1Y8ug?uvdC+^hCF)ǁui]qghPWSvv"5jjhU!jhU1jxj j0F-PP\X8F+hCfPEPEPW]XE-vBEEE؋EE҉U)ٍۍf$:t#@I򺀦vK_$@ uM M܉JM؉JB MЉJB MԉJ@=~ Gv h'FVZ V舭e[^_Ð1Bv;EUWVS0uF-PjV4$tNjF FFF耉F=~FWV=B@x-V=O62F-BF-BFB FBBxh hvvEVV+dC=kF+hC&=@tvvjh`#諛e[^_Ã-PF-P}U8ufF-PPPU8qF+hChf_PEPEPWQUE-vBEEE؋EE҉U)ٍۍf$:t#@I򺀦vK$@ uM M܉JM؉JB MЉJB MԉJ@=~ Gv hFV V|e[^_Ð1BvEUS]C-PjS$ qS SCC耉C=~CB @wC= =x-V=O6C-BC-BCB CBBxhhssAKS+dC.=C+hC~(-PC-PR8u =@t4CS PsDTPRh`#\]ÃC-PP0R8YC+hCPfG hCK]]]{#t =Aed`%-C NfUUB~;I|:t"fJ~; I}ދ ;D|;L~@ȃ$(_B;H|;PڠA@ՐUyvUzvUOvU{vU~vUS}vU vUvU[vU鳞vU鷜vUϚvUvUvUvUvUvUKvUvUvU[vUvUKvUkvUzvUKvUvUSdC`DLhCHpPC$S$CHKHClSl`  j SQC$S$^ P7CHKHR PClSlF P: P. P" P P` ]ÐUE`alptx|cbdefghPSYÐUÍvUEUEtCÍvUSh -ÃtPh\$H_]ÐUj@-fUSh,Ã=r PPPPhhPh|PhpPhdgPhXfPhLePh@dPh4`Ph|PhxPhtPhpPhlPhh`SGZĄS ^]Ív fUWVS(j@+ǃuPVh_W[@Pj hV_\Pj hVF\Pj hV-\Sj hV\Qj hV[tRj hV[gPj h(V[ZPj h4V[MPj h@V[@Pj hLV~[3Pj hXVe[&Pj hdVL[Sj hpV3[ Qj h|V[Rj hV[tFPj hVZ W(\=u=hvhe[^_Phh_WZv1fPEPh_WY $``EhvEvEvEgvEfvEevEdvE`ovEأ|]EأxMEأt=Eأp-Eأlffffffff f f f ~f rfU 5Vhh@+1ÐUVSuQ5Vhh@*vF05Vh J"uNu؉e[^ÍvR5Vh hL*LC$SCC$?Ce[^UhjrXZh˳jdÍvUh<<t<t V_ VUQ5VhEP)UPhh@RK 5Vh.EP)UPhh`#RÐVOUh8hEP)Xur h8hײEP)UPjMhR h8hEPo)UPj h`RÍvUDh8h̲EP$ h8h%EP$UPj0h`R7XuDfURvUR jVvU[q x)U鯑vU jhjT jhjC jhj2 jhj! jhj jhj jhj jhjUQhUh_U$UvUj #$_hjhj`h'DÍvUS]St]_CE]\US]S脡]]B]fUjgfUPK(P jUU DtCjhj jhj jhj jhj jhjx jhjg jhjV jhjE  bm輂+ 5@DT^AfUShw#ÃPjjhhPSjjhtCP$TSjjhTP$@L$^L[Shjh@LfPShjhCQPHSpp P9PtCu S4T]áLSpp PPfUHhC薞u6] hCYZ虁贿 P5Vhh@$X5@5C@Pjhj jhjx jhjg jhjV jhjE jhj4 jhj# jhjÐUDh8h̲EP h8h%EPUPj0h`RYuDCeNhjXZh˳jZYjj^1fUSh<7<t#<t<'<t<tV_ vVUS5VhEP"UPhh@RK 5Vh.EP"UPhh`#R 5VhhH"HC$GCC$3C 5Vhh@L"h<td<tXfPjLh<t4<t(sPj,1]ÐVO֐ΐ릐랐UWVS }tl5tCP5Vhh@!F05Vh uKNutC`C}e[^_e hC賛$CwWsvP5Vh hL!LC$CC$C5tC5`Cqe[^;vW h^LT뜐e[^ÐP5Vhh@6vC05Vh u#KuءLVpp PHTvP5Vh hLLC$CC$sC뗍vUO蝆{=CW=hE =` P3B$!mtC;`C,=BtF5(9WOAf=05hC5dCCЫ85hC5dC NA jyuƏ jXDz6 j$5hC5dCC=CZ=c҃=cЃ P=BtC=BDm(p1f=v뿐 =`j1=tCPFf2.f j.Ba htC v}ru# 5@zv3[ÍvUWVE``alptx|cbdefghPSY30 Z0B@Eu<|s]C<t)) j_pu`CEt!DD jHvwuq|tY=t6 hƃtPhF4$DIjjkG=`t# h $fjj̍vL$qUWVSQEY#}~s_ ta? j0FXZh_h_cF$WEjjR~QC jwGSu$UGU  V$  V= \ufUVSu  $ IÃ?tMv:t?@@u1 @99 f $ @]~ CEBE BEB EBr$ @%?$ J+ dCB+hCʅ )ƒO~Zy5( Ѓ|~|i U1 V QjhU!jRPSj10e[^Ð1e[^Ív@) 50 Ѓ| U1땐|5, Ѓ|F U9hH@f1v$ e[^ø|볃@Sf0/9WUWVS,= EfG G_OOw;5I; I=  GEE tg}^E)‰W )É_E;5dCmEȉG G;hC}UGO ÁqG FGE-Gxm;5I;5IGE;IfPV:2<U:hp=::hGf8}@Ãtu؃X u0ۃh@SGD PG @ Pwwh@SGL PG H Pwwh@SGT PG P PwwYh@SG\ PG X Pww+h@SGd PG ` Pwwh@SGl PG h Pwwh@SGt PG p Pww E}tvE}ue[^_ÐGG ~WUԀ@ʉW ؉Gщ:ip=AWwwPh`u'vGL:=hvGfsE@;5dC;IW OE؉E܃jPjE)Pu܋E-)P)Vj+]jSjutD1+0ۋ O WE؉EVjjPE)PuG-)PG)Pfj+]jjSuSG-+GPG+G P+p UjhU!jhU1j ( jhU!jhU9j , jhU!jhU1j 0  ÐU@ D H L qP T X \ ` pd h  l qp "t ÐUMAQ  Q fUMAQ  Q fUUE BBBÐUWVS$uDž1uS9Y_u S9XZh`S ?t1 <Ht* >e[^_þe[^_à <mu x<ruu@밐 Vfe[^_9sà WE7uWP3C9wۍe[^_Ð9sà W7u W6C9wݍe[^_ÍvUWSDž 1u S92XZuS.2jjSjte[_ c1e[_fUVSuE Hw,It!QjjSY4SjBjV1Bt e[^dEFAjPVj: :FAuߍe[^ÍvUVSu] FAjPVj FACw5It*PjjS3SjBjVm2]e[^,3e[^ÐUS hISi6YXh`S 1XZh`S6IhIS16YXh`S0XZh`SG6IhIS5YXh`S0XZh`S6IhIS5YXh`Sd0XZh`S5I]fh`S5I3h`S5I8PSh4a5 R1fh`SZ5Ih`S<5IPSh4a5 0fh`S5Ih`S4IPSh4a5 0fh`S4Ih`S4ItPSh4a5 N0PShla5 40PShla5 0PShla5 0PShla5 /fUWVh`1tC5 j>jhao/IdataIIae^_ÍvI`󥿠Iae^_fUWSDž 1uS-XZu S-jjSjGǃ~2 W.UjPSj"t"Fe[_ÐFǐUS..SP/&..YZSP1]fUWS]Dž 1ha/PW,h̴W,tHt(@t 1e[_fh`W2e[_Ãh$aW2e[_Ãh`W1e[_ÃhIWP,kUWDž 1ha.u1}ÐP W+YXhմW+}t7}t}@uh`WF1믐h$aW21뛐h`W1뇐UWVSDž1uSd+^_u SY+jjSjƃPDž1 RW,UY[uS+XZu S*UtFjPSj{u e[^_f[e[^_[1nvYe[^_UWVS }u ]jSVjtrt+ P+t1PSVjsx,e[^_É]u }e[^_voYԃPh'ax.[[멐UWVS }u ]uPSVW:uYte[^_UWVS }u ]fPSVWtte[^_fW1e[^_ÐUWVh`,tW5 j>jha_*IdataIIa hI=,u+e^_ÍvI`󥿠IaPhIha5 %*$-UI=IufUÍvUIUIfUIUÐUÍvU塠IIUS$]f S)t0}wE$bvI S)uf]Ívc뱐E<<u%I됊E<te<tUu IuEƀIIEftIPEƀIAI1 I$ I%I %IUS$]f S(t }wE$Pbv@=It]fIS뭐E<<u%I댊E<ti<tYy ImEƀI]EƀIIEft I8I) I I%I%I]fUS$]f S't0}wE$bvI S]'ufII]+륐E<<u%I넊E<ti<tYq IeEƀIIEftI@EƀI1I! I I%I%IUS$]f So&t0}wE$bvI SA&ufIIB<w ƒ0U]두E<<u%IiE<ti<tYU IIEƀIIEftI$EƀII I I%I%IUS$]f S7%t0}wE$(cvI S %ufII]륐E<<u%I넊E<ti<tYq IeEƀIIEftI@EƀI1I! I I%I%IUVS0u]f S$t0}wE$pcvI S#ufIIe[^f롐E<<u%I뀊E<ti<tYm IaEƀIIEftI I2fpƀIIxft#IfpƀIfI I I%I%II S}fII=Gu Ge[^_ffB<<r%IffB<tv<tfN IBfHƀIIPft#IfHƀIfI I I%I%I? f,f S#t4,w,$heI SufI=~G@GsGj뉐.<<j%I^f.<<t~B I6f4ƀI"f4ƀII;wA1ҍf8<v1ҍ 7v8<v[^_Ív IUVSu] 1ҍ 38<v[^UEu @@ÍvUWVSE} UU q YQ9s+Ӎ\ 9v U8t#89v:Et9r1ɉZ[^_ÉvU QQ~A y u @8tJ1ÐUS YI IQ IA IӍL I[fUj2h hh`j蒔Ijjjh"jxIjjjh j^I UWVS EE] }uMtCvQ [^_ÐtCv؃(tN~vCw6au}E EE [^_鎾fÉE [^_zfʍvDX(C< w ƒCʃv1덍v~փ1sUWVS ]u}~9s 9Ev8wfE Ke[^_f P[QUWVS ]} 1F(t"C9s9]v;v S"QF(uߐe[^_UWVS ] q ƋU | G<wFEE ƋU] | _ve[^_1e[^_fB tNSv9Tu1hPuuuu e[^_ÐXuЃ ȍvUEtf@+I6JB6I8tKxtEHI 5Ijj2h hh`jojj[1Ív@f@벍vUSE5Ijjjjh"j~jj$5Ijjjjh j~jj0 !"#t7 jda$*hhjhj` E] ? j2a$hhjhj`謵 EP]> j a$_hjhj`t E']> jJa$hhjhj`< E N]e> ja$hhjhj` E0u]->UWVS EU Y  T I)ry Y\ ]uEv1C(t"F9s9uv>v VMC(uߐIE} t uƉu뼍e[^_UWVS5IۋMيB<wB;y1ҍ1f8<v1ҍ9v8<vEPB<wP;1ҋEEDD8<v1ҋE 0vEDD8<vEPB<wS;1ҋEvEDD8<v1ҋE 0vEDD8<v5IMB<w?;wB1ҍ1v8<v1ҍ9v8<v[^_Ívf IN IUWVSEU Y  T I)ƒ Uy Y\ ]1f9s9]v ;:fCFuEE5I9s 9Ey]9s 9]K9s 9] 9s 9]9s 9]9s 9]9s 9]t9s 9]I9s 9]9s 9]9s 9]9s 9]9s 9]r9s 9]G9s 9]39s 9Euu1v9s9]v ;"fKFu]5I9s 9]9s 9]_9s 9]49s 9] 9s 9]9s 9]9s 9]9s 9]]9s 9]29s 9]9s 9]9s 9]9s 9]9s9]wg9s9]wH39s9Ev 8ve[^_à S3Iv SIv;v SI륐;v SH놐;q SH`f;F SH5f; SH f; SHf; SjHf; SNHf;o S2H^f;D SH3f; SGf; SGf; SGf; SGfExi SGXf8 PjGf; SNGf; S2Gf; SGtf;Z SFIf;/ SFf; SFf; SFf; SFf; SnFrf;X SRFGf;- S6Ff; SFf; SEf; SEfExz uEgEe[^_EUE8DtH@+ Rjjjjj=I P R/ ÍvU E+ =I P RQXÍvUS]B<v%B<v:v.#w)w7]]v ƒ'PM<]f]]PL]]UWVSE+ =I U jjjFPPWRU1jjvWuj"e[^_ÐUVSCC~VHT1 vIJt:ut IJut*S )։=I MU [^ú@?MU [^UU A<v+BR=I P RPVÍvUWVS M=Iލ1B<wC;E1ҍ4;8<v1ҋE48U<vQB<wC;41ҍ4DD8<v1ҍ9DD8<vQB<wB;1ҍ4DD8<v1ҍ9DD8<v=I9B<wA;w{E1ҍ4;f8<v1ҋE48U<v+ AQjjjjj=I P R+e[^_f؉E눍vI$IusUWVSEE} E<rE8<vEP<G5Iۍ B<wE;sE1ҍ1f8<v1ҋE8U<vWB<wC;1ҍDD8<v1ҍ 7DD8<vWB<wB;1ҍDD8<v1ҍ 7DD8<v5I 7B<wA;w[E1ҍ1f8<v1ҋE8U<vE(<vEE[^_tj؉E먍v ID I]UWVSuh/SwQ I+5F WjjjjjPV%)h`SV9e[^_Ív=Iۍ B<wC;1E1ҍ98<v1ҋE8U<vVB<wC;1ҍDD8<v1ҍ >DD8<vVB<wB;1ҍDD8<v1ҍ >DD8<v=I>B<;wiE1ҍ ;8<v1ҋE 8U<vaf] I IL؉E뚍vUWVS ]I<@IHƒt+ICIID+=I7F<F<N+Ix7F<F<?{sF<F<G{sF<F<OI|7F<4F<BI|7F<sF<5If S;fUUH<w UfUMB<v1fB<w Qfu QfUMB<wB<w QÍB<v1Ðu QpfUMB<v1fB<w QHfu Q$fUE86t1fu P fUWVS MB<w#B<v8KwCB<wMe[^_1e[^_fMe[^_Me[^_EӃ+ A=I U QjjjFPPWR%jjvWuj e[^_fUWVS }C<w-C<KC< WC<C<v$ڍC<vdC`<w Bue[^_É+ VhӁRjj=I P Rj 1҃ C<w}e[^_L WC<dv}e[^_ W3+ =I U EPjjjFPPuR#jjvuujL fUU A<v UUDtJB+BRjjjjj=I P R UWVS }B<w;B<v\KwkB<w< WB<w}e[^_I1ɍB<vȍe[^_Ð W+f WWfӃ+ =I U EQjjjFPPuR"jjvuuj AU`t8 <uy-<Kat4Z2f -<KauZmЃ~f-<u <<<뤐U Iu+nnBnBB aIuÍv0B0B0B0B0B0B0B0B B PB SB YB 뻍vUVSu lCB9B9NmCA9A9NnCA9A9NoCA9A9^NpCA9~`A9|eKqCA9~GA9|LsKrCA9~+A9|0NsCA9~A9[^Ív[^Ív1[^fUSh>h1SSj@jrohIhSSj`j,\ =ht hhhSShjr: ]f h\hfUWVS(jt4軪 hsh1PPj j@ I@ < EC<  EC< EC< EC< EC< EC< EC< EC< EC< EC< EC< EC D EP1VVWj  t C< ,1fbI<w! hhVVPh՗ j萟e[^_Ð낐wfkf_fSfGf;f/f #f f fUj=t) j=t迿t1fUS hh1SSj@jXʖhhSShj0贖 ]USܩ{r hh1SShjHzhhSShjHd ]US萩/& hh1SShjH.hhSShjH ]Uhm$UVS.ͅ~ hhV1ShhĕhhVShh<諕hhVSh6hh蒕hhVShZhyhhVShrh`hiVShhGh!iVShh.h7iVShhhLiVShh4hWiVShh0hciVShh(ʔhqiVShJh豔hiVShbh蘔hiVShh0 ˔1һ=K莚E jWt=3t =4u/޼uj j|utGV묃 h=u7 ht=u%wtv胼e[^Ð h3=e[^ÍvUVSu0Rv j芾à u`/~9~w 5|=tSu* j考tRjjHP;J軻e[^Ív1e[^ÍvCЍe[^fUS{ hj1SSj0jX袒hiSSj`j@菒hiSShhv ’ j@.{艥 hiSSj0j`6hiSSj`j0#hiSShj hiSShj hiSShj@hjSShj ˑ  j =]ÐUSzߤҌ uE\$E$u uy ő#v j$ҾÃu/t~荑ˍvu ؋]f1]ÐUyH h jjjhj0@lh3jjjhj0#phGjjjhj0thXjjjhj0xhkjjjhj0| fUSDy蟣 hk1SSj0j`Jh}jSSj`j@7hjSShj@! m jt t]Ð]v]vUWVS,d hj1PPhj`輏j j769=eKx=d=e=g hj1SSj0j` hSSj`j hSSjxj =e fPSShj ƎhSShj 谎hjSShjP蚎 f5g0` 0~e[^_À5dЍveeufg0` ˅0OƋf@ffUSv=~Kt =` P`$j1SSj jP虍hjSSj`j0膍hjSSjtj0shjSShj0]hjSShj0GhSShj"1hjSShj` v PX_$P^$;}|" jHt;tbt} j])‰$]iftJɍvkSShj@芊 FUρvUWVSbITIvlCA9A9NmCA9A9NnCA9A9NoCA9~A9sNpCA9~bA9VNqCA9~EA99NrCA9~(A9V sCB9~ B9FKbIR 1ҊSI`IJ N lCtZlC0mC0FnC0FoC0FpC0qC0FrC0FsC0FEfpCxlC%0000 1ЉpC %00001‰^ jxF CC1ۃ}+fT Ѐ}tW=^1ɲ=Ybc=,1~--1=~B-lC=?B~>=z91ɲ==>=~-=?B~B-@BmC=~>=4 1ɲ==? ~-@ =~B-nC='~>=81ɲ=?=N~- N='~B-'oC=~>=?1ɲ==~-=~B-pCc~:=1ɲ==~-c~BdqC ~2O1ɲ'ʃ~ ~B rC~/l1ɲoʃ~~BHsCIsC< 1rCrC< 1qCqC< 1pCpC< 1oCoC< 1nCnC< 1mCmC< 1lClC< v lCÍv sCrCrC< \ rCqCqC< T qCpCpC< L pCoCoC< D oCnCnC< < nCmCmC< 4 mC'v- =Yb-Zbf-z ==- =f-5  =-f-8 =? -@f-@ =1-)f-  =T-LfP 's(m UEIfUE)IfUfIfU1=IÍvUIlCpCIIÐUdC@hC0IIIIIIIUMUhC)‰UdC)ME E z~fUMUhC)‰UdC)ME E {fUIEE E r|fUj jhh jEPIj jhh$j(PIj jhh(j PIjjjhFjOIjdhhh3jOIjdhhh2jO Ijdhhh1jOIj2jjhjwOIjh PhhjWOIjhhh@j7OIjjjhU!jO IjjjhU!jO$Ij(hBjhU!jN(IjjjhU!jN,Ij2jjh@jN@Ij2jjh?jNDIj2jjh>j~NHIj2jjh=jdNLIj2jjh<jJNPIj2jjh;j0NTIj2jjh:jNXIj2jjh9jM\Ij2jjh8jM`Ij2jjh7jMdIj2jjh6jMhIj2jjh5jMlIj2jjh4jzMpIj2jjh3j`MtIj2jjh2jFMxIj2jjh1j,M|Ij2jjh0jMIj h`hh0jLIj h`hh8jLIj h`hh0jLIj h`hh8jLIjjjh@0jxLIjjjh0j^LIjjjh0jDLIjjjh1j*LIjjjh@1jLIjjjh1jKIjjjh1jKIjjjh2jKIjjjh@2jKIjjjh2jKI UIhIhI`ÍvU5IofU=I+1f#ItFHI ~ I IlIlIIfUI!fIIIIII=IÐIIÐUdCIhCI;fvUhlCÍvU=Iu7=It0I 5(Ijj(hBjhU!j~jjV0I΍vU hh jjhC-PdC-APj fUSUB<:It]ÐIItgI~^IlIlII hnh?1Sjj0nh ohShj0n fI]ft72III:IGBIfI]øǐUItQ)УIxSII=l~ IlII=l~ Il 5IjzÐIUIICvU@IIIIÐU轿 III IÍvUS茿腿QhuSI%Ru uj t ]UWVS D+II9 I=IdC E=III1hCU~ƃ<~}V}I va@PF$PSWU썄ZPUzP,I5,IjjjjhU!j~jj/SI0e[^_Ð$odC- E=IߋII۾ZfNfBf6f*f軽vUWVS rdC E1~ȃ<~}V}h$PRWM썄QPUPV+ tFhCE졀I=IqdC- Eڿg=IttdCVjjjjPhC-PRII5 IjjjjhU!jjjeQIHI0xe[^_ádCI SjjjjjhCP5dC e[^_fUVS=IAfdC)Љƒhj9PRhC PQ)K t)څx=IudC݀=ItddCQjjjjPhCPRII5 IjjjjhU!jjjP0e[^ádC뚍e[^bfUVSdCIhCI III0҃ۃK=I?vH=Iu?It68r2=I?v) 5Ijj2jjhjjjTOڃ0vIPPR5I߬t~VhIhIP۫I-II[5Ijjh PhhjjjN$5Ijjhhh@jjjN0e[^ÍvUSUC< wGPEPEPR?S"҃ -"PjjjEPEPR ]ÐU EhIhIP-IIIÐUVS\ dC hC~i ~TI-9}FI-9}8ށӁ)PdC)PSV躭t ve[^ÐhC-)PdC-)PSP{fUWVS f/(\ dCP hC~lI-9}^I-9}P߁ӁSW8t.Ph PjjPWj 诿 NMe[^_ÐUI8ufjhIhIP"PhIhI5I PhIhI5IPhIhI5Iקu-I@IHIyIfUVS#I"I dC I5hC5II IIIIIRQݧËI؃<o)Ѐxo<od|oY<o4|o) hIa5I IIPEÃ8o3I<o${onI|o^fIIP IIPËI؃<ow )Ѐxov hI褼I<ow|ov hIIIIdCIhC IIIIe[^Ð hIv hI裻I hII[@5I IIPáI؃<ow;ov hI+Ixow {o hIv5I IIP~XZ5I IIPcËI؃<ow >ow<ov hIbI)Ӏ{oq~og|oWv hI#vUI~ÍvIIPjhChjhhjqjhGhhhhjLjhHhhhhj' b IhKbvUS1ۍv_S $5pq$ tq}fE fEmۜImpuIIIIIII I]ÍvUSIEPEPu躣 jjjR%-PEPu ]US]Su=IcOKt ]ÃjS vC$udCC$uhCC $uIC$~uIC$nuIC$^uICICI1]ÍvUS ]hIcOKSwuYX5dCCPfuXZ5hCCPUuYX5IC PDuXZ5ICP3uYX5ICP"uXZ5ICPuICIC]ÐUS]StIC$tIC$xtIC $htIClCCpC]ÍvUS ]5IStXZ5ICPqtYX5ICP`tXZ5IC POtlCCpCC]ÍvU II P1PэҍBf@(QhcÍvUVSII=ItLC҃fID PQRh@:c1Ҁ=Iƒ,IDPjRhcIe[^fIojvUSItv=IuLC҃*I PQRhb1Ҁ=Iƒ,IPjRh\bI]ÐUSII=I1ҁI@PRV؃(Ѓ<ЍD2PhaIPIPj5haI=Iu I]ITlUSItbX=IuaITIPRjoh@BaIDPjj5h#aI]ÉÃ=It1fUII9-ID1҃TIPjA:Ph`I+ItK=Iua=~N 4@Ijj2jj=~@)PjpjjA0Ð뀐IÅx|묐 5Ijj jhh jjj@$5Ijj jhh$jjj@$5Ijj jhh(jjjt@0Ív10UE‹ I8tÐ{GItIУI_z`ƒIPjjFhD_oI@I<n`II dChCIIIIffII}IO]>UWVS}@~K5D~K )vËt>8t0AJ~tl At^H[^_Ív΁@UUPU PUP UPxF~FD~K1[^_f~0EUSE CUS EC{A~A뺁@ȉCUSM] U$@E EAEAEA EAQC~CD~K1[ÐU@~K@ID~K@I=@JufU`~K d~Kh~Kl~Kp~Kt~Kx~K|~K~K~KÍvU~K,~K~K~Kb~K~K~K~Kb~K~KÍvU EjjjjjP+PRP+P R ÍvU EjjjjjP+PRP+P Rt ÍvUWVSTE@EURUMI ME@EċMQEȉ%ɁM%/ uEEȃẼUȉŰMȃMKEEЋUUE)ЉEMM܋E)ȉE@~KUӋ5D~K )vMQv8<AJ~"Eu AO퐋UȃUԃ)~MȉMԋ]1UUċM)ʉUE+E܉E] ) vËxf8dAJ~"EuA3O퐋UT[^_ÍvUUЋMMM)щMEEEE@~KUӋ5D~K )WvMHf84AJEuAOEEċU)ЉEMMM] )vË 8AJEupA3bOϋUԉMHUPMH UPMHG~GD~KvϋỦMHUPMH UPMHG~GD~KϋỦMHUPMH UfϋUԉMHUPMH U[vUԉECUSEC USECA@A5fỦECUSEC USECADA9fỦECUSEC U‹UԉECUSEC Ug?UWVS}GEWUO MGEG@H@~KUD~K~KMNM؋EEܺ )څ [MtS 8tDAJ~(E‰vA:H؁~KtE끐9UPMHU܉P M؉H@@C~C~KuD~KSjjjjjG-+GPG+G P蕼 e[^_É9EBEBE܉B E؉BB@AGAEȋuTRB|K$>E̋TRBK${>9}1E,E+E9|uUD@ҍЍPM`Kf [ffP$UE$ݝxݝh}݅h݅x s}fE fEm]mfEދMf])É+Uȉ14V,Ufl}G<@G<8 UPW=MA@50[]CPRxY^50[PAxXZ50[uFP,x[_50[Px}e[^_ËEG=~Kt5E E8w*EEE ] [^_v [^_ÈUhjhh"Vr~KtÐrRPh8s5 =rUWVS(EEEEEE}$u(E E]E EjuuBu(}$EE EEEEEEÉEEE Ee[^_v ju8X r j jjt:X w jtu9u(}$EE EEEEEEÉEEE E jt:X w j,tu8u(}$EE EEEEEEÉEEE E js:X we[^_ÍvUWVS(]EEUUEEU$UE(E܊U U}u SsuGE܉E(UU$‰E EEUUEE‰EEE ]e[^_v S s8P re[^_ÐUWVS=~Ku e[^_f}js1؃N؃JTUf [Cu5 jjhrnd2xb5 jjhrne[^_fUWVS,}js1؃N؃JTUf [CuDž1۹} wWhVPmDŽ .au5 jjhrmY[hrPr0[XZhiVBmh0ujhZPPK KKZ<KZZZ$2@K KK,KK K0KK$K4KK(K8K}50[jjhsl^_50[jlY[50[julXZ50[jfl^_50[j WlY[50[hElXZ50[h3l^_50[h!lY[50[hlXZ50[jl^_50[jkY[50[jkXZ50[jk^_50[jkY[50[jkXZ50[jVk^_50[j"kY[50[jkXZ50[jyk_X50[jjk[^50[j[k50[jjh sdk jEPhK1Y50[Uo$yn} w r ZK!KfUS]=~Ku]#mjjgj [tE E]6nf SE KEP]!jUWVSMEUUUUUUU$U܋}(U UU U=`=~Kt|8wx˃tr SnuB}(E܉E$EE UUEEUU‰EEE ]e[^_zf Sm8P re[^_É넉}(E܉E$EE UUEEUU‰EEE Ee[^_U [= \ufUWVS E1<%x-xE@%E %DEցӁDуD))Љ EEEȉ@\GO [^_ÍvUWVS8uK-=FSP1tEE؍e[^_à E P -E؋U9~U؋u؅~ϋM ME}O}vUBE܃E U9U~u܋E\ S,t̓ S,}ǃM9M+E\f9u S,EEF9EtيMEWUWGMQ[AEAUQ AAȃPjSjXZMqh i$UgE1҃BuEt9uEEBv[ V+%@\}9uvt Vx+%@1׉4$]+%EÃEԋM9puuSWuhsi 9uw [wUtF1uϋ}f%ʋ%C9]}ʋuF]1ɋ}vU싄%%A9}Ph&h(h rh<$hghjhhhjh e$WgAv V*%@\UԋMufhhhhj uuh6hUBPgMAHMUU1v@9|EE EpgU9UtUE͐UWVSU] f@ \fB \Ef)fD \Ef)fF \5[uh@ \5[fe[^_Í}оt}t}t󥍽p`tR$]E]ۉ$$]E]EPh0cY[EPh0ucXZEPh0ec_XpPh0Rc$0ve$0je$0^e$0Ree[^_ÍvUVST[5P[X[Lt[)Q\[PSVe[^U[ [[P[PRQIU[uj5[eà h0a$0a$0a$0afUS [uPjj5[Sa]Ív h a$ ah?1SSSmcXZL[\$H[$SSc]ÐUEEbUWVS[Dž?Dž0@U4vș@\Iuu h :c_Xh \jLd[^5 \h c Phghj@hjh Ca e[^_à 5[c[B_Dž?0@_U4fș@\Iuu cRfUWVS EE] =[ h bY^EPj#cXZUrh qb$%`Eǁƒ9Df CȃH v9sDCIt@\5[t߉+E%=@uŁ9rvH[UBL[B H[ gfff)‹EPL[UBBBEe[^_MbH @t@\ECȃH9hIE5[t߉+E%x=@uɁH @jhhhj hh@jaUBP\aUBPpBPuhghhhhh a^ EEe[^_`5[Uuh[Uuh[UWVSL[EС[5[ h _Y[h$\j`XZh(\j`$]E$]EÈEȀE̋UEUMMEEEvuЅ~l}u1ې]EgfffmM)ʍE)Љw]))Љ C9]EԋUUMM} t[E EEEEMMv]Ѕ~E}}EEuƋ]]܋EEM1ҐB9U[E؋EE܋MMB;E} [ 5 [)_X5[_e[^_ÍX jhhhj Suj^[ jhhhj Suj^ [5[h^_5 [\^[PU [JMċ@fEȋBfẼ5$\h ] uhghj@hhh 8[um]XZ5(\h K] uhghj@hhh Zu*]e[^_ÍvUS ] E EME@@[D[H[@L[P[T[\[ X[d[`[h[hl[x[I|[[,[[l[[l[["[[p[t[jj(]YXjj]XZjj]YXjj]XZjj\҃Ѓ}tPj5D[5@[Z[[jhhhj jhj\[ jhhhj j@j`j[[ j\[u]f5D[5@[jjW$g[[L[P$H[$$ $h?j T$\$T$$hPj\$$:YDhZZL[ H[hp@jh@@jЅP$$Ѕx|P$$ȅxaP$$ȅxDP$$W0]fXPhsZa[>v뷍vA뚍v|B_Uf j22@u j>3@ufUh[fH \l[fJ \fL \fN \[tj5[hH \5[WÍvUWVSLE}  )S$tuE@-ttuE@tW $ ttuE@j١d[Eȹ0ؙ\)Й)MȺ*)fp \5`[ )ƅ3fr \Eft \f5v \ [ ءT[fj \ЋX[9 P[\[ʐf h \9}Wfhh \5[hp \5[1Vd[fh \fh \ P[\[ʃ9|5`[X[T[fj \fj \9|e[^_hH@j$SQhH@j$S`h@@j$]SEt]Et t]]E t t]Ѓ5 \h V$ UT[fj \ЋX[Ã9* P[\[f h \9JE]E]Et]Et]f jRXZuuS 1Sj \\$h \$W_Xuu_S Sj \$h \d[P$$WY^uu)S Sj \`[P$\$h \$_WXZuuR Sj \`[P$$h \d[P$$!WyUd[fh \fh \ P[\[9X[T[`[fj \fj \9e[^_ÃUWVS\uEEEE<Í}}Cf%!#_v  u:CA-vwI.?u<>Vf{{f;;>EEf [ PHtn:uEre } ztq}fE fEmZ mmZm1}I:w@Sj ÐU[u 5[CKfOfUS t[p[_Q $]E$S $]E$EP $T[X[$$$$$]E$EHP $P[\[$$]E$E PuZ ]fUS t[p[_Q $]E$S $]E$EP $T[X[$$$$$]E$]S $P[\[$$]E$E Pu ]ÐUWVS [fUt4)ЉtO GOGJuGWUWt`wf< w<+vFt:ƒ0ރ?PPE$S$$BPh` f\t"P8)ЉZOe[^_fUWVSEEEU UE)EP[E\[U<}5T[X[ t[)UUU999u|9]|:[ [[ЉE[ȉEU Me[^_BfSWuu35\[5P[9 ;}SVuW ;=P[|9}E)Eu)WEPubRWVu\[P[9 9}uSVWP[E9|9]|F5T[X[vE+EPEPEPu5\[5P[;fEEP+EPEPub5T[X[P[UvEEPEPEPu&\[P[1fUWVSEEu [[[PAP)RQ[Qjj5[FfG1ۋ [=[7hEu91҃?PP P$$W$$Rh@ }tX[ [[EE91?PP)ʍP$\$E$Wh@l } tR=[[[EE91Ƀ?PP:P$\$E$Qh@ [ [[P[PRQTe[^_ÐEfƍH [gfff)EWfEf h D$ Dh?1SSSF_XL[\$H[$SSFUWVS,}lPl[Uj5[RG[f` \[fb \fX \DfZ \[f\ \[f^ \[+5(\h F$CXuU Z \]E$1S_D Sb \\$` \$HXE Z \]E$X?V"D Sb \$\ \` \P$$VHYXZ \EP $]E$SC S^ \b \P$\$` \$HXZZ \EP $]E$VC S^ \b \P$$\ \` \P$$GF [K )f\ \[h` \5[hX \5[D[ [[P[PRQFe[^_Ív1[ h0B$0A$0A$0Ah` \5[hX \5 [yC 5$\h D$AXuU Z \]E$1SB Sb \\$` \$QF_E Z \]E$\ \@ uU [P<$]E$A Sb \$\ \` \P$$EY^Z \EP $]E$S_A S^ \b \P$\$` \$EXZZ \EP $]E$\ \@E [P<$]E$@ S^ \b \P$$\ \` \P$$ElCvU[uaj5[B?PP1PPjh[p[ [ [P[PRQÍv h0?$0{?$0o?$0c?yvUh[fP \l[fR \fT \fV \ [uij5[ B[uhP \5[j5[@[ [[P[PRQÍv h0>$0>$0>$0>qvU[umj5[YA?PP1PPjh[f[f[f[f[ hh+jjÐ h0=$0=$0=$0=mvUS[j5[@?PP1PPjh['P[f[ T[f [\[f[X[f[ۃ PRQSEh[fH \l[fJ \fL \fN \[uj5[hH \5[>]zf h0<$0<$0<$0<vUS][uuj5[u??PP[\$[$Sh`[ [ [P[PRQ,]à h0<$0;$0;$0;evUWVS ][j5[>=h[l[EtT1fFC< w?PPE$W$$Ph` FC~če[^_ÐSuS뗐돐 h0;$0;$0:$0:?vUWVSLu [/[ [[P[PRQZYVux[=|[ ) ])ÉЃp[P[؉EЃt[T[؉EMME_]9]O E;A=]]6v=|[GEE]9]EE9Ax[]č)1B9;Y}E]E]ؐ jEt[uP $_ɉ$$E]E$ʉp[P $ɉ$$E]E$UID Ph@-FCx[ B 99Y=|[?v1EEE9E ]9YEE=x[W019;Y|=Eԡ|[@;EvEE9A])y1뺃 jEt[EP$$p[EP$$UID Ph@,FC=x[ W 9^9YEԡ|[@;E\e[^_à h07$07$0w7$0k7_X?PP1PPjh[P[f[ T[f [\[f[X[f[ۃ PRQSh[fH \l[fJ \fL \fN \[uj5[hH \5[t8t]ۉ]E؉EEuIU]Ít&'UWVSOõR 5)t$1ED$E D$E$9rރ [^_]Ë$ÐUStfЋu[]ÐUS[(R;Y[5d7L7X766666666,686D6P6\6h6t6666777(747@76666-DT! @= E %3c %i %12sError from Asylum: %sBonus 10000--dumpmusicAsylum%s %i %s %i %s %i %s %i %s %i %s %i %s %i %s %i %s %i %s %i %s %i %s %i %s %i %s %c%c%c %s>p>`>P>@>0>; >>>====rbwb/EgoHighScoresr+bw+b/PsycheHighScores/IdHighScores/ExtendedHighScores/usr/share/games/asylum/var/games/asylum../hiscoresHOMEabError %i Opening %s read-only, high scores will not be saved Couldn't open %s, check if the directory exists Running as uninstalled, looking for files in local directory. Couldn't find resources directory %s llllll`llllllXlllll4lmmmmmmpmmmmmmhmmmmm\mHB9CBC?@ @@%i: x=%i y=%i wid=%i hei=%i: bad idea Failed to set video mode: %s Bad message character %c (%i)Bad string %s- GAME OVER - Snuffed It! Let's Go!??B@BB@@:>?=?<CpA?;0** |+0 -T .t / |2 2 ,3 h3 3@ 4` 4 X5 5 p6 7$ 7L (9t : ; T; ; ; P<@ 8=d > ? |@ 4E E G4 OX P| T U W Zh\<D^`4`bXdehxkDnl0q4tЁ(@ȉhP8 Xh` Pp,d,hPPx(Dl 8<`|0$@d<Tx`P4Pdp,l 0hX40<d8<Dl(,Ldp 48ppph<h!!!X"d#<#X@'8),,-x--0.L@.h$/01`4 48 6h 6 @7 7 7 7!l:D! ;t!8"@P"$B|"xC"F"G#0G,#I\#J# L#._.}..0n.j. |.b.J.n.o.A.0[.,"`AB D\.m.r..X.k."l1AB d. "1AB d. ("d AB F%. U.8(#AB F.Q. .F. Q.J. R. d#AB Is.#l*AB ].#AB [. #AB FL.#@AB [.,$PAB I..N. 4$AB II.$X$!AB Fo.w. $,#LAB T.Y.R.($x#AB Fi.F.$M.($%AB Fp.K.$L.($(&AB Fr.H.c. (%&~AB I.$L%`*oAB D].a.K.Z.,t%*AB F].G.$K.[.$8%,AB FC.3. .j.0I.Y. O. %05AB ID. & 2PAB B|.(&\24AB g.D&2ZAB W.`&2{AB DU.(&|3AB I.G. Y.4&5OAB F_... O.K. U.&`7AB K.'x7AB K.<'71AB Fc....x. y.. K.x. K.D\':|AB D.. s.J.|.e.PM.H.s.0O.N.H.'@>*AB J.'l>YAB L.('>?AB Fy.X. (CLAB F.0(TECAB v. L(ECAB v. h(ESAB F. (0F8AB k. ((hFMAB F..(HEAB x. (I/AB b. )0I*AB U.M.()\IAB D. H)JAB D. h)JAB F. )K"AB F.()MCAB Fj.|. .0)4PAB Fl..H.R. *TAB W.]. l.4*hUAB C. T*HVAB W.]. z.,x*W%AB DX.]. N.[.O.$*(XAB DW.q. l.(*XAB F[.X. @.4*YtAB Ft.. \.}. N.X.\2 2Vy  ^o0   @0oooVfvƔ֔&6FVfvƕ֕&6FVfvƖ֖&6FVfvƗ֗&6FVfvƘ֘&6FVfvƙ֙GameScreenChatScreenFSPBlokeBrainFSPBlocksBackfileNeurons/BackfileNeurons/Cell1FSPExploFSPCharsFSPAliens./Resources/./Extend/./Id/./Psyche/./Ego/./Ego/Music1./Ego/Music2./Psyche/Music1./Psyche/Music2./Id/Music1./Id/Music2./Resources/Music1./Resources/Music2LeftKeysymRightKeysymUpKeysymDownKeysymFireKeysymSoundTypeSoundQFullScreenOpenGLScreenSizeScreenScaleSoundVolumeMusicVolumeMentalZoneInitialsYouYou are now permitted to play the ID!!! /.asylum/.asylum_game-1. No Sound-2. 4 Channels-3. 4 Channels-4. 8 Channels-5. Normal Quality-6. High Quality-7. Overdrive-5. Speaker on-1. Full Screen-2. Use OpenGL-4. Half scale 3. 320 x 256 3. 640 x 512 3. 960 x 768 3. 1280 x 1024GCC: (Debian 4.3.3-14) 4.3.3GCC: (Debian 4.3.3-14) 4.3.3GCC: (Debian 4.3.3-14) 4.3.3GCC: (Debian 4.3.3-14) 4.3.3GCC: (Debian 4.3.3-14) 4.3.3GCC: (Debian 4.3.3-14) 4.3.3GCC: (Debian 4.3.3-14) 4.3.3GCC: (Debian 4.3.3-14) 4.3.3GCC: (Debian 4.3.3-14) 4.3.3GCC: (Debian 4.3.3-14) 4.3.3GCC: (Debian 4.3.3-14) 4.3.3GCC: (Debian 4.3.3-14) 4.3.3GCC: (Debian 4.3.3-14) 4.3.3GCC: (Debian 4.3.3-14) 4.3.3GCC: (Debian 4.3.3-14) 4.3.3GCC: (Debian 4.3.3-14) 4.3.3GCC: (Debian 4.3.3-14) 4.3.3"$ "^$<_!|u_IO_stdin_usedx../sysdeps/i386/elf/start.S/build/buildd-eglibc_2.9-23-i386-W8LlLZ/eglibc-2.9/csuGNU AS 2.19.51][O B=Qint8X)$_O_/build/buildd-eglibc_2.9-23-i386-W8LlLZ/eglibc-2.9/build-tree/i386-libc/csu/crti.S/build/buildd-eglibc_2.9-23-i386-W8LlLZ/eglibc-2.9/csuGNU AS 2.19.51hqG /tmp/ccjtZ0P5.s/build/buildd-eglibc_2.9-23-i386-W8LlLZ/eglibc-2.9/csuGNU AS 2.19.51%% $ > $ > $ > 4: ; I?  &IU%U%W2 ../sysdeps/i386/elfstart.S3!4=%" YZ!"\[# init.c /build/buildd-eglibc_2.9-23-i386-W8LlLZ/eglibc-2.9/build-tree/i386-libc/csu../sysdeps/genericcrti.Sinitfini.c !/!=Z!gg//^!/!=Z!P& /tmpccjtZ0P5.s<!!!_,!!!GNU C 4.3.3short unsigned intshort int_IO_stdin_usedlong long unsigned intunsigned char/build/buildd-eglibc_2.9-23-i386-W8LlLZ/eglibc-2.9/csuinit.clong long int2^^<@__.symtab.strtab.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bss.comment.debug_aranges.debug_pubnames.debug_info.debug_abbrev.debug_line.debug_str.debug_ranges44#HH 1hh$HDoHN @V00 ^okoz 00 @@ 0@@^ _   u }4+00001  1t2   6`UU  6 8p 8%8$':5\;A0<L=@=Z,E@4%U ly24Hh0 0 @  @ ^ _ u}   !"!/< R$a(o{$^IIIII*I5I@GOn\erzjs@ \t t t ;`t dH \p \h \x \` \ X \/P \IRcv X?B%I(H̛I`# # 7PME&~VhupplCLo8tYI I$+hU9ICT_71u](@[htC$l[  [= H/05QbtBĿ$MoаL|FI. %D5@GOpE_mu1\C K"d0[<I%@ 8.-5L&sF|3Tfw$c̲  ! A ( \. bA iX 8Zs  V [ d <9 $ hp E Ԗ5 hC , ,#L EC% [0 (I  T Tok DGw \I   I $_ P \Q. (R J& 0Z&> 8?T kg H} T D  I ,E `K I P l  %   @i 7h( 7 TJ @%] `f Ta  U \  I tC  0F8    9h' ,F aW Ih @  I  _ S  I P ԥ\",OL<b0_pM\24jX\l>Y  I A/:DGITl yT WHV`7t4(P 0ܡYEX#rjCD~K0 0nDHET  [ 1kDILITd z@ ˳H|s `CI IIN&xZrDIRIYgk2ZdE6@ IX%q<3hyL,bn@\H 0oKX$g(&tY+XZ=[B`LSU ^I(kIsC}B9S;t^lجp\+I/,LAf Od.`lQL}kpI,Ig*l*4!D)5KD;IE:|`s_XPIZ& P d.=G @OY`*ot!IEIܛOIxyFԨS$I1I=I6J|A[į[n+H{ (\[@` aj I$PAb7@INB ^pIuI4Pm 2P5O%9 )J6ECQ<X,*gxx#$ Ih0PXf`"h,4Q_eizP؇dOLTA-̫LB4*0e>VPJ(cQpX5dP?:?H IB`܊D@Ibc@\S*^AIL`\zxI0I*Bd bI IIPI K0$Yt2 8@ILSdCXJr@wO~I̢*N`\ K. B R IZ xf As C m   [ x I  @ID !l !~K(/!F!T!I_!Id!In!̴ y!!(-!8C"!ȸ!!0! !E !@!"d"B!","I6"E"pV"@~K^"ipl"`(t"Dz"8h""Ș"I"$" "I" "`]"I"J #3#(XA#8 N#@La# Vh#Iy#t#d:&#:h#I#I#I## I#n#$$*$7$(IF$x<a$r$d$$$I$$$A$t$ \$T%` %%I(%1%H:%I@% M%T^%Il%%%i%I%%ܻ]%<%% &&!&(@6&hFM^&Ze& x&CL&;& &X&`~K(&&j&&X'I 'x7%'6='AN'?e'l1'"t'H;' '\|''0'f:(k (I(I#(71(A(hT(V`(r(`^Z(@>*(I(TEC(I(p(_((9(I )I)L))))@)ĩ_)8|)I))O)LJ))2{**I*<* I*_U*op*z*F*pF*;h**( ***9 *M+I+B&+8+[@+@S+ Qf+$Iq+~K++++X+++L"+I++ ,Y_ ,k7, [@,M,b,r,,`%Z,,,,dj<,`,,I,T  -I-D-E--\6-W%J-Z- e-s {-P^--_--I-<$-ijT-k .|M.DG,.I3.iK.ײ U.\Ko.9.T6.H:.I.jp.h.p.3.I. /,6/ ./k?/p7I/U/-c/|/I// /D/@/ //)/0մ0I 0d20, A0GT0\`0[ k0 0N0~00`0I0a0\0h31I1k +1@41=hC1R1X1C0g110E11XZ1I1v1$\1 l1l2H 2Ț^2/+2p=2H2Y2j2t2Iinit.ccrtstuff.c__CTOR_LIST____DTOR_LIST____JCR_LIST____do_global_dtors_auxcompleted.5723dtor_idx.5725frame_dummy__CTOR_END____FRAME_END____JCR_END____do_global_ctors_auxalien.casylum.cbullet.cfile.c_ZL10score_path_ZL13resource_pathkeyboard.c_ZL8keyboard_ZL5mouse_ZL7exposed_ZL6keybuf_ZL6unibufmaze.cmenus.c_ZL8defscoreplayer.cprojectile.csound.c_ZZ10init_mulawvE4C.30vdu.c_ZZ25swi_fastspr_setclipwindowiiiiE4clip_ZZ25swi_fastspr_setclipwindowiiiiE4C.60_ZZ25swi_fastspr_setclipwindowiiiiE4C.61_ZZ25swi_fastspr_setclipwindowiiiiE4C.62_ZZ25swi_fastspr_setclipwindowiiiiE4C.63_ZZ13scorewipereadvE9scorearea_ZZ8backdropiiE12back_to_blit_ZZ8backdropiiE11loc_to_blit_ZZ13fspplotscaledP14fastspr_spritecffffE3pos_ZZ12showstrengthiE11strengthloc_ZZ12showstrengthiE12strengthpart_ZZ9scorewipevE9scorearea_DYNAMIC__init_array_end__init_array_start_GLOBAL_OFFSET_TABLE__Z14getneuronfilesi_Z12errorhandlervCHUNK_WEAPON_1_Z12crumblecheckPc_Z8colcheckP5alentii_Z9deleteobjP5alent_Z11elecdestroyPcrocketflagalspradr_Z11foundtargetiiii_Z9tunesoundv_Z9dumpmusiciPPcstrcat@@GLIBC_2.0SDL_FillRect_Z8scoreaddvcolchptrusefread@@GLIBC_2.0plscoreSDL_QuitSDL_Flip_Z13zonecheatreadPi_Z13init_splittabv_Z11alshootfastP5alentfmod@@GLIBC_2.0_Z11save_playerPhpladr3fraudalent_Z9scorewipev_Z10firerocketvcolchplace_Z6goblamv_Z16init_strengthcolv_Z8platlandP5alentc_Z6dofirev_Z9cheatreadvvduvar_Z10plotrocketv_Z10abort_gamev_Z15swi_stasis_linkiiChatScreengreyness_Z12nodownifplatP5alent_Z11showloadingv_Z13choosecontrolv_Z25swi_fastspr_setclipwindowiiiipsychemusic2path_Z7alien14P5alent_Z9updatehstvspeed3_Z16explocreatequietiiiiiiP5alent_Z8plotarmsv_Z10alpossjumpP5alent_Z10dyingbonusP5alent_Z19swi_stasis_volslideiii_Z10plcolcheckiiiilagerctralienpath_Z10addtoscorei_Z12getgamefilesvglBegin_Z10exitneuroni_Z16setdefaultscoresv_Z10causeexploP7projent_Z8showtextv_edata_Z12cenplotdyingP14fastspr_spriteciii_Z10init_mulawvmusicdumpfile_Z6rejoinvglDisablexposmax_Z8loselifevglViewportCHUNK_ATOMsplittabsound2_Z6alien4P5alent_Z8backprepPc_Z11save_alentsPh_Z6alien9P5alent_Z9bonusnumbiMix_PlayChannelTimed_Z9tunespeedv_Z10load_voiceiPKc_Z11open_scoresvchatscreenpathMix_HookMusic_Z7makeobjiiiiiiialspintab_Z11startplayerv_Z12losehandlersvbatex_Z13completedzonev_Z17init_projsplittabv_Z15alienstoppedflyP5alent_Z9megabonusPc_Z10playerfirevredness_Z11electrocutePc_Z11setdefaultsv_Z10tunevolumev_translowlimarm3_Z8bonusgotPcypos_Z6alien3P5alent_Z10init_audiov_Z12deathmessagevbacksprite_Z13backtranslatePcPiS0_data_start_Z11almightjumpP5alent_Z7getzonev_Z7cenplotP14fastspr_spritecii_Z10atomrocketP7projentPc_Z11fuelairprocvinitplx_IO_stdin_used_Z10causeexploP5alent_Z10initbultabv_Z11bulcolchaddP5alent_Z11texthandleri_Z17read_littleendianPj_Z16retrievebackdropv_Z13init_keyboardv_Z16swi_sound_qtempoixtemp_Z8plotmpmgvglTexImage2DCHUNK_BONUS_2_Z11bulcolcheckiivoicepladr4sprhy_Z15update_keyboardvcharpath_Z12launchrocketv_Z12explogomaybeiiiiiiP5alent_bonuslowCHUNK_SPINFIREstore_player_state_Z13getmusicfilesvcolchptr_Z10swi_osgbpbiP8_IO_FILEPcS1_iSDL_RWFromFilebuffer_Z17swi_sound_controliiiiglClipPlaneCHUNK_ELEC_1plzone_Z7projectv_Z14message_scrollPKc_Z7alien10P5alentgamescreenpath_megabonuslim_Z13explogonopyroiiiiiiP5alent_Z9normtelepPcicfuelairlastframe_Z18explogonopyroquietiiiiiiP5alentframeincksgetuid@@GLIBC_2.0_fp_hw_Z13foundmakeprojP7projentiiiiiii_Z12screenwakeupii_Z8fuelbombPcstrncat@@GLIBC_2.0main_Z15normbombsurvivePc_Z18initialize_spritesPcP14fastspr_spriteiS__Z7alsleepiP5alent_Z8dowakeupPc_Z10platonheadP5alentS0_i_Z5telepv_Z9writeclipv_Z14find_resourcesvfputc@@GLIBC_2.0_Z15init_chunk_mazev_Z13scorewipereadvsound1glTexCoord2fplotterofsfwrite@@GLIBC_2.0_Z20c_array_initializersv_Z7destroyPcfueltabwrite_Z10rocketpairP7projent__DTOR_END___Z14showchatscoresvneuronpath_Z11foundmarkerPc_Z14showchatscreenv_Z21initialize_gamescreenPc_Z6noleftP5alent_Z9plattoobjPc_Z12filesyserrorvgetgid@@GLIBC_2.0malloc@@GLIBC_2.0_Z9projhitalP5alenti_Z10findplayerPiS__Z14hamsterspecialP5alent__dso_handle_Z17loadhammered_gamePPcS_S_projctrCHUNK_BULLET_3_Z17osbyte_79_unicodei_Z8savegamev_Z13mazescaleplotP14fastspr_spritecff_Z5exploP5alenttexttabofs_Z11alienwanderP5alentPc_Z9swi_oscrciPcS_iwindctrinitplyconfig_keywords_Z9projsplitP7projentblockadrdeathmusicpathgluBuild2DMipmapsfprintf@@GLIBC_2.0glFrustum_Z6alkillP5alent_Z10alspinfireP5alentegomusic2pathcurrentzonebonusctrbonusyposfalling_Z4initv_Z18swi_blitz_hammeropiPcS_S_CHUNK_BONUS_1pladr5SDL_PollEvent_Z17swi_joystick_readiPiS__Z10make_soundciiic_Z11releaseclipv_Z5plat4P5alent_Z11plattoexploP5alent_Z9plotdyingP14fastspr_spriteciiiplotalexplopathCHUNK_ELEC_2_Z11softmakeobjiiiiiii_Z9osbyte_81i_Z13jumpyalwanderP5alent_Z9emberbombPcP5alentplatsandstr_Z7norightP5alent_Z10rocketblamv_Z10bonusresetvMix_OpenAudio_Z9translateii_Z12reinitplayervsound4_Z8atombombPcrandom@@GLIBC_2.0_Z11find_configi_Z11init_soundsv_Z8exploinsP5alent_Z7alien11P5alentclip_Z11showerrorokvpsychepathCHUNK_OBJGOTblamctr_Z5setupv_Z6bonus1vSDL_Delay_Z7bulletsv_Z7showhstvdodgypointer_finicolchtabuse_Z15alspinpowerfireP5alentiSDL_GetError_Z8wakeupalii_Z7fspplotP14fastspr_spriteciineuronnumber_Z8boxcheckiiPPcS_S_egomusic1path_Z11initprojtabvCHUNK_EXPLO_Z7makebuliiiiii_extendnoCHUNK_JUMPCHUNK_ROCKET_Z9seeifwindPcPiS0_i_Z11bidforsoundicciiiciP9Mix_Chunk_Z11bonuscommoniii_Z19swi_bodgemusic_stopv_Z7getarmsv_Z7alshootP5alentcharsokglBlendFuncmusicbonusxpos_Z7vduread14asylum_optionsstrncpy@@GLIBC_2.0fflush@@GLIBC_2.0Mix_VolumeMusicSDL_EnableUNICODE_alplathighlimMix_LoadMUS_Z12makescoreobjiiielectrocuting_Z17read_littleendianPhSDL_UpperBlit_Z16init_chunk_alienv_Z9sortbonuscMix_SetPanninggluLookAtstorageglColor4f_Z20swi_bodgemusic_startii_Z10soundclaimicciiiciP9Mix_ChunkCHUNK_WEAPON_4_Z6bcheckvCHUNK_SHUTDOWN_1setregid@@GLIBC_2.0_Z11switchcolchvpladr6_Z9windcheckv_Z7preludevsavestart_Z8platfireP5alentboardhighlimatombombctr_Z8loadzonev_Z11prepfueltabv_Z7platinsP5alentc_Z12options_menui_Z14init_alspintabvboobyvectabgreytexArcScreen_Z11choosestickvfseek@@GLIBC_2.0glRectf_Z21swi_bodgemusic_volumei_Z10filelengthPcS_hvec_Z14restore_alentsPh_Z13getvitalfilesvSDL_Initplweaponspeed_Z10screensavevgetenv@@GLIBC_2.0vvecfputs@@GLIBC_2.0plstrength_Z12showstrengthi_Z9osbyte_7avMix_FreeMusic_Z15set_player_clipv_Z6decompP14fastspr_spritePc_Z15soundclaimmaybeicciiiciP9Mix_Chunk_Z11change_zonei_Z8loadgamevsin@@GLIBC_2.0cheatpermitsound3_Z4noupP5alentSDL_SetVideoModeCHUNK_SHOOTNUTTER_Z15soundclaimexploicciiiciP9Mix_ChunkglEnablebulctrfirelastframe_Z9find_gamei_Z6alien8P5alent_Z13loadvitalfilePPcS_S_SDL_WM_SetCaptioncharsadr_Z11fntranslateii__libc_start_main@@GLIBC_2.0_Z10swi_osfileiPKcPcS1_chdir@@GLIBC_2.0_Z13restartplayerv_Z9eleccheckPc_start_Z7explogoiiiiiiP5alent_Z9showerrorv_Z14pllosestrengthialonobj_Z12prepstrengthv_Z9errorwaitv_Z12wipesoundtabv_Z11embertrygasPcP5alent_Z9set_pathsvbulcolchtab_Z13alshootmentalP5alent_Z8blamfirev_Z9showscorePc_Z6procalP5alentoldcolchtab_Z14sdl_music_hookPvPhi_Z12explogoquietiiiiiiP5alent_nuttertargetfscanf@@GLIBC_2.0_Z10loadscoresPcirocketblamctr_Z9plotscorev_Z11deletepointv_Z9plotbonuscs_Z5plat2P5alentblokeadr_Z12plotmpmgblamv_Z12startmessagev_Z8backdropii_Z8permitidvMix_HaltMusicsprly_Z12filenottherevhighscorearea_Z9bonusplotv_Z9linecheckPcS_S_projofs_Z9fatalfilev_Z10savescoresPcipalette_Z8seestarsv__i686.get_pc_thunk.bxplscoreadd_IO_getc@@GLIBC_2.0_Z20update_show_strengthv_Z17alshootnutterplusP5alentfueltabofs_Z10switchbankv_Z8boardregv_Z11rocketsplitP7projenthstindexCHUNK_SHUTDOWN_2pladr7fspareatplface_Z4gamev_Z11plbombcheckPc_Z8mazeplotii_init_Z11load_voicesvneuronadrxpos_Z12embertrybombPcP5alentbankidpathCHUNK_TELEP_2SDL_SetClipRect_Z9wipealtabvcolchofs_Z18embertrybombtargetPcP5alent_Z11shoottargetPc_Z10fallinggapP5alent_Z10headonroofP5alentS0_ii_Z12platsurefireP5alent_Jv_RegisterClasses_Z10choosekeysvyposmaxbulcolchptrmasterplotalstore_for_neuronsound6_Z10draw_blockP14fastspr_spriteiffi_Z9blokeplotP14fastspr_spriteciimulaw_Z9boobybombPcrocketctr_Z5plat5P5alentCHUNK_STUNNED_Z12comparescorePcrocketbursttab_Z17init_chunk_playervglBindTexturebonustimerplhxneuronctrconfignamefree@@GLIBC_2.0_Z9getrocketv_Z6savealPh_Z11embercreateiiisincos@@GLIBC_2.1_Z11bonusobjgotP5alentbackpathextendpathbackadr_Z8nomemoryv_Z12redraw_bonusvrate50Mix_VolumeplatuphitglLoadIdentity_Z11player_deadvprojadr_transhighlimoptionssprlx_bonushighglEnd_Z10normalbombPcpluphit_Z12plattoobjinsPcibuladrfueltabctrblockpath_Z20restore_player_statePhboardwidth_Z13blokeplot_cenP14fastspr_spriteciistrncmp@@GLIBC_2.0_Z9showlivesiresourcepathstore_for_savegamebulofsCHUNK_SHUTDOWN_3_Z8tunegamev_Z10saveconfigv_targetlowlimpladr8boardlowlimCHUNK_WEAPON_2_Z6alien6P5alentCHUNK_BLAM_Z16causeexplonopyroP5alentglTexParameteriCHUNK_SHOOTSDL_LockSurfaceglMatrixModeCHUNK_BLAMFIRE_Z13alientestplatP5alentPcpsychemusic1path_Z17swi_sound_speakeriboardpath__data_startplfired_Z8makeprojiiiiiiglGenTextures_Z12deadbonuslimPc_Z13gotallneuronsv_end_Z5plat3P5alentexploadrfgetc@@GLIBC_2.0score_filetunevol1brainadrlivesidmusic2path_Z6alien7P5alentCHUNK_TELEP_3SDL_CreateRGBSurface_Z16initialize_musici_Z19init_rocketbursttabvplframeboardadr_Z13showhighscorev_Z10bonuscheckv_Z5plat1P5alent_Z10dosaveconfv_Z6alfirevSDL_UnlockSurface_Z15getlevelspritesv_Z13fspplotscaledP14fastspr_spritecffffsound5_Z13initrockettabv_Z7messageiiffPKc_Z10loadconfigv_Z6alien5P5alent_Z5boobyP5alentprojsplittabexit@@GLIBC_2.0_Z4riseP5alentS0_iiprintf@@GLIBC_2.0ytempplhy_Z21initialize_chatscreenPc_Z12alienstoppedP5alent_Z11exithandlerv_Z16foundresetmarkerPc_Z16causeexplonopyroP7projent_Z16bidforsoundforceicciiiciP9Mix_Chunk_Z11enterneuroni__bss_start_Z13escapehandlerv_Z7readopti_Z6alien2P5alent_Z9dropprivsv_Z9osbyte_7cvextendingpllx_Z9scorezerovfeof@@GLIBC_2.0_Z8loadfilePPcS_S_currentpath_Z11weaponcheckPc__libc_csu_init_Z11clearkeybufvplweapontype_Z14endgamemessagevpladr1_Z5emberP5alentegopath_Z10decorationP5alent_Z6nodownP5alentCHUNK_WEAPON_3shutdownctrsprhxMix_PlayMusic_Z11flyingbonusP5alent_Z19alshootnuttermentalP5alent_Z11explocreateiiiiiiP5alenttelepxpos_Z14plotrocketblamv_Z17alienwandernojumpP5alent_Z13embertryboobyPcP5alent_Z7alien13P5alent_Z23swi_fastspr_clearwindowvmainmusicpathfueltabread__gxx_personality_v0@@CXXABI_1.3idmusic1path_platlowlim_Z15almightwelljumpP5alent_Z10bonusbonusv_Z8procatomPc_Z8getfilesv_powertargetspeed1CHUNK_BULLET_1_Z11fuelairbombPcsetreuid@@GLIBC_2.0_Z11checkifarm3v_Z11foundmakealP5alentiiiiiiiisnuffctralonplat_Z12block_weaponcwipescr_Z13maketestsoundi_Z8scoreobjP5alentCHUNK_FIREsound_available_Z7getmpmgv_Z8albcheckP5alent_Z9selectkeyiiiiPKc_Z11wipetexttabv_Z8normbombPcP5alentlaststrength_Z9showlivesvSDL_GL_SetAttribute_Z17init_chunk_bulletv_Z17swi_removecursorsvoggmusicMix_GetChunk_Z15plsetneuronzoneiMix_HaltChannelSDL_GL_SwapBufferstuneloadMix_Playing_Z12init_palettev_Z18loadhammered_levelPPcS_S__Z9bombcheckPcneuronbackpathplly_Z11atomexplogoiiiiiiP5alentfirerateframectr_Z6blowupP5alentcolchtab_Z14showgamescreenvsinf@@GLIBC_2.0_Z6plmovev_Z7keyreadP9key_state__libc_csu_finipow@@GLIBC_2.0_plathighlimfclose@@GLIBC_2.1hiddenplatctr_Z10elecdeleteiPc_Z8extenderP5alent_Z14readmousestatev_Z16bulcolchaddshortP5alent_Z10initweaponvpladr2_Z12loadhammeredPPcS_S_blokepath_Z14almightjumpinsP5alent_Z11soundupdatev_Z7relplotP14fastspr_spritecii_Z13checkifextendvtelepctr_blimoldcolchptr_Z9osbyte_79i_Z6alien1P5alentCHUNK_FUELAIR_Z7dvcheckP5alent_Z9settestalv_Z14init_rockettabv_Z11need_redrawv_Z5movalv_Z7badloadv_Z9normresetv_Z13alshootnutterP5alentCHUNK_TELEP_1speed2stderr@@GLIBC_2.0_Z11soundfillinv_Z9adjustoptv__gmon_start__CHUNK_SPINPOWERFIREidpermitstringstrcpy@@GLIBC_2.0savegamenameCHUNK_ELEC_3_Z12badlevelloadvCHUNK_BULLET_2_Z13getlevelfilesv_Z7getvarsvGameScreen_Z14restore_playerPh_Z11alheadcheckvsound7_Z19swi_bodgemusic_loadiPc_Z10deletetwinPctelepypos_Z17save_player_statePh_Z9seeifdeadv_Z14swi_blitz_waitirockettab_Z19swi_readescapestatevsizedesc_targethighlimSDL_ShowCursoralctr_Z9restorealPh_Z14alienwanderflyP5alent_Z11platdestroyP5alent_Z9block_gasc_Z18write_littleendianPhjrockettabadr_Z11plplattoobjPcredtex_Z8bonuslimPc_Z10playerplotialadr_Z8colchaddP5alent_Z9bonusfindv_Z7alien12P5alentglVertex3ffopen@@GLIBC_2.1ftell@@GLIBC_2.0_Z18swi_stasis_controliibonusreplotasylum-0.3.2/hiscores/.emptyfile0000644000175000017500000000000010646466014015311 0ustar hughhugh