excellent-bifurcation-0.0.20071015/0000755000175000017500000000000010707334133016054 5ustar miriammiriamexcellent-bifurcation-0.0.20071015/Readme.txt0000644000175000017500000000764210560227636020031 0ustar miriammiriamExcellent Bifurcation Version 1.0 Copyright 2007 Linley Henzell This is my entry for the www.shmup-dev.com 2007 Autofire competition! It's written in C using gcc/MingW (compiler), Allegro (game library) and Code::Blocks (IDE). The 8-bit graphics were done with The GIMP or generated procedurally. The sound and music were done using Psycle, Audacity, and a number of free VSTs (especially Blitz and GameFX by Jan-Marco Edelmann (voskomo)). All the code, graphics and sound are mine, although I have to acknowledge Kenta Cho's rRootage and Parsec47 for inspiring elements of the style of stage 2. Ikaruga also gave me some ideas (although I've never actually played it ). ********************************************** INSTRUCTIONS etc ********************************************** The aliens have attacked, and their ability to exist in either or both of their world and ours has given them an almost unsurpassable advantage. Take command of a special fighter craft capable of existing in both realities at once and drive them back! The form your fighter takes on the left has double fast-firing cannons and can charge to release up to eight seekers. It is ideal for destroying small and weak but numerous enemies. The right-hand form has a single powerful cannon which fires slowly but does far more damage, and is more suited to taking out larger enemies. It can charge up to release a wave which passes through things, damaging them as it goes (unlike the beam weapons, which only hit anything once no matter how thick it is). You can switch them between the worlds depending on what kind of firepower you need where. Default controls (but they're redefinable): Move around with the arrow keys; Z fires; X charges your charged weapons; C switches your two forms between the different worlds; A turns autofire on/off (autofire is just like holding down Z). The only vulnerable parts of your ship are the white parts at the centre. This means that the small form is much better at dodging than the large one. The only dangerous parts of bullets are the brightest (yellow or white) parts. Also, if you are shot down the form which was hit emits a green shockwave instead of a yellow one. You get an extra life each 1500 points. There are three difficulty levels: Easy (good for beginners, but not really all that easy); Medium (for people who have got used to the bifurcation); and Hard (for that guy I saw on Youtube playing Ikaruga with both players at once). The game will probably seem impossible at first, but after a bit of practice the two halves of your brain will start to separate and the pathways between bullets will become clear. You can also choose to start on either Stage 1 or Stage 2. You can change settings like windowed vs fullscreen, volume and whether vsync is used by editing init.txt in any text editor (I didn't want to spend competition time writing a proper menu interface for setting options). Instructions are in the file. Personally I recommend playing in fullscreen, but the default is windowed. If you are having problems with skipping frames, close down other applications and try fullscreen - it seems to help. Turning vsync off should also help performance, but if your computer was built in the last 5 years it shouldn't have any trouble running this game. I take no responsibility for any damage or alterations this piece of software may cause to your computer or any part of your nervous system. I'll probably get around to releasing the source code sometime soon, so if you're interested let me know. You are more than welcome to redistribute and otherwise copy the binary. If you like Excellent Bifurcation, you might want to look at some of my other games (easily found on the web): Overgod Lacewing Captain Pork's World of Violence (not so good) Captain Pork's Revenge (not great either) Crawl Any comments/queries/complaints to l_henzell@yahoo.com.au. Bye! Linley excellent-bifurcation-0.0.20071015/wavs/0000755000175000017500000000000010560231254017031 5ustar miriammiriamexcellent-bifurcation-0.0.20071015/wavs/blip2.wav0000644000175000017500000005517610557747536020623 0ustar miriammiriamRIFFvZWAVEfmt DXdataRZs/\Cq,X@p)W>n)W@n'U=l(W@m(YAr*ZCt+^Ew/a"/-$IW Qkצ(аC{QB~070& "(wdl55}sCx7*?<:P/$V !!*ѝyZ܊߉o4h<5#*H" s#iݢƃ=& ܶz)<1;/%: r!")Ҿ@ ܫ F2CpFLS.;7,X#- #"H l)> ޣ܁!8;L2& "<ѩn?f/;-7+"* U" Fcޏprq&^;;0J% 8!xZ7Ӂāǵb6c 2;5[*1"8 "HG*͓8ߒߖB(C;g:Q/$ ! шGȋއ4;+4(w!K 0#x!Uĩߊvc d+B;8-#v! Z`ϖ Օߗ5;c3( !G "nHw %7IH߾ތ ,B;>8-g#! ̳NːK'!a8s;1&H S }"(>ПS#u7/#;6+"" p˷`׻(&:V;d0%c !H=^\LC1;95*!|"&g(('&%%L&&&&tچımiכ8ٍ@6Ltوىٻ޳1H;G5)!`"&Y(('|&%%8&&&&&w&l&r&}ŀо߯L׽S ڜUGgًٝ١t߱2;q4")b!"+&X((x'V&%%)&&&&x&`&V&%G֭M$xߎO99*bگia~٣ٵٵ033:3V( "N&S(^(L'0&%%&q&&&b&H&?&$ҊLnR[_Dv'ـz٘ٹg5:2' "l&M(@( '&%% &\&~&i&K&/&(&>$ř NW}B؅_ڇ6ْٖٱٜ06:1&7  #&I((&%o%%%L&g&S&1&&&"BV9$kԣݷHتׄغ~ڒA٫٭ٟzT%9]:/$2#'m('&%L%%%D&O&8&&%%8 2 F~Iށ5ڦڔ=ٿ(, +:8,"  $l'J('C&j%B%%%1&7&&%%%jQ(IKx*Yfښ6!%Ed1V:o4D)=!P!u%'''%?%D%%%&&%%%$=փlǠ&׉ٲڔ/)=8V5:1i&"2&''&%%>%%% &%%%%!)WʀBۓ%ڑ5'CQLچc='Y:9.##&#(|'1&7%$<%%%%%%%%F/?D[ؑ߹Y]S^xڌ5$EafbWONUUYYYYVXZY[Z]\]]_^^]`^a_`x$89/$C#&'c'&%%$%~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%]$[Ƌ͑ގږ؆ؕ٫3jLX{ڑڝڕڌڄڃڅڋڋڎڍڍڍڋڏڎڎڒڎڐڑڒڏڕڐڔړړڕږڔڔڙڕڕڙڗڙښRy,95*! O$&'&%$$%b%%%u%W%H%L%X%\%d%\%Z%W%W%V%Y%Y%X%U%W%V%U%U%T%S%R%T%S%Q%S%N%S%N%P%N%O%M%P%M%N%M%M%K%J%)=W܌]JAۂ:ډځڛںڽ 5 9/ %  ]"%L''%$q$$$O%b%L%*%%%%#%)%(%%%!%% %%%!%%%%%%%%%%%%%%%%%%%%%%%%%%%>Acǃbں ݓ/:ۨۃ!ں  vK38 1/&|!%&&%$C$[$$ %)%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$]mCPo4D8@Se":C;3,+/17343553677578:87::<:;;=>=>??>@A@@ABFADBECFEHEIGIHHJJJJKMMLMMKONQNRPQ.0f829'Z l$|&&%$$$g$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$~$$}$$~$~$}$|$}$z$~$z$x$|${$w$z$w$y$y$u$w$v$w$t$v$s$s$u$q$r$s$q$q$q$p$n$m$p$o$n$l$n$i$o$l$k$j$k$j$h$h$$P:g 2wݩ`\ܷqf{۟۴۶ۭۢ۝ۣۣ۠۩ۨۦۦۦ۩ۦ۩۩ۨ۫۬۩۪ۭ۬۬ۯۭ۫۰ۮۯ۰۱ۯ۲۲۲۴۱۴۳۴۶۶۵۸۴۸۸۹۷۹۹ۻۺۼۻۻۼ۽۾۽ۿ۽ۿ۾:K3r7E/$x)!x$&%$#m###<$U$C$!$ $$ $$$$$$$$$$$$$$$$$$$$ $$$ $ $ $ $ $ $ $ $ $$ $ $$$$$$$$$$$$$$$$$$##$############################################J  h,'#! &PHXU^JAW@RCF[HGFEE FmFF{FYFBFBFJFQFZFQFKFJFFFJFJFKFFFIFFFEFEFBF=FBF?F?F>F?F>F=F8F9F8F7F1F9F8F2F6F4F0F.F0F*F-F.F*F/F(F&F)F%F#F"F$F(FF#FFFFFFEA-evGHN2~#Y ܪQ̣, _ l,˳ y ,u`āʱAtބ v X?:!=5ӜBݸ#`c F aۏ] p7W8΂ a2ݩm &UxĹ)}üV#j gc纽oHD-45H E,, oخwlmؿΐX  w5[˪2o` N$$K_)t HX8h߯wY,^#y*Pְ~;jFŮow4M ʎ֨갲z0u-~[*N)lčClXR`vͣ CvUSH?=>0M!\4 BTS>I3@=>^1Y*@'?SSI@>?145PAa?fSSI@>]>2a,~Q'AT!TIk@=3>18<)@ThTId@=>a2NQQN-_O>NSoTJA=?4 mB>RTkJBA >>#4ym =?SWT=J@=P>,33 ?TTIJ@=?CEEqDeCoB4}v )4W!?TTVJ@=@CEErDxC3CxCC DDCCB4+ѭHkޫޟG# 0U3)e!##"!G!!!'"" "! "5ۙ۫ݳޯN+ji(03*% j!##"!G!{!!"""!I!Lڎ$ܥݝީ[$/3+ S x##"!E!x!!$"""!-"}{x{ ]pۄݩ޹Z%޲ (.}4,6! a##"!G!m!!"" "!!R jͼ^N3܅ܨ݊ޭh/4L+v 2 ##"!C!q!!"!""! i׬2C2K%ݩޤK,ݬ"31&6"##R"l!J!!!!""!! F\ z=BS޶ޅް *4r.##|p##(#!T!]!!"""!!WޞsK Z&}ܩݑ޲hd=03)P!##"!B!}!!!"""! rLaݘ]ްޜ:$140}%[ v"#j#5"g!R!!"$""!!TO7c[?Pd޹ރl,s4+--"NO ,## #!P!f!!" " "!!!!!!!!!!!!!!!!!!!!!!!!!!!!j̣zo#ܞݕޫX!  .t&5.1!%"$v#+"W!H!!".""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!D![. ۪r#ܧݜުQ "#   %~~'S5W0$P"$`#"X!P!! "(""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"$ Үӌf߮#3޳ޓ,# #ݗD$40%vm"#q#<"h!O!!"(""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" ZYރF^yާC%@LE;7::DEEBDFCHFILLPPTNUSWSV[TeLsK%S )5/#^"#"! ^!!!!!y!{!!!!!!!!!!!~!{!}!y!}!z!z!x!t!v!q!u!n!q!p!n!r!k!i!j!g!h!d!b!d!^!e![!b!_![![!e!ugՋa&cܛݼQ=ޖކޢ޾޻޾  $##('')'+0-.05/464;3?/F%F$2.#g!"" (  u ~ z | y w x z t t w r o n o o k n l j j e f d c c b ` c a Z [ [ Z X Z W U W U Q Q P O L N N K J I G D E B C A B @ = 9 < ; 9 8 3 8 3 6 0 1 , D P)؇x rfߴ  "#$''(+(*+,.0124336589;<>@=>B@BEHHHJIKLNLQQQRUTUVX[\]_^]``cbeighhljllnqrqtutvuxx|{}\/-3ɿ6uo`an}|x "'',+2152ï֫1DwvmCc J&BNJk@98;>?P?8>===>6>$>>===============================================z=}=x=}=u=o=p=i=i=d=b=a=^=_=X=U=T=M=Q=K=D=F=C=C===<=7=/=6=-=+=*=&=(=#======== = ====<=<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<L\E;68/>ZqY-tFiKB968, #8:73IIX@R87h7%DZs38ZJsHz>j7G7 6[ hk]}b 5>K:F?<6u72ZZXQ %AKbD:I6)7t.m GC3,E]JA867*- z3[HIf?y7065$ds H8iIH<74>698 S(G 9-(p Bҥؔbjl z%P-%@ GR4F(,#j< rWG,Z+ RekkYֱ-Zx ,'!FIӌR |'+#4 X2ݝY*)* ]Եׂu #-&N-Ԁۗ_(+"Ր+)i}M]it-"+d% RMexL_2x)*e!2C>Jl-,'r $EHBN> $+$D חԜz() {}k? ;F_+& DS#Xc ('+"+v5oF$YvBE $l+#kRU@ HI** }nձ6NSsUu)()3WAv  b1`Dy N+%^Q-"_N%xf܁C& (a-#@PYXL') `M? </Qׂ8@eRVJ>k*&a8c2GըV -T] s&)!yXK;@ljK9\N=M^! #;*"V# QJ8?B"M<WR؉kj;,zK RK)}$;YkIGt  R/ח}--$ 4GYI)% a?CtG ()&,7a3$S9"(&rB'L]N]Y5ܝ&)*bUk}|N%'iGW`kq``gmiig`db`_Z_Z\YWZQYN[FX='$?SZnk]5J $(: tv 3+Z /0njn# 4?>7136=<9=C'laqK)$_#_|  063534544q4i4|4a4u4Z4n4]4a4[4Z4X4P4R4M4H4J4D4A4@4:4;48444.4.4.4(4&4 4 44444444 44443333333333330 /&T ZMu 7e̅;q.[`PKXZ]^`ghgqrpwx}́~͍͎̈́͊͒͗͗ͩͫͧ͢͝͝͠ͅͱͱͳͷͺͽͿ  "*'-/137;=?FCGLMOUWW]`aefknnvsyzz΅΄΄ΌΊΏΐΖΖΘΞΡΠΧΧΫάγεενθ %$*0-243>=9H?MINRS@oOQk     !%#( %*!'$)''+**,-*-.,-1,32/4/92364944888;8=;<:=??@;?@@F@@FBHBFDEMFFLEKNHLMMOKQNOOORPVQTURYTTXWYWXYX`ZW`]\`\a]baaaebdfedjdejekjkilokknli}Z\|vS>:|{|b% uVY_HLt"m$8 N[܇ܿ(X%! ]a :.kv$odr9$$e{#sAM^ 6"#(w:%F |!e"N17tH#!$qK" h?B Y4$u& w3g#F|? F?#$ )_n>#'&ޓ+(#1ܦGr 5 "dV^re-zb&"!ER<ݹkUWT!g6NC#4% [%"L"Ol b}!J"xm,#Es!5_?5K$* ? HyP$!> _whO!3;j 9߅ |"B d=(!O[o.QGߍ@ZVyVb|Tr 3S*|P. ލUY< NULy<AZ&S9>6PS1 \W NP,tBߘ/ '>9=77626*9# pcP3# !#$$(*),./2144879:>@:C  ~Z^v~}|yyvuuspnolkhggedc_b\][XXWSSRRQMLJIJCEF>AA<;=:78442/1,.)((&"%"!# (J] asj[%&JC  ""#%')(,--1113759::>CEDFIHMMLQOTTUTX[[[^a^bddfjhjmlpqptuvvy}z~l[x!  $uQmdRGKNMLIGGCDDA?@;<9956413/.,-*&)$$%     ~|{zwxvttqpolnigigdda``^][YWWTVQPPLOLIIHCDCBA<?:9<5834.4,1&9 );[ ) !"%#&*'*+-//315668:;<=@?BEEDGJJKNMPRQTVU[XZ]]``bcdgfjjmmnossstwxz{|}~  # $&&&*)-,1/1334899=<7731-,('$  upiL)x*/nE2Ie{ !!#%%'**,./216487:;y R j)Q={&0 $jc w? ` (@#^G  '7 K4 - ];; Q n p HVoa@ ee*  A)HZ M 8!t^P-, [fDX@UJ 6 Yk^  ] i< @) 65489) SvI fXO W   )*N7LU0% ;) , eA ]d oiTSbb2I 1 e >` b{qSn23q %  e6Ag\h@OS CN\GSFE s $xH  007)R*_n C %w.VJe 1] .C)/D  M $8AgVM YoREAOU=: xQ1tp|ft zZWhJguuoaMk6[*.J d!=4HFC6Ug o_  Ei6,+L$ ! # 'v( H5TYXx 4{yhkswywwy{~|P XgG<PaZRPNRNMLJGIEEE@A?=;<;5:2;,;$I{  Cs#=c' ARl`NMSZ[ZZ[^_aacdfghjkmmnrptpzs~nXT@zj]o|{qompmmiihfeea``^_Y\XXWSWOXFXb4Mv=s T4o*"~}|zzxvwvpvjyb[r z]  hv#3l|~z{yxuvrtoqomkljifffd`ba]]]Z[XWWUSSQPOLMLHJHEDCBAA==<<99675340//.,+)((&%#$!      Ze>&4/'&*/0/014368799=;>@@@BEFEHHJKMMNPQSTUWWXY[\^]aabbfeigjimmmpqrrutwxzy{}}  !!"$%%&*(+-,./11344778:<;=>@ABDEFGGJILMNORPTSUVXYZY]\_`aacdfegijklnoprqtutwyy}{|}zvx|BUr_ed`a^`]\\ZXYVUUSSQOPMMJJJIFHDDBBA@=>;;:986542211./,,,('(%%#"!!    excellent-bifurcation-0.0.20071015/wavs/blast.wav0000644000175000017500000007262410557724474020711 0ustar miriammiriamRIFFuWAVEfmt DXdatahu`*U J  u @ a AuJW*`ܕ5%&%&%&%&&%&&&&&%%&%&&%%&&%%&&&%&%&%&%%&%&%%&%&%%&&%%&&%%&&%&&&%&&%&&&%&&%&%&&&%&%&%&%&&%%&&%&&%%&&%&%%%&%&%&&&&%&&&&%%%&%&&%%&%%&%&&%%&%&%&&%&&%&%%%%%%$%%$%$%$%$%%%%%%$%$%$%%%$%%%$%%$%%%$%$%%%$%%$%%$%%$%%$%$%$%$$%%$%%$%%%%%%%$%%%$%$%$%$%%%$%%%%$%%$%%$%%$%%%%$%%$%%$%%$%%%$$%$%$$%%%%$%%$%%$%$%%$$%%%%%$%$%%%%%%$%#$$$$$#$$#$##$#$$#$##$$#$$$#$$$$$#$#$$##$$#$$#$$$$#$$$##$$#$#$#$$$$$#$$$$#$$$$$#$#$$$#$$$$$#$$#$#$$#$$$#$$$#$$#$$$$##$$$$$$$#$#$$#$$$$$#$$$$#$#$$$$#$#$#$#$##$$$$#$$#$#$$#$$#$##$$$##$#$$$$$#$#$$#$#$$$$$#$#$$$#$$#$#$$$#$##$$$#$#"###""#""##"###"#####"###"###"###"#"#"##"######""#""##"#####"##"###"######""#"##"#"##""##"#"#""######"###"###""#"###"#"###"#"#"#""#"#"!"!"!"!"""""!""!"!"!"!""!""!""!!"!"!"""""!"""!!"!"!""!!""""!""!""!""!"!""!"""!""""""!""!"""""!""""!"""""!!""""!!"!!""!"!""!"!"!""!"!"""!"!""!""""!""""""""!"!"""!""""!!""""!"""""""!"!!"!""""!"""""!""!!!! !! ! !! !!! ! !!!! !! ! ! !!!! ! ! !!!!!! !!!  !!! !! !! !  !! !!!!! !!!! ! !!!!!!! !! !!!! !!!! !! ! !! ! ! !!!!!!! !!!!!!!!! !!!!!!!! !! ! ! ! !! !! !!!!! ! ! ! ! !!! !!! !!!!!! !!! !!!! !! !!!!!!!  !! !!!! !!! !!!!                                                                                                                                                                                                                                                                                                                                     excellent-bifurcation-0.0.20071015/wavs/zap.wav0000644000175000017500000001524010555476146020363 0ustar miriammiriamRIFFWAVEfmt DXdatatr]F+ &5Ec Do=T;\ r-y':a-q;-'~/d3;criydVA|"@%/ A v 9  W Ltp o n5' b nTjgW,}-  + Z0|E<|\<`k(_ ~  V '}_SIcv|߸0n='-1b}]o } ,F< "$%O&%b%Z%%&&%#!_rC7)~ mv])LxVoު_&dԳHb~֚ՐxܬcWo#j sy] $I'(u()+/233k20../00 /l+I'#7"n!^ /r )RPo?IZGqٲԒA@[NXǷős}Rʜ}OΤٳLD{] 2#&D+70479:;<>@BsBA @Z>=< ;O9s62.)%"3 #" -bV|0ø&\RPH ]?љܟk*ZW@ *t@'x.4F946efہ\u_;$+29?GNU[`dhknosvwxwv,usQr[,X rB$f5EH0ѳpSD  /!89:88=IZlJ|}rpaQGSDiFJJD7&;tD'o'ѶIJ-]xɯz?>Ք:Gȩ1 ɑԇ^ 0 . y } A,;THO2Q&OL MRX]+kxA|vy{{mpj8knoFtv rgXHc;30?24I4O.."P2ek6{7$E%N[  Edܵ~"+0125e;4FRTccpy}}z(yzyk``)[Z]_Z]qUH07#&'c% o &=׿G޹41Fk$. e 5{ L \ӕHF` 8*7z>?:5I1h29UFU0dunyr4pia\n[ak.yv)olqz}pf]bd7lvV~4~Om#%kdFf`-".6U9-6>/& Z% (5$COX\YRJ4B= ?EPM^j?s;vVskahX`RQV6`olIxync'[?WX^h'r'z}7|BuzjI^`S"LILSH\cgf_T-F8,.((2-42<ABA;1"+ OxC~*۹2X܁Fsͩݱ ;W@ѓ̅vFZઔ``CrB)螉qqZ=?ʫi~ÐCƜF..oe B @ '\2Z:= 7465=GOR\Cdgf`FXkO+HNDD JR)]4gn7rpQkUb XNgHFqIP"Zd8lppj|aIVWKBk>>GCJSIZ^^Y\Q4F:i0)'(Y.5<>ABm>I6*Da; 0S _@ ޡCwpbm@ߦVշaB()մЛ˲T i˶5ߓ44aýѰ1Rt2ɯιVsʸU5n=ȚHqbG@gH_pҒN҉JɁV  QvVޟ#%0 wp q(./-3('!H"C-7@FIGB;4.+,K07ALIU[^]?YQIB<:+=CKUQ_fjjfU_XVMMEUA_@1C@IdQZaf heg_VLCv<8d8;*BIQyVXIW"RI?5,&#$7)/6 =@Ad>7.!$D ; p#&&"YAgfM?  u8T,ӦDn@m aZ\y ë*f̗8*<іX𶮰wUp}~Rή'+cgֽ@Ŋ̤12ʷZJƣ[&}HNF'bsoPز4۾k¦K-byQ֝'#o 2 U-F- HH ]"R!  ]l'.2 42-''+ k$- 5O; ??~=8 2*/$<p &!.6v=9CFGD?92%,J'$,%\(-@5 =2DILMJE+? 81,) * -a2[9@HM)QQ,O)JTC;e4.**',0r7>BF>L PQOFJpCe;13+&$m$'-3;sAFGFBۻA|hޗ^]{Ǯ0q5L!ʯ=Լ*ų@ѝؔLV݁pHtM9ņmm } sC˶5en9? IF0~`ݵd 8 MDJy} H[ $eWBb "" )) utQ#),,=+'N"%B 6 $+a1>56s63X/)#2$ +17b<??*>:5/)$> A"9'0-3{9> BCZCA<71+q&k" _!$)B/5D:|>,AB@=r93-'"|. !%+u0Y5(9l;;f:)7o2,& Zx?t%c#(-13g4 3/<+%cY   Y_v %)m,d-w,)i%+ w rS!$&%#g 1 ]:.zZ1F \jL uHGRd#H7/sp ܭ:kSM^z<C}<ԢLٷݾU9 { p2g6Ϝz~F^@xLJݑ/Яͥ%$jңrV*oEЀmʑ!\ 4[z=ؗӂ[hɰ(Ϳٰ8e:߂N{Y\g6ڵBܿuZ3`B~AE!M)` *YD[ 7MTK]&`E85>T}~q;K%UFKWEC{q&_}P&excellent-bifurcation-0.0.20071015/wavs/beam2.wav0000644000175000017500000022125210560176756020561 0ustar miriammiriamRIFF"WAVEfmt DXdata~")/w x79w|tsXt| ; [ gbB  4  U  A 0 V i 8e z.C 5 4>J?r Do&P= :S޿!*+) T y  X gGM  |\f 7 BF e #P %X u oYFSz Z)&_6'=0,f^ .R r[.O{?s> ]!T vxһĽkU9H._{Pv24 [&!05,}3w?(M1'~X88|`$!,%ο:|eԺݷ>'4H4ޭ(% *ZF.7Ъof/nn!x>0F5 ) 3(HTf%+"C#4( u[#'8 (8* n {108,U`ܰ{8*=Fތ(L"X`h- /9-4yi_h L%  C s/*"4 8t!*d%   -n6b(8[). 8Z(, vWp'++!/!0,K5+B2E &epZunGK ƻqE q[1xɥ\Ś1d8A?-/7U %4TJ-ٍ3tkG ֨ y s`q5V0tIO9K7,3)4|+'%,$"( kt-h"'!$=Ero&*S MY.6Y-qk y?G᫖Z+ޱ?T :"h5e/cN%$(S.R x H u  W > ,4f -[! ^pk,n `&!C>%/&"@ 1D/~Qc G.-=tpڵ:߮p=ЯΌ ;̽οY%#W:3n \%.$ 8 ~w C"" %TV5-9O&glM@&Dx{?ΨA|߃80EiN > %v]I='*og. 򦼼tݧܙF&G`xN9] |4#D/9 =3'p0&kqBS'"= F}!  4"zbL&"VT,a"02D9& $'̽NmΟ}iu D,T4.0 $#m _E 0X+q@  T4/ S N  .&g 03i 8 sT^  Sm#+8 #+r#AKD -.>B,{ +/#\^Ԧ 9ͧ$x1 "踅 <"7o-M.BFs '*< =7Q%b+"&X0'fu ,B@1 wwvD޼sKŝk`ځNyވr0>1xD%8 .]ԉml 6Ӣ ELwM0;6aV+i)t %N"R"jp!Dw3S#t>`d$'m 6df.6 "0e4AY\6՞+2,:=C  #Z"A\ [  HP  Ce2 L Aw .f& liI p 6 ?#Z @?  O #("Yx 2"+lk@X5?bZ SX[ 9 oa/6Vy h b  $i#ji  : |r= % ~?T6 2sտAno4ڨɽhӴ"wװ R\ $H ,C.L m}, ݴR }}ܩfNe<%=0 7 w k*$:D2#L+YH .6 Lp]q7YR \}Po@=#& #?-0(m3ʩ04dԈw#2î_R"#~ , = T z c  >CJ.?K tt#6 T nr!  A*r,+"Nv52 "e* $x9.J;) &J8rctn}1 d sܔ!߱\ C)ҳ WVs{]@ pl K^8 $!D@o -V)й6*4 0؃`#h-c Z~>'k%*  L  QͰj@3w!mڸ޺:pz;Y G +6'6gsnN$eq1z;  $l X Vp\oah~% 1(%=ܞV /hS҄ Ti Lr : < \\w % !+  V# h >Eq  B[p Ux  5jI g 2% :>(-1" 1:A9&[h2>9 E 3ڟ1݌ uHr  ?  [ %MOL.ӚU}GQ39 PY9]ҍ( ۛW D)gpu>=Յ `g؎ TE.\ߐԯ$ȓ<3{,?zXO)+0c6j}!p ]I8|L ,\) ? ( ~  K mh?%s Ѹpm V@DI+~"|O0FC3b*6ݼ_O F {f+Wl5Ww--oE6H% `*~'<1 P7| &,K.jgxy2.ɦfB*Mks;T= ?RmGUX5?cݒ/ r8 1@ z@&{ X Nmԭ*ՐYHߑ z`{tA> G.2,#& '-,$8u\$/j(5 xiO67(! x] f(#= kE%,Xk}[^oAEoSp -BrHb !,8 i H PUt  o }]Y ]n#0wb#,% `-/A0^' Hsrk(_uu!SBWb?G)lbK23/yh-U*=xF :+s%vU%u+"SU4/}{㍶tsшrĸAZ!r!՞/; ^ 14L Rg !!PZZw%e;)12,dR)Up: hг8Z4 KuZU .f7$ GP ""% b0 xb S N&c6> a J< W " $3~o+\/&* > @j="9MZ%_,#nK[ em6Jj5vdL:xK + 0 R < c +*  %n!s*g3H _Ѫ+!IhX`fceP#43/+_~)*(3/"%$^&"Hd- ; V3+))Ǫ:/2ܵйs͘ζ1 V ܂r)(=4gW ",%^Q9+1# _nf=?{"b<[7敿bo.i]qļ)Xw(B*6~w M#u-&9U.G h#D 6E ._B /a\/"p+%,# %* JUH5=" $!dz 2ּOߪgIbxc hQ&'/ 9#=1_tYrQe n{F {O e%0{c Gf y 8$ZJ|z{f7vr!`D&od6|d, ("` "! 8" ~ A&! Xp,M?(Rx%6t$(` T;\?,8gmݕ/S j'q!UQ$_)=y gpy,-|!=;q3Yw\ݶQԶԌ} W }  $0(Q_\$ '-+ EwF 4  1Z 9aRg 8'D6D,9B(jKi6 Op " qH ('L0VF449 nۓ^ eEΫt>]e8x!|wClN(  442k G9 eCiJ\ 042%  DVσr;ԣr/bՠ&MI$ޓ AD(E9#7   { A 3_^ w ~,/;* vBhiV'7G+gyC7~ًJϛV.,[*Y h4d $^ $ xm5#F%*< Yn(?,~ތ)ptF~3@/?tö1/+skae$ p " f @ /; \n  + = OSjD(h)5Q 18> e* 2Yڹ Ey`K{؉d5aG 1=;)0!4(.YC<uWHm_Q b ݊f)3S6O51  ,&% 2  5 Y lVDa(j_ =u )S+2<1!tC#{#zV %@d_|P`'ȽҾ7I'ѥ=Ƃ '%%R G $ TxF & 6 er{\ $ ! |p2%&F w.?197!GB:.{ߔ:\ 9.F5WpNkuB|[NW=JGx[d(;<hMjG4H_e 57m\*w2D 2RO.93b$>'~(/. V ! fMlbEb a P ! l')$(| 䇹E[޲3'i%$!g?)(-Թ ؽip$(,#׷ Ռ#-`4e m O ? F nk.Hq6<qK-$ &KDDV:7o` qk.[tV kq}#n_Ӌ( vA &X/; 91KS &#=C. h * . \ Y0= i U!3'((b&+!A/E47C"́DS٧p81=1.`*"S+$Gh!&dt!%Zg %&eH/=1 * ئ߰eڡ `آ !`Bc ;"+h&6=U %p# ejE!\# & lUP !,Z)͂:Hq2I /A/Q n< ZgM D   j 1 K? c52R`]'t @RYTN6}U GQ[Lʕ$  QCk!<4:gr oa'b$. T  v c  5s AJ^ Yt2N',-! r,J7mC_(|ȴf© /gK,ME"<5*t< " /N)[%$+#;k]&'+ C qT^D1]pWaBɻV ^t/ h x~r h2I7& Y.6+/" '-:" '.i$J~}*3(Yj2;d ªw<·5d4Úàr, ,2$#b ]  _ :_S / Eu A E i% .6gD6QCD2b7\",''C .Za:Fn{^<f7^._ao ݴ" JU84;_#$Q PSiZDt  < J  %%3q;!w8 nxjh"撶jx$ CޖvB1M+xJ|*7042{nO "`e xE\ "V &!ϫr֭w᯦鑾DhD5?(^s 0-q #-%}). Ei2v1?*Eg<2 $ >  紲<՞ +"L?'CK%1-/KY$S%L k1h B  jT^6Io  ) &q^ 3 Ezz | Xe(q'Re./w'=2U~sFa5 |V^@Jn-tz@C T2835`Y",^.3]Z+-N)/$2 Q::B!%o& w۳ v]޾rCj 6)} jX . xܮvl b 5ZCI+@W6?E#0 xae4Z8|Mqӊn oH= 0&;'=q )'8##.(4r, v;B$z ,_+  j|zAʹe qI=1AA "1'?L$c i , 4 6 *Uq X'g P8$<>4fk"VD@Ps6I#5D7 2 }H:T}} ^l׵۠ o s!+&/Iy \ x f2 S ,S1fv6s% Ga"J   Z $ 5Ji6K  1Op5|xd'3^ Q-/ ݾ}S#o g?!PD:݅ ) #_O Oxw8f7}j (;6)k  )6-V$e@At_Ox; N_ F < ij%8^uN#+C 5u ,$B.'$yP%nH~B v c[9 R o4w=i#.Nx  ``ym(S"m  FH Eл I'f@TUh2oJ6 "`5139#p3+Tő5ְۃ(l O4@)>`+q 8%t9J,[=ݙ~ig `ފɯJ2QRvq *5":~R r  n h rm  og&+2g -߱%bx# kXe< c 2k[--u2 A 8 9 R4~`# t&g2# VV:+p>R  l@p@h )D-)SJ 9D k ,h C s Vt%+"u3DA-F4`- q`)Lmӓңs)9b]P 8 |Ź\ɲpjĎIզgRMμcި  9 "# B.v3"r "BLVUxn[Ԫt܂tܿ .\8)5!>o}*-F nx'},[!l (/>%drA.7*)"9Mf4@TM ? َOb^ȳyr}%"ܲe0H =ϾО, #q כHަؑˣ.[)YNOt$U 6 1:H,'<+ ?7w8!uC&930GW6X +jKк+n(AƒO h Y$4.tiT'z1}Ez1 M(/ %j)#&GmK a  8   h i.Hx ]0 " #$c 76.3%0[d."MUhIǴ`#V- z8-1k** L`L<$IQ4z>#8 ;o&%],M,u/!=:d U{ep/G( !*0 Wo5> TS\dOHY"0Dݚ B (i2B.(*ԅ|ovDF:,'Lb@m,8?m"b* &M4,4F.41%5z'?5c C ( 5 ӱCaT_ nK#\ U4TtR{o 2 <0%qC~()J Qj "!!  o $ U q $ D % 4K d ?  S !n-_*FIR=QV eЏI#A),uG @*" % %fL z S -o$ : a lD(('-j$>a5;+~!FUU=$ c 4 + PѿhX.q ~AҊ }v&tm*$LN&yOՓn2Yܪa ."Z |8SG-P}37%?u4O4 .h">9|[VG*2cBRV=d$ҁBo{Q0V~=XvCB]$/2L t/%$cBp_  3 E C*Ao \(- G A[ ?=vJ S m Y#`% '-j-4/D\ 4adZoWR s #[-E!24\!]FK\\ 34 6 Z [ 7HQk$ #07&w lIn [ r n\ޯ 4DUqPKJ n "epxJ\EzUOӚމLkЌ@V< uoٻ^,x, I*t5";u d.k- gV \@ D]#g53%9M-y ({VѠGLz*y/#+=$"b:#BXB)q c r  8:B $ R CenW h n "Y  - W :l _+D)=6!ީ&Vדs?XI -!/ J=dgp? D0b O N~ @Y A &  N ! uB T *1&<4B*>L/ !\H>m{a/@ǥZ;hh,:ƄҫBܐJǡIЏ:ԯQشQ]֬Ǚƴ՟i ٯ"u"|r ] """E: mp s { -@T @  q"eH$G5t4VѼƓeܠdڙ.ָ3wl҇ճڡvզPҾ܈yL̛FƟ {iڼ -c '/M@ - :A%+"Ph|"JFK,^ j @' F:` k;Ga ye'X o `@k H<  s >! 3}O5V^K&فeN_PM @] u Z r a7 s  { ` %`W  Z z(,n"3 t +!++%+)lC݄oc,6Ƚם,Ƃ˯Ք ,[Ώ޸8׊iԘIޥߘIt̊mڃΏ%MT5"j?˜dP*$ڳw&' t7$xyR$!X N j  U&֡5v 1: 0؉ߤبx aҪ* ʂNŜa5H.=13ܸ$/)V (d !  De = qt Brx9 Wh h N =[:+ 6҃ɡGxZTRe0;- `d~Rَ zgX [&  . U6!  Do $ 9.] i6 Dem14 > P ^ l waLP_!,!] !*$fJ-`9#YbfJmO1 G Ob v7H ft5 G>ex> / GG [ lK ~Ce UpېC&:t='!<gӜ4թܷ޷ѣ=pՌL޺H_ |[Z ZuB,{>'*|?$` K~x xo5 G$9/&( M :Y Bsxc7Sc;#Y!\] &* TPDKW{j\^ae=Bq[[I-5 t٘e 8 I7)_yJ`dqmhhU 'd Qs,9tF5 %4: TA-qY?yh Isdzb2h2˧W t6̭Us v)\[|MPu7kM[ =+ Ph2?ҭp #R# wS6ޱ >db ^V0L $ E +(߅R5[iP!~ VҵA;X9\ !)X Go N@ #ZpP <xs ' X?~x !-[ <ڞߐouDcI3M4\ 8 g^:+)**z0Wy,W*9_6S,+. an !+K4"\ ]o(:Nz@s<'zm]߽f-Χٯmre׶|Kѿ]߱zڱSs(ԩyIܷQoB y.Jj SerNY)?S9GԘEO/6&pY;L3W xg KTaZ4* v= َZ7;يW/6%Mz߰VՒM $~H1 ($qU"6[S % 5) v' P s z`l{  xSJ8rHdT ^!++ Q 6`=RO ))ccosˇ7 UQܕdu- i_#Z8_/Ef46wG+8.8=H?-c9`. w4E1 4c5x $RjGǂ̌wA<6f`uKM߶O-O%Csi3W@H6pSZz*2z_~^)_ Bk '|b&p *yrfhXE(lcy32h"il]  }#Џu;y?\yFY+%$v#F }DV  ] z  aG h2 8 1Fp !- _ MmRS*|a:TkZ ḱ=` B{[EpyFfOZ`qoie]^:A#^|sQ!32["30|'.y&72 An/wH8lsܾݥgx+gťx8v΄>ʽM0˄%FȰi5 ?B#mu4qp/?=I*KT&<8Zuv2!E1 {Hh6YQ] -pfV7a,Ou=buժbۂm^.%_oa n.a| =   OPM Ij,!T H 6oi> (  g%l(@ *VySiYjcײW&8xmTL7X,ܦ8Xp.r)(!3?(/ />*zHi#&)  f K <2o  i0 #3#T4' n9G<н#4߱5<%}ƁҲ2$ RI$髹YȐNIbyڐ"2b2=%/B6!pA?rߞT1;- 8<߭d"D>?8 I@[nic#Q9!^hkp@VmSͬɹDDf4_jE .k*E: a Rb )7c4  o H0$){L^+YoQ&+L    GZ7: Cs X(Q"d $Wjf70 ,Y\^z,I-e܅~V2~6j=' :+M &4%x)) `%"4| 6/f9'])a 8 8ߪ.Ea<6wE |y0xNЬ<E5 P} ]&j$ K k   *VV&H C|  A  P[g$%ay F$4 ,k ^Qˍp=]%9<>fq xNnBt ODEC\*C7fU$,%+( $9 g"h%$-b 4"E3-mPm{MVψfѾ#ؽdܼgݯVd#h s]ؿWB b&J{ e rlW{ 0: 0"]>;ܙ\&$- Er@Q;Zuڣt &N.2k?fo3݊D:rC~H+zµjڽ;/0 n3z-QY "U!cE&B  gZS ws o_s E Aig )![(WT^S x[wV٣ Ta{=uwV=C4~'/!^{#\.cZsO _Q8S%`0 5 $!"zS %l lMc&%'B R'?4J&O `= %~ЮjYսղpЅeFN wRdh%( )*% uO7 @$&ٽ5V+E"ܷ«ۜ+0] kKf҅ǧž8w/ѤȋX !c kќ) % DG 9m۸dA p@|^ ӤPG3hүPhb= Kٷ$v  72-wJ: !#G: $ _H[X V S& !S 6  &"+V7 2C.޽[ ][u[pp(777g 9=A *n\ Ew'U|5 x@~1i%HNMM#|:w+;C<2މ 1\BY6x \=K1Mwމ.'p X ,p†cK&4sj}#9 G,-O087( g,4)~|&+7-~7?};#VS70٤8ߘMŏ܁ S.()*j%^$HQ%La^<6iҴ~ _S&9c2Kv kzyJ, ;&4a <.-),Kp  )%wn""N*" )5W#xc{,y! y - 0};gq  09a,"Y <j g'D σc D"4BF(N$?E?$ DIa%>rz&,9 ܁d!GYoՔٮe =[ 9e8@n.+,_{%-:" G'?28 rNػ9$K՞T Ii_֝~2%YK(dٚ <b؀.oУդo*ry L c'x ' ;W;  !3bX ,:݄d E $\-U! =8a t I(X _ !yU >'m~7{{ " sL.~6<?- n;4dy | 5X   { U H ^FQ & :Ru4".)x&E29"7\]r)/sߜjPL Gz_@> ;y۠A@ p#[9 9zP_9 w=R] | 1%" M i^ s M "V| ? %   9G5&#~ %#9 (!m.*'qE*BC>7Ip +F\wܱ b> #Y99 v [%oA \ 5 8FS %׿VeGبJ} ў,(54Wm"T!]a \yMRں= xfa kqR v$:%#B# 8k!оkDjۆ뽜Čel,ͿϾFA 2:Ho(v d Q4 - W}  !+"i <;h4/+U%`x.{:F?Zi 0;˞  p:T \ "4>& T`e [#1&D *3 "F֔dվ׼\>`2aK>1 P^Nc M$;#"h,  /:& IOϴA{FTܲzɱi13:^!%A%jn qN gWD"]@C [&  ?VW7y!$ jhFNIpʩٵqs_ B |ߊIY&,+!.ID #$," y 'Kk.  f [  I;0? 8  I+ 2_ N)| mQX| t MuR Yn&l%A )!0I-A c(mE>'p7x 6 йXe ^ [1  w  %t s Y"#N*+i#=n6fѹ4d,QgjlƐI(BX. W! (#Y 37h&/ Li ,-(ɕlS&I"R? b|9`5?KT/:8%L ww!%)v"]~  "U  8WC6!N{~%H"vP.53 75 JȡRmt 7?m(Y(-!} B!d$ :( 5F8 (q   d Vf ' 5 x_Co    jV  < >#'= Uw+0e# #:ܰ )Lʻl F ; KO9  5 3) d y ^q $m'0( 5_'q-0!~;@KA!y}c8NB[o욺V +PD- S` "n Dc(<%T$ %R3-U`X12J9 $&IݳHV ˻܅WԤ k mgs*a v5x>-Em, L$.< 1/#n>>B/m ]Vߧ ' ^و&ޖ nh -2 eo *(Ra% %!D7Q}L/M9& - I 6Pvfo{'r\NVs3K$8`-)43*-"(p!A.Tf!Z%z  _! - zXY R C| Q @XcGropnorqHeX? Q } BO WZ{ 0 ]  y%]!hS-Bq!("-3*4/)a#8K3rUO[q'znhuPѸ6 I۳- %O9K/~Q7G!%$ cQ(* pc3׫,ʏ h l Ҙǜ%] & T߉] n.B>o>#0 1<'.M m,-E>x6ub *sgmk  ӡXԆ VI݁I% $ 9J12X`V-R3% #S=%b(E n# _R +CN< x= x v 1x ^ 4t t\s; `?V% gAb~PZks# ,g$?z#G . |[nc > )O  qF}gl!g`!B)%#CS*4)BZq9L3_X?` ۸x3̳b ߈b~ y A@!x+46" n<|24!sTX7?#Cuz! /r5èՅ&P\Ǻb7Q |/a  D o2 E  ! = $X r W A |3F ~ " i'"bPVyQ Sg j o :R gh  "/U5 n-  esi  / }}w 8 \ $$vV@Q.,{s$@<26 QLˡ4pz?#u=32 % %/+@ J ,H)= L"/*ig%;\3Su~v~p^߃Ha YoɊ5 4 A>ovl+'oJ?4n4cT\._(. !(j#H3-9< g#0+vU: '># < V i   qD_w 4 & fVe  r )7 E4 ): d$!A ~ !-(Ym(?7t lSɡIʿ  47 23Q.wI"%}|N6!BW9 V " ~_v"%)!xwM %:8T/L>1a;|b ? S ʫH%Tkﻹɕ*.+ jރN /&k62 Z#(  X Z.BH(⴪ikfSɰ+d3ѹfm6=#i+*N#Y" ss #  w 0\[ g X 5 ߘy8p&>mEb(BJ-0*!B k%o&XR uMu { WQm{ +O] 3 (J 8 A /<H Z i . kK' y -"#$D G0!+,%YI|C ^sp٧qHR߻Giņl $z!6WT@ %] B@\"DXfO qk k@% %`931kʱy܌U݇HyB̄OJ &:/, g##<$Pa N^O2 =Kb2a>\ܾfגH!ҍ 1Й֫, F0&]#f aS &<5"[ R 9o :1i Z>G9y/xb'S+/4h>; k*"! } U - 4Q d x 'pG92 > /e  n5DLL|V @ TB =V $ .u rvllr 9~#E!` ,* ߻Qr `3.٠Xұӓ*s uE(J=) y  ) V  L 1-v e$"'nyˬ!bt,A<JξͿ+leכ콆hEm̯о!k8 %?"9%w$T pkb dy  >ѻRMx\ b^!R"lV45(,ۺѦ~ JFfU% SE83 ] Ap'Yv 78W"= dv\F, pI@7AC*Er%*n.)! 9#% "%5F:  (>  |V"N s ] jK % %0} \ S:w? .9^9 4 /Ti+O 4W. MbSܫօdEh4XJl5C){cAL?B!D\52mj (K?FԚ 8   W S q '4# WZwa{v eg|ja/i0dߒ,еn ;R *( Q'Ӣ i&,q Ԯ(br}^q (W=@m(G W< _9zP9 :Z$p? Aעx; <A]xF MOi߁s/(r\Z8"9E2$x)."4uQ<' N F_ H T y   X6z zb4:o.?:7.Lr" |{7|p'? Vx" ] X*Jt a 6>  U![-$ Ef 9ה+W c3 ğ!! ;V:' y (dK  yr+ppߺ/~Ѱd= a(K'Y}2^זlG UȈLƾ&ђ7ٻNt7 2?E' ;"-%z`,-+mBd89 Z= eذrXG d :+&{s;`%ID $D??$O(F2B"E b D&f j  ; Y".b60 rg9~. -ӆx "y~,ydzW#5) "N*"!mw%)  pK-),-; a'4; +Jxy"k uK2e8$Ra ~i5<_`L$ QG^$~&k'()S. ܏Lř9/5SЀV$ކ:{@5~-7+%|)4h,  (870L., G9$|ls4$JdӬȆs¤ޏ* Vq (.yM1K=]zX6\B1 5޶<9C+w:}#MMGNj%3ڀ?v 5{֥ڞU&xF \p)!B>8 h796' rp[u\_ [.D15 V+"'  4U "% QW X ZH] #; F#!`P J&@4S' C(%d&Klm  %R y""$ 6 `0%U9O_Q u[b.]#{]#/(~3D>Vyu:|aT ԢVwZzS \TWZ(!(h i}B D s_l tw SYi  C'DdT!" YS{-3m ..9iڷx*J~Bt:E2nh?k2/N'! utY=Q@tE, $&]:܎?]!19 1yۦYmrd yJ&aB W]p h "fVgĸܼdٽ#ҾdXϴN{mRl-D35" b.$i%"f 7$ (%+,%Ug7C[* BGBP s~DmMx qh=;8'[ =pO`Ҙl -3 #ۯHx `%h$[Q  A  }A H'VT(   jL  k$&^} O 5F>ѬMx/x} Fy7<bE/9߄9 `(]'g95/} 4>)Ha0۶* աќ+a9Y <+ #&(O˟F&-f U͍ڌG>ϺƑɼֱbhRcޞ#VfS`I7`D)h4i$./1Is9 *v%~#d)i a))'{)7)5 X&i@ %i޺l@U$źN9{P8+RR7~=oɻՉ g`NCP]Zk)$;B qA "IN v#z h '  zGK o-Gf'3 L4"5-!~ nJ`'>ƵWɏ~"| 2Y{~?cW;tHeDeb J4U4k/Ta| %1#L ed L5h g r iמ' dٺ 9.ͿtU.#,, w&K9 $#'.υ9Nǝ$xUλشo٨I, d/;%r)j(N  &{ G="%` )v)%4%O + :'>l6~2W}e,ɡJ +z]^Y+΄. 8fiݠW$c Q"(Xr C; 6ZG   M-%PpZ-]L|'%0Ho  4 d6*b Rb 8 E*i0D i]3hBEɹRnW=rjg^"8R"din[AI 7=>Dd";9 -;S1t?oA7!B0$=1d0!xaJMWȺ!JR% 2Ґ|Ȭ%>7óΔ5#нƙ=G9n 'U4#3# /i o 3<M f  )&j#G{* >/ .(>5!'*s.qY8-ܭX8KTmy6'YbmǜXjRzV* @k(%g (  >kn6H U "+jI  MPO  @ }b/l cn`%.^lb֪vb=vO,`8Wer, [R[6iG| 1!E2vu]8<&TL*I=?-pp4tm%@@3iɰG(/L˽̚?w8xg*xfޥݾtm8vHn/A 27y&-&{03"[23R!s{_#A^:_dgor`XQeFyoF[zD a=i YlU9c|)ڜTTpM _ -!o F1! 83 g Fa y ^ Y D} E#~v#%+[E{[ۡ?z;tǐ#}Я ۍ[ lg" f 14ydk 'FZifry* s_&}&j C ^)_~^{2 +yWUq4IBW4jrC%O-P˵NLuae7:Bwբ׀HiU$ۊ y3a5 1Ex4 a.c9>-G<:.8+Gx7d4E/^9Z#_h ,wdSV8 ˋtmea)( OQƴ>`7ٟ R *+^!T dGr:ISw   |m`zs P 'w * 4 &S \8"Rp$(1 H$M VհyߊK$7/Vֈƃ=8Z ?u ,5XcRJ hu!V3L9Xq '5/OEG9S?(ZOq dS iJ,{BoRJܷx'rTDzyڲ\J}ܶfqoͮق.f]n{& Pp[# @Oo GY )!] 7V<BʏX  Qj~[7O(ȓ-F  " L1V] ceޒB 5Sw" Sل" pӤҟ4?hP-=Z Jl8tPL~Z\(v sT5tX2gݯ2_dzrH!hw?Yq-@T: 5ޚ% 5tF-9qSc (Vjhmre_Ky`)8H8 eܙuَ 5 +H[ZrB=ca^\izXIDPU *& ^[!X%=cR6cxsB\ 9 M (/&7$Iߚ 6o̚w x}J!a#@{*)=|,CsZ [[{_ GֹɈޘ=11J\f)JTW^v V4ײH _ `>MzҨ5$$u߬ D`sv h$']n_m&#JKݿm  q饻ڞUOy§WV  \8<xLXM3zBݚ| ,YGԩ Fۨ>qW&Eg@VKׅS:ٝ&U4ֹӳZ lʸɒ+bT 1@-(^(X\zuZCյ ٘L ނמac x2/-; zu"  p S "b'JKV SUwlB" rd~ ,y x#0  P; B -։kѴx{'b$( >ITՋԁ`ՙEx0& LO>bӣ3lgp(n ,1IݤMUJ@:O%v5wh4 aqDYFMU y%rc" # J|ާxW ^M{ dZT9N=؁Lp=ϥѵߵ4ՈΗf=!)=s :&B۞nTe D~ K l\ FG0 > yg>I 2ugI 6u bOˠF 2 NnKfbW#a9J-f$*![ !,!`QLd܎v n \Ѱ P? 3 1lfE 4j ]/9% pE  7X / '[ Whz Sca@ SUΝJCތqѰ6̻ҝ:yӓWЎG&/=lfў\Ulcn X&fy cD=j ]:H &@ j_ ,JGJ"}fQ"+%@; -M@(/c , ۼiސ} GƛKyP̧w۠ݴڇlx2ܹ/ΚddϓżV4u4EH$d"r @ T A-y  q pk: E#"" _ r}$}wӲ# hƚ]SPİ9ԽJПLǏCܙ9-hڟg;[A1aym>H[" K/>*A2<1&*S Bv ! O  % A Z ? ~OO c2D Bpgf;L0 !- JX?uןV%Ϫ"5>E)+`l ; X -  X#l j V ngBT # D ;8 tc p 'AZB9#e#=$+#/Z>*O8W~/?æ&c/3v 53#ſT3/pa.O0Uımd (4#"{}H  8&d xIl]'2,6 ,o kֹ7؜EM1sx4hV͝?Rҗ۸z`y=mWUe&_J7/7#-#'i j # )P/z h Bw   {o p!  *0 ; !Ps͡%hܹ-1IS|02)N !\9R^X'  S XBTEExM~ Dc m M^ 8)7#{ *<+Pj`'5zd6E֞ju3eƭ_s;w*{MF̫U{({ K-9%46f!\E@ \V i/ k.f v;"u5H* ,z,\nu=U@lLˈOS|E[Kxmd#o  IݑLO澿oWA6 Я]m rطZ q Glx 6&0# k$RH7 \[ 53 4 \]KE]!] 33E!Z-#s Q݅Yo۰Yc^4ڛ ZE/4k-/% `%Y# l S Ku=? [@H , (\n C(B G 5  `nBd$/%u M2/#^?EvV=}U0R{ oE%c=WPϞBc2*GU\}9>"j. O4u4>%7~3P-RG8{ X!0 a܍ä[1mOy־'LM')lǻuu&} ݈A~ r. WjܾQ+  6 aފ "=UUE!~+:a5>j$-&(D(k c<  $o, Tx L f% & "*A Gu,*A͔#IάcW Q=SIFb*-n! Q  ? b L4( F# p U$  q  !"jRJ )}(Cq0% <2 p~OtS3V[ $Km_ SaCӱ3 (C ߮`5?x'72%4.H4 ,L4& +bl"?8.n@cJ),;EBvکn{-*-C1j) C C1"ZHOeZSS< 6nX1 *! )F/pd|U c:=1!rM,,^%r&9 7#>{2QI;$K`K *k*2.6x۲-W"`IgTL"-c]/%3.6 6 c$# $ 0^ vJ,g g  5 c  MoD &#+k %/(M {1|E1y'Shs/3#Yi  N@(m,ێ κK؝k) X V6G039&Es!x8@7* :',H:2 6 W$sOMY([.Ȥđ˒HϞr#, =H /gӱ"%~sّzȘ\dM٢،? NT@i4M9!(*7C.pd?%/( k [!},'voF -*~p?"(5^8- ttܨ ]lwVTJB# q!w3.B #" : !< E: uny : .+w0eX6f g GO:<W T "W#&[ L:/{5\&qbm*y~<ey:" oj67Ґ̩g s bK 34.F4M#&#}    f## Y=!Z75.m#aNzFE>ޣeϼKRhIյÐjo[ɹ|ŗ8P Ӹί\d8'vҷnL)ܑap -a6FA-D3t"+s%Wt C g,~ m C9 IS)-D)i ?q>m   S?o,:XU #h2&u `#3R6  7? / t,,[l1d ;e<  V- S?n ZtM'#qU 0)39* +0Py/YkQI!:Yk %wa%ߌ+٪f 2+&gq  lr hl  p Q|<"5* qxRP1J_ ii~ƙ>݀\-It9%8n +`?)@4Om '5֒S+3o#;235_> &J)# ^Z #aL*W!w"JF"O 9@| m'%w]05 7 W{ߩz^@ c2,`4 G k" "! C M5 )   Zoi0QH, r d7 \u~{G%"r@ S$/m)0F42 A82J˘j-t.CMӹ} *5A+=PDH(;/[# c5),'3._.Z%72:,3N+Dɦ_C ^G5rϯE`6RJ0C抧BG3fBk0 1(f7C.? f$rQa{+WfYBOƞ#AՇfUAg) ))5&X] '!K"(}Iw Vj =  u cNV&%39Gp o՞ĢhE% ] #&&%YW 1 k5F  ^M b! 6 _ HB0 ; J nR7 aGf9 9 %z_  t$'L TZ08B!geqwb Cu~icّkӄ#j  + t  Rb{d Z ]\F+ F@C>^e# uAd h QOY Z m0e  )G fq;") ,x%( E*44VTR)KR)߄ݡ  1  \ |f$ Z w  '8 e˙)NVԊYue2U3ڟ  H T zڮzM',Y~  uf*޿ޱ)<Ն ?7 q Cjd 7* o]6 eO[ 1h E NWϠ#" ?Ud^0L < 6nJ2hUU>g&I گFG G ! l#S(nw`_  wO.$g<z5n R : [dv D |Im %Qz$'B.,$ t 5C+"Lv_8%jh ;؜ͧ G _O׬ ;wOatAf@%V,6) j):6( j{8h7xwO N ^$ ā) ;BP!>޿hp #S|ݜ /P-] 2%dyz4oPΩ3 K 6hK7 # \   J"`Gӂ& u6ݘ xeT1, P1 gx \ y H.,&t!m  m\ |~S;I| 3 5F 5!K6rQ@EW kg5=<$6Q ~g(Y qW*4 5 , jdL$?'1~" ?@/EV6A+ICZݼ5c l xz, Wl |*5j Br\̻u uۮ %p %B:<P #2/&P-+X^3^.,!Z`1583SC Azt, nI?^W| 3cGs|S4>%v1,eP*o(dW| |yC4 \  p&(  p I7^Sl  Bf 2h KU%$YL/0-L%%CN?"- Ջ: = $4 g  s EXhRRS $#^<4X8K !ݘ n ``.^8e;^{oF9`Y/ D&&,"]9`2BDR6Ci5-&iC  D vE / U_9 ]  ] c#$1 ,,qÙÂe45>xe ;2jZ(3|*I j$.' 9"-' "/+5.X &H72g s}y i 2sӵ^ VB`Yp]E1^SpD +&'_j<#+$%ZO)/"; t(5<" DN.KĢ؍f0ۆfµ{`(lC7J+r /!,O'2uZ `IA s7  a w   ~V ,a$a'os i84<!mBQܕ$ L\OG T~3MUWT> w&\aT27b! ?I1 i ~ C N e[< l R/?0H s2H:ޅZ),!P Sk & \#D!ke s#%V ;5g&+:" cBb! a աeڰߥ ) ʓ >1/He&%i X%!se&i!F$S++"`.=127q𳥾UC!5C4C/B!+c&')'4U! g ;1Z Z . *g  .B<#& TI19 =.Xܟ%B u) _n"}sk Vs].lq`p9:VDEK&&-Lp>aN9FMB;ZH#3n  6)˭bݤ vff55'': ##  !Y!d N o"j!9} H&-$& C ,&)Kї?b 81)V;_]$\F/6Bp;<6qH-kp H = P n e5`/# ׷$,&(ni ӹ-*)e?"$击$h'3ZG| ($))k ! Qb  aDbmJd !W . .}('?$c3.9PQ3E 2x+_l44 e_H5FjMi;:(c[yIJ;XNY}BukMnX5E/ ұ:\ 8~+:CG7!9>1/t D&%0p| " %Z {od 6&  FxT $ ܉HS %)% <ƦтI'7Ѿǽ(^R}`c@%T z%z#C<x$oPH< ͛۩4LT S `$6P.]b>r"1<1*V*v ; `k(bCWl Z4  0 %*&  0Q5R62*f b Q`nHWu<AZ-*3!1)<<2Fb5c|KaxC X3 ,g >08 P6i)C(jRN ?+  o[ <- ? f !n f$ajrɿ.+1u?/@3ݲ}Etp),?(mZ; *F%5#ly $ ]$ b 7g X*[+.WJπЌٮ}8Czf )I8&VgiAv+ <.,~ z ]^4? {  6 ":E(DA $IM&b0sїԇ|>rكTϙF $342[ JkBe"8G j144  &MnBz| y8fZ>sEd _ n 49F4V2L'( Jp " oP5 hMi>W4v t SZ!"9 y%)}U tcR =Cd^7A6X>MA/a Am%g -* +s05o" !Ә"+ Nсق"#\ڒxˤY)m}O ,R 70M%|& {m"$fq t"$ 4 ~&|%AYl,!(ٍbs=꡼Ea$:&[Ŧ W %B umE " 2 c &5P]~fm NZL8qXIQ sm747'TT}a{;Vڂa7c<D(9D,6E:' eRa:X 12 EwE + +)$\aQ(0$ !}X  }ӌԷNԶ׼[wW2q;=|!-y,qfw >^)Q$Sq!'jR .݃ne7-@^Ň%: 1'&Ri cw bJkP߼1y f!$ "=G5RI *% ",%*q."]`. B`. D6 Cj#F -U8&t-L# w'6B(vW)Ƽo^i-pΪb7[>a"|?g=n_ #1+7R^%,"X e5;()rւ X 0ζrҹܻ/2:Ǫ))2+X: .aJ"&]#%"04(()}_*/23P#gdg`XiH#*ع«]G j3*to!%  *+b  ; Q 0+ Ix:Mcw5jI8lg ^Mm%.^&XO8#;jA<) %Z/p+2%$ W  ;Jb < 7d&MS e v 0a !% "OI $f7. U\sL 4Y7i :pߐU'Pe.0(1f;%y]WQ !!g QL 50^ <.֞!r"Z@ęrtѝv{/U4R"w+U%tr%;+ Ey>U*g-{/32Kaj*Gb?WAR uu_(irrJ '^0.A_- %,d#v0#o^ YZl  uSOI i 8,"a GqC,!pRmGAq_YiZ+$Dj <#*fڜ]y " &7O6iv 5i(/$[u8*$-'% .#2.F  >tAz`ߵy FY)կkNY { &?z AЎ1 7sհ 0d ?X5UGkT? =Tt;m M)AgȦ-0ywhi0J,&{ 7P 0<~'`*% J6pE.-wY5lY*f| C N`ݙ7+a~3n>}& (* '4R"i"? 32 1b  e1 U AZe$H A*o H */Bje{OpiM:3/E'_1^;~FJ  1Aܮ Y-rP6?.$*j  (A#+'Mj 2+;b(d-n\9 H t7XC-SOK t  (x>D" C.N)7e S2%$ֹ$  u`ؽg8A"(. :ڴ~b]8E0c$@ 6FW,i\%نim L  & ? )[,L {9H\ n~!l5b1,O)X{>+|;3'ȭʐԧZ-GS h`>Aspg(E W۳ )_9XP 39QG|V-ܣJOO# \ ?  r Gw Ҋ0݉3ڗC 9>3f\9&A1: 1"-(>: 1% h Ii5  vU o [C  p C= g #U  +! & v^[> 9 qLg S Qh0W ܚ>%(1( ~jbp\qW X n'  ;z1sdP$lth67'+G  Y<{r9ظmǻݶ!w5@jĽR K  )'l(=~Zc g-`#06ӟ*6ҹ}V)- oAC!$ 8]J lr A]|sXT *A \"ߓs e 2}nscp8K& )J;.8y $f*!"29tN*",s+@ ! rlT  5 $ts K@-KA> b  z! U ; + {#"S_ͭÊ2v#ƈe41Ѩ3m(.0>" &;#AoP~[S Y6 p^oJ 8- GY+J3#E;$m*v 60=% % ?r~: j i$h%  ` j zV˭ٻ6/`q 9 [YS!ZȻc?4XAim"+2x W("# Q A ? Y$A4  r  Hil &f- uAK 4eE  PI  ] \BX"# C=:,2*7ZZC6d0$ 6f.d7n '$e`>sR#2vG!qj"QO"% tg)+Vb6;1OuNE Ԣ5llԈ^, 8$By2=0rִzO~bkٝțJtܼCwvu 1A@, vf'Y0& "b+O%7> <*' rDCM.r-$7< 鸡"1 x&ͧ: Ԁ^Z%-,"yC,->-E K?r#+ #8-#nT  ^Tu7 h 50 g %/ N T 0 5U ? o,X0D ` m#$ 0.T4.Du i~nO'%… ' 7D2#0b-RX"&Mbz"6  ~!D ?"'TBnm&q0'2=8 /#D}4 ]9Oy`G %Hr. fo)) N kE19{A<{zA%@NmgO&95-UU$ "C"x  9 /$%[ m3Y:#$\οͽ9ފ԰?nٯ;Ĵʟnt>*.F dR ~/D1 A#&/%>C!&an +ko` " Y.f 3- >W  u J yT .U&$M%bc/h5"9 T>,YްૡұF>xlr-Z6.ZM P*o&rG:%"'"h-tk ("$,%(~+42).7JM9uIT06pasw Hkr5ٴ,LS3'!Tޮ7/,?A9d0]ťw1[ r ֻEqǻ!KFotYqd&G 2B+6I,0.! +(+nYt ,[(8. \)8(`8m>Nf\̻Mbt?ZGX' n+<-  e%*t!84 ")1qD  % M g`> ^ 4  ^6( ep sk F"=!iy4-8 /- i`Z#L%F<̉)9|~bV+081 {o 8*(8 '#[v 3(#C"+%fUG( 3) 5F@0w$om1߹fpϪ8,G[) &)3I4%@ݷպe|9Ͽ$+#$`|78Y}'K1@(y3}5,0!&Z 4v2Sya.H9Vlýzv S!^= s?zP0Zq T- ^f+0='5^&)Zz QGWq v W$P "c  GB  7 g\|  NGg V   y T )r)5)a$/MbrIm % D\  { ) R OYni "c  2Ce RJ?  KzBS}dzj" excellent-bifurcation-0.0.20071015/wavs/chirp2.wav0000644000175000017500000002420010266534512020743 0ustar miriammiriamRIFFx(WAVEfmt DXdataT(>VycK$&^a|i K b evcC@E EH I+ 7 fAAC:|wqv* _UWV[@*ug(Djl)A '6OL &V(ul'V L N ;({KOpu~aN&{  6^  ) ~o& [VPzm OvPAh|}5 6 "0"NxnP 9 YpXN6m#&&(a5~S 1Gq:r^H 2 A_o:Mr_p PI m) ] |.,54jn ){imnGY[+<( `d~ 4 WVVURLSw |o)*W = p }d,U\48 (yNA G 0B$&   =<7 _j3G v~R 3)wE*6TD3 `dS= 8vR+hkillmA0D{ 9tg -lj   c  sMNJQS>=<:!aIk0)(:1T0% ,7 0, >/6 s %KftqKZ &&&i4. C IrS>1DwqDFEGH t TVV]- `ccef` )y{~ A~ {vxudmijh;N8\[Z";wJ PMJLK #?><; 2n3/0,-9u#E""~7 zF 6Y4%"\{`,-./] 9;:=> GHHTTYWX\bdge;orqs|*{ {zxzu}< mnljk}a^_?URRPNOEFBBj96755 +)*'( H  ~l_ X  |dG"*+*,.7 5979; DCFHPQRTTk]^`ar jllmNvwwzyd~2wvurs kjjggv]_Z[ZROPM1EFBCA9876 u+++*j9  G0     "#%%^ p.00'<; b EFGI^.7,QSSTybM^_kgikkZ %tvw0"{yxM! mnmmYN od`a ZVW ^yq` BB??M6561e zp od p= ZRD8[lC   ! Ub0 )L^ = 7:15T! U {j$[- qC WU r N&Av mYJ6f] wTTam J:MS J% H<|C^k  /$~MsNG af.  Ok  OR  l~ l I?K} o "WnF):+o #V](\f~ t X SYa'  XZ 0  ?@38z # OCy F; ^pz^bH dwEW b 2eaI l ;    l ;OAqK[% " u{V:GA5iP:-^H;ma 'ng 2  = F 0BJ0 [pv Wp] [ jo:m2l3'dn dVPV6s^}:uMP P}$tY X t i JJnm! Z 8yIX.7OrM;(UB-M7dNe>PMR8l1XE.%UIMUV??|]jF&.fV Az X F s Wd[ESK  3 ]1wQa1'  k ',Z9!nr^ @ ~OE&^O>  5`NPc, 9 ,\fQ&&DQ:TuxmZ P||=rgEBi O#de l h 56N~ u t 4 M  ^1&:)F0tf r E'z 5 " 2 h O w u66Q!3t 2,: > baTx3"CB.5~ ' HTH=m Y g bzy( PS;, d tpiw qY=w$? d G/ \ ".69g@o*w;  ? $ =FQOArY 23/  1_cZ*G  d aL X=}.A$ \B %C`]  tg? OUHr./+##%xK j? l:.&Ww  !oE.L8PRSU M  1N {A8u  =qq X|p b xvvc% Jn p\ ih s Bhmz  8|aW<V KIIIG ` NN r0d.  I3Cc}  C MFn.pl'L"Z$z!  Yh~U u-R+f y ]D.nF* j 686:9'n P~gR{ ' bTVXW?Vb(>2 dt9stu|5Wzm$H2+[h w w t t 2  TT}yA|s'cBs~ X Y X V <I:Fh%!J=z: / : ; 9 9 0 Mi\ )CWk4#b8      w #NTQ):Y#   . Im2NSl[k8P a h##&&&6l U qnPj@@C+{?c  lougmlWgX4Qx b +mmonoL5 mbKBI o n m m 0 W &$ q/ T R S  9  E w `B|'a'[}YYM;;`fU ) ( ) ' ' _ 4s8"k T IKHgl<jE[)98 \@^ U}1h,^nUyZS$#%Xm  /W253666jW ; P/(I rBKL b *"Z]\_^^a{L  Iooooqs[}\ aY t t t s r q q a F7z e a c a ` _ _ kg0e" N O O M K L K * ;Y/@ > < < = : 9 9 9 =- - - * ) * ) ( { h}I         _n!        V @"!#!$%&&&x 104435658kX HAADCGDGF^ jRSTUUVVWD aadcedgg 8 tqsttuvwa w u u v t s t r Api g f d f e c ?>0$2< Y X W W U T #';bI I I H H D l#,O; 9 : 8 8 $W-HU* , * " {aHaV, j =66YukT 1 jk7J-wX ^;@$oQ\ D[O~J 7;Fzsr0)GbG >5ZKoZ 1DdYnGxOzlKxUJcNc1k{I .1@~()"hBATH*bZQCmFHI%JFIdGD@<60)"d 7~x՛(΋Ȕ/ːͭuؽNeI (W!!%[(*,.....,*(%N"Wf W43 Q9 2   =jRav3 o "[Og O--OPHI@6(" ymbVK?4&excellent-bifurcation-0.0.20071015/wavs/bang.wav0000644000175000017500000012437610554671734020512 0ustar miriammiriamRIFFWAVEfmt DXdataҨ !#&(+/=8(8ADFOP!+ HsmYRR*!)cBo;_SOR u # h}8KC($lN`5SH:?J.(Emg;#hLT<G69es"2 fU$5Aq#^O_6W`FHn=1oor|LMbD%?2@Z1GXoMZ]t'[S_H*J#eT!(?'o&%,$Y%&xzv ya3_ @=t| Yk*>>V3hG L u$1 %TLLp-B'E tjV C I /VQ w e O EYYRM ` V@b na($"" &D!= am   "  x 2IT#v !4 e  ""!"C!;!! + ^}%*3HP0)%MZm z 2s {JlsN3+4C9^[  F660RM/U x+I `l"}oeG6hW/4 E !)knQ ie jUF K ;HL_|H& %$[B- , Ye)w.;41+fAwaV1Ihr2JaU>=TRNX>u/kD_[wz0dm&b"Wm,V8eC$gzXvMn{3 \c*9/X*"(Cj^lb=;!]9FPi& f(c*GUXtEaT]$l\ HXw[pS)jc dYS6q..*.dc:jiK 49wH  S'P# *&  % # )o2m+|4 < K d(3&Rb [ Jk"e (hw'SZ&=$ HT u?1&ksXwn]4ze.C y'" hW !Z6Q u = S  'Fs)~ e!X"f#|!B E0}5  u1 "Z-|  "eZ _~ :%ozX'7  Bf XX2bܤcs "cUX,,<4aZ#TRjUD_8 b  <u. \tju* Y >  J>e .&]`=|Y  ;'y0^h4LcU{ G  r? 'WTV< .oL$sbE  ,swByu4o B_a &[;e^5 r+8  m1 _jCyd b < v#{~1S8J)U}P=D%-I|z!oE]7 IKeulN bc5HCO 6a0MA; t %%VnO_94 w  ; #FD2m+l-}ROu  IaK %  naI69a Y; > GL3$. ptZ $9X$+1W-d/i$FY&NXLVN~\q$^^X<qhH^]APlyMh.`Lj"qz/ PVB[jHuU3"Jzf6Ye=jt\j8xheD/eg77 B bo6a okldf nN*d Sp,1 00yMa G``# \x8 =5 (w@ ezl w T.9w<9 >v` JgT} Umw}@Y 53 <Tia & :s~ p M5Hl7 4T?  qH+M >#e?V:^f?ociS7(M#K5i#>gYbZ\NdIkYN1A Lzp:5O EYYf5M+1w N hc"Uua"d:=F{g+`  $G#X!B_; K4'#&cI >P_A][(- N* {mZV^(v'gl H U D ex`~okX} " hK- v$ 6L()[ib )'6 ` 5*Y34[QTCj T"2 e  [ j= nW= 5?T7o c2'u.U $o6 mQ?"75T +x=w@OWM~ (emE2V.p !- wl.' =VN(% <hI|3\+]I]!*6:y X)q)#| W ^&? S /  [ M ; W  lL [!,y;AS2~lBr[ @ r  I I *A*::'y9h JnI 0,0 SK={,o}  VW eR ." p %&@PlI`\\ S*gu@E" usl%;l N wsI`2y Lx,d*eg ,qe?zbY5Q{RW_cIduEpP}Z:.75,`q*sjG lg  $8dvmn_ l'du3Y> G !,Y: 3 <gY lz "# 62N T]yn,<# WiAyV;!R\YEqy_ 0_# "9@5 j,WYM 3q-'"WD  ;''= 4  e {!A'E6V+]R:n*D=g b#p}7 JuEe;t59js$sOwJkK4/69:rl&-}:{Sbe  + iu n@Og2)|%o*v% cuv`[@ 5 !n>E`N_yt] G*woMr (LK /,=PDjK i]~ 0ac`a8GsI #Ba|#o+WpI* k]*7y!Q^](w}CQ]$ $ M$3d7 .jC5]FoH$1r . I ^\3*N09 nhHU\ /  Sb_`5 G~(K {8; nQ8 edpG j2u Hrr}|UAx5 S? 1&l]Uo P? mPB?tKFNQ?dDQ}w*?9/7;Fv -mZ8A&}P  |5>  v5(yg6z \u V +z,rgn la }xJ dBT}o  i lwfWGK_  % #d-VUoW`##Vy U }]e@\y'Xoi`p.j %rK8`b] #_} Kd  .f Vd N8!^*v!Kl_551i_ClqS? # r) "k  ,Q `?_5O A` h+iz U " e r  N$qn.7 dBT />A%KKg4TqLg!l* O"`9 {.Hs 3 F vCZ#-0A wp%sod=[l }*&.Zk5er KO~mTz= o 3 X-q?T  zk*?jyV( !7xwor:0m c T $ !dXL_ 1*K6@ _2'%(R<JHP0l2r"\I:l =y%KA.;}> Ix\KFzY5vCMH~T\Ehg,)BgVt$ O bC+ p A\^l7+U_.#]RH_ W3rGjw{)IXkIl]?ZRz~}bZVY$I^v|C# }J=E-;yrb0~ M4=,)TsN/(-]&b=@udE7x,{J= KE S:7dJUR2%:R)f3"j.F|Dy# eU4jo@3!"d eu,K9R$J-KW*u2^ruduky' 9g p  U Wx-yNl =Gos$0 Io<b CaPlc,<^kQ6 l E`;d]^q_ knq @2:[>@iV{gpAiD!;h) |K*O@YW  :B% !f ~"!|n$KwR,W^Qx Gx WM \9R{mM[KA6\ZO<cIR`'u}]6G>f6!GD?A:0it=xz @0 c0CG\}`mx,Bq:e8/j< L'^F7d?mR%hCi2,;2E\Me~4Z3>&&J ImaY2Bd Dbg*I.Tz6H8 .wT a?&PS(P6/TP\ T%o/, ',nP$;D[t:ZU}*r7&?_A/vXNvDUtpeHGvV(>C fE>P<wYaQ{d@p(oRJ2$s}S?D/ CI!U 0TrPN_6;7YBgEyT+d:q>ivr2\N[[81/4d3v`me V%_ Bh E3I6zBiZ{) tsBf } $z3ywOPUkDa"6 %J0&|B0jL<G: =^  /e ]YaPms [Dyi Q c?,s2516 2I8+f@=Q<6T"UF b ewjY u[DL: ^ m>#1- XgzX{}Br{L]@I `Yos7f,*3l Btu:<fZ/${S3gW81IY9 '.%E;VCRWw46wE~c;w @dd(q $i}m57b} 7wi9`W~JzpnWFyY9J$ N'9t| ZFS%4/Hw-+`f+GRe BaPE2MwvexVR8HCfXtKFFN|Nd/ "CB+s14Q[X ^KmG7H4T@$GU<j\'4=?+2-TRwhQ ,0@`yD*B%a9b7W}BD>4 ygh<+};yz VB?Bs txUigLs2{x3]d8F"fv/-fSyIvH`mTG'&K&rI~*0`a1=8H}^uFG{Avi fx:w%J=S 79$K#@*Il~$P;| tX*v<zKd(E U3+|9V;vY8abSR #4tUhn(zK CWuMH! 6)! T$=m Vh.7t61VM'M>88d|5sS1 +nGq : p }*(oi t&@p[ QgUZG/Ad+ h riN?a2_w]TRI&2 $6Zf?JAd|5@;#/G%  [VkvbmlQ +2Q  ( l8 D-|{=} >D)==u_Yb,>gN'  KE:0  <OsX 7  YB=>:yaE%X;Cf`P05 Iu;u]]l`} %2)a Veh:l>#S4lQB9T9+` 2y 'i"|Bv0n8 $W_XxBY]b@aI-X5 4KX 5% '@N?H8L r,"?i8KO()N>#/QY+ Gqy 5Gz   q+[H}6>DGTZ%2i/c`gTq8NSAx$VN }fRF]A5_^sQaPjJ2q*$,HD2+= #Cnx]!L$xQ+<{H0D^32 @ 62'[jvGFcAig9lG*ur`lvw[Em3Q{jQ }q&C)1U}W<2y"h:^qCr5,,wbz?f_NJ7!zIGM+oi>" *c5&~T>58L27_JV DTa1cUFmaqX<N[kYN[ee!?%m4.jLaC|+GU\65cNrqLC"oH}Ya1)LBM_!y}'w`,xB'! whh\cL"L)+m|iDP N?s}W(Q:%,*zs4oRR1GC9]  @ i9cSw :HTN/t{4%Aw P$SrnT<3k4; h(ik#+s=@H=6@OAUJC<go~_\ *7a -p_rcDvU vJ_g40IW\"Hp4HH Tmi[4x,W- p>8([6Qn0'N-&Z=!Js29={{9 BM)=WY*&3]_poDDz*-qbxA J{Wuh`08xk\T <q3rfNZsxslW{1h-X~^q  E.0*:0\e<TZ])Lwd+\tc 4=c~=y, =l;zF*4WWt}>[TM`&>{ITQ T.(x "" Z)<'i] C)W/mikohx| 8\1o>Dm#~(Ej[Nr2k a2D: @9|z``3pmyo s~u )Nio jE^KQ+}!F])arNC ~U b3)h$B"a.I@bkNg+EMcH0w1J^PN ($XvbOW!wdM/XE9 s>78P?rtBM{(i">~\t:+>O,Y~" %X\ ,x7IUHlJzQOF9_VY&D-v%.hwhQ9yzYN5)oc^K:87Crolq jV (74-jR /C>JzGuPbq;jY'l:n YV=,$&>!l@s]V&zDZ: PiN=`hp&.dn 5Yf:zIX.xoBSXCq|:x((]v=) 4W}M5Ej}8fIYmJ=_%'5Vbari[I7*} k{w'iPK~j';3~k.jp $OCQ(tHV%dI Z gt#d\>m MGS gu\y{w%7Ri''d.cM,%$|O%S}AX.=:%z jy+a>Dka^{rgSVPT; N2?]wguJ0,Zv/iW QKi(( >%9ORC630!N7T@sEYN.FF's.Y3$dkD7^za ^ 2!A /Sxqe:z. +h}!!@.z= 3zjj8 HDYRnI-3 1$ '4a zeAQ\8 |Z  _(D'Y?P0=!FvM @UI14S=rwho,d. .3 #|h Tz_ t=5g$o9}#J#Gq10C{658[G]Ul%} bv/BQ "-Dj[u=GpZibW YPdbnN6u[)o"?rtW$_X'nL]WHP%'?9/0-oj}* K[7vnOW8 (Vz@ $*T~g )#1$u\R }zF;HK6%B2n:c xt4#NSB!"7t68G;Dh}N.tI bo6g|pyW2o'\2_Te#`.4I984O`g "2]y  Z1%}ZqY dGz '1<5rV,J|l `SS x hT,s$_W f RrF]!p3Q2T.P 8U9 3oChEE@suZRFl4 C%8G Z.`KLXh&=K,mcwX',6@Acb/[h?8 Zo0Ws<9?,:sHv]7gYpUkJPZAR<e"nQ!Cof {j2^vY`crZv "Fmrb#::aJ77n"L\` EiC.B.5ISDy ])H'Y m)!/@^U-{R4)B,([%]@T% s~) J+ eR,!9kl&h@ )@@cD< *ZXJ`8lh2'L5d0w)cNeZRrm!ra53G qe~UA9H!r!zx*X9b}KB,mp{?T/ ZGu:^DCz-W }GH1tJ#L/S &5up$=<;SN 7E Ua%=#yiG<;0&{(/Mpw;:,:`+T4I-t3*VxTfsoliH^C (/-m iwwg\yeKaDSVP(OE-N Ke.wiVsv:{Z=E$ _Bh'V7I$$> k1/8# g4 "8,zf^?}uo~vqvA15;4Ya q=%5|I|lbG ''fpD$>W<U71)rV3HJ+tb5fp3r  "7 cD)={hiDZ$zX#sjT(&#v\:!f$(.S,erF+@Zv%Cc0PI ;Y$fF{@L!R ,%6cb'D 3X?v5'ng2%z\#"_`WH y?8S~S_ (UWQqHvcl1 N%OS Lg$) c{2IS<_ m\!^]%%`xk .5^5s%9d9!QN[j}L1b*8zF-;:L!V*`@hSV6+[ yny2NdRLg?XQK4:$A Wr..BdO` }O6- Uh +mZD ! p5[u& aC<(v=[F,XT 2Cyq`iD^rlf%qa  @ Jxc% EJ5#U9uu ,h4.HtK$xKWk=va%V%1)L&6 __x'> :Y{K&-$SS$YE`LW  iH cT!($#( $'OB@ ?q"X'nI G(nG)LqL/3 cA9>da`G,&Qi@icmKf"3#)#c?Iv Yz![3/)5eWQ`aXz\[`?wT:*Gc, #5&,7(ba*# ;Y ~zQ?PX*S kA'X<_ >KdkqAZk\Ku"gr2#8+_7- SMQIf5L+w(Q)3 z?)?=hUjjvX`;>Qlu9WGX > "i@ 97`RpYQk^H, _`7$(4x  W gB` k9{j]#Kf 5@uECN c_G&NWMmE?86R Z+ @GZ`2K5\D&mZ1"/UE( G2J'V^_Xn&oDgLZz~}6A&V- k G^>{1#W+|OOW av(# 8t{( N \*Fo#|NUr ' MKn*z!-  ; .Dl~QLI\$=  v|1YUC}RC( YB%T7 <d eRMZ%IF@+8 Y0W i9k!H'!aP Fo(E ,-6(i`D{R:pX@|+ :~Fmd0q48Bb.**7ea_' x:L1L(DU%RN X}2[.E& "%   *  x+&~9 @4&sx G!?xIk :/F_^!n ^()JfA=9 }8N1eFlRf*wiR<)iB'cxboDQ8u?aNM[Pf%CKHUG q<($MhLym  ;&15nDA F0 i-=9 Yj2= } V.= /c  =)LfW oH :z(K()Y57 ]UW(IMV_Ch V4L)2f jsE>v+pMX 8Euk>*k C<++/ ?>e<q}JPIOVSO>9VZq;:Y ZP=l)^~i\y(b0U~Rzn~j_ISFZ0g@_ 3*}b /-UO B<zt Az%vO*<MP| .d]h Vl/|Cg&mz",]:E4%,i'{1}C ~6]  h8 mU!tJTJ2 7.  ,y`Cm.z %SyP r9)6+,%- Ek/'.D&T2 6  /* t6:1k.aEZ.{ ' cFQMI X4n>gR -0 /+2 #L/o-   %NB"N:8k(! 269'}d :3%ZOdZ(@*~$H[G3i@}yD $i+ ^o 5m"eDpIodn5#=M.<C'_R@J/sH Ow<(`<"< % Qo]3:8$ 5|p, 4XVXzI1,g@"'2g<(5A< $mix=&2;--b3V=t,y td%Rw !#, "DI9J9R` &{5'I}.8 P#DP!r&/.&Rl'~ [7S   ! b7Q/i4sc;78e5D*$(,1;l. v8[C$C"   #%,y6PS*) Y.% !}} ZS,*rTI%,H ) (* !A R 7=Uw5#L\'R /K_ 4 uaO## wex'<V  NQ #_PdZ[,C%v%F'N]0 N"  3&#@N XN++25'}) 3v<,/' h\Qh C&YtH%fTd!#Q#]E2> V_"e2wk:u"244565t;sR{g,B)* 99']<9S?1 ]"$&' &3>jH< Y(YO*<1":XOgV}EiBd /qexcellent-bifurcation-0.0.20071015/wavs/fire.wav0000644000175000017500000000266210554703052020506 0ustar miriammiriamRIFFWAVEfmt DXdata}pB{H"f@^s7Rr]A ]i<H|}rxn\X$pV9G+jD cH.aQp8Q; vm2{FE3L_QO/V,7/ <>{[-1~ZQx) sY5# B q > .yn #V/>   "n as* ?[n3 "/{ FAV 9 tb$6R"OhU=6#0$excellent-bifurcation-0.0.20071015/wavs/pbeam2.wav0000644000175000017500000003540610555511540020731 0ustar miriammiriamRIFF:WAVEfmt "VDdata:cv(i!a wVA=/UU߫WܫTجUԪUЫV;1(*%$&'&%&%&&&%&%%&&&%&&&&%  .E3#(01,,--.--,-----,--,----,,.!0RK;8@CA?>@@?@@?@@@@?@@@@?@@?@:'DB316:766676676676766767676776#5Q@'&%#!#$$"#"#"##"##"##"####""# 5H<./7854556445544545445545445-  $2,%%')''&'('('('('(((''('((''#*'!"!!!! ! !!!!!! ! !!!!!! #87.*-/0.-./...../60"&$"!#$#"####"##"#"##"#"#"##"##""##"#"##"#""###""######"##"##"#####""#"##"#"##"###"###"#"##"#"##"#"#""#"#"###"#"##"#""##"##"#""##"##"###"##"#"##"#"#"###"####""#"#"####"#"#####"#""###"###"#""#"###""###"#"####"####"####""#####"###"#"#"#""##"##"##""####"###"##"##""###"#######"#########""#"#"#"#""6,!&$""########"""#"#"##""####"##"#"#####"##"##"##"###"#"##"###"#"###"#""##"###"###"##"#####"#"#"#""#"###"#"#"#"###"#""#"##"###"##""#"##""#"##"#""#"######"####"####""#"###""####"###"#"##""#"#######"##"#"#"##########"#"####"#"##"###"###"#"###"###""##"##"##"####"#"#"####"###"###"""######"##"#### 34$#&$!""$##""####"#"#""########"###"##"##""##""#"#"#"#"###"##"#####"##"#"#########"###"####"###"####""####"#"###"#"#"##"#"##"##"###"#"#"#""###"###"#"###"##"#"####"#"##"##"#"##"#"##"#"###""#"#""##"#"#"##"##"#"##"####"#"##"##"#"###"###"##"#"###""#""#"####""####"#"####"#"#"###"  "%((*,.14477;=>BAFGHKMORRTXY\]^bcdgjjmnrsuxy|}݂݂݆݀݉݊݋ݍݐݒݔݖݗݙݜݝݠݢݣݦݩݨݭݭݰݲݵݵݹݺݼݾ  #%'(+-/23479<=>BDEHIKNNRSVXZZ]`aeehiknqqsuxz}}ރބއވފދގސޒޕޖޘޚޜޞޟޣަަިޫުްޯ޳޳޷޸޺޼ލ^p62k.%!Y"# "!& !!!!! ! !!!!!! ~ | y x u t p q n k j f e d a _ ^ [ Z W U T P P L K J G D C B > = < 8 8 5 3 1 / - + ) ' % $            ||zvvspookiffc__^[YWURQPMJHHDCA?=:8752//,*)'%"    A_cTV#$&)*-/12569;=>@DDFJINNPSTWYZ]`abefjjmnqutwyz} !#&&)+..21679;=>BBFFILMQPUTXX]]``dehimmorsvwy|~ "#$)(+./22679<>@ACFHJKMQQTVW[[_`bcfgjkmqptvx{}}P ^'.,!yyzA= }}ywtsrnnkihfb`_^[YWWQRPMJIGECB?;;:7631.-*)&&!"  }{xwusrnllhfeca^\ZYXSRRNKKHHDC@>>~َNNXX !!&&)+-.1256::=?@BGGHLLOQRUXY[]_acfghkoorruyyz~  !#$((,-/24399:??@CGFKJNORTUWY\^`bceiikonsswwz|~ ""&'*-,02458:;>A@EFGKLMQQTWXY]^_bfeijmnpsuvw{|~F""XOIIIDCC>=::7541/-*)&'"!   }{ywurqplkjgeca_\[ZWTRQNNKHGDAB==:96421/,+('$!!    J|R;.[\7 !"%')+,0/3678=;?ADDHIKMPPSVXY\^`adegimmprsvxz{~   "#$))+./03779==>BDEHJKMPSSVX[[^`bdeiilmqquuyz{~ "$$()--02369:=:96530/-+''%"    }{xwusrnmkhhdc`_[[YWTRQNLKHHDC?>=:96521,.)(($"     H :]`X\\`addhillpptvxy|} #%))+,/13679<=@BCDIIJOORSUWZ[]aaddhkknqrtwwz{~ !#%)),//2359:;>@BCFGJMMQRTUXZ^^abcfhklnottww{| "$''*-./34779=?@CEFHJqP O fd 6 4  ~ z z v t t p o n j i h d d ` ^ ^ Z Y W T S Q O N J J F F B @ ? < ; 9 5 5 2 1 . , * ) & $ "               } ~ y y w u r p o m j i e e c a ] ] [ W W U Q Q O L K G F C C @ > < ; 7 7 3 2 / / , * ' ' " "          M n4^c`dn!"%'*+-/02589;=?ADFHIKNOQTUYZZ_`acfgjknprsuyy}~~ !$%'),-.24679<>>CBFHJJOORTUX[\^aaeehkknqqtvx{}~  !$%(*,-10478:=>?BEFHJLOQSTUY[\_`afejjmmrrswy|}}*Z . bc$ e a }{wwvqqolkjefba_\[XWTRRNKLGHDC?><:96420/-)(&%!!  }}yxvusonmjghcba]][WVTRPNLI(7.cf "#%')*//05679;<99543/.+*(%$!!  gtXFyhj  %%(**//1559::??ADEIIMNPQSVYZ\^`bbghklnprsvx{|~ !!#''++./34698==ABEFGJLOPRTXW[]^baeejjmoprvvx{|excellent-bifurcation-0.0.20071015/wavs/beam1.wav0000644000175000017500000016615410560204726020556 0ustar miriammiriamRIFFdWAVEfmt DXdata@|gO9# fO5lS8!~fH.jM/cD%mN/oN,eE"xT/ [6^6{T0nFW1c:kAlDh> c4 !  ! p ? { = f [ 5  x m a R E 9 '   z m ] O B 4 )  wkZy۫YBKs .IO?& .le# L{.ب%ѱ[&w .Ӡ=ۻݹߴR1?/ }^D& kTA*{qg^QC5(zgQ<(zmaTI@4+# |o`SC2#ykWI8* uk_UJ?4(pdTC6&seWJ<.#tiZOT "0 =Fm+ ^!"#$$#"!B xhP dxHNj\V^2 ( _qT{O73  z n)BeޘvըH^ ǭĊxũMZzsҞPܻe="=OG% *}!g4(J٤9 |#Ӎ1 \GۓI]gl}?Bn> ߠ kۑWBLz.ܶPޔpP2Dl t'#gbM'4xg)?>O pO8,,1D] =tClxP%RT*.DWkyveO7e@hO5 mU=# rZG4 ~uk]QC5${gTA/}tjbXME91$ xiWF7%yoaUL?2'wj[J>-~qeVI* R]!Q-8Qo pL&eA"ufT@)y^E.}wohbYOB7( r^L9&zof^RJ@3)ucUC3#xmaVJ?4&ueVH8* zl_TH:."scUF8* ym`SF7,|qaTG8+ zl_SE8)|o`RF6)*Zo8h "!$$$$" =SP <}Y{}`LC .Y+Du EU%2{N*,Hw A M :   g r 4 F ?,J;ImԲ?}r)Ǩ*~4PMf0]ޫەheԍԺE)[}RC>5!9/MqRQ}yQ Zz^gޛ܍OGlCݬދ|xwtjLg2cwlKg4)hEy$mAzJHwl0fHS8-|I@B9Zi#x\Xtnu5p+e/@E@3KrB~vpqz*;DOPNH>.oP0xtrpnmpmojhd^TK>2 w`K4"ztjbXNC8) o`L?-{qe[N@3& ~o_PA4' {lbSF9+~paSF8*xk]OC4& |qaUG8-!vf[K@1#|qcSH;-!seYJ=.#~pcVG;.!qdXHWJږD_3e޸S:S^][9ޝ8JݶL`4S ?vJ,O$f.xfe-{QBKkL*lP{i9c Ym. 8nR# _0{U2(:IXckppngZI8 ~eO7%nT>$ ~mcYOHA:50+$zfT@- |rj^WKA5)ufVG6* }rdWJ>/!qdUJ;.!{oaQF6( rgXK@2& yl]OA3% uhZO@4' vh[N@2# uj\O@4$ ug\L>1& vg[M?2$'S {S "#$%%h$w"pWg aN'$J_ 4 +_'t>Jn Q.5 1 [ I  _ ~wZ=Qo t// g O Yeچ_QlȵƌKe%jކ 0g^/x2n8AܬهGRxWx4 DVD݁9<܃ ݷ,ao Rz>"vL65D`l?)4 uWmH vY%~33#Yv)qF+1Pt4d}T-sb\X[`jtv^F,~xroonpsswuvtpldYNC2"weR@0! yiYJ7'wk_UJ>6)  o^QB1"}odWK=0"vhZL>3% ~oaUE8+ wj]PC7){j_OB5' zm^PD6)xl]PB5)ym\QC4( yk^PD6( yl\OB4) wm\RC5( XAk`+6#Q%)&%q$" #~.= ^h) E dn$? j p OK k O +ncf^' X h6akqPL:pȢy.Σѭ i= dZ`%w޴`َO֪ա+=ج0ߗ51g)eXލ^8jiCs JA  p.9\bIUgzuD+&:`9SB{Pi2y~/Sv|bAsZ>'n\K8( {obTE7&sfZMC6,}n`QC5' }scVK;.!yj^QD8*}o`TE8*}oaTE9,zm`RE8){o`TE8+|nbSE9,{m_TE7+{maSD9*{maRG7*{n_TE:*{l_RF6*A!$0&7&$p"Z >y={BVZp -9 HthD'fwE ~ UzI J  qp~Gb4z  )  J n opR}SAmhAv%,\1WMǷrKЕԍ;9o6>^p։\ ۉ1m6>CUn={ތxI^ߪK{Ivr::z:X -XBW7c1L +oS%F\|i98i k1;k1s )67*Y%nfgo4L^fi_P8Z9%&(" pYF7(  ~hO:%{m^P?. yoeYQF<1'yk[L?0$ uhWJ<+~pcWI=/"|oaSF:+~rcTH7-~odVH=-!~pbTG9+}qcUI:-}qeUH;. ~pbUI;,!~pcWH;- ~pbWG;. qgt61#%R&q% #L &<#!jm }q-E7 R<N6f * e =@~ m # ?|_y]_ ; V > | 1sWg' B]Ld]gYN5`wGe0+)uslQƲƫjПS-V B|}Yհ٤~zgoC#$o1ޚܱܞݷ(~4gb20/Qa%Gk@$N[_i> si"sXg=L4-kQAX]N4_vigr8Xqu^@lS?0+',4=GT]fiheZN?)ztmllklnmmhd^TH;)wf[MD:2*" vdTE6'ueXF8( ugZO@3& seZN@4' wk]QB7*|rbVI9.!wi[OB4% }obSH9.vf[L@3% {oaSG:+uh[NA4' |mbTH9. wi]NC7'pfXJ>1# 3/ u2!$2&%I#)3HdM {mct x] }z b BM<z  V b 0 2 zdh(0oBG.c ;kENz{V&Q%K' ktЃ˾kY̘ՙ۟sCvM%I.awׅ֍փJٵۍޟ[4sjH1Qߢ ގޥ;-j'fo#~n, @4r~dC;3NU"#cxC 0qv\b,b=hyU/ {eQ<)znaXNF@90(vj[OA9+#m`QD8*~qcRF:+{l`TD;+wm`QE:*wi]PB6+uj[OC6)wi\NC6)xj]OD8+wj^QE9) xm_SF:,xnaRG;.! }pbWJ<0% tfZM?4& wi]QD63h`{i e $$e# g}0 B"+4,H7 I kQG  jPt \0 o  k .  5 ! @ T[$"M"t>r592VfgU6 l>8\{uX:$ !͛ʿ!f X=Gp0a*:*ܢ)׎>ڳܭo32opo0e$tU<#ofdx:O"CBKlX2epUU}!j7ey^3W* %EkjO3  +.3/+ ~sljhfhjgga\SG;,}o^K8%ui\N@/ ~ug\PB5& uk]PD8*{maWH=1" th[OC6*|oaVI=1% ui\PC7+~qfXL@3(zmaTI=0" vj\SE9-" rgZNB8)|peXK?5(|nbWJ?1& zlbUJ=1$  ^! $# 3 G{C  f O sluA R  w  X {cw?!9gY  8Vc#IA;Gq&&o4<2X+8ZwoW8  +9AEEB>:53!*u GԵtDzיPG{;~+ 8N?A4x: u jnGV4N3^6\Z9,4Jp(GZ_VC%we^]iz{ma]ZafpywjWD0ufZOD<60+*"! yl^PG9/${n`UH;3%}ocWI@4&~se[MC6)si]QC9-wi_SG<." ynbUJ>0$ }qdYLA5)ti\QC:+! ylbTI>1$reZNB6+wk_SH:0" |peYKB5)wm_RG=0$ qhZ`x+< WPr!Y#0"}QM BM k ) yj1mY* ! \ oPO C^nWJ>pV9^l X-1 I)Ps|`@$055."%<LWbdcHHdלkΝ>l+,V+m\\sG7K@2% wi_TF;/$ sh\RF:0# ~rh\PE;-! ~qf\OB8-!~rf\PC8," ~thZRE9,# uh_QG=0$ xk`UH=1&xnaUJ?4'zpbXMB6*~ug]QC;.$ _U 1!!3? e1>P\  B  4:U Y < S q  r@oBU 3 l>7oKxp;jr !m#?>ax~{hN* !)06=DHORWYHszDяd%5]-7gnx+dr1 8r./B%Yt2xh73I6tkIoN%!=s VK }";KMC-t_N?1+%#$$'% zrh[QF;0&xncWM@5*~rh[QE9.! xlaYJA5(si\RE9.# {ndXNB7," wl`UJ@3(ui_PH:0$ |pfZQD;." zpeYOC5-  zmeWNC6- zmcVL@7+ ymcXMC6,  yoaXMB6,! y ti V J/  ] |Vtr a J biJS+pu \ * O2JGV-^Z}2 v/'?NMA)  !+4;BDGHJKEk~MZe hЯ0ܷI-`u `;nN]l^ kq#.DTEIr{ag.#@\glbP6|smmnoopjf\PD5( ysjaRE8( xm]SI=3( wndXPD:/$ ~ug_PH:2%wlaXLA6*! {of[QE;2&xlcWL?6+  |sf]QG;2&ymcVNB6." vkaTJ@3*|sg]RG<1(zrfZQF;0#zodZPC9.#ymbXNB:.$8 Xg )tB( R?L K n j# .   L+je \=!oipm%w8xw$%~|zslkjjot !&/6<@EI>rQmؤզPbeH E%,:J_fpa4SV3~2z kb?Fb[1U0bY2#=Xjz~zjZB- {odXOH@=95/+& }o`RI>4,# {th^UH=1$ }qfZPF;2) uk_VK?3(tlbVMD8.#zqdZPF;2%~rj_TJ@5+! ymdYOC:-%}uj^UK?6,! ypf]PG;1'vlaVMD:/$~ui^TK@4,  }re^QH>5+ 'd2k ;d) l: "68o A 0N,4&TiXPP}rz2vccy kZU`qpcYZ^erz~xkaWNMJLOUWZ[YTTST^bow#3WkW 7  rހr4&=_%9G  KH0naePSu<iCJew'iR}N)$>]}gF)ym`XPJGE@?75+ umc\RI=5*ypc\PD>2( |pe[PH<3+ {th\UI@4*! ~si`SKA7+$vmcYND:0'{pf[QH>3* |ui`UMC6/$xpc\QF?3*  tlbVMC9.&|qj^UJ@7,  ynd\PF=3+  wnd[|M{< TBqn2P Po) PUp & h |~Flf% IYFjH?Sx_@*)2NhhP?316BQ_hkjaTF:.)*+/7;??=7.'!",:GU_cgcca]aejt{Y/gJ > R    _ lz0xMD ;m7VJO:N!7:tH 5;i_2\M>)BeW70 hB06Lpd>%,:HOK?-~~{xskbXMB:4-'!xl`UI@4,# ukbVKB9.%tl`WMB90' vlcXOECGNTY\acgjoqw|$xyW\  m %  + KM+k >*   E 1w N)O3JMjV h8Qs+#Y2UT6iY]z`F77DQeosn]H/  {rkea]WOD8) {tjcZQG;1' }tlbXOG;2( vnc]OH;4*!yqd\RH@7-$ |qj^WLD;1( uncYPH=3+$zrh`VLC:1( ymf[RH@8-%}ulbXOG=3,"}rj`ZNF=2+|rk`VND:3(  fj& >bt ll M nk", / _7 RXx);E)'9#ol!cA~G/DOM@.    &-36;=>ACFLNVYaejmqtw{~3,d{D ;   / -i2]}'N 2rfg6 y [[/ ;.Ig6_!MxnOdZ^0.+q(is@qKEW|V;-/>PemqeP8   sgYTKHB>4-"~unh]WND;0'{qiaUND=3)#tmc[RH?6,$ypg^SMB;1( }uldZPG>5/$ |qk_YNF;3+!xnh^VMB:/(vne\SLA:2( wne^SKB:2(vpe]TLC=1(!zph_VMDBEIPS[f|Rn  b  "  BmYN:h`U@` M| %V) k?~.Wlf:u9D5W| 'qX`2'vOU*Xl' .#Wtj|TPn]HHTjt[@+ #+467+ ~zwldXK?3-#zrg^VPF>5-% ~tne[SJB:0'! {riaZRHA7/% yri_VNF=6-#yph^ULE:4-$yph_UME<2-$ xoi`WOF?5,$ {rjbXRG@60(~vnf]SJA;3*! zqiaXPH>8/&<:kO%7M   *BY C E Q ,((Mwegr'B#(!N.[|bg+   $)2In5 Y7   x 8 O-d)/vFk)3ho"*^G * TTwL#-%cvz/$8wBi]\` `J#K{~+cg g^h}w^H;8.'ypg`XOG=7.& zriaWOF@7/)!}rjbZQH@:1*"}wnd[TKD=5-$ zpf`XOI@:1( ~wmg^VLF>5,%{tle\UKB<2+$ }tlc\SLB;2+$ BXQ  FF U5a ' =.4 NFMu|j=!.S8\Rrg/m\jiepzojr|yqgggnsxxunha]\\]___]_`gmw2l8JB%h   s - 3 w[&> u iS!(Vojy *C'# DoZQ,w +EgG32,, ,N-w+x GFLOKq&tXTfjM?;DP\b[N6 }siaXRNHA9/& xnh]YOF@90)  {smc\SLE:6+% yoi`XQHB;1+# vng_VPGA;1) }wod_UOFA81)! ~vog_YPJA92*! xqj`[QKE;5,%{tle^VQG?7.'  yskd[TKC94,7'z b \BIK S>h | y ]gC|M872vmx9p[ E8BK-4W{U<7G`{w]JBAK[hmkdUJB<@EKORNHA94467;;;6424;BMV\aa^[]_dkty~5tp-r@  z 7 $ ~ N /VY/2U4 RFZm b [|  #kcq#BtZTn;BiEMaL= @B@4*!'*'#    $.4542/04;AIOQRUSUX^ahjnrqtyz: lJ%l > 3 6  f ') QZ6H"+a3B'(&'(!5 '|R t  CU~P@H]cCG\+Zk1o#@:wlmr~vgR@50/2/.' }tmf^ZTKF=5.'  zvlh`ZQKE;4/%  ~vohaXQKE<60'" }xqic[SOF@83,#{sng_YRKC=5/%! ztkf_WRHA;5-( wtlf^XPJ?;4-' {tmf_XRKB>8/*! ~% huM;= F \I * ByhaXio' n"m)*0IQ"=OK9(.-      !%$''(,25:?ABEHHMOUW[]bcglxL$Y!epB K 6 F  W SDwj)``NbO&2ED3 +@HIA8/-,0143+% !!"   = "9G  W~CUHPljT?`rDDBE%iN $whdhmondYH90+))'#}umic_WPI?:1,&! }xphd[VQGB:3.&! xrje^WQHD<6/'# zvnhbYTNF@:3+' {tlh`WRKE?:1+% ztlh_YSME?72,& zvlhcZTNI@:4.'!xrke`WTKD@73,1 fOMm &( W : hg[Jzg5@abp3ijFzBi/-2U!I`Z>    "&*+/057<EUza??|<P \ > ; A , z f] >p~qM% !CZfeVD96=L[glkc^Z\]bd`[SMGGJMOPNJC>=:=;==9841/+ c~!>#o MEI1wpS6y2bp<% {pbXRNLIE>6+$ {rnf`XTNG@92,(!|uojb\VQHB<70+$ yumi`YRMGB:7/)!{rngbZRME@;50)${unhb]VPJC=80*% yqne^YTMG@;5/+" }xqme_XSLGC:50'# 8J V :J9 ? w~3ZR5$^y>D(nFx-6/  )L(FJ&}+| X ? 2  f  O | 5  B ~ h B + - @ _ } v g ` c r | t u v { }  { y p m j h j l m k j e b a ] \ [ \ Y Y W V R O I  :@-oeK F,u~`L492,&" zwojd_ZRMF@;51)# {sqid\XQKEB;4/*" |vnjc]ZSNFB;71*%  }xsnib\VPLE>;30($ (0B ^ >W S >;yqZ}o&A 9DTqNwhrx~|zx}}|ytqoqrprplkkikpvHB:wa _>yJ 7  T , x _ "   B c U ^ y ~ } } { x x v s l [ . R.-x-`K?p F{O0  LBH'9pX=?TvzcSOZgtywn_WRU\aee_XRONRTUTSOJGGGHKHFDABBHNU]^`^\]^cgoqtsvuvyVU>pI,j#j H  O  g   | K ? Y   K C&+Z1`&?|mt>wBQ_qN[\5(8J#X=ACDGGIMSby)qGpg&X6x7l K  ; ] d I   5 S R :  + C I > )   4 B G E 8 0 * . 6 @ H I C : / ' ( + 1 5 7 4 . ' # ! ! & ' ' & !           L g,, Z.yX5At"4(11/6)LAdBb um#Ekua:(,# ~wsrokibZVPNHGB>94/)&! }xuojga^YVPLGA?:72,)%  xwrlhd^ZWRNIFA>740)%" }yusmhd`\VTOLFC<950,)$  ~zwqljea]XTPKFC?973-+$! yurmjg`^WUOKHg !  % @ ^ r s f T D = D P c o r n e \ W [ d m t t q g [ U T X ] c e b \ U Q N O T U S T Q L I G G I I H 6 2d Dxdqp<nM^a`8?f _|x|{nd__bcc^UOGBA??=;2/("  ~}wspljea]XVRQKIC@<762/+&"  }zxurlkdb_YXSQKIEA?:73/+(%! }zwumlge`^ZWTOLICA>;731+'&  zwsqnjfb_]YTQNJHBA=:72/+(%  ?: Z 4g/S\1 1 ~YQbZ8aA<. y}=-S@Vwinyx~{|{{~|x{~&[3TyFt?o/X2c~baw*(R .eL [DF+Y61jZ-CqwY%39- }zwsnjeca][XRPLIFA><763-+(#  {wtqmkgeb\[UUONJFC@;:720,+&" zxtqnlgea^\YUQNJGED>;941-+*&! ~xwqolgfc_]ZWSNMJEEB>:841.*('" ~{xtrnQ J .\g.P1V9 gc<@Tt^YXHG!%Fr_E@MdzwdTMQ^hrpl`XPTW^bd`[USQRUYXYXWWZ^afdfcefgknnrpqrquyy}|}}}HvEp?`0[DoZ #4&DKaUK= 9H)]$H zu x-5 *apH'*C\jkWB."&/=FG@2&"#{yvtrnkjea`[ZWUOOIHDB@=854/-*'$#}yvtonihfc_\YWTPPJIED?=:762.+)'$  ~{ytsonjhga`\ZWSTOMHHCA?=7750/+)&"! ~|xwsrokife`_]ZVTQOKIHCB?<8850/.)4 5;Z$w=n`h?Q `X(   B`phS;& %7FPUI=2))09?B?:1,++14554.,()+-268999697;>@BCDDDDHGLLNOOPPRTUVXY[Z[\^`beju+Ni.W}Cj;^+7))* "   " ""B0-!KK2)z.$s /HD/C*v#WSmufnymlr{~riedinqpjf\WSSSSSSKHA=<<;9730+)%#"! }ywtqoljgec`]ZXWSPMMJGBB>;:843..*(&#! ~}zxusonligcc^^ZXVTPNKJGEAA<;9631/-+'$%  ~{zuusnnkhgda_]ZZUUQOLLGGCA>>;8721.,,('%  &1_pc+;W&D)M |nw{'#QfX5 %8;1#$      !#$$&%%&'+-,-/-/1148ASn-BZt<Uo0Kj ?Xc`J) &AV[R?-" -:JPRG@757@FLOOIGBCFJNNN9^*2k Sj1e.YZa[q1^>{DXZ^h(A3~~zz{wusoniifcbb^\ZVTRNNKIHDD??:;7540.++)$$" ~{yvusromjggbc__[YXURROLKGHCCA>;:8541./+('&"  }{yvwrrollhgfba__[YVWTPPMMHHEDAA==995512.,+'&%"" *jxJL[uX}(#!;YyOdXx_%&4" /Lm)Gh.Ll5OjhOA?Lfz|l[UVcn{voiggnu|}}|trsrjj"C@UX_KZJA:v' Da]>/) {}zvwsrpomjjggbc_\\\XWUQQONKJHFCB@@<<:66520/,,((%$ " ~|zzwttqpomkjhfdba_`\ZYWUURPOKMIHFDD@A==::755211--))''##  ~}|yywwstponlkkggedbh@fe Y'h{6dd ?"CZE:i+1z $?Zm #;J^q 0CXm}u}f29"}}%TMuoY PXr!h*]~Y2&BW_XE1"1;::7662401-,-*('&%"# !  ||{zywvussqpqlnkjihefddb``_[]\ZWWWUUSPPQMMLKHIGFECBAB?=><::7773522//.--**'((%$#$*ex]=bOM7z7 K/# )u7 SFT$$KcXg~ww*9AN[j~%3IXj{nw*}c1vZKKJ?N;6o;""?g{^H@GZm}tdVLNS]gnmi_WQOPSZ]\\YTOMLLPOSQPLJHGFEIFIED@>;<;:;;88542/1/./-,)*'&%%"#"  ~|{|{yxwwvttspronolmkjjgifgedbaab__][[]YZXXUWUSRQQQPMNMKKJIHGGFDCDAB?@>>>;:;:87764532210/.,.++*()(&'$%"#!"   Gd,2^G?T(;~-Nyll"15y</]jNAASiweZSV`lv{|vne^^^dknqpmicabdjkpopnmjiiknoqrqpopoorpttuututsuuwwwwxx{})8ES]hqz  Ad6u07#Q7fa:M@0^0)I|vcarzz}}|}yxwvwvvvsvrqqomonnmkkjiigheefcdcc`a__^]][]Z[XYVWUUUSTSQPRONMNMLKKJIHGGFEEEBDBC@@?>@==;;;;8998656533322000/-..+,+)*((('&$%%##"" "  $V ??@DCEGEEEBCCCDGEGHGEGDFGGGHHIIHIHGJKKOVZfox&+16;@@>82+)')059=:5 rDx #9+u\ b>Dp*~~|~|}|}{}}{{|{{z{{zz{yzzyzyyyxxxxxwwxxwuxwvuwvuuvuvuuuuttttststtrtrsrssrsrqsrrrrprpqrprppqpqppqoqnqpnpoonpmpmpnnonoomomnnmmmommlommmmlmmlmmlnllmmkmlmllmkllllllllklkkmlkllkmkklkkmklklllklmkklnlmmmtR]Pf+$I_bP5(8@=0"$+.+" #" !"%+.016587<=?DFIKNPPSUWY\^bbgfilkljjgebcadcgcY: vp3UV; !,'  excellent-bifurcation-0.0.20071015/wavs/circle.wav0000644000175000017500000003606010560231236021016 0ustar miriammiriamRIFF(<WAVEfmt DXdata<   =oUs4~qj*W8/y~] n*{:|GEZJ\n\s=Ztp/C]s&:+IbQ K+"?1Gy8N  +@zc^'- B 5D]I>W/EDHcWF<|2+hV>7M  ) c   s %e(0x o*(N?O 3CSL P w!(#.0-5'!   K8) t|  Z :%3!m GPS0$. `;=  Z Zx #!WAH SRM)> Xz):s }W`z[jCsy~ 6s8QW:6K3W\(\4 ;XDcrk5a/&kݵܺ< LG9 E9Ji6YN  ;&74t.BS#J G I = p  -. ~ k H jAy= vnr(( |C [9d$"  ~r! $#f-pn O5 ad > #i> cYOY:f; -Rg *~_kb/y2?-8"2+=Tqߥ /uH-]C!| ?h4UN  "g!O,l$\?$!.iL  h(7z0R2C@qQ`Iؽ(,"Y'KE1R\`ߊOܩI> *sop7$: >Stm2N<XJ;(NDnGA atM/~kGDaU2U u 4 ~ L` > 5\$i $  yM0JH: \(?Q? dL\QAU r% f YlwD!&'! p25S 2c#(**q('&&&#W f+L J}A5N$ -s1f/R'~ n ~C=(\Q&'**2+T.3)9;7<0k': & |kC@q+w> Znj{3p"!W"!l  !J eb&*)"E V:qq^CS? K"&N%$)Y5CdMbMBB/( +c ߖڎu|!nMo$& ''&% &@&$~ ?seݿ4%/{ v\  GrXxRb&!?fX5 Ud3!ީLף|`i#=K 6 7 ,jZA tT <e`1f=yq+g6-I _  -1r,pM#YF=&@pW(A JHEy xM=  -P' K H{599C 5#2)q7cle _t I3i ii#' } :zUp$0('#9 \(U=6^5}"D4]uj >.- s| G 7JM'VVLN  R 7mo B| YFo(m P-~T&Bi-# W} )5"   .=m> 7{3fw%<#L ,/ J <D=   1 J~ d3+w J Y  {}3!W"j~E)Pq    A A M - C I-p M$ zR k\b1 . / oIO Ks\z d a khnM  M%h a8A P(q[4;BfL:j ; + -z=!\ n,Ap z  3 T . 2XI  y 1X~_2 {*  K L ( O H  \4 Mu b}$;Zj(!3O- !f\_! 7 `  bDdOFc3!Fw ?  V lq\F8|{YKvN --5| T?i +H xT/GDs=.CE 3 z u WQd E\dyb>jaFw E Vj@ <UxaF/4 0 Z(Q!!~ z_ r `<:($6l`|np:e? !EI"cM b/}-R"Z%|1 F6 I4R-C=_?M>p@R66 EV9^A[Ij l#3B? 5]hmx MhSW$6߁۾^ޭߕ%Nz7 ( Q +  X:g& ^=P[31vs\$<>,oKt>D,q%@?>  `JS AI )=jC$sT)b  L l k % "!%  n V*;ֻkݯA!j"3e;Su, O;3!{ (yUU 6 QY@tݑ֋̡̝όԐ޸߄>d$B#  :1 R!""""" ("Q | T>YL\8 EԽС[0 ( #r)+P*&6"1!m$q%# %H a$|~WL2Yت׶֞՗nԋ1a(Vߵ,x"  &'%!5  p/ ~ \zސU`86D:D <  |o} | 1  tt"e:*^$W'6;J"Ol 4bi L_7Ed-0k +y+ k+ v{3IAw`]Ov/HCNM< f$I J  w * 6 ` ' y  d o`oyCGP y=zrk1iN$*aYO]%uDO I~a0;}9XSLcH9[D7\p el+Ӱ֩D8_S~tBa HWZ r  o&z)'!)+  StfYr-$BTr$ޠmdBߨI-?0tjLC c ;S Uk$Qu  T Ju<eU9{Zyf+KCNjpA+p R  x qu>7 Ny &J / 3   Yb+~pYgg3}n>0p,Z  r"!jOs?3 ?&x'k<  -t$\3y:0+@a@o_;M'&9 DPc\  \  UdY"_# L 4" P&Q Vuk?TwS:7ROt YA_ bV0)GBx| B wEt`  o%>y 7  u  i }ud5 g mSl  :vd *w߲b87V_?nP) pY^]F=lE,I?$!QPJ"5G 2| F sn#%{!Q! %c'#:+f$# P-4%: ݢۓ}smח$ɨajt Ydz+wYq~^zw ,hL" , <r{/[ Z <  F  4 G /Ee LK5VOGlU-\؃ͨATڈu{d/J)C ; T/n b S gT]]"=$  :* A j pJ m ] l,8m {*YdF? @-t ] k&B3-n:j*V.1޹d=- H]wTe!Y<[P)VP? A? ?~g , wiKJ#fxNW})V\VoGY fw7-_gA UrQT7r ' " fi u]'7S Q1  |y[H'?Eo`2wy8V~e`Jf7 JB^<j  tn %%t"dQ" g86p ^(q. Uz*e9 8! -F"z.Bq[dkx0rY4DL uGq~@7[fXh+h#-@`OcJJUJ|v^XgC9]vo<OLDt ~IHE/?!^'q W{d)H>jgy B  & |$+du 7i[xFf MHFt{(: 6 8 i ~-  _ #ynp 01y_VYjh?;".(o*"h4(NzD kXzF0O  gA qKt8khR~-=' Mzbmnn }prC&]lozY]Ugz&xn#`E2'9r3 *'uJ^.]FQX  3 ,Z{ykNwx4#W_kk{u=!'y|sE 1 g|V7@KCD 9L_&&q7J3j)1y0mI * m.90Xy P!b:oJc,!$9xK,mKi7~bL p(?!k _ FJM vNL/e*%YwFvC;a[0_U:M"VFimQ. ^ 6feahYS+XK8@GXUC9 }7JYsT[p7T$7N@lsVy]0X s-], OIIcpXfpET=$PG]2mo9 <,'tC39GUizkYYnkVLSbhh]YOE5)VIcJtA2 r+? }  KGi="x`Xa8]!B.rS'k_yg8*tX3 DL>oj%9oj\Dj$|lM/JYxcf b6uu\D/$$,4c?S$ $+,(\&~wrpoqqw|$$pP1 ?b|t#Ms l4 Al:Q^fjkib\OF:2#\07a-XyyyCZN)o-ybRJJP\m%),+)% R* >=:70*# "!!"#"#)2>KRVRLB4%           excellent-bifurcation-0.0.20071015/wavs/bigbang.wav0000644000175000017500000016650610273013274021160 0ustar miriammiriamRIFF>WAVEfmt DXdata AZ.'O0[94x],  %1't:!7q8'wod?/sdKeO$STMa-OmJ=4[L"Rt lr8<1;)`o6_ks1FۓޡcT/7;g?YbyO)*\I6EV pg "!A(!g$n&2(*+-I/ 0/.*&r#r"$*O2 9)==:I6&2"0T15z<@DKQUVsTbO6H@{:79?HQ|VVQH3?985N7;qAFJMbOPRS]W$]djqudyzxs_j^QJF=87;_CLNZf{nohJ[_K>9>K[irqrojwf3eyglr`wxBv}pia[XSX[p`jgntxv qg1]'TNNM\GPXahi0qxw{9}|zzw4s.nhmc^ZeWT'RpO7LZHC?7;Z730|.,{+v*o)(()+W/14d:AINPQROH4?R4a*"RNT^R!,:HRV`VRN L KKtM0N LE:M-C BCPt -j!E+6CN0VXWS.NXF<1'T~ sig 3&# T  lFdz:a ;(./-*&#L! !#%&%!i q1ٯƢ,8%[@Ee) j X ~ 2C $')N'8#6 #"pSX  8R+ 'c0 \'~x%"15541&5X1l%.t:46IC !rq  n 6R ")-z,M(W:w:b ޛ٧؈@ދיjΠ"~7>C)Ggƨڹj̞pct@˹uML'اwàa5Z뇨\eɮX/ (վUdtjAe񺜸JZd˜ַ#ӿYّ0x78ڳʾwܼuVl㳎_ݛlTƈ` փdEWҞʏa*Ϙϵͣ9ɯʥϘmɁ[0ÖƺOw׊ ,&'ʾgEݓ+#|eU(z?K? w  4l|!;ī2y1*ƠÅØxi;ڂu;3!#)( !T * ^ n|qڑΞ/"#&F$uJ#)07K>CHKN/PFO,LiGAz:02) J#,25= CFHIfJJ~KLNPQOLHB;"4/1:I[/lw}~"zt8a7;;UET"erw^shZcMmB ;%8 :ALZgoo'gWtF7+14)AR3cmodjD`V'PtQZfXs{v~}}~o~~~}y5qgq^XXi^?h r#wt+jZDJ_;N/)&$H(+~.0H246 :)?EMU^fcmPsdvu+qj:bZTNHB;2' f HMjFػMӐRĦ츢GP vΊ؀#LU0-Kwt݊fю2Ev.WkM $YgX4#ЀuM4%]H]xNߝWn֓R1GY$obĚ~Ӈܟޓh#B 2O"#(@/Q6QK[ kv}?~~z~r~~t~}|{x>ugrp\p/qs_wz||||{fxrjfd0f)jpuay;yruXnSdW+J==2,+3N?kw<|pdY[M;$$2T["S4EQYa?g1hc [sNC?/!ytP"x"O-f)C@QY*XMx>/"   (202ݳyrvnjܨ񴮼M:Q;HI%(ݰٝ8ԌvlޗT T >ƶDw͋O ĄAz:НݖfĜݯh,h,fDՒڭz7Na߸pßKBգ=٨-Aũʆ.ҹ +?*ƶf[FʨŲݢBˇh ǒ מgPًGA[äѩɧY=L$at/i1FLc~uĸڳ뮝%i"h ֮ǏTenjaՄY=yك:gb4,ʐ<-uʧH "^Wm˙̔hȰߟ6:Pkd>Xȡ\t\e$4($!2(3G;/n9MhqjfI%!a+;8dOllWR;_p[jCh)=aZ]ZhoBfgmj_azmC^]oglxaigQ:z&+3,9#+%y  p+c)?c,b1ur-Em`ǿ4ߨZ[d6ڪ/=Ki5CknP{J}f 1 z6\]+/*% Y>T[b?p~~u#qoThTaD[IU^blF||~zAlq^SpK^GvIRL_Gi4dfEd6]h`lW^XP8BB2;V&6BNO]m{x]`|G8S. !. !i<xV&=#mk šڥn$ڞm.Ċ iưk0ZbHao0߶O9Ԟ(ΫMȓQ8PhOgnΰvNYpn9 .u7P܏8Q1]!]!0a^x~p\MjFMG# 4"MwQ,;@Udfw2bAG@6',D}mV& >"+6JPPJLo\eTn=$4Z8HN3ŧQ9#Yt߈փߛd\ N.ӏwKM"rœ"5/ B ۶4Δ2cV QoCbxe4>A+ =s`%AB,4## +*Y&ˆħ( %*>GDT[8*%%!26/4y0- ++1.4:@#FvGQCI;s1}'X< ) "l1=B=h0{ Y0N$# %6DDk3OW/-=C- 4Ӏ҄}ѣՆ- N̯͡5 H˷ nj<2d ǀ:m8.֕٣m𗅗b\-ԽثڠݨL.§ ~-0+O- Xo6 e8tLqmһ:}(,8J/yBNe Y^b8ߺ,vA.) O_ y ^,@#$E89 #2=% r p?^mgcM6(a0+Y+{]z{8|nm|Yi,^RrhmQz].~;wU0m'>+N P?8^RTFU4be n|lYGfxn`O$R@JkoA, r25G*O_sۿm'PpݐpOˣ@*-x<ғ>=u Y7|#C䬏>H/5)bOO޾+[/ƁٕۀOh& 0 E~i]] f +5<@;41#20 +%M$%)'5 x&N ~␼2jqgP܉>WXpDJ;%FO <ӑ?$~B IvlPp! ?7#MР%0-(A!WX9 :P;)9AA6BESek$v{aFBAHC 3c*H6X_[p:uo>rmquSr tmejijX] suVaFG+7Vfj\8-%h3Y992M'634I\<#L ]8r)"| v !]3+wy ( A=  3Za k !'(,m83o|0ۦe$ 8 #3 K r1! CTJ07S^[vV\K/I.ޓ܂E :T+ǯɌj߫,. k+7&>`ӛ|!4P`bY TRN@-LTV1PCQYZ]ZRqF;::H6M. #2 ( c/f8,1HO[#b]UM:r'a]2aٳ֫?: ĕ ٢+GőF6Ɔ-̉Z*w!ʅl"i4}]ː5"6d™]ZM ߙř{ҐǖȕĎȏđI7Ht6joe̢ݗШҩ È-šA=T͎:rvU`(zx_k[+?坿mt̼Ժ?)Eht)؈O,0Ҽ%淂N.٭ r9[7'#'.$I23 o)'F*30F ?c*0 M &15LaK>k6)7+FkT7Z^g!woU]6qwmlSfIahG~yQ}~_CF92;>?=5&)7#$%/Q|hiJEMU7YCVUY5\^XC?'6 L )}A%]#+Vz5fGZ][y4WzJ,>- 2kǞ*c޾&h >߈g)$2$iJSU6ܵ9ƾȽt&ձ[Ҫ`'(!h{,S((v 8Qfc}r&}pg)c\xSJuGRfir peUHh= =Vxh0KzFX9osefPwX4_s{1ylrut{:uiob~^V;LG0LkU\_`j~i7^Xjzvh:q2]F9E_Ua8& `-24B`vpZb=@! O wyjC[rJ936 CNzG^- Z1JAbg6X>Z ̟cpcB.,ا|/iƔLܑB*ڈZ UΩ%peXnZ8]pǿŠ:ұ δ.:Њ&+RbϺ]:oСv JkM;"t *ۏ6mӁK@iCH r?EJfUm𯀱],BG!F *%^&/BKVOA522&O%i$ Y"7P6Y@SLnCs2.P6QCAJV7ZRE8U04Kes}pV%>3-Q&z)JwfFb(~fm |n{Dxvthu^Ao\ShQIXg2i_^UVi{zh\ST^plwsvwqedzmgihdda^vTDz=bGS1WTnPPa!zh!@&=S_kXUL1GJV dm(rk2gnGvqg"amZKU97fMad]K8('5<>kESQ\ejdj^C&} t)?KK6C0y1;O&d1 ^b&0'NV-"%:#&_emk|m uhL d|H Dw@R#n.TTΞѺ x!}*p z 8Fh51 P @[(&(Oh ! ^"->KaJ/؂ݬ2>8@ 0E>'$T9n= '0.^+2t>YEH K5H<@=FQRWNu-,@:<.6)M!+46m*D98;vޠ&L<ż/ ^ST җɰg6؟AZ}u jш ɝO ؞8jāg]ƅp]p${=7Aq2ҬfbʨǼì>"?3AՑЮuyuD3c ,]! v3AE> .N I70F)?P9$$8C6:GC)| #!*686(| &&0 .b #5x T<3Q%BTUMED4|#=8N9J8* m{mȹD8%\H1Ό1";N8ƝLx"g#X^")>BHNfמ( #6 ='<6T3. $u z0aCL; ezC%MB%USF(573BsEمrrn= \3Ո{Cʙ29d Wӱ㷞Ź2ߘݡmɴ^wʺ`׵ޫv=? :sWUΝՆDh.A  Dvߒ3KMؾS"b399Z<<_1@  ا^$$8Qb=ivԟd]$M"՗y& \-"&](%  .'F +:@HS9UC) E!)&b'E*I15?4&0+*<07;S:`0F$!]7/F4;/Y CMSC0 ^mwu#rh[ j̿@|^e ZoXw׼ĭ^2eꡥ]ۣaƉT:"JS2xˮaGk]C(޴9)" ox$ rzlԱY Lkn'/!]*>-x$z:'+,)hx CBJA$U0\%?TRYpybB,Q+2:d:r0u#$))(>)'"z$8bO`UQ&MmG96+.@E3O+>J**3;* VU'M>?LIKi]c{A#)Pe]kH0),K.0>CKC.$& |$)&7:Sb\$D&!$GL:=W* #%.7>ET_X'K=t1%E׮x9< ?_X=')8Tד5l۱ѹ)%ш˅ׄ(G_-;ɳnZӢֻ!4p^^j1$͆CѺҧӶo8ڥ=Ģ<^Z,{#0} R 1&7/.:+& seCZpqh߽c,  "! )g  VҜ )%y| I/ҍʹ1ո#DuF+»8 /K0`"G˴ȍz ^JC ;SI!"5#U:UbR4%-A8Xf#a2SJsJ,NM"Szf#yv`7!T'5p<5,74KcroaPHJU5jmufPAiGZqway<~wrfx(x~hybsvcYVgnoH}6= S7ZNFY|ZkEY`}rmwWP3aysry>}u)16,A[ZjG  !4B>%2*x$0  7 ?xpXޕ ƞZ&6 &,JFIۂ8SŬpߌnʹR_Y߿?wU߰ӎLUpZ˞+NҡtN< GG|HLy_b'L~ӒJˡGн+ݠCަ.נǻ~Xt޼ms,XQ%l#Ʈᵨ݊+҈/ҕ-+ݓ99ԃՈ(՗֡n:h+[ⰮFtdzݳS3l6fM⯗VʿKQ×%wȫaYi%9YH̲qk/4ֈq+`帨y#̭חv  5 ڹzn, b5(!48?>IjI?O=g@:)w9 %*7lLTUNLDUyZBXRRTLW<( 4L_f^PFACBN7.^6FpONLsN;W^dh_UUPGPLdILTpallbScEVE{S^t_`Zhr2z~zLm8_`kLpGh]Y~anxn8c]^Y OKTderti_^bcheM0.<"$021:.O[a nLqZcX_keqmbVG5&"&1))r*6N[TBC/ !ODE6@FF;EH LKEIL7QTMC`= 8,5W.;EMTCX!WNA5-++&]_Elv*24A/"X),&~ _oJ#41W89p=C@1h%Z(j*@.*.!a*y:*IKC8D.# 8k޶>4  _<uZ   Raܽ`r^xB Y5fY"D H K16/! Mp .R A 0@VB9 ) J<pQ'7D8KsTk_a^#SF9=#/u.,k U (K("WR '4@HQVSH!BDD:38H(U^RMFz:46<~?>c;4Z.053#k  0G ^,?G>;,R#k'j,,e&djH> y0 Q&-(C!  5nj pԨȿǢM|FG</ܙ.^ͪ}ɫw,݌ag$~ۆuޔɕbs͜{L֑iB*ďˇ*Ĺkʇ|sڰ_tè̔ 2*hΖˡU A ?qxMlG-{V-P /60a%{s6X~ SMa%ֻ Ks/  S7g4ڨC$'wCSQGe=J cfӂѷjɯY߮@<ęϕ:kaE{:ȁZESގڳ2?tT  D ^] F+W(8= ;8cBV$b\M^]YtR5OK?2k,- /&039@E5HGIS,ZQOFOBBA9%+_F!) 3 ?GK MKB.(1NSTVS^_L* @0:7@CE}F_GKPRP/I`>H5/,-22V; DDh@70-/38:<9F5.'o$#6$"JtX,1/+2FXRGEALzSQB-H E)AWc9jkjhd_]dbmJeK+;dBI? 8G_e\QQH@8/)J.%<}LYM^[U;TUTV[b2ijdVD0&N,=7;8+!"(,08CKOO+K@r-",& 1:DtJC3'[!(H) /^t. a$ 8 &S,+",P4S YzAat]ׄYћ*nyp˔{Row7% |;dؓٺGj 'Xӝ<*• ,3j̝ՓÍԉ7Ϣ*W&KckHξ^^̍ǹTzfn(̆ЈиڪP#5)Uօό`]Y](j\w=TQΒӍA8ܩڪB=ӟ ';SE캬kHV>]~h)ɸy-ѽ2(kǣN:˱k /j,1?U!OՒr٬K &HPB|e!8sPF +dչy"%EnhmI c L s o̿Pf΀U4q?rD_">HPt'2x7<48DWk{|p`[H}<5216 ER RF8/[06:::=~?k:2.1=LJSRNUIaK'R8RGt:D20j5:5,!6WK',*-+0A9@?EHK:G~2,#10A9:{64E9 >>j9/)M*'{ }D2_ y {xYo86"a@g\ rúJbįVήnNҧ֥@Βݮکߤk{ViPͳ"X,rQoJ益X챈X@͎4QCȘPQp ߖ۶LFr+Ԯl /-S }xOxv .4*c(/,&#@x%L~AF e"(4 -t- 4e/XfCJ%)Z/=5<<+f  bH   d~I 9Ɂ˗bpo1 y Ej= cio. #hj*h93x/c7C۳I#ޘݟݯٖf( gMr3L`mϓѠԂM3˷WJیN>iȑxp$ܨrKp!P-Ů^οetdĕ] W9ŚĤĠòRPKlji$˽Oݼ(ZiOCSըΝ#Ā* ; .-}} xOY  g fIt'*F ka#G4j><<5.' 3 !" \ A k "/AD=GEWL)X_Z^&X~P!I@\8443.O #++=w&E*.3%9;?#L1TL@A>EQ%^iqeo:aO>0`%k9Q(=KhMIkFEB6!,n  Zp e&5V=!; 9>GyMGX3x?%4A#HJIJQNXW@J1 &&22g54Y8??::HENxNH)EJZvh[g]P0@-%H!|)B,$yhp  \Vq_##'$+m7>: *#u+{)N$${'!, m  l e~ q  zv 7K)+))(o&"!"W##2*9rIMJyD-BGLF>;\>9w,V$(*!@P)@ P B2BhD@BnE9%n\/CL q"() Zec%ݥԢ׶ܭ'=pGSݾ3v m4a!L(@MQM!ɷo8}i\AӡۍЦ&`䀖iϪ`3c3+|ʙ(}?Ԑߏޅx+gn%}(X덞!H(Eډ38ĈW aRyG`DTV%ڀu֗ߎ/ ,<Ȱ֙cň6-̾7ς&J{+bѲFڱczUr%Zs}'   HJ؟ Vg J `wK֣4VP 5Tgn MEoT.I# %!Uv} "g?[ X F50&q 6 xY b;6_ @fTE7TU  U<| X@ʼYHIt`L۵8Fw7Ea G *V=AM:<Uwz r4(AJY&E+(J()%J"\&),p,_-{2=;ABBD|E C??Gk@AoE#MZi+rqmkii`RFBA;0o+0:='5d.-,/149@DNcUZ^^b]YQ6Gf=9;nBILR[paaV^\i_a``lblbx^|Y+XYVMGJgME*<>GMPVbUp|R~xv^t3jMb ejjfedcfoc||sppl ggp&yOyr5ilcboaC]YXWJV'VURP8V,bnuvwxizyv"rqsrppty}}f{xMwwwzy{}}zVxtnh`TMzO&W%ana}s']H8o.C($$!$+*/5+J#f_L"$%0W41/1% zLT5dBXl0%XIЀ3պӛeؖ׏ۏ~ڮS ~ś'{cعu{_XuTfӸvf ӱޣ7ŝWVy{}ȩ5&Ьj ǿ ==/Ž$[{Mɚ2A$Ǫh~#8Y'ҶŵPe՞U(x/򜖦|zeۘ܀pއ􎳍Fғ\VҬʭ+f֠S.LÁ~up0{ ΃mʍGy˒ĒUh;ד[0ڶp̲gWe+ f-cF'~N,! a~9@@zFZ$3I.b'ʴmc܎e 9  +S$\+,)X%]" H\ 1gs,"  .Cd  gG$-v:GLoC6`-&M l *[9"&2-x-"KE?M) T %%'b'#QEMZy x7. ; a % .; > IR'6CXK $T 2&%*},--6.H.7-,K-,N(  $ 4 ` / ] u4nۂݨj%j7GQ'0Ҭ/Q ٌߢ@1Wf1}%H˃]/}ѤޟDߨ/6ݲwE"G >CO  JN )g*6ܢمշg$גٰ[ DX)ߨu7He !!ou\JB;7މ1dޟ ك;L;TW=K`3ϪƂ,ԠP;L҆n@Fa!*o:'`4   1q @APD$TU  g'-1B31.,)$c FLu x v&I  #-q8BFJKF=t.ClW+5;<:5-$B!4 p")6=h>t8j,MAM uys2$\(u&:! }:'<-,'"k  1%e0U41C+('$p!|\9 #H : cOi W &YI\r!pR /+D&'I"`. # <$+5+#Z D,nF XF-7U&C(#@p h oZ_YP8)%% &X=C-7#)3/5;AC3B%@!@D2HH!GD'A?d>====?gCGiMaTWUIQOyMIAf9<6):SDPY\ekekbRD< 8:9G?HR[`8cb`Z^]^^[WvV Z]adaefhlorvq}~~~{qcXRORTVWWZD][/SIAFtFDABEGF#EEHnLOQ[SUX^eLkxo:o^jd=cd)c[RLGA8-g% D #/-9330O,&  [/| 0 \j (J6; <<;i5*MUw 0IC t +A(T\8 i/#F4A Y3LN >"zgS f /XC % 8 HYi{_~"0#""5#"a!"T" i<, `UA `5H)7%j*-\(kE#R;ks7ܕqTB|O}nQQ, :VbW8gے_C,;a[ tUnWM(0{fprasԶԼ[&w{Dv}uG%+cC$urs29CطߐM7ܮ آTlɆJ׻'3&Yfׄ-P֋ځIiތڭߙv^gЛ\W37C ;6aў҈Ӳ$)ݻcތ;ԦH=ιUڦ_?J ,G ʼQ Aޱ,\|6B &`؉@e܁ޟܣ֊qDΞǔF|&H7qj {ȤJׁ߅&Sל4cYܬ ػ՟z՗B݇1*ޥVGIRzj@[3'1uݮ[ߣߵ֥ԃMhJ݀ u1d#U߀ۗl04+EC 6b 1 gy(@d@ 2-@"&)*)q%~!Y71}D=9"'z.2 1+ 'l%K&M(*-1241,*p,u/2566a41^1D3_5f68;?6BnD HJ'KAJI IGFG[J7L2NQmUUORM/IfEDDDEEEIYMPpP NlL%LpKHHDAR@;6214236:>@AABBB@FOVgWR1KD?S=;710r5;@QDHKK L-MNPQNtK940=*"&0$)-/49=><9"876'1+((g'/()+[-.15r763l0- *9$6H,u* Z5 a$" = GexZD* dk"r}Dv)Dk QnlCq^gzvBH<@ 3{1 OU/I" uG"0WH+CzO,2YBK-IWfچ1Mfq$)]SPޛ3^|*%M݁I !ʩʹ͕IVo/4 38R$׿ mӆ҅aފ~@үl'dT4.WߖAnSAו׻^o t'·͔ϔ{~ƜؾgĖ!RЬ=aݱ9 +"źUd|эpa{obά x߼mYÖK˨ЫO׀ڄoh\i-3 G]J«Oܤۉ({}hkd۲1;w2bXInv4.d]U[u-h8n m0')%gKtsYOK![@tJ !F S q |p2 x(YTt1a]\@ wj1h6Es Z h { %<(! .c k  '-1M4443A2a/+(W%!%'+V04E8;:^;94-&W#$3*18:9$50,(;%!?[]#B!%)-!2432146~: >w@@=8X5444T4S44R371x-)*'k&y')v-020?/6/F2X8=>i= ;60*$)*a " x#(+.-24'4/\)"?7 >!z',*.- +(-&"G#=;x"N# q`.E"#5$L%$M|UD Ve K#$!/ !#%$"*o N hKq U*.c^ % B Xn!%%"zOqx<Z V5F&/+,l*& Z  Y/a:@D [ 5/B|p%= <( C{foh D A 3 Bz v B AhPfW|)$k!/2 XbB-3/ߑ|zl8WW? )e+;mMFMb {{`Ahs g  3^ FhA `FW !:"&%()(-'&''-((*t.{1r238l'?%" "%x).3&8w:1:(72+%!o n$):-/[/l.-0-7,'*''%$'+.1X2221/,(@%%#"m#$&(P)C& R|hK"C#%'(%I!%'&""DY "%''5%W" Oohq!% (Q*Z,!-+)&\#F A !h$&'(,))*I*~)):)N($z w v]sd/FT ` raQ e1QQ ( b W Y & {D+ qC2:k@ iN .R-qD2<;wjϼ΋Hк`r؊ۮٽNjsЍmvӫSAKڅ|ԼԖՋ֏BШ`*ؖW Чѝ[ڷGT"@ύa%v !Ў4zٳkM R'ߟ%رۺ߰S5<߫d#MےBg|>'Z^*u׏Չzq`3G}#Xw y&'p- V yUG la!g/ C3X!2$&$'&$9!-g:~%,R3E77U654Y566t789)97667I:d>B;FGE@M;M62a182m4689g;u=@BDFHIXG9C>9i77: @cFL]QV*[]_][/WRaNJHE^A=0,?l?>I=;9#86j6&8<+CHKLK.F?5940E/.x/0>335555556689;<<82+B&" ~" %(,04Q8>;=g@AA@+=:86x6b65.4`1h-(T#!d "!CPqd;  vIfqQiB;`9_  C @VCB o_,i.'߿ܒ $ ,*sߔH['ޭwךIc۳ڥQժXF֕פ؃,F'ВPRRW5 Ԙ|t+a؜۵4̠ˣ̓ҫn ؼ״վnسABJB±͒єա-R)\clޛݬ پѝ &]n@ԁ b~@߲֩eޢfۛ";Bz!QAsJ[BF+܏{x`M7+K7Y[MQjZJ6{lbhV{4$YpBR .S I ^bNd Q`o=za 3f7? %V S U SvtIP K x E  =xA)# g_ RJu7r^ ! H % ' H7 J y:~@Wf0mZuLOQ%^` BB+L "t6@wSLVP4u0DlR0@A0-N4jkqD޿hWe4*߉[є{3<Lܻպ.d@THPh^7ю~|՛֩mv̗ɼ)UDž347 -ȥ׻۸f8 ̐ɦɾAМ\|ЃҲ1Ӿ48ˉ˲.BBř̬ӫpڀٽUv 15s*ep}_)7]d?EZV 2XBpN  y q?H A h)9` a! P Y{"v&((% r  r -mwV,)$5u'  p  gY H\<9?Id3!$%#CC&'2,<,)h$C!a&*:--?,S)% ~%uAM#?&;F!#%')A+-034d3p0y-*'#d"mXE[ 0E:!\$%&&%$]"!"p% ),/o2455S3-& S+"\. ( 9ZC?f[2!#p%B&K&%_$" 1b!j#$Q%$#8"Jz_zq c L . Y :5SO5gi3=gK=4 TN m<DH2?um Sxt [S#$=%8%$#"6 0K\]o V lHn= d &y S  I K 9 / a %$Z 9 x 3f36dY:+5| aX F cF ; 3 8@?  Vbz$^ # w D 4 Z b f( =*d ` %{$ Z wqDE`  W 5  J [ 60 GIL&wsYGn.nU<5<;u>oouVPWܗۅeڈkڂ؊׺'"lеэՒUb3~5Z:V!ۏ^ߞ/ ۾۳nގg cLBJrk{Pv5˩̶ЙӇ֙yxݾ\VԥxҕѠҞ|uԶD҅Оΐ=hQÜR忹1`̟)??iԄ܍ݵ;SӉ΀2bg ~ҹ4оBh\?qV* ׈ӄCIt4;'v*M֠I5ʵ͞0Qώ͋ȶw< ¼Ϭ )L߰ޒ,0 \4 PZNҼϦjοΧьԓFNٜ߶ {&hئ O׍V=(nXM<841014e8;=w>=*< :86556779;x<"=<9<:9'75$42211W1*113G68.;<<+<9B62(.*([(*D.4:>A0A9>9520//0u1D3/568;:;6<;:73i/*& $"2""#$% 'O'c&}$*": >""!o\S!p$%w%O# eVP8K  R [!`_G joU Z  8g51P5xtpr 1 I_ oXluk?K84ߦؘճtբ9lj"siG6j/yY ݟDg~u{9;@X~Uc|Wfݲڒl٠ܝX 5GU<ڳCݧQ^v@L< -"ݴEazyk ܦ%wrzu:8xx\,PSTNPG_MVu ;WGwYRk^ss@+5xT,6/KFNVPTCbS ]|/.2% t[P DMk Fvq'1uINP=uKYS"V$$$#9"X GDUN9dI1(Cz "k$%%$^"^!=)0"?$D%'%$"!|(q,;  KB\5Fe _< )mweK}!$&')&$" }nV7 Ivp   D!j! ~  8  s #:  #lt g | W E  i 0 rzz djUi8D   h :,vn!R?x;QEY Yy-M:`bC8EQ:_KE }F |4#*Kn'!9Au$C[]>SK^]J>f @H3^Xyj1/.RC;yY==r iDX8  ;7cWEhra y Z8 3_0` ,e{GCk@(+h4g!  _ h  \doO;r H j J 5a/ #   .{J(}BpJ"*v';k ZAT^tSrI]8" y 0~B/LeyOfA6]V$7 .vI%|.%Neoz ca2|Y ^]]A9$fI4ާݦz|GQ"xF3% ~],H[IdHs0%h1&>H"""+s 3eF~x3jivOdqE&R&YU?^lpm k>n(3$'YK9 % \ *ZC <N$\G*D Q6AZ ] \<Pw } m  AR(wDk _ m*(' >a L4l Xw nF  -'4~ Vc5 8 gl ^% ? t\ WCXa{bfGVJ95l Vk)[&/~6}%g5Ft x $ }#NTT@x eP@&g[2&8;us)G~YS,BbK$v/*U",F Q, | =8_3T@}T(b1Hg_V DIxh0h`BT I7 mj8q1y_Z*yQf!j&&56d)G7>UMoHX!+W5+oHveX'T>~  X D%WVx.UtY%{V ? a > ^ %  0 B m `/x f ` v 5 `sjlH H h p Y F Qf}_VpeaX??DYEZD Ck]b$M7A>h u a y <|cH 7 =3 ahi`g _ 9 y k  - L H " h M   c -Ix?wddI7P,79XEm ZXV18FW$mz\:Be4Pc$~H|k 7c8@66bYN^76bZzlIg]9[G{8Ft]$ 7*U~405Cd ] Q +  Q @u$ 9-QrOK{w }LNw<*~N9u$  < _^o9i: :h+uf4zGIfqSXo"C)A= BE]&Ex}4.jwlPsMn=mGN>LUpuk8YI]vP7ukSpV6d~'zx0+l=5}4^2\|L;OlzVtj-o-Z/;(h**Wp5ldMo)4S.DT@A=^w)SCn83:w/?5#"RNf_=U0~ZR0<23-|n:c\41=E>'HcS[BAB}M|;"o9TGPq-;  _s!c B e . # @ wUwZ#?YyT6I'YRm!HXc z Z ` t j N F f `) adC&Rf`;[(*u vyy y7 b P * iV` B :uvD .  V  {  O 7 9 <4k RA" , ?  Z} . U*R}FBj{|tpx=Dc](lLo%CF:P`O@MKfCn#I$vfiTi0!J{r{qN +t/mhAMz~(z"Qqjt4( vPGbaiEx5Zfn,vAlcbwP\z*"Q[p E|+ccEICe|@#gD>Za;zrW<=^)8iR`t$Yl#c47u3'38sn7m7lCJ~U:x4eIX5~/VG9Jmq  \M*+3<[ca#hFTq"`1&Mrr?O4vu_4-EOI    P>dd & q E J , cDoq)  `@m^$FCo|\y"I12@^|{KYi DM@ahJH`wfBrZ?)E' :a@'?'CYl}o}wOZL|1QYb+]x;&"jeo_rIcsXz(dR&grJ%;3R;4BXZ8IN7Z*r<.\3z TB w@^^z8\5L  8W {UD]tS 3\A 3( Ty JY('|p~#}Iz"Z})FVaNb<u9^* VFBM@r @ooC6iK-:e"9aec}3{V@gEfZ1=/"-eTMJLz3 f#E]c] yId^A}zW%0DvueY"KW,ywhx[ S a q ? !   0 T  ? [ S  `   g  . M gV W 3 =  U < X s   _,W L o <  Vs~4|@"wxv<vh4fc?P?t*gS] B{+q[!:o >]u+)I:a)7{I\"iK)*K#K"^h HBZA4/HjP*We n lV7".@j:6cTf" :<@%hn)] dmWk~0v%c.)]$J6mEGnf._FZ:AKf#R(B9 NRF{; F[?83p$ *)F @ S 8 O  r 1cS _ r 9 b ( R,#  ].>;<M23el @YJ  ,F5&|zF$X(L8HC1 l_Xs\0eR|J U"yQr0[k i{W-P*@ik+ P9pS'5E'[>rse^ |1^X~=8f? &3XLEf3 &WbPYLFMyyS!DS]Z "$=hfZ! +_^j5[vq#Uld1|8;y-Ssi:<E ho-y(M,%okP8Au~[sMuNMF\(OwL$*R'W\8\W3 EVN|}5ugEJ|H /UH8xy & elAK]<1y0O=&W0V8OE$Jvd<[mDA[M'WbCFv[teV(IqLk*8Vg YhXUZm fL+#EB#0VG*_@#  sQ~gpav5e) p t .  uNTwj~A$%br-c;5e&<PDH>J)d[qoDa;],Mfg"e K 1?]!%xSSiFPzjCP5 Ht@]}a%|BhAPVY0y~?wD3z0<\Fu-+\`?h_]ub4`30w#E!C?e1sY\9;}[G5Zz.o$/!{mn#/XDx ~F9YFtQUS!Hx I.>"34%!@knGfR|qG%b DN0r", t9 })OTWf@sN@;;V[IfqG]@g+_Ge;N l5NvGM/LrOFzQS|,J7rS#aPlXe&;-F ei4PFz&IH+3'Ve O.5"scO0D!H;X@QWa ED"05?A8.iyZG m$(VG.Z%uTH*\QLN8Q`4 +pFL [~gnGPV12*PF[|n2=c2/-mD.l4-cp+XE& . 7x  Q t q S  a !Hqgmx{{wvocP: mt <  D I 3B@ s , 7  M  p r < p  4 V e f b ^ [ W A  r   $ y  l B  7 @  5 l a 1 {  B b u m B F [  Z I f  : _ $ sT  N    ^  6  c m j !  Y IT~8Jgsw(  < # Lv>yhYPCwg=q49qakP(=sMmp]JOh UP:`NkDo$l#teJ:3/%Fa|D:IcTTPdCuFpSr3%8{48&G2l/IGnns#6$PX #) BX ~FMO2d.RA A=TJ5yp S0>EBE]~hUhny cEPqjv V<oO;zXV u {Ieek-TPVe'>k=-Bp7=~e!Rm8E$R[E_E7^QI~z7IF6Pr {Uif3r&R9ISD:S,r':o .BX`MSv)\%Xme@C>(U=S:&Kxi1&"y.N?5KV8;Qr;~aV-8jta<n71xE! DoK4J&i(Ot{`+,}K_<_L FlWHC):3N{n[TT^aN4*Ef*VC[&sNR`$j7F{q|c pjX u `enL ZxY|sk\91'?H[C&\YV)QxZX8[>e;o|`.[Bk6T1>{JO?T1uZG&vk{ch'PRZ/,]> J.4UEaLZ'4a'>80 YLeijwsFq)SPw! pWnzEPSf0]CbJc-$3Hl[KYY d >T,Z(k;H[ ;VL#n|R"$}j 9 @ ? N } P A ^ $ l > m { b # g~b o   ]  W6=m= Y 0 a j R  ^ Bx{< 0 ) "`{0 i ~ y n _ > I{vmK ?S&G'=oC4*^7&f y4/4w|wys`4%c:(!(SsxcJ0Gq/iK<@Qt}4ri$@Rj YiQ#w+n.?7Qe*BMs@BtH6o-E.x-BL?uK;Pa98$yTHHB14ojv~[5((t8&^DndG"U_B "04/sVKUl8To|iUF;9@OezxL& B^pywph^ZX[ahlni^WPT^re9 #<Saoqoe`Z]hyxfQ?815BZ{Z8  0HhhTGJUfpywodTD6'"0FWcje\J6!  ?`vzfC#3>=2tldlw~|{z|~{|yyz~~~m[M?60.3;EOX```ZRF9)%1BJTUUURPLJD=7*#"')--,-*'"!!!"$!! ! !!!  !                                       excellent-bifurcation-0.0.20071015/wavs/wave.wav0000644000175000017500000017775610560201076020540 0ustar miriammiriamRIFFWAVEfmt DXdata  &-7=GQ\er 2DYp0Lf:Z}+SujSZ,WKR\`<_m^[\XqPG>v"294y%71FISf[ c9oT m.C1YC pT%      x 4QfnE(  '*)'#  -=K]ix}sojgeeefjoruz # ! "$###                   [  'w:gMU]Ik>x2+%#!"%(-18AzEwKqQkXh^dc_h]lXpYoXtVvVvXuYvYu[w\v^sbscseqgpkolomlpmrltmumumulwownxpwpxsvrytztywzwxxyz{yy|zz|{}|{~||}}$ m1TN2ng/KJ1_r ukaX!L)E1<65=-C'H"JLONMKIGDA > ;#8%3'0),++.'/&.#/%.!/!.!., + ** ) &'%$ " !                    1" 6Xs<Vj=Df}nbRE9+-8#BIQU [ Z \ \\ZVQO#K(G,D0B6>9;=9@6C6F6F5H5J5K5K7L7J8L9K]]4 !Dfv\A. &2;GPZuelkdt[zV}QMJHIJGI~KyMvOqSnVhYeZd\a]^_ZaXcUcTbSdRbPaQbQaP^R\R\QZQXQXRWQUQSSRRPRPRORNQLRKQJQJPINKMJLIMIJIIIIHIGGGGEGDEEDFDDBEBCAC@C@B>A?@?@<A=>=>>;<<=;;<::9;98:888857766643742442432210210.20///-.---.-+,-+**+)**))()')'%(%'%'%%#%$$#!$"!$" !  !  1,+2=K\qp_M:%%(+))'"                  !" #!!$##$$#$&$$&'%(&()'')))*)**)++,+-+.-,/-..0..01/0113323234354456566668787979::9;:9<<<<;=<>=>?@??AA@ABBBBBDDAEEDEEDFHFFFGGIHHIIIJJIKKKKKMMLNLMNO-<Od~~}}||~|||}{z{z{zyyxywxyuxwvvvvtuutsussrrsrqqqroqpnnnpnnnmmlmlkjlkjkjjihhiggjeghgefdefdecccdabbbba`a`a`_^`^^^\^\][\]ZZ[[ZYYYYYXWXXWXUVUVUUTUSTSTSQQTQQOQPQPNPNONOLMNLMLKKLg0wnObr%6H[l~ 0ASdv(9L]n/DSew&;K\mI9}@xn8m50{)h 0_.+XMp%Qat+>Pds*>Nat)=Nbr(;L_p'7J]n#7GYk~ 2DWfz />Scu+:M^q#6FZj} /@Tew*9N]q"5DWi{ ->Oar$5GYj| ,=P`s"6DYh|*<M_p2BSdw'7GYk|+<M`o 0BRdu#4DVgz$8HZk}):K]m  , < N ^ o  . = N _ q  - > M a q  / = N b q  - = O a o ,;N_n+9L]k&8IZi{"5DWhv 1BQcs +>M\o&7HWk{ 2CRbt )<K]nmFeyY7 TJpr ,5PWq| -?Q`s!2CVfy%6HZi}*:L]o +?O_q .AQat0@Seu"2AVdu#2CTfu 4AVeu!/BTdu !.@Rds ,>P`q +:L\n}&9GZh}#3DUex /?Obq*8J\k|#3DUev .=M]o%6DWgw ->N`m$5EUgv +:M\l~!0AQar&8GWgx *<J]l}-?O_o  " 2 B R b s   % 4 D T e t   & 5 F V f u   ' 6 F V h x   & 7 H W g v '6GVgt%4GSfu#4CRdr 0@Pan .<L\l{ *8HXhw"5BUbr  9Ld!DK) MDxv.A%QSi~~#*@M_s|#5DUgu +:KZl{/?Q_q%2ESet&8GWhx *9LZk{ -;M^l| -?O_m~0?N_q~0?N`n/=N_n}-M]m| '7GVgu1@O_o~ )8HYgx"2@Pao~ )9IXgv!2AO`n (7HWeu   0 > N ^ l |   ' 6 E R e s  - ; K Y j y   " 3 @ O a n  ' 8 F U e v -;L[jz#1?Q^n&5DUcs )9JWgw.<L\i{"1@Q_m~$3DJHx!Bz9DX9d,7Q{"=6dOn !(AFbe(2GRer/;L\l{&4FTdr -;M[ky$3DSar+:JYhx"2BN_o&7HVet.C2M)T(T*N0J8D=AAA>@?>?>==?===<>;<<=:;;<;9;:9:::89888:688768765675755554444424413j*@>~?@@>?>??==>=><><<=<;;;<;9<9;9:9;998 ' e   *  ; 8 L [ _ z u %5>QWjr)4DO[hu(7CN\iv9 :lJ: $/ Wv'tj\D0G)z3Gi'C1[Osk/9JRbpz&2BN[hu ,9IRbn{ $3?NXfu,6FP_ly$/IWdq~ &2>MYgr)4BM\ht(6BQ]iu+7BQ\jv+6DR\kw)6EO^jx)6DO]iv*5BM\it&4@NYfs &1?KWer #/;IUbo| -9ET^lw*5CO[hv  & 2 > K W d r }   - 9 I Q _ n y    ' 5 C N \ f t  $ / > H V a n {    + 7 C O [ i v $/=GWcnz)6CO[gt$.:GTalybF8XJ$4B3RUcwt #3:NRgn %.KXfq~ ".;HTbnz*7DP]iu %3?IXeq~ -:FS`ly&5?OZes!.;HS_ly(4?LZdr~ ,:CT]lv &1>JWbo|)5CO[gs  -:ER_kw %0<IVbpz (4@KYep~*5BM\ft+8CP\gv,:CR]ju!+9GQ]jx  " , ; D R ^ i u   , : E P _ i u    , 8 D Q [ i t    + 7 A N [ g t ~    ( 5 @ N W e r |  &2>JWbnz #0:GT`kw }cR?D9v?On7*PDh_|| /9IS_nx %1>JUcqz(3@MYgs~,6CP[gt,9EQ[kt"-9ES]kx #-:HR^lv #.;FS^ky !.;FS^ku  -8FP]iw-8CO]hr*5CL[es~&3>MVco{ %0;IU_ky-8DP]gt(3ALXdo} #0:GT`kw (8BNZfr} %1;HUalx*7AOYfq~ #0;FS_kx(2@MWbo{!,8DN\fs~  # / ; G R _ i w    & 3 = J V ` n y    ) 3 A M X b o z    ) 6 A N Y g o |   + 7 C N Y f s } !,6DOZfr~ !*8CN[fq}x zn[N(9(FIVgi "09HQ`hy)6AMYfp} $.;HT_ix(6@LYep{".9DR^hu&1=IV`ly)6CLXfn} !,:CQ[ir "0;FQ_jv &0>ISakw(2>JUbmx&4@IVclz(3>KVbmy(2>LUanx&3>JSamw$1=HR`ju $-:EP]jr-7BNYeq|*4?KXany$/<HR_gu  ,6DMXeq{'1>HU`jw  " , 9 B M Z f p |    ' 1 < I T _ j t   , 6 A L W d n y   # 0 : D O ] g q ~    & 3 ; J S _ k t (6?KWamwstYU%"(aw$liP2=j.Ms*>5PRbnw%2:JS`iw #/:DQ^fu~ *7BNWdq|(1@IV_lw #.9EP]ft)5?KXanz %/9FQ]is}(5@JVbmx ",9DO[fq|&1IT_ks J/Q !J`m uG|l)4JVckw)4?IW_lx'5=K '?a{x}P=)\km fZ!K/=;0D,E+E+D->0<4692:0:/928053514423032302010100/.1.///..../.,..+---++-*+,*,(*+))))))()(()''(%(%'&%%'%&$%%$$$%##$$"##!## " !!!  "!                            )sz/5QXN=("$!        " !!"""" $#"!$"$#$%%$$%%%'$'$'''&('(')')'*(+()+)*++*+++++,,,--,-.--/-//.//.1.1.1/2/310132223334425344565657557666887798798999;8:::;<<:<<;<;==;>><=>>=?@>?>?@@?A@AAA@ABBBABDCCBEDDCDEDEFDEEHDGGFGGHFIGIHHHIIIJJHKJJK) ` W6    ` < -9 #L i  ~   ~ ~ ~  } ~ }  ~ | } | | | | | | | | z z z | z z y z y y y x y y x x x v y v w w v w u x t v v t w s t t t t t t r s s t s r q s C^{Q C56 P~zifmw!@    {  w \ 7 ,  A  O O  I >  3  ( & .  0  /  -  +  $ # $ " ! &  &  $  # #  #  "  !                                                                                                                                 TV;<=>====@=?>?@>?@>@AAA@AAABABBCACDCCCDDDDDFDEGEFFGFFFHHGGHIHHIIIHKIIKIKKJKKKMLLMLLNMMLNNONONOPOOOPPPRPRQQQRSPRTSSSSTSTSTUTVVTWTWUVVWWXWVXWYYYXXZR 0 3 f u r y     ~  ~ ~ ~ ~ }  } | | ~ | } { | | | z { { { { y z z z z y y z x x y x w x x v w w x v w u v v u u v u u s t t t t t s s s s q s r q q q r r o p q q o q n p o q m p m o n m n n m l n l n l j l l l k j l j j k j i j k h i j h i h h g g h g h f g g e f g e e e e f d d e d d b e O<?UpS  3  E y \ # . P ^ \ M ;  (   #  )  ,  + &                                                                                              , iy>NG8~pL-3F MN F>4),0&6"9#6&6)3,1./2.2-3.3/31203141243436353544755566787668779878:998:9:;:9;<:<;<<<;=======?=>?>??@??@A@@AAA@BBBBCCCBDDCCEBEFDDFEEFGEGFHEHGHGGHJGJIIIIIJKJLJJKLLKLMKMMMLMONMMPNMOOPQOPPOQORQRQQSRRSSSRTSTSVTTUSVTWTWUWWVXVWWXZWYXYXZZXZYZ[Z[\Z\\\\[^\\_[_]^]_^`_^^``_`a_b`aabbb`ccbceaebddcefeDvHbnmh=dedl{ "21CDSYakr}#)6<EMV_iqy  &18BKQ\cmv~ #+4>FNW`hpz %08@IRZbkt} '19CKS\dnw}!)2<BLT^fnv !*2:EJU\fmv   ! ) 1 8 B J T \ c l v |    ' 0 7 @ H R Y c i r |     $ , 5 ; E M Wf960p+zBt .'@7SJ`^pt~ #,6=FOXbhq{(2:BLS\fov %+6=GOX`iqz '.8AIRZclt} (1:BLS\dmu")2;BJV\fmv!)19BKS\flv~(09AJRZckt| #/5?HPV`iqz"*1<CKT]dnt~ &-7?FOW_ipy'18AIP[citz!)2;CJSZdlt| #*1;BKR]dku{ !)1:AKQ[bls{'17AGPY_irx #-4<FMU]ent~ '26@HQY`hqy   " + 2 : C J T Z d k s z    $ , 4 < C M T [ e k u | vGkphkw %30DCPU`gn{|'17AJQXbjr|!)19CKR\ckt| !*1IQX`jqz %+6=ELV^flw~ )09@IQZairz #,5FKV^flw~'.4=FOU]gmu &-4<ELU\dms| #,2:CKR[bjsx"&07?GPW]hmw~ $*3<BLRZbhsx$/3>EKU\dks| '.4=FNT]dls|%-5=FLU\cks{ $,4:CJSXakqw   ! ) / : @ F O W ] g m v }     % + 4 < oa*U{)Kq *&;9IJX[elt| %)4:CJRZbisy(/6?GOV^gnx} #+1;CJQXakoy #-4=CJS[djrz&+5=BMSZckq{ $,3=BKRZbiqy "(29BHQW`fnw}&.5=DMT[dlq{ "(08AHNW_dnt| $)2:CHPX^gnw} "+29CIPX^hnw} !*18@HNU`eku| (.7=DLT[cjpy "+18AGPW]fmu|$-4:BIQXafnu}%-3=BJRY`fnv}$,2<@JPV_flvz   ! ) 1 8 ? G M T \ c k s x  *0nA`@+D9_4" 2G V!^8dOkhp~y )/6ELS\aiqx~%,2<AHPW^fltz (-6=EJQZ_inu}  '05<FJRZ`gpv| '.4=BKQX_ent| $,39@HOV\ckqx  (,6>BKQW_gluz ")06?CLQZ`gou{ !)-6>DKQX_fmt{ &,5;BGOX]ejrx   $ ) 1 RJz8" /H Xa.fGjamxw ).6=DJSZ`gmw| !'.7=DKRZ_got  '/3CJOW^ckqx $*v( q" ~ )iIMb;o2u3r7kBbLXTR\M_KaM^Q\RZVYWW[U\U[Y[W\X[Z[[\\Y\\\\\[_]\^_^]_^`^`__``_a``b`b`cbacbbcecbcdedceedfeefeggeghghfighiiiihikjijjjjklljlmmknlonmmmonnooopoopqppqpqspqsrrstqttrtttutuuuvuuvvvvwvwxxvxxxyxyyzyzy{z|z{z||||||||}}|~~}~~g? <  TiE2.5DUsedo\uVxUwYq[lahecg`h`g^i^h`e`bbbabb^b_a_```__^__]_^]\_\\\]]\[[[]Z[\ZY[XZYZYYXXYXWXYWUXVVVVWUTWUTVTTUTTRTSSTRQTQRQQQPQPPQOPPNOOOONONNLNLMNLKLMJMJKJLJJIKHKIHJGIHGHGHGFHFFGFFDEFEEDECEDBDCDCCBBCA@ABBA@@A@?A???@>??=>=>===;><;=:=:;;:<::9;8:88997897786776757656536435243234213122220111/10.0////-/.-./,,-,--*,,,*,*)+*+*;'q> 1M~.       A + z:C:#<L^u<.*4A{Rl_aiXsStUrYo\jcheehckbkdjejfihhihkgjikililkjmkklkmmlmlolnnnononppnqoqqpqqqqrqsrrrstsrstttsvttvuuvtxtxuwwwxwyyxxyyxzzyzz{{z{{}{z~{}{~|~|~~~~}:sTYiIu@y?vDoJfR_ZX^S_QbP`Q]T[UYWTYUXSYSWTVTTTTUSSTTQTRSQSPRRQPQPQOOQONQNONONNMNMNLNKMLLLLJKKKLJIKIJIJJHHJHGGHIFGGEHEGEEFEEEECEDCDCBDBDABC@B@B@B@@@@????@>=??><>>===<=<<=:<;:;:;::98:89:79888796766667646635543433434231231220111/01/0./0.....--..,---,+++++,**++*)*)+()))''((&'(''&$'%%&#&%$%#$$##"$#"#""!!!" !!!    v         ! "!!!"""!#"$"##$$$#%$&%$%&&$'%(%'('(('(( fWRY\Dy V)<%AtX=58HWhtujbbci|nwruusyqyrysztxvwxwwxzvywzx|x{yz|zzz|z||{{|}}|~}}|~}~~&z?9=<z n4VLBY7a1d1^7X>QDJICMAO?N?M@KBHCGFBFDECEBFBBBDACC@C?BBAA?@A@@>?@>?>>=?;>?=<=<;<<<;;<;:;9;:9:8;9888987795876685655636535333442243113031011/00//0./.0-/..--,--,-,++,+,)+**)*)*)))')(*'(''&'&''%'$&%%%$%$%###$##"""#"!!!!!! "         qQw6(56) 5y=J\o #$,049>AFMPSY^bijruy  $).27;@CINSV[`ehmrx| #'-16;>CGLQT[^bgkpvx} #',13:>BGJPSY]`fjnsw| #&,248>AGKMTX]`dinrvz  %)+06:>AFKORXZbcinpvy !#*,059>CGJNSW\_dhlqsz} !&),259?AGJOQW\_bgmnty{  !&).15:=AFKMRVZ_cekmsvy !%(-/58<AEINPTX]`eilqvy|Um &)-07;=BIKOVW]bejmsv{ #(+/58;AEIOQVZ_chkqtw~ !&*-26;?BGKPSX\acilrvx $(+138=@FILRUY^agimsuz  &*-17:=AGJNQXY^dfjosuz  #'*/37;>BFJPQWZ_cgjmtu{| $'+-37;>CFJMQVY^behmquw~ !%,,249=@DHKPTX\_bgkoru{| #)*/26:=BEHMQTXZ`bgjoqvw}  %&*.23:<@DHJORVZ]aeijptxz}upT 91(O` m*n8nKk^hoj{nu !%(-/57CGJNQVY\aegmotvz !%'-026;=BGHLQUV\_bfjnptz{ "%).0479@AFGNPSW\^ceilqsx|}  $(*0068<ACGJMRTY[_cfhnqtwz}  #'*-057;>CEHLOSWY\`chinqux|~  !&*,0279=@CFKLRSX[^adijorsx| !$'+.149;?@EGLMQTX\_`dhkoptV> M  ("/+51<9AAHKLRTZZabfjnpvxz  !&)-147;?BDHMOQXY]adhjprux| #%*,026;<@EGIPPUW[^bfgloswx} #$(+/159;?BEIKORWY\`cejlotvx~  %&++1469=@DGIKQSUY\`cfilnsvx{  %&*.027:<>BFHLPQVW]^bciioqrv{}  !%)+-237:>?CFILNSTX[\`eeinnsux{  $&*,/349:=ADFIKNSTXY]`ddhlmqtvz}~`VG7(->'L'V.\7\D\Q[]^f`ogtn{s| !#(+-1578>ACFHMPQWY[^aeikmqtw{~  %%+,.449;>BDFKLPSVX\^bfgjmqsu{|~ !&'--137:;@BEHKNOUUX\_cdhimprvxz  $')-.167:<?CDHJNORUX\]`dejjnsrvz| ""&(*.225:9?@CDJINOSVW\[adehinpruxz}   #%&)-.337:;=BBEJJMORTWZ\aadgijopsvyy~  !%'(,-2158;<>CBFIKNPRTXX\__ceps !"'(,/0569:?CCFKJPRTV[[`befjmoquwz~ "$&**00449;>ACDIKNOSWXZ\abehilortxy}~  "%**..356;<>ACFHLLQQVVZ\`adfijlqsuwz|} GsqdM7"+5 8 61)$"%%$"                           mH )(<FE? 7, $'-///+#(&&)%*'+&*'*'+))****+*+,,+,++-,-,-...../..0/1/000/1121112223133424445355556476667768878797:8:8:;8;9;;::;;<;<<<=?=>>>>A>@@??@@BA@ABBBACCBBDCBCDDEDDFEDGEEGFFFGFGGGIFIHIHJIKIJIJKLILJLKLKLLMLNLNNMNNNONOOOPPQPQPQPRQRQRRRRSTSRTTTTTVTVVUTVWWVUXWXXVXWXZYYXY[X[[ZY[[[[Z\[^[]]]\]^]_^]^___``_`__aaa`c`bbcc+ :Xy{{~~~~~~~~~|~|}{|}|||z|{{z{y{zyyxyzxxwywwxwwwvwuvuvuuuuutststssrtrsqtpsrpqroropooppnoonnmmommmnkmlkllklkjikikjiijiiigiggggiffheggdgedeeecedcdbccccadababaa`a`_a_^a^`^^__]^\]^[^\\\[][\ZZ\ZY&koG3-$                           +,./+3)5'6*4+4.2/101303020433233444545465547586766978697:88:999:;:;9<:<:<<;<>=;=>=?=>>?=?@>@?@A@A@AA@CABBBBCBCDDBDFDECFEEDFFGEFHFGHHGHGIHHJHJJIJJJKKKKLJLLLLLLNNMNNMNNNOOOPPOPRPPQRPQRRPRRTRSTRURUTTUUTUVTUVVXWVWXWWXXXXXYYZZYZZ[Z[Z]Z\Z]Z^[\^\]\^_]^_^_`_^``_`a_ab`bbbbbcbbcbdddceceeedgeefffggfgghhhigihjiijiijkjkjklkkmllnmlmnmnompnnnoopqppqqSvpsx~}}}~|~{~||{||{{{z{{zy{yxy{xzxywxywwwvvxuwvtvvtusuutstssrstrqrrsqqqoqqopoqooononolomnnlnmkllllklkkjikjjkiijihhhihifhfhehefffeffcfcdedbddcbbcbbcbbaaa``a_a_____]_^^^^]]]]]][][Z]\ZZ[[ZYZZYZZWXXYWXVYWVWVUXUWTVUVTVTTTTTSSTRRQSSQQQRQQQOQOPOPOONONOOMMLOKMLMKM42(  Y!T*L2D;>@9E7G7G8G;C=C@@C?D@D@D?DBDCCDBEEDCEFDEEGEGGGGFFGIGHHIHIIJIIJJJJKJLKLKKNJNLMLMNNMONNOMPNPOPPPPROQRRQRRQRRTRSSUSTUUSUUUWUTWUXUWWWYWXWYWZYWYYZYZZZ\ZZ\[\\][]\]]]_]]_]^___`__a`_`ba`bbabbcaccbcdbecddefdfeefegfgfhggghihihhjiijikjiklkkljnkmlkmnmmnnnmnponopoqppqorqqqsqrssrtrtrtttsutuuuwtxvvvwwwxvyxwxyywzxy{zy{{z{y{}z{||}~{~|}}}}~~/tuz{~}{yzzz}|{|||z{z{y{y{zzyxyxxyxvywwwvvwvuwvtuvsvtttsttsstrsrqqsqqpqpqoqnppnooonommnlnkmllnkkmjljkjljilhiiiiigihgiggfgheffeegdeeddecdcebcccacaac`b``b2+4)3,3-2//2/2/3/4022303133243434254455365547476566775867787869798888988:9:7:99;999;:9::::;9:;<:<:=;:<<;<;=<:=;=<=:=<=;><<<==;===<<=<==><>=<===?<>=<=?=<>>>;?<>=>>===>====?<>==excellent-bifurcation-0.0.20071015/wavs/tone.wav0000644000175000017500000017630610560175422020536 0ustar miriammiriamRIFFWAVEfmt DXdata|W,?F#Uw"@d<| {.CG"/u9 :?1:E%OxNURJXV;9yG2~]"6o`DHzt78} #.j~0Jb?-@J,ڈקճԨjժֿA>ض֧bӛ,·adˈʰɽȞ\Ĺ ô% j2EzۚߌDFKB$Uݕ Ы8ŵŵRm*hߞy4!]dТգ?sءע s٬='겮[U#F,źмnU_PVt}jV]M' 9ߴܵ/"P.߫ݦۣ1Ֆ%t~RNψ͉7ɧƭ>i%SfӬǬ]JUٱ17\~j+鸳hc񸄹;λ' 4JG{>&&նV ڼb!}:t(ˆüȺ@ Z)1̎ҿW9;x† a((ؓb%tzɇ%ʄl ` w_ I )Vx]6-@'bÄeXV?n,ps2J6 b.ܸvy=칮{[ٸ,Dl.Gc^KqYsH؈ N^q_ϼd Vp*iȾ,}IGr"%'ۼšƃԍA"?қ<8Iup߾lGec :2^IgFݡZîIƻͺmWɭ4qȭ ØDʪȮ0t:o K}o'\6ӑѸ͠ˮ1cAO!ڲO0XX=Z3!g ,0Q%a (Ս}б.a_#,v,$ MsǞ1UÜޢTP w  : 3,"b*16;x?@?:/ #3ٔ 1ٱbcŇ*GT,N7qƳ'dUàʭA:٠oV_$.'-.~*l!JaܳDĸvQռ$b߱%nB𨌡 ͝Ф߲A봊רL¨" 'n8DZƭ.ާ-ܹOIJll"4ҕlԘZq:)&*)#+ξtf#˥vҦϻE¾Y蹪޻OZi?\GŵJF`?qruljϵºh޽&|ϵ;(xy@&Ժ.Nݿ_öįV3%۾M߸&?2HȀ̷:ʺ-5;AK:ΊVܚ;'F׹dI':\GLMIDA>,9A50(^%T Ykߙ^غW|[(krؾgY:-YܷķǷux;vݰePչ亚\5*.¹'`LnuЁV*؎ ÇY –lIJQ`mǷW-G3Cɿҿ,չǾƃӛxCʁMmم*C3HШې-c<6w$@| !ddh~w\Ե|˿TdʸΙfZ18ֲïᰔĥ)m /|μb:4< ӊJD*:m` BsKg$?ć& ~8q""&"Iª%򷏹qȀzY ( q"dַ͉# + 1+;;gA4'!Q%0>7KU*]djl9j^QD!PGNб=R $34*=rxDҧW΍RM U&(& JR^9]ǀ|7~\\Ͱé"R3෋ԴZ:wŃђn <i*ˬ(?-dߛËֆ$[|i*٢եW~70E1 l!M/8n:q7.l'!'&w O։ZӋuP̦ɥ3o<lſ"5%ƼWĹ@c8J:3ּ׻Ⱥ͹ݹxپƿl; {)Kg۽ܾ ԿZÆčg9ǪƜNh Ⱦݼ_DXahvÒ./ǩR̶,|ØOo<@ځ MNþĶȥթM/PDOGDI PQ6QRJ:4a:A:254Q82EQ@7OdL Ž+`K nߵٸRͼUhֺ ]W沩TU#ozٓ7ŪšjSUC 4ôg:'/;0 ݿǽRļhƉ Է#ԉ`ђC!ܴ#݋f"e/)0,&',)" G mI"#A#!ֺK¿8~ηE]W֝Q&r^Ue&l•*ʞ"qӁԽ=laKg m8޶ѿ>ЂUNޤ*u@ GnnƮߵQkv1;ºϡy ;r~ؙKȷ OvgjK֭A2o I Q 3%T.D=M01;?A&GOX_Je+bXwVZWOG@ /Ŕ S#\*#'dʷ,Q[1—ʵԽ1<*"#1!//AגʪȫɳSō *L]/[xƴϭ4>B@BxḚbYH/ Gx?謙ίg ȩҟr\Uէ\ݝTbh$T++D &$,$"+P427B77A863 ."ER auǡ[щ81 msOVL]ŗķËIֿ.`ɼ7N¿0p~y@轉YZĽac-.=*C뾟3T@=;/ wȬ3yǒƖʼntku1p-Ĝů Ǫ9ŷ,DǮ2N$ؐ۸Hߞ<׎L(S% "!?MI)CEEKMONL8LTL3LKF;&48g?@r>F<<:0Q(nWћʙe,u$26޸6Ⱥ׽ھjcϿ$fͷ);ay)1V9&RoxeΩ:K0+׽V 7F`bhc/SırQĵMhM|)0 Ⱥ ʠȃG0)<ւ 9ۭ݃ckM"B!664' D#s$##V%R(J+-i/0. %(^Z ˭׷ v-Ǧ ˴ϚӵպRԒ2u;Nwiƿǿ>X5„c%I% e$ջoӷҷz8MD]W:bב;؂Rn`܇Y%~"߽ˎg05ȳy׸$ ,'1651,p(&&&')Y,?.f////x.--k-=*! R:hN/Ȍ7ɯǦÉ(iĩĄ?"f /2>YōIF"jħf;0.>UtěĶ(Ń|Ǜ6gWʞʡeʾd ɽr.(lȨȹ?}q(Y+t߽T^mĂǀʎts$ ND#/1>HANOuNqK=HEDDEFHIKKYLLLKF>;<6/5( K JqWS9fJ۳JeԷ֨ښK,2r5^/F Xomc[QI;B׫A϶aGmKeټż)[幨ʹ|Mw޼E FN%/.L>suīOȗޟ]/j + K 6 BZ5 #u+1577640-*'(a&[%%>%%'/(E)$**+7*&R!j! ?^,Pqod * . !c|L"b+4<C+GHH}FC9?;86555F66<77777)7G6+4/)"{ hG7tc H 5;7w|Y^kiyߴڠdTrZ˩ʉcI-)?A#lYk+-6‹+G2ŒW·ÕĎŖƯd*T}#XNh-c R [I"pBHx5 b!R&-24575;3v0`-e*'%v$##$%&'())(n%   */~Pa'(ξB/ba Ѓ]bP˵'̙H͏%:DIT^gx΋Οί*A_σϭ #/<=2 ~+Ω΃ifyά6{ϸЫРҙP'%CXBk o j 5)!+3;ABFHAIvHFHDAe?l=;;::.;;W<<<;70)!P1h (;q$(-"j}n 2LOj\pY)iJ̚GYѨO zҷ^z|i[ѐ:І!вMΟ[+ͿT_С/ѥmҽ [ӜLTcG\AU;bdYFI# A$W*.01/-!+9(%N#! q!\"x#$%d&&5';'v&#: R-tY V S74ԹКk{րGc:Liut ޣޡ޳#߆.-ZEO7dqSu`׵o֑ן?tڋیu_ܻ?tuI {% Gx(l&.|6bY=s;96>4020z/..x....p.^,J("z<  MO >~<^-HzN| 3]c 3ۊڬ8۾e؛֫ԲҼ:˅ʌe' ljDŽřT>EjŘ\Ʃ`0ȍzȱn\lǧȽȕɺ% ݰ`|<.6zBO$Yr:?1-`5o/ )#)-80L10o/;-*7(&N$(#"m""E#$${%&n&&&%#v0G{d(?zspx}4+QSNāl)j&"ЫѪ)0=҈!Ў'UϠ@Ј?^рѨ"KnҐҵҷҮҪҫҶҺ*ڍl(( )BmO!?}0Gu@    G Y$R,3g:u?BDDD?B?=$; 9\7'6l555R555;6J6 64j1+!%@~z lj.!uj8Ob_EK}n"dz_ˠ΀ Wٍx <ԟ2ҹғsW=)ѱёpT8! f\g7Ԋ֧ݎS4$JMb~qkx)qln5Ko6 +"%!)+,\,%+L)2' %T#! V  @ "!!E"""m!9k Q,P \s&1YgCrlz=7$NcC|ݟWmّc܄ު 4X)\M@[%2cjF ڨ؇؄]و۞ ܛ݂F{ [nq -+!g_Dq % Q Y&6,_1599;m<<;J:85;319/-,j,+,),L,,,,,S,q+(#/n t?r aW.r F g;j>ykʙ6bйи'SXG&$ǺƕƩR'ȅ"aɞJqw\k1 7ɖSiz<.sX`p(giPyX)L:e ${ [*$%)3,-E.-.,M*G(W&$]#s"!!"r""# $o$$$$!.YI`FjcagRe%M[ya~U#VIlp ? F+;P #1(,/14G79998$7 520.,+*f*+*)*I*t***d*)'#S fJROS3 "m{ <?'z7 D V ie2ǰ8w"˭,AѣϭQ3@ɫ)ʮ6˵-̙,5r̀;1g}3fEJ,=W!B{=o1%PzXOkO8 "')+,+g*(&.%#_"u! 7!!0""#V#S#P"B  Ac"_n'z]xP<8GSZXV%"r"ɱLjx)S̥mԂG֍*ueJҭ#Ӧ7Խ4՘8?8֖5u-gEY?Sg.ik$mYT TS: 2' .48<>d??=<975421310171{111 211N10/,'8/ RCJ2_5kOk7DC< B(%{nsҿtzˮ̱:f)n,e'ٛ<Նӓ_Qeӌ*dԪKJ+QIjdG1YUZ RYiF~@u8^(NlB6ar9zBlڎ۔܎!--j1NQ5RBZD{  N k#*0f4y7W9!:98=74_2/}-+#*+)(f(p(((P)))+)o'#La >iq2X p|}+k@ a  D4N@Y!VuE#9CBa!xИϣι>v[pˬz̈Y,Vu;E^->+37}hdA~ \c*Z~f  !'\+-.F.,W*'%" Gg *T( !8""""""!I  [S[/*xRZ;oPXpԞ#;ɒʧ0igו ׀՘L iqM9!$a8"[ }#'[VdIBZy $#Rf |#g,42:l>@mA@>DqD.,FGdKGS#{iZ\K0`٤Զ)͕ϟѷӮ\ע}ٳ0ه bojՁ,iPA"$`uS =DUvU^jO;DLYgy"" 8n#$)),q-$-+?)u&# pV8Z@  E HVhlgE |$CS\ o 9B#ًؽ.څ=+;azS'HQ>EiIS <J2mW'k^j4(>QL_J (/4k8:L;:9k741.+)(&b&9&e&&I''=(((1('t& $4  ^3 B}E v d " _A0s'd w{dŔtƹAtρлЫj-ye-^7`lu hd-4*n-iJ+|9o6 ##),..-+B)z&#n!EF ,!!!E!9 4A:"I^B$UY 9H0պЅ͝Fw5Goz@֬׮NٔڳۤmHQ{=,Smk$}5K}v,d d7<ue^Ru &C.t409Q<=>-=b;9}631/,.%-,b,,,@--.7.x-(+V'"1~5 3O<\ RD)]Fp@%n}V7Xԛ*f9ڼۺ|Y'S>x'y pQ`" 06#@yL! s<Qu It|"%'(S(G'%#!G dJPXDv 9jvs&5#^O% &AbJ.E|B#>J6HP߅ݑYܬަ/Gtiv1K9t+C3 -Extw&eECL>(a mw$'*-/12X3B3251/- ,u* )(D'&k&N&S&t&&n&v%"W| % Vg'7y" ]>JMb c  P!H >)\CeW}p-֭8 -|3(9*Gv8 y: p|:yTL QOm=lC@e? !"T##b# #""|! 7 "F_l7 t2oF#&Wp}rSI]I7,!)-'YÙ)ΫD^U$M{phji'h 5 Z^27r6^S}}B\!J<- 1dDq $')*+-).;/*00b1111710D0/!/. .--,^,,Y+)&r"Y!K e^  =^ntmi*uWQN_y' -AEC67e^ؔҵӔ p)H$#V!42v[?#g>*# 6u,b dGD:c !.!! ] V; 3 >P,E,#E^_O62]N H2oA  @#D7ndbT?LC&V& 7K`kF NDzEs ] *Q!$&' '%# " !0!K"$%'X)*+,M,,+*) )'%"Nom~ D(9TWo {   t  *4w " ]MA.*ZRl#3%b6JvJӺ)Dl9?d}ri~8jj}b]o4shC.7,fP!LdaDfsD |4, ? j 9"n#.$v$V$#&#E"S!) <-1? BJS/f940HQc);G"C|D(7I;5HTcdr-[:("/Ik>z SMvH8.Mk v?Mz 9 z$&g((('&$"k! ,!"$,')C,i.0H11110/f.+'4# r O  5`ck b))^c%jq@*|owyz1o&N%E "+CazF}3m+2)haG?2mV9)&*whE j m:KB2:|o \"b###"( #: V 0&v*/ v - Z (6tY:Y "  @<(_ $ Q d @ Yop ^ |NV{4y~A?m[SJ< s`dxmF( T*rJ#%#'Z'&$"f HK*[oSQ"$J'A)*+++ +*(%!u( 1 ]. { qXhc+7 a : +Ylg$Fft0+r :Z0MQg۸IT3 0U ?O0> <>[#S]U6?g1Fch. KIE]J*=H WE ~"$%O%$"7e(? -4nD oK VJPmS uG}QwuSYM#E|1 '3v =\rVKXbY-MSb3oB^),pKs;H`}E!1  z #%&%'&%$" `w] X#O&6)+-w/0/`,E(X#6?0    k z*+# m}9BCIhu' r zjhmedi7OY1X l+S|L|(siX>4f[ "^c:J U C / vn """!&e # dI  + O4 p h M_$lbg> s DH:/ '5+%.BEg`tz>L}0{#h^d0woZq&*5BE."$5&&%$x" 0*RZ E#e%%'9(()&"`Z.: jdc  x7A#Pdg(C ;R&0d E M   8.oK܍ނ,YT5@(pb+TYY^z3]QZ sG8ono ? * l o0!jV>x 21a)^j q y . 2  F\Q7(Be(`*o" @?  s  E&JoyAbqfYLE}|e_|+"*! JqT!#D%%%$#W" n&T,g "$<'Q)**J)\&~"Rn K 4 h ixxz" 9 z1H9rZbv OW S C p w U ' 1*||jn7XU w_Eig)mB~5E>3o D mefD@* m G  M!Ug) KL{b ` z S g t:8Lp \ @?r(l jnz|45 oKZGBMZ;p \[q2WSE >fyW6aEM r+cC!#$H%$W#q!3WLCz}mSsCj q H~8b ]jNu$Dr 7J t  - 1rq}lD@6\=zߔ w!Q"b 6w6 lx =Y u  O { $/X 55aQc[Z^gz[ZU#Bx L } `  A  _  c [h5g <deaJ  9 K = 9"g<#]ax432  7$9'D)*+,-,&,u+*S**)))S*++k+}* )T'%#""#/&( ,/1m4^6788s7h64-3-1/,*K(%#! mN b 6  v*Wh!#%H'() *M*P*&*))))a))( ( '%$#R!y;ioQH>^ #kݿ"J#SH{9 'q!]`6E< 8 @ P o Lf2$>a\ac gg g]I^9*0+O\ C]qG!#&)*G,p,"+(&%P!CKJ$G j 8!= n LR^uU}+ d )L17<==";y:;)=Y<83.) %l 0#) @ = Ih2$2+h03456 7v5e2.*%n KW i wv'+EP,m"f(-27 :s<>,@bABA@>;e72,'#%e55(< . ;z ۉ(5ձא݄\vEE}\ fhd ?MQVPD.qy 4.:* :it=,dU R D!Q8Ye8sv1w  sS  R  %3|e&E #%'((A(;(()*@+) '"I^ !3Y0 2 ?@.:]\Y"=VTqh_g [$,26761,*-13s1S-H(" c  @,(6q=A@=:60L*@#0 P b{[9FX} B#8+1V7<;_;99730-*&"DJ}<V ^8wtdEh 7߹߻ h|$NOI{T]HB R2=w"a=D uu ]Q\߆'@RMY`oh4F7)Q S o !$ &&%$#t#"!( @]F i2 $$X'*,./ 0/L/i/////@/T.+d'h"K t]nB  mj0I7O|wKy>R l%S,013*30,+,-,B' SOv$?.5<:;U9w6 3.( E  Cn(=@{}%,]4;AEHHIHFCC@=961-4*('#}   u>?&63EAZ'݈EFa%d&O"r>z%-C s#r 5Bf uCZ hC<_im<11={JV{~/E"` ]m{(>[h9I  H 2>)n*Q!"\#8$e%&'()**(%!_ a/9(=g]3L * Z#$# D; ] ]Ie Z!Y)/355430o,&   Q=(5R3%-5~<BEHHGFCA>;D84e1.,*(&4$/!=2* p d 9-^1aaM` 1O?)hz 0shT88uFtzOB>eCCa^s z5-&|Mdi`Y%I8=fL` q]  B S$'(`)U))Z(&$o"r ]1KRPsZj!b#%M&1'#(4)9* +y++")%k!ZEt pNr 168bRIueE:RPZR  }z! 7 ` M|Q s"v#:$$$#+  ) E ` 8C57%,y39>BEFFECA>:(73.I+Q(%#!>jkFt  G_PM=ߩ۪D۬ܩR:;poB38y8~P S*Fp/ܦrZTL=/";pG_/ H,Ud]5@h@S/( zGbM\CVC!Nyx#-zv%><L' 1$[dKsPEW:[ #V&i5ox 1N~P}uLO @  h lu "$%?&%#"&^:w l  , r < d C l  sxfG&-@38=8@SBVCbCB{A@c>j<:d7420.,+Y)'%w$C#`"!0 U]6  sUyPOFa?Ly(d<~MZ$;o3L{I8WNYܳدӷӋ~d[$4&3 Z7-_iC^HWN&Gs( 0? W#%w'J(W('',&$t#!< kkboM "~$|%%%J$l#"! G  9 2 ) P z V X5- \ouL'P[hbD"G_"R 1Ub f  LU   8E ] :zh6?_#B(,0Q479N:::9875(42/-,r*(m'&$#!6 t` _5j/`_4NYݑR@=,E o!],cusoL rC"pz('Ֆְ٭ݠh6.%'.fp<(? y4O]1_dbP5#L?L W v%@ v5r {hRR/1o&/&?9fO M  "YDEVxKn#:;CA,C?0l[IG9`/ xYC%Y u {X!>RSV H f > u 3aUf!i`v#j'+@.02t4y56L6S6A6.6554C4322@1I09/.,m+*('H&$Z#/!MD JD)?*+s s{sBu0 ]hڠrZyش |t)t20tGzW tE4Duk-<&lcEPoX>49 m ?9l~( y"`$%& '&(&*%$"! .p.~C$}?[!!"f"! [@ 8Ub]7+ OP *  @i- dyq. [VcA5u8 m6D< ' M 4 O B M  * g  sy%  ;n"$ '(=*7++,++-+*)a)(7('3'&&O&&%%@%$S$##m"!  z7cLO =MߋݞXܞWVޅ({\LLc HJzf3Ggl7!)& lNEaVGI z E<;:%wt`f  ?: `O4QOX{c :cBG\.B- d \u0"[E{f?73L\346: 2Ox/@Tvsx P;f8}2q-mSpK  F f  B " [ ~e&-!#%J'()i****A*))r)l)))))*7*e*}*}*`* *)W)(N('%'h&%$g#!|5{~/JG(v:RAzZSn 8[!w_Ol*hahQO`0#+K*.<5nLo w$IrQSayy B>2"$X&'M((E('v& %#^")! &gp,%o, O d ; %9uF *~AN195  euHYQTdNEcqdt"r{~exE )gxn Z L H ^ qX9;eOmt - QON"%'-)*p*I*)('z&(%#"P!L wZ(U{-$?^ 8] !J.^"#| mafFU:c cGT2dPZlzvDbI5~]P wK^:}%,!:q7/bVu97d{rY95}e { ' dQadh T3m[<}}} P sq9&>Y1^k&[9WmpKGaR`Gv !G-#jp WJ ('-I  0  @ Z6[ U ~wjp!L$&k()a**~* *k)(''g&%%b%H%J%g%%%%&&&%%%5%$]$#.#j"! O)k7?ktfJOA=b\6uHZcޢܜܻ8)Md`9tw'GY9}/Gcex!{v2Q2oT5 ~j/ 0!#$&N(])))('B&$#!B M`+"-6Dby$nNslw VZJ3%zY1NBLC 7S ''9rgNoR&#!'N{{2znN 9 hqU U .  +p^U0Km2o Q r"`%'1) *A*))'& %v#!| 51W7FD*} ]dCdy`rU lMk%_  ~  ] k D 7z1dD- LsQ/3!#${%%&%%K$P#9"!\k@1=Sq! kkyK 8A3d`3g|k44oI1݋eٯJh%6R~O f e'}Q(uH?AzDK;liGg*w> bR bK6  (rUmznikvi"}= :*6Z=%S=Rbh<`S}.Oc>  6xKru G@fZ8 ` (p B bBK8 Qb 9 r v(a !"#P$$%*%@%S%j%%%%%%%%%%e%7%$$$@$###M" }Qh A#'i#U1y2#g] 8۟E(7C;o>|`F,#5F]}zT+RL[K@- D~J+T qsU?Eq;>zm  V(#4 k h 7 1nv/jo`&  ?sSc|3h9G-'G/$d" Fs oA&!Dcq/#&Gnw? %b0_gBn E `   ;R>eUvAM D \4qM"aP7]nf8yR3#`P }`ddMe}j%MKh")tڬۂrlnndP)/pDn2faE'v? RT28%]"_HnqXpdyy;n (FHL5O7c,[  b(?Nq;)!+ s~;mn%RilOlT>.*% Ep-jeTIlK!8A@=+  mz^C 0  q 6Q 4jR D,/ qYH !##*$%%&]&y&l&C&%%%$$y#"""!B4'% A dXF9g]:<`b߰B 1zKKEs:g.P{Rz /AS`lzqT3 ]% tn *ts9LJ?;FgY9 ) ^['Y5PKK o%1 o=/Bv~{a^~?XU\b=Y5~xJJOq{U+Vw~^1 'BG*=!t.J X | 6x;<vm r KM@lP&v+*]'A5/B1JQ0!x@ [%K`%k$YXLh#dV ^ v % z c  xB&/_U?w 9 rm[;8W+i=b% c"#$%V&&&&%$I"1> d%x6"ZFGRIF/'\rjr"hE&r N %,2:ETfqz{`@p9T&o2o1Jg?   |pY(9`#50|*CT ! %z\rzug5_d+%6Q8pWD@DN`vZ0(.j8OH' "$B: >  ` 3 w:t $ 'qn7_a,PxNh&"v4{/Y2 lf(I$|0C?6YxiTD;:Ib=MD> F{ Ax}naSA3%\)L ']KnRhpEvv l=8 o k%! d  | }  t 2   2 CsZr+8d)c|^1U0)KVRD3.!lC !m"C"! y. S-) T5&N0&+?]$_ Au+BXt 6Z|6Oi}&*' gB! }=5<vY&Knu ? &q_%<- x4md[$ M v4wts}7@blu%gs# ;ey}r\<iD c= $9W~Jh2$Gvur {4  L | ,&l5$PYn@+&/D^}J :S U8NL\K`^04W K0z?l.n*eLb, @ c!#`vf; # K iI)/+4 s N0[?9w{$LUAkujejxoVe0J\@c<B LaOjC  7QmxM  K5*A%NYO $ iK4w1&<\dW(PO R/CVaktxmK#'@9H XBhf 8 G N  = l q6 3\ M { El/V%Qh#F[:KbGRb_* TgaVJOjI' *Do(paJi|{pdRKC;849?Nf&e@h/asYv#|[ 7:X q "GMo,u` N J   ; t  Px'mfJ-F;Usq#[h{~ ee t_K yZPhO6?goY>U<^u~{smfbfjp~#9J[fif]N7BQ(R_G2;[tuD      U E G'&<jZ 1  Q B .m'h' aI-$HflD%E%)#Y}sU64Ql2Zv|tjb[Zbu0o+e 9[uzvtrxzF)V+y o \5R / a W ] u  S c  b L tAOVa*h{7I{de6hKP<R73L0?u%Tvh9$[zeVLGEHIQ]gxu]E& j=G:Os@jy 5 "aS{  4 W 1W8) R i- $8zjV-KC[frG,H`o~p*.z^Ti@t/=d #6Mn&B[lu}ypkYMI77 t.^!wo ^{tV4 5 z s ' :#6 uD4GZd$ P1=%c,`eoT Q L xrol^.EZ^bu?rC6Frd<,k ' !0  AW k ;IGHRm+|#kuNQz3D>bWMJ"f(/Jd~l`wGc R| 2Ut*BRVRRTZeqq[Ig> zaDH,  g }<5aexZ<azIK':fG{[[FRSp dgO?79=J\t p0o 2'v0XKp[PD;4+" Br0H  [ ^X y lykl=5Y0G ']P)gSnImf&`; ! Qw~f>>yF-=5v ">n $Z_ Y?g !u]Gx {JuM^K l U=Y/D>Mo.0 FJ<Te!449KA9L8v_PJMQ^l{ y7otgMNm.85z6M]cfaWJ>0#gROo{1 #/ + 3 D* |:A@,UDG]N#&^c+9tA=?v ^'Jx_i.## 4 &x].9 / / =N?TvzUDy_K,:D)0CH=* &InY_ Q(r$rhiu,\75 a&vTgMPkfG5\xydNXD4y.{ ' / '& K m " w lG).b|FXN`F=; 4: 7o- a$( t++(ZJoS<1-6F_{X'l'?2wo r2^|F3`O? ` 2C G RXC2d:f|et~=;F7k yW7lwbQ]`NS?]|}j UzV*0[$s] 6U{xJ;ErOme% y  ) @z\B@76.]`OgsrqSBpbF%BD,xTJ nN4& !.=LYk},'^6-jbt*=B;<# : % !  K!jx(h:;EbJiCGpV-RktsiU:gF' G0c{kFx kP& #BjKy+|XY(G8xKfFOi>la8pE# 8fIbnj2'_\!#TtjY'w2;;0 wpmoty^]p0lg7~=pN:..3?JZj}&6GU[^L(:[t#2~:,7_!hj luaK9y:(O}}JUmpA7FGo7LUVPB3"KI\M2RaW9 C]h?!  5Mk'8JZitza6c5Gya]yx[n']}puGTH nHY~^MP_|=^2<Am%hd?  ?JY2}I[<& '6M^pv6V3x\[rad,W6FtO*n9!1=! $\2usAMM09>7)n_SNIHINSV[]_\VL@/ 4RK?OW"|I -Np $;K]kul(F p7L1T :Tr =3'np,rz=vJ-A7`IlC^&ZyN#x&B:3]m)xzya pmM2+>l7wyUn*Up[UlJ#\/UlrlW9Oymedlv)CYmWJ]/yVVW@?A5#uF!l.<TxxmlwI}M=IoU L2kx^A) 0D[k}m]UY}yR(PcleU;\;"/:DKU[aimuw~N\`CasyP yU}_\fi&Te}+{2/y6KUWQC1wlghloxr[G. @B!Xwp\I;0*')/8DQdvM&W%LepocP5tV=* +:OcufS;DrN?bk5N`F.vDf*Hkj\$T;nlTA. %7I\rwaJ3 /l|L \##^8&;OfyMx">'CK="J xd4{+NK.HnrmF$#L eEJhK_[ybJ7* (8BTct{j\LEX.^\pK& 5Jqc}93{%t 2Q~Q ZVi`F.)\$zZYp2N ^Gexp^G-  }hUB-7li5B2@F@7&}rmhkmuSDIu?C153V/>MCt{\;|1frYfU8Bm wfY/Hj~yeK. ycUKEDGMXct'5=EIIIC>7.% 2Gx i oR9  $5Kv=r".J\M$L| mz9%\]`$tX\A7d6=~eP:( '3CVh{o^L:( B}!{6!_z_A*_O@7:{7r[i5jwT"OjM:9UbIb0>0@DB7'raSKFDEIOYfr ticjYpoB[lqocR;!wh]VTRT^+D5nG{wGFl5Y0/j~?4QKD# )~Q9}"b}]<~ +39CDGEB<1&vj^XgXYB~&*+$wpkgkxj(j sn3:PB/MaM#{i2Is@+4Y9g+GskO5 +7DQ[eov}~{tnh`WND9/'1jOD zuaTG>878=DOZgwviZN@4( )Fq>)s!KnweP<%&x^sJ]Fc&KbA @qtkxGt= ;iLa]*BSXXOA.xpjdfjmt~ #')$! 4}f4m|fSL_C29/S>u"ZS4)Hk0 - Ifrtr|^s+=xbVEjkU?)%08?FMQTWZWVQLD=4,% L!j+]$ZH',lo]XU8*C2wAS%81W24wglU,nEftcQ>.$2>HU]gryzqicZRJA9/' 9c^+i(4=>;1&@=xA(__tLD{j^j_GCm Qy W0h* -]]Vvlb]Z[[`enxwof]YYh!a"\ $5CEFB5, 'Ewf*= 7Ysj?\>Elcg;^) ~M FHK?#q#,['ZOy4^<{,h0W1x4fr`M>3' &,5>LU_kuyqjc\SME=:55D_U%Ot3nF[  -760$j!AN&+uRiTt\ L"^  h9 &Dk\U #&$zsrrsw||u~+`%OrKZ#[  d$ZvL+#X^+wc B)_ By.@NSUSJA5' "%),0.10,*%$ %P gN>422;EUioD%FTGX.$zDKfB,+5Mq@xIm}mcTMD@;:9~lf]DF=K~-ugiuGs0K^o|}uj]UH:2& "&-49@FJOSUYW[VWTRNLEA=71,' "5MhU`N{ybC|U/%W"rDokFEs!Wn7=c9Voypf]XQLIHGEHKLRW]`fmqx}|yrnjeaZXRRYfxB}E5cvW3 fB /ElU ^W ] K"q$bKBBGXn /Nm 8j\:doY;hH, %2BZ~W=g~eG _"EMX_js{'Q{ $$ oL(vHiD# #3ERbm|||xyxvxyz}}~~Ht0K`swj^RE8- xk_WSMKLOPW[diry1X{tW:tM'y_G8+ !+3ALZhu"Dj*BSdmuxywqkbXOE9-# ~ywtsuwy}9Xz{]@$pV< ~yxy{ :Sr*>KU^bca`\TNE=3)" :Tmq]H/jW?( "&$'&(&%#$ # #"#%!$#"!!"%-6BUf}!/9CGLLMKHD=82)# '>Sfwwn_P@/~n]M=/# "*/69@EHLNQQRTRTRROPMMMJJIJGJHIHILKLLNOOQQQQQRSPRPRRU\cnw%-2779884/-(# $6FTfn{~}xqcYK:.}uic\TOLHGFFHJNOTX\`ehknrvwx|}}~~}~~~|||z{{z{yz|{z~|||~~}~~~~ "#&&%%#  "09DKQSTPMG=6.$    '*,-+,(%      excellent-bifurcation-0.0.20071015/wavs/blip.wav0000644000175000017500000003121210557746754020523 0ustar miriammiriamRIFF2WAVEfmt DXdata^2ymd\NF:1( U9"'0/?'wM~hyȎӠp=|5<5{)! #`}`5^}sCx7*?<:N/$V !!*ўvZ܋߉n4h<5$*E" s#hݣƂ<%ܶy)<1;/%8 t!!'Ҿ@ܫ H2E<@6*" ##)SBȧÛ*<ߌ(;;0G% '!!6OܳoM13<6s+"o "@}גW3&$ҋKoT[`Ev'ـz٘ٸj5:2' "n&L(?( ' &%% &]&}&j&I&/&'&@$Ś!LW}B؆`څ7ٖٓٱٟ.6:1&8  #&I((&%p%%%L&g&Q&2&&&"DU8%jԣݷJبׄغ}ڔ@٫٬١zR%9]:/$5#'m('&%O%%%C&O&9&&&%5 5 C~Hނ5ڣڗ<پ), +:8,"  $l'I('B&l%B%%%1&6&&%%%lO)HKw*Zeڜ6"%Ec1X:o4D)V܋]I@ۂ:ڈڀڛڿڼڻڿ 5 9/ %  \"%L''%$o$$%N%b%L%,%%%%#%(%'%&% % %% %"%% %%%%%%%%%%%%%%%%%%%%%%%%%%BA_ǁbڻݓ/;ۥۄ#ں   uJ38 1/&{!%&&%$C$\$$ %(%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$^mCRn4C9@Qf#9D;2,,/16343363676787988:9=9<;><>>?>??@@BBBDAFBECFDHFHHHHIJJHLKLNLNMKOOOORPR,0e82;'[ l$z&&%$$ $f$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$}$$$~${$}$}${$}$z$y$|$y$x${$u$z$x$v$v$w$v$t$v$s$t$t$s$s$r$q$r$p$o$p$n$o$o$n$n$m$j$m$k$l$k$h$j$k$i$#O;e0zݩ`Zܵrf{۞۵۴ۭۣۡ۟۟ۢۨۨ۩ۤۧۧۧۨ۫ۦۭ۩۪۫۬۬ۮۮۭ۬ۯۭ۰۰۰ۯ۳۰۳۳۱۵۲۵۶۶۶۶۶۷۹۷۸۹۸ۻۺۻۼۼۺ۾ۿ۾۽۾ۿۿۿ<J3t7D/$w)!y$&%$#l###;$T$D$ $ $$$$$$$$$$$$$$$$$$$$$$$$$ $ $ $ $ $ $ $$ $$ $ $$$$$$$$$$$$$$$$$$##$############################################L f-'#! &QHXU^JAW@QCF[HGFEE FkFF~FYF@FCFJFQFZFRFLFJFEFKFHFKFGFHFGFEFCFDF=FAF?F?F>F@F>F;F9F8F:F7F3F7F7F3F6F4F.F.F0F*F.F-F,F,F(F'F(F&F#F"F#F'FF!F!FFFFFEA-euFGP1~![ ۪S̢, _ l,̳ x ,ubă̱Asބ vX@:";5Ӟ~Bݸ$_e F`ێ^ q8V7΃ a3ݩn $WxĹ+|ļV%j gc纼pFE/25G D,- oخwlm׿ΏX  u5[̪0p` N##K_,t EZ6hޯuZ*_$y)Pְ|0K#Z4 BTS>I2@=>`1W+?'?SSI@>?043RCb?eSSI@>[>2c+Q&AT"TIj@=3>17 =)@TgTIe@=>^2ORRM/\N>NSoTJA=?4n@>RTjJCA >>!4yk">?SUT=J@=O>,31!?TTJJ@=?CEEsDeCmB5~w )4V ?TTVJ@=@CEEsDvC4CxCC DDCCB4,ѯHlޫޟG" 0W3)d!##"!F!!!)"" "! "6۪ۚݴޯN+jf)03*$ h!##"!E!{!!"""!G!Oڏ%ܦݜީ[%/3+ S x##"!F!w!!$"""!/"|zy| ]pۄݩ޺[%޲ &.~4,6! a##"!H!n!!"""!!R kͽ^O3܃ܪ݊ޭi/4K+v , ~##"!-!Y!!!"!!x w}bedEޙ?<;ކ>!Y3I10&jh4!g# #! !s!!!d!Q!Z #NL^3 l?ާެwA| )r3K-?"""4" !h m !"!! a3ЃZUݫޱߒ1P߁P/1b(x <"Y"K!C  { ֽNR݊ޫ>.߇߄ߑ߽B"1E.#s "!i , K 8  X>tnU]a"lA)(1Q* ; ! !2~{wwurjlmdedt_\`ݼUGh߀=V  #.EC]"0,!$e  'k{xuvtokggaba\ZYUTMLUzpU,DVf #&%*+/4365C4R$W".L* h^Zt ]{x{~uttpmnhed_]\XTSRNJJCF>C4=0U /G C c $$'*-14898??CIEMKVIcE+A)6F|gdhmlgd_^\[VSROLMGD?==78413(."*G5 ׷ԣtgV=j(" -+//1568;>BEGJONSTZX[`^lY{[ES"+&^5BcQOWXYSPOIFGB@=;7733.+)%%  d j݄ܻGAS>`#1JVWVORW\`]befjmprwwz{}   "$()*/028:;@ACFFLPQQWZY^abhenfx/'Y$r3tx[NIPSSKHFC@>=984.0+*)$$    ~}ywwtqmigec^^]XUQQNKGDE??;92D PE(_Z !!'(--22878<@@GHKMNRTWX[`ddiflkptvy|~  #$*+-01668(8(4(+()($(((( (('''''''''''''''''''''''''v'u'l'f'^'\'V'P'L'F'D':'='&'6''N'$b&CD(1-C'#Z$B!rNe4V*0P,&#7$ 4x ,/v*$"$8V:OLT '..(#""'#.v-1'""!B0#a7&.+% ""|7LT(.]*V$!!" $<7?_ *-(#F!!Xza G,,&!! ]QwZI;",+$! {&BaP4! `QOi.n 5XCw_V+$pm6t`: lAa|R;Z+ = J8ArA3~p Vf4$/'G  LK @ QH;nC 7v:Q h Ig{ "5 1M TB z% Y&p= 1'"Er U @ I<  Y m[xu q r  14#8?Cs 3 @ t /HlmX[qi MO  BN#:jqvQp gEA|u 2 1  Dgdlk@)&6?y=1 I p _ g 8M9b   I s  = > < #  < f~/DZ-8CMMG  N JrJG]]Z}qt .  0 y 1 7 \ t u b ]  L#'`}Po~_ w -   ] 3LK7,r.f[1)!@'? }G C 7 I  g B ?l6wC  o #   = B A *  NxbUf!+ o)y  " ; 3yWF o*X   Q ;|kf._K^ ) Jx Z l1i Bc"9[jKX| 0 k.d)|wxsj#EWX "#'*+//658<>?CEHJOORTWZ__`ffkjpqtwy{~FBc>Hb5 ~yxutplkieca]]YUTQNMJEDC>=:841/-*(%$   gx&kV:D?658ABGHILPRUVY]_adfhlnptvw{} !#%(,+12489>?@DHIKORRWY[^`edikopqux|}  "&'+,0158:<9630/+*&%!  excellent-bifurcation-0.0.20071015/wavs/pbeam1.wav0000644000175000017500000006551610555512630020736 0ustar miriammiriamRIFFFkWAVEfmt "VDdata"k~{ywrro<;763/-+ #',28:AFKOU[^ciorx}eimmpsuyy~\URLHB=94.+# }|yvtsnniidaa^\XUUPNLIGHFGGGHGFGGHEGFHFHHGEGGHFFHGFGIEHFHFGHGGGGGGFGGGGIEGIGFGGHFGIFFGHGHGGGHFHFGHGGGGGGFHGGF*+,*+,*,++*,rrrrqrqssqssqsqsrrqrsqsqrrrssqrssrrrrrsqrqsqFGGGHHGGFHFGGGHFGHGHFHFGHGGFFHGFHGHFIGFGGHFGGGIGGGGGFFIGEIGGFHFHFGGHFGGFHFIGGGFGHFHFGFIFHGFFIFFHEHGGHGGFHHGFGHGHFGGFIGFHGFGFIGFFGGFHEGGHGGFq++*,*,),+srrtrrrsqrrrsrrsqrrsrrqqrsrrrqrsqrrsrqssrqssqrsGHGGGGFHFHGGHEHGGFGGGGHFGGFFGHFGFHFGGHGHGGGFHFHGHGHGGFGGHFFFIGFGGHFHGGFHGGGGGGHGFGGHHGFGFGHFHEHHFHGGFGHEGHFGGGGGFGGGGHFGHGGGFHGGFHEHHGFIFFq,*+-+++rqrrrrqrsrptqsqsqrsrrssqsrqrrrqsrrqsrrqrssrrqsrrqqFHGFFHHFHGFGHFFHGGGFGHFHEHGHHFIGFHFHGFGGHFHFGGGHFHGGGFHGGGGFGGHGFGIGFGHFHFHHGHFGHGGGGFIFGHFHFHFGHFGFGHEHHFGGGGHFHGEHFGHHFGGGGFFGGHFHGGGGFGr**+,rqrrqsrrrrrsrqrqtqrsrrsqrrrsqsqrsrrpsrqrsqrsrrsqqrrsqGGGFHFGGGGGHFGFGHFGHFGHGHGHGFFFHFGHFHGHGGGFGGGGFGFGIGGFGHFHFHHFGFHFFGHFIGEGHGFHGFHGHGFGGHGGHFGGGFGGGFGHHGEGGHEHGGGFGIGGGFHFHFGGGGGHFFHGFHGr+rqrsrrspsrrrrsqsrrrrqssqsrrrsrqrrrsqqsqsrqsrqrrrsrqrsspsrGGHFGFHGHFHFFHFHGEHHGFGFHGHGGGEGGFGHFGHFGHFHFHGGGFHGFGHGHFFGHGHGGFHFHFHGGGFGFGGGIGFHGFGHGGGGGHEGGHGGGHFHFIEHGFFHHGFFGFHGEGHFGGGGFGHGFGFGHqrrrssrqqssrrqqsqrsqqsrtqrqsrrsrrqrrrrtqrsqtqrsrqqrrqsqssrqHFHGGGFHFGHGGFGGGHGGGHGGFGGGGHGHGFHFGGGFHFHGHHFGGFGGGGGHGFGGHFHGFGHGGHHFHGFIEHGGGGFGGGFHHGGGGFGHFHGGEGHGGFHFGHGGFIFHGGFHGGGFHFGFHEIGFGGGHrrqtrqsqsrqrrsqsqrrrrqsrrsrspsqrsqrrsrqqrsrrqssqqsrrrqrrsqrHFFGHGFGGHFHGGFGHEHFHGHFGGHGGGGsHHFHFGGHFHEGHFGHFHFFHHEGHHEHGFHFGGHFHGFHFGHFHGGGFHFFHHGFGFHFGHGGGGFHGFGGHFGHHGGEIFHGFGFHGGFGHFHFHGGFGGGGFsrsqsqrqsrrsrrsrrqrsqsqsqrtrqrrrrqsqrsqsqrrqsrrsrqrsqrrsrrIGFGFHGGGGHGFGFIGGGFGHFHHGHGFGHrqrHGEGHGFHFHFGGHFFGGHGGFFIEHGFGGHFHGFGIGGFIFGFHGGHFFGGGGGGHGGFGGGHGHFHEHGGGFHFHFHGGHHFGGGFGHGFGHFGFHFHGGGFGqsrqrsprssqrrsrrrrqrqsqrsqsrqsrrrsrrqqtqsqrsrqtpsrqrsqrssFHHFGGGGGGHGFGGGFGGHFGHGGHGFGGsrqrHGFFHGGGHFFGHFIFFHHGFGFHGFHFGFHFGGHEIEGHGGGHGFGGHGGFIFGGFHGHFHEHFHFIGGGGHFGGGIEHGGFHGFIEGHGFHHGGGFHGFGHHrqsrsrsqrsrqsrrqsptprsrqqtpsrqrrrqsprtrqqrrtrrrqrssrrqrsHFGHGFGFHGGFGHFHGHFHEGGHGGFGFHqqrssFHGHGEHGFHGFHGGGGFGHFGIFGGGFHHGFFGGIEIEHHFGGFHFGHGHEHFGIFGGGGGHGGHGFHGGFGGHEGHFHFHHFGHFHGFGIEGFGGHFIGGGrrrpssrsqsqsrsqrrqtpsrrqrsqqrssrqsrqsrqrrsrrqsqsrsqrrrFHGGFHFGGGGGGHFHFGGGGFGHFHHEHGrrtpssqHFHGGGGGGHFHFGGHFGGGFHGGFGHFGFHHFHGFHGHGFHGGFFGGIFHFHFGGGFIGGFGIGFHFFGGHFHFGGFHGFHFGHFGGHGGGHFGGFGGHFGsqrsqsrpsrrsqsqqsqsqtrqsrqsqsptqrsrrsqrspsrqrqrrsrqrsrFGHFGHFHFGGGFHFGGIGGEGHFIFHGFGqrrqssrpFHFIGEHGGGHGHEHFHFGHFHFGGGGFHGGGHGGGFGGGFHFGFHFHGGFGGGGHFFHGFHHFFHFGIFGIEGGGGGHGFHEGIGFHFGFIFGGGGGGHEqrrrrqrsqssqtrrrrrsprsqrrsrsrqrrrrrrssqsqsqrsrqsrsrqsHFGGGHGHFGHFHFIGFHGHGFHGEHFFGqsrqsqssqGHFFIEIFGGGFIFHFFHEHGGGGHFHFGHFGGHGHFFHGHEHFIGFFHFGGGGFGHGFHFGGHFGGHFHFHGFFIGFHFHGGGGGGGHGGHFGFHFHFsprsrrqrsqsqqsrrsrqsqsrqqsrrrqrsqtqsrptrqrrrrqtpsrrHFGHFHFHGEGIFGGHGFHFGFGGFHGFGrrrqrrsptqqHFFGIFGFIFHFGHGFHGHFHGFGFHFHHFGFGIEHFHGFHGGEHHGGGEHFHGGFHGHGFGFHFGHFGHGGGFGFGHEHFHGFGGFGGHHGFFIEGrrrsrrqqsrqrrrrrqsrrsspsrqsrrqqrtrqqtprrtrrrqsqrrrGIFFGFHFGGHGFGHFFIGFHFHFHHGFsqsrqrsqrrsrGGGIEIGFGHGFGGGGFHGGFHEHFHGGFHFFGHGFGHGGHFGGFHGFGGHGFGGIFFHHFGGGGGFHGGGFFHGGFHGGGFGGFIGGGGGGrrrqqsrrsqssqsqrsrrrrqsrrprtqrsqssrqsrrrsrqsqrsqsGHGFGFHGFHGGFGHFIFIGFGGFGGGrqsrqsqsrrsqrFGGHGGGFHFHFGGHGFGGGGGGGHGFFHGFGGGGGHGGEIGFFHGGFGHGGHGFHGFHGrtrrrrrrqtqrsrqrsrspssqrrrsqrsrrqtpsqrspsqrrrsrFHFFHFGGHGGGGFGGGFIFFGHEHGFsrrqtqqsrrrrqrrGHGHFHGEGGGHFHGEGHGGHFIEGHEIFGHFGFHGGFHGGGFFIGFFHFHEIFHFrrsrqsqrrrrqsqrsqrsqsrsprrsqrsrqsrrrrqrsqsprssFHGGHFGFHEHHFHHGEGGGGGFGGGFrsrrrrrrsqsqsqqrsFGHGHFGFHGGGGHGFFHFHGGGFHFGGHGHFFGGGIFIEGGGFIEGHFGrsqsqrsrspsqsqrrrsrrrqsrqrsrrqrsrqsrrrrqsrrqsGGFIGGGGGFHEGGGFHFHGFHGFGHrsqqsqrsrqtrqqsqrrHFGHEHGFGHGHFHGHFGHFFHFHFHEIFGGGGFHGGFFGGHGFGGGHsrrrrsrqrrsqrrsrsqrrrrtqrqqrrsrqrrqtpsqrssFHFGGGGGHHFHGFHFFGHFIEHGGFsspssqrqrsqsqrssrrqrGFHFGGHEHFGGGIEGGHGGGFGHFIEHGFHGGGFGHGGGFHGFGHFFrrsrptqsqrqsqrsrqrrsrprrsrspsrrqrsqsrrrrHFGGGFFIGEGGHFGHFHFGHFGHFrpsqrrqrrsrrrrrrqrssrFHGFGHFHGFHHGFGHFGHGFGGHGGGGFGGGGFGGGGGGGGHGFrqrrrrrsqsqsrqssqrrsrqtqrsqrspspsrrpsrGHFGGHGGHFHFIEGGGFIGGFGHGrsrsqrrsrrrpsrsqrsqrrrGGGGFGFHHGGFHGHEIGEIFHGFHFGHFGFGGGHFHGFHGGGFssqrrtrqqrtqsqrrrrrqsqtqrsqtqrsrqrtIFGHFFGIFGGFGHGHGFGGIGFGrtqsqrqsrqrqtqrrqqsqsqrqGFGGFHHFGIFHFHGEIFFGGGGGFFGGHFHGGGGFHFHFHFIGFsqrsqsrqtqrspsrrspssrrsrqsqrsqrrGGGGFGHGGGIEHGGFGGGGGGHGsrqrsqsrqrsrrqsrqtqrsqrtqGGGGHGFIGGGGEHFGHFGFGIGFHFGFGGHGGHFGGHFGrrsqrrsptrrrrrrqsrrrrqrrrrrrqFHFIGFIGGGGGHGGGGFGGHGrsqrrsqrsqrrsqsrrsqqsrrrqsGIFGGHGFIGEGHFHFGHFGGFHGFGGHFHFHFHFGHGFHqrqsrqrssrrqsrrrrpsrqrsqsqsFGHFHGGFIEGIGEHGGFGGGGsqrrsrqrsrqrrqrtqsqrrrqsqsqqHGGGGGGGGGFHFGHGFHHFHFGGHGFFGIFHGFHEIFHFHGrsqrrrrrrrsqsqsqrsrsqqrGFGGGFIGGGFHHFGGHEGHEqssrqrrqsrrsrrqtrqrrrsrqrsrqsrGFGGHFIFFGHGGHHGGFGHFHFHHGGHEHGGFGHGGGGGrrrsrqrqsrrqsqsqsrrGGFGHEGHEIGFIFGGHFHFHqrrrrqsqsprrsrrrrrrsprrssqrqrrsHGGGFGGGGHGFHFHGFHGFFHFGHFGGHFHGGHFHEGHFrsrrrqrqsrqrrqsGGGHHGGGGGGGGHFHGGFGrsrrrrrqsrqrqsprsqssqrsqrsqsqrsqrHGGHFFGIEGIFGGGFGGGHFGGGGHFGHEHHFGGGHGHHrspsrrsprrtGGGGGGGGHGFGGGHGHFGHrqtrqsprsqsrpsqsqsqqsqsrtrqqrtqspsGHFGHFFHGHFHGFHGFGHFFIEGGHFGHFHGFGGHFGHqrrrtqHEIFGGFGGGHGGHEHGGGqsrsqrrrqqtrqsrrqrtqsrqrsrpsqsqrsqrFHGGGGFFHGGEGGFGHFIGEHFHHGFGHFGGGFGGGHqrIGFGFGHFGHFGHGFHFGHssrqrqsqrsqsrsqrqssqrsqrsrqsptpsqrrsrGFHGGGGGEHGGHGFGHFIGFHGGFFGGHFHGGGFHFFGGFGFGIEHHEGGHFHFGHFHrsqsqrrrrrsqsrqrrtqsrpsrrrqrsqqssrpsrFHGHFGHFGGGHGFGGGHHFHFHGGFHFGHHGFIFFGHGHGGFIGGGGGFGHGFrsrqsrrqrsqsrprrsqrrsqrrsqrsqrrrrrqFGHGFGGHHFGFHFGHFGGFHEGIFGGFGGGGGGHGFFHGGGFGGFGGHGHFFIqsrqrrsqrsqrsrqsqsrrrrqrsspsqsrqqrIGHGGGGGGGFFGHGFHFGHGGGHFHGGHGEGHGFHFGGFHGFGFIGFGFGIGGrrqrrqsrrrsrqqtrprsrrsqrsrsrptrrrsEGHGGHFFHHGFHFFGHGFGGFHGGFHGHGGFIGGGGFFIGGFFIFGHFFIGsrqsrqrrqrrrrsrsrrsrrrqrsrrqsqtrrFHGGGFGHGGFHFHFHFGGHGGFHGFHGFGGGFHFHGFGGGGGGGHEIEGGssrrptrrqrrrsrrqrrrrrqsrrqqrrqtpGGGGGFGHFGGHFHFHFHFGGHGFHEHGGHFHFHGEFGGGGGFHFGHFHFGHsqqsqsqrsrqtqrrrsrqsrrqrrrqspsrqGGGHGGFHFGHGFHFGGGGHGFGGGGGHGFGHGGFGGGHEHGGGFGFIEHrqrqrrsqrspsrqrsrqssqsqrsqrqtqrHGFFGFIEHFHGGFGHFHHFGHGGFGHFHFGGIFHFGHFHGGHGEHGFrqsqrrqsrrqsqsqsqsqrrtqsqsqrrrqrIGGGHEHHGEHGGGFHGFHGFHGGFHEHGFGGGGGEGGFHFGGHFHGFprtprrtqrrsqsqsqtrrqsqsqsrqrsqrrFHGFHGGGGFGGGHFHFGGGHEHFGGHGFGHFFFGFGHGFGHFHFHFsqssrqqsqrsqqtrpsrrpsspsqtrrqrssGFHGGFGHFHFGGGHFHGGFGHGGFGGFHHFGGGHHGGGGHGGGFHqsrqsrqrrrrsrrpsrqrrrrqrrrrqtqqsrGHFGGGHGGFHEIFHGGGFHHGFHFHFGHFGHGHFGHE*9GTeprV8sT:qV:excellent-bifurcation-0.0.20071015/wavs/beam3.wav0000644000175000017500000007552610560177600020562 0ustar miriammiriamRIFFN{WAVEfmt DXdata*{. $?9D9& W)3  (C4 BB = i;o v# V ;  h f n &   _C*  = Rx"]qԮO"{c| I ."H Y ;G 1 * & >=7sA>  mee j T9S8 k hU U o"kJ ]uRZ+3 =EKi ۦ ѯ; aƒ7Y7ʭSv(62*8%1",(>D&*T!\ *z*}c'd1|)I=ѤFEϝ&^FI"^JFsߺ@rD_3F* L&ROf@y5s#ǺێCjP@@ 4& ' ,*m Bt RE 0 9 F |cS< S k{qe *~%,'kLӾm/]L)$i T| AR jc"Ebdkq8 _  $ l U t z]= ` }:E8 C 9K r - +%G [" &## p r&|+)F7 8;c2]jv0]n6iہ֢wսtL a^>8WIz& B M8# 7 ^ MW s_!\se?eck NH͸Ă74W^\vօ5w.  S >k k?+5i,Q"KJ/=ȼت}!{q:E +3$ ' $a# =" "K r XL_ C1#Mw R V  )."x/HrwP+%ģ-$áͧ*#ڹa !#1U\< t u F v +$3vF4t82 V  f ca 8x =W I(?}MJ %@o0-FVC@gSHυp  p4%aP׭ ފ52A>Uo  MqRlc w +@ )A'ݙ}l!)`%H Zc-%k`mN0#${̥?|pdޙכ* ~WީN bR 7"ƵUF܀˸ JKTE8w)@'"^n0 !%s/ V t ;:8j=(I' u@ < &$p ym(B l 1 (n/#܎f<@}9(& 7k#u{  (t V ^:[ )  \b  =  >  s  H $% X %  [uem~6 $Yx (ri]iF$1(y!:5^4KTOI a3[1ߜ o %$ k B+ ?z !\ YL%( ۀ" 9t)A~Al)T9޶ڣ$ ] #< "c5 ۫g*Pڋ  U[z^جѲѲK:{6)I5nn$"1զMID IM J @ ;  )u & JCnۼWj6 ?"ۡB9 >S 6-\=H3P1% ':e6OX=zB5'; {D LD|Y R Wk E Xsl k= # "0_ i &"N O F / "t&j i Cg% I Qk  yF 88?OR1nKK)*k^$1_XQ?NRg^NLw *EjT )Ԁٵ[_ 7y?g YR7P<%mj+-13&p %*:- ,* !TU+g}v/-^ /ѯ$Bq~ \ "hHqJ.&v& :umܩ N S 5=2m U '  Y ] dKzp D sTo c g%8U,,*'f_!4$O ~Q" 1jp +"I DF < 4 Z   h  ^ S + )+y Rsd@0Eu_ H  t d 5 Nu T c `  7 f , v}v n iH"aQlV0-CWJj`l& 'Np%? "gKs v_b bI/4j# jLk#!!L4 Nl  =Z :!u#7V)V*ȶ]7~,¼iY+Bvhm&+?:Yc,;F/ OQr G0ݿ, 1Rvڦ r=kMu o > ;`^ji71X 6#y g i/Do,4&kK-f%)p jp!j$G, "|"D$ S-)-5 1! HBt><= %@ !dݘ .  ]  z ql1 j a  O AY  7 = ! n">% c Z  Jc> o  [  "b o y GJY   Lx T QPk 7{afY1 o"a C0,o'Efjbƅ0̔M/ќPӿX )x7-i\r(){ =P 5$#| v b4."|@-)j#[}0:ͣU> εf~ U>s_ ? |a ] T GF*.(1O/ :Ѥ.s1P f?\hL0&&@2soWr!Z/? VBv : i |p 5 F _r^  ;b i#bq9$ߺ&! p  G + ) L O 0 t " .  l w q S XG  R B k o hz   U {m $ L ' 3 f u ,X dGB h4rH `o?s6%!MuPO\(F.\aսdQ*|(x ]V9B ^Es*@!3E F[o _#$R UA~ݜ8#s,֩p a Ԫ "+&2tV i1rU  h zQ- q / > s>6C4kߋ"<} h u[1 # QM 5v  %Ci W"&] ,5 wviRh,qrN{Mh  6'v!JJNa  4N>. > b %   S ] 3 ! - a X A > M o z ` ^ y o g o | n ;   I  s    Z G  T & u    9 $w 9 3  I 1@l U   N z A ٍ/ cs1A; (< &84P o#0/P 4JK zl \ V bjE# ` ?*iNl3f!q'?!!0(*}o SՕ AF"wlDu2` MSjev  _ ' -*m~ giy*Ki_hآzA-#RӮʽfx_E#=Ǵ1K P5 Z>G MWB e I F -D` fP:  :  Q) a 0)w*8`P +f$= < g%klt W  = o _ S 0     & 5 9 /    + 3 &    2 J M 2  % ? G 3      - ? < %  # 0 : @ 8  7 S R =  E g ^ A   E [ d @  vk~ vW .1 8i&c$v_=3alx Xr : 1 Z3 i ;  3 % /  2 q% 2[ t4ON ?f}h@.^'X /@ !e0I0GK[jv) 3N _  eA/p x=   O,F(h^F$rۙ7?e%h ܷ@H {sH . n- %qy M  TVi +  T6Q   v eg f  9S >l GL ]$=%GR d;* z5Q98 E ] R # C # | m {  ( p |   t   | o    j [ y  /  g 5 ? }  ; . ;  7 S T G n߄< Cc"g!&`#<]e ~|Z ^ OE ZE M9S   @ AH s= 0 i_3 $ Ӽٓ%"r9?܌syu܌&n)m 2,Ҟ{X Ul~ <HK o  _  " #! & Zevd) ta3ݡzњB T-!ͩ!8%s'ǣڷ|5L N l iT (: M?dY    g B$$b&OU0}uc F 58  e ; `   ? V    L t Q 8 5 I o { j S C I a r q o u ~ j G &  = l l C . / F j g = !  1 \ d +  = t _   4 k     IU y _#$#& B .s Z  DPM z  >  /  Z O  # <e  lBF - f)Q T/ۿH(L#T cC76]J;}N !^&6 ~ ~; P ")6 , c ӤmJ mlp h}  =9f9c  A,w 9!t SG;#m)"u B| 8L.) ) !>:S{&L.]&Y,Vw*dL^ltiNxN   $ G E qRJ( *|O ( I  :  % | C ) k k r $ c 6 1  Z ! B 0 G f k  W j  ~ ` Z v 4 o `  t V  X L  y X (  R|? `;E }-&}"(( D%ANB! zG e l L V J # Y w( ! MJB[ P+7 ")L!ހզ M,ؗ0)axWF5<~uoks[0%=av SD'B E.l+0'!uA-G'~^S5\Fa{+-ߐׅx lY IwoTe"l)egg_'"(T%V~O= aQX"N%Csxآ_ b{!`(<pd  G.0 |r IW R 06 H , g1pQ y  6P? U = U < G w ^ h V 4 B   J h m k  g S k A ,  , s ' U < '  a  _ X  2 @ ( w z +    + N +.Bf{";& .?O | 5 Ka h J @q o Q. }s ^1^!$M}1*JXe5NV8\h "V-4]eyPR" $ { xTo.  u  : D V]0 ")Pq?ΚKۊП&ANDЄCП R%MwV dQ ) OO r92 m wo]1F'`')$  I3 Fn e.ȼ:nN9P" S!$(4"s`;toFm+J} [Q"  lb/ ! s j ^H   S  A{l    1  1 t ] M p v J   i 8 6 H j  )   r , b H d 9 LM!4 87MH7y+ (//  iV Uw b by,e_  XA{exMaGV |KXy Z D F<96  8+WKS~z[+i!&, wb g ]y@0efg9-"4dT _ECus` b[ k +9Y Uz / I/ :cMC /c "e."Kf s4MjVzE[4T~ JhCIYw >  q+ hQu xX. ^ o) 8 w > G I  1 H S  ^ S r$ #  " P K S ; ]   O E - L + @ ; l # S <u4 I 9 ' % HA _ 8 Ds'xJ62r.y #&gG0NE"%H6P(Q1/) Ri )   Q b  + %V 'f   BP _ + .^  IDs:mL<' ^#%0 X7F\U dd  Hu 98OcZsT>9!f7r3y$@Z -s XF Y Yv?Q U , nJO ; y S+*,uh })R:ZaW2\xQ _a d H%M; Ka m b K Y l n Un x ^  T; ' ! 8 ! t YtCu   ^  b $  -? " k+^  " _7` #.kޛx' h CL+  B ];HXXN Cܜ  ; C g6 _ 4 gM$w P o iC> ; o.  u S+pEWGa 3ڇo 6Rۑ3K"*&`ϡLN T}#!|a=y}a- -Iw٬ض* 605Clڟq4|shlKRfP/I  <n  (  wq} ; _ G%i Y H wHiR N ,Ndq"|/f(!~k9.  sVD R o x r >( p! ( zE;5 ! 7 t I7 F (FnH M $2;o; f !q ) M Od }R Ft# a kL_ N)ߺ(`4 'mZ-F g hMmC G    7 W ?Y E d"24cJz =ެBXdp;8۴(ߜQDc0HG= c"4 Р܎~ # Jޝծلk ^ײں81}; E3Q B('Y_/1c [ /2  dQ 4\ )N:ZO (6-{7V t\m QDCfb(fk< 8tS #vS  TbU \2 9fC / 9 y M gD M X 7 b I Q R p \)h p S 7,e @ :  ]   j)>a f \sof N 7 c [yl $jP M݇43Vw Zlz$`z m^H J ~Fc+ Bz{ y_4c I&$\ :Xnl$gT m  pZp/ G ),bk%SJ"%;1v$Aq\etu* `&}\5rEc' d; 9 U{U(3=;xdjFsP.Po(pxlSdO:wfJ>u \p $  pmZ:<_lq5gqaVf }:Mn޿jBiR%?E;V4#?Z"\'9bv._q9(YvaSO4vP G A D' 7R 3, @ +. I w dq >[   h %9 L a A v b`?( T* <~~ j JH cS+)c}vf iBRY-h9J5O} Z P[/2n'  M >  w v Z Nvl Wwy l_ I d $8Z;4@"$#aZr%DCs"i/_2J{68Fpud!`?A6pbAuS"jX 4Eݠ83.i2q 8CqgdI '? E( 9e1 T< +|{ /@A aD &JYF9=;=BE/`0 W^ދ>bGڶީlb;{~'iR>Idlf?=[PpegU0tk H r), ' %u F 9 8 &^. U  CnL.# ; Vzl8ctgt}u|eDo($o/4 FvI mK/dWVBo4g XG%e`uTxO%JZ  & 3S h  I="^ /T<LI}'y|B 1jWr ( u\ ' f:0%R b \2_pUA X V,7*kD:AxPwZ9Kp>SVpy|.='k!kl ]. Ibc6;;^  {r*U FRiC NP]l L :8-B , YBYKi  mkHgBBuX _l2ceA~ 0KEJht FqL kz u;H" L Y J08][  w_3}W]Vs_yv+Bxy?w*Bu-~C Le,L u J/v'boT $nt.D,$WWzY&8 &JXd^0M;}`9^Gs[/E 8,Ef(  G.O+5kyi b`0^& " c E^ L@rSr'A9L;'TywqApb|ZOX@  C Yh ' R\ HC  )F ~ a ^ci~N)W F  Q+KP \t $HaCN<]b9(h94qQBP@(S997} w &%wU} f I  t% l `I}hS0#&1gGvnHt[kX}!#w"|U%=9te3L!WuSZTcTPr4Ic!ck61  gr}x=|WkaKgg<|al VSzP#-Utw% N.z/<$. | i8~$v > )(|   g1T./ (m'4YE3~`B](-kP qy]q 'F%xqhifW1;Gn\]>p/{LHypH~ S#GI &F[jFs7@+a}NNR3I} "e ZG/p33Zd}@ <\  YU `uUGM"bv  !|M(!r&x2VlzoBk~Qz(R6ffg()qb#i(  A0 Gx.  1 x h-'O8d l\nr;MfbaunKW- 5: E_%OA8E .  j9,s8qL^.[mJv -;CP/u!hz%Cfz-DyOe1-dck(Y-6~/)1r{^$Lic B?Z*'C:5P)-owZl:90bn8N dE\| Z:O|@<G$mu /2^G7 EF0Yv\n-pF!)y {XlIGKa ,}<"`Y) N(4z3E= ']6V noibv|l\S8H?B-#5hib nx0*977i]&A_Y' .Kfvyt[=$.Kfx|eD/_]]&D#)pS+4i]ek/q{B GJ8,L a_v GD%.v5 q^!0@S=t)K1"GZi"h,Z0mjwq `6k[aUR!.pP,HP{ S:}X2xe@!8\K2D/+lBr7DVj#& '; gW WF!~I,]jX `;m !8dctP8Y3$P\?4 m,'78$=271m^MaSQS r6{3kuc-"%-UO=ML7.O-:Vo?B C FA2I >5~ p+E15TC4h|LxuK~ |`E!=;R+f"z LTn1. = ~wp8hT EUD(3U  3 ZpF?+/ a68&$D7.G{oW"P\JB=/:"A9"9V-RpBtF/J3)V0E4 j6~YDuh   xd" ) fj=?4ZM(EGE:e(Ex-:la o6uaDrTceqYYpc7 UbE;|&_x,*n(u{8hX<xB7b~]" /3C4s(Gv..x9|O ,*]U8l[[(X^]yn41D3Yb`X1 "3Oexy`M6w"FY]|ll$'j.Q m{KglEu\IE\{ -'^ > Zq q ^ r* ]rv(> m&U;Q 0\eh9IRXckYaj-53Tc @ 4 CX!'5yX:t]ki 6jA )etu* Mx!3{&otgH0p0`%t]1WwBwtIR+dRv(`\MKOI:S_@J>0H6U7+E& % *\' 18{S@@lq[2H7oxKk6 9pix-L;F2X07G=c g%\@jf"EMKRn0 @\Wn? r-%,hpy5] \7S.pRh q_<7J^tHwwMCQ4rpZ j (V)A Sb|Gp2knQ8y`(UJts&8 <{YK :*S[Qms9 KJ n+q}/g HRZ_Wd<DKb[o  PX,k$p%G3$yGWUd0LT B8U@#J]]vBAybNo] zV24CaZS/03*!D C~1Q;N]KaD noibBsXb4 m `41Q |'OH%2A{M1QTNU^RZ?{iKw&2SEL!'B|      %.2I?>c8Z*<"ztw d+ny7A!c5>:2 <ut4=ytJxKSGoWmnq,]t53!y@g)7^ < 3)N6gpf; @cl7&dyc7e(\C/kWS">)>o|s?m"LW?WYiv>z3j*_l]D&w^$/} X?hA+ZopsqBt%.VYo]hMQH>b dkxs;]$: g*JD+H~wgCK3G15M0->Zl_cu`IEQja)(q CVI.tsH!5kIYlSLW^N`a~|vrqoqqw|xslhefiow~}skc_\`bigTU7=l IWRB/6L 11\S`Lse 4 fg,RYSiv5qE<6/z^8E"{i*Jb3#7 v}"^g+x+_LZpM9 8oEd_1--Z~POG1nArAPOrAy:TR2!}U#)!oLP]E;=UN^RBY`?)(>SFWZf*6dsHYX]FEZ^q3E6k+ VY 5Y          (,)(276)I~D :m t M&@]$Qo*q8?\~`90N(uTR: =<[X%=!?X %|f;u?#sT"4`X"R0)Fve hGN l> Xv~%C~g9D)WXTz6n9){"Z-~V& kG:rHnX Zl]{@U<@:zuexcellent-bifurcation-0.0.20071015/wavs/blast2.wav0000644000175000017500000005530407735470332020762 0ustar miriammiriamRIFFZWAVEfmt DDdataZ}|||{{{zzyyxa`_^]\[ZYXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^_______________________________________________________________________________________________________________________________________________________________________________________________________________````````````````````````````````````````````````````````````````````````````````````aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffgggggggggggggggggggggggggggggggggggggggggggggggggggghhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooppppppppppppppppppppppppppppppppppppppppppppppppppppqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpppqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpooonoooqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqponnmmmmnnppqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqponnmmnnnpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpppooppqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssrqpoonmmmmmmmnopqrsssssssssssssssssssssrqpoonnooopqrsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssqqqpoonmmlkkklmmnoqssssssssssssssssssssssssssssssssssstttttuuuuuuuuuuuuuuuuuuuuuuutsrqpponnmmmmnnooprsuuuuuuuuuuuuuuuuuuuuuuuuuuuuuutssrrqqqppppopppqqrstuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuttsrqqpoonnmmllmnnopqrsuuuuuuuuuuuuuuuuuuuuuuuuuuuuutssrrqppoonnnmmmmmmnooprrtuuuuuuuuuuuuuuuuuuuuuuuuuuuuutssrrqpppoonnnnmmmmmnnopqrsuuvvvvvvvvvvvvvvvvvvvvvvvvvvutssrqqppooonnnnmmlllmnnooqrstvvvvvvvvvvvvvvwwwwwwwwwwvuttsrqqqpoonnnnmmllllmnnnoqqstvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvvvuuuvvvvwwwwwwwwwwwwwwwwwwwwwwwwwvvuttsrrrqqpooooooonnnnnmmmmlmmnnooqrstuvwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxwvuutsssrqqppppppoooooooooooooppppppppppqqsstuvwxxxxxxxxxxxxxxxxxxxxxxxxxyyyyywwvvuusssrrqqqqpppoooooooooopppoooooooopppqqrstuvwxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxwwvvuuttttsrrrrrrrqqqqqqqqqqqrrrrrrqqqqqqrrrrttuuvwwxyyyyyyyyyyyyyyyyyyyyyyyyyyxxwwwvvuuuttttttssssrssssssssssssssrrrrrrqrrrssttuvvwwxyyyyyyyyyyyyyyyyzzzzzzzzzyyxwwwvvvuuuuttttsssssssssssssssssssssssssrrrsssstuuvwwxyzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyxwwwvvuuutttttsssttttuuuuvvvvvwwwwwwwwwvvvvvvwwwwxyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyxxxwwwvvvuuuuuttttttttttttttttuuuuuuuuuuuuuuuuuuuuvvvvwwxxyyz{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzyxxxwwvvuuuuuuuuuuvvwwxxyz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzyyxxwwwvvvuuuuuuuuuuuuuvvwwxxyyzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzyyxxwwwwwwwwwwxxyyyzz{{{{{{{{{||||||||||||||||{{{{zzzzzzz{{{{{|||||||||||||||||||||||||||||||||||||||||||||||||||||{{zzyxxxwwwwwwwwwxxxyyz{{|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||}}}}}}}}}}}|{{zzyyyxxwwwvvvvvwwwwxxyyyz{{|}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|||||||||||}}}}}}}}}}}}}}}}}}}}}}||{{zzzyyyyyyyyyyyzzzz{{||}}}}}}}}}}}}}}}}}}}}}}}}}}}||||||}}}}}}}}}}}}}}}}}}}}}}}}}}|||{{zzzzyyyxxxxxxxxyyyzzz{{|||}}}}}}}}}}}}}}}}}}}}}}}}|||||||{{{{{zzzzzzzz{{{|||||}}}}}}}}}}}}}}}}}}}}|||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}||||}}}}}}}}}}}}}}}}}}~~~~~~~~~}}}}|||||{{{{{zzzzz{{{{{||||}}}~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}|||||||||||||||}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}|||||{{||||||}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}||||||||||||||}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}|||||||||||||}}}}}~~~~~~~~~~~~~~~}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~excellent-bifurcation-0.0.20071015/wavs/shot.wav0000644000175000017500000002217610555515732020547 0ustar miriammiriamRIFFv$WAVEfmt DXdataR$Jkb_$>%PvA $Tds m..$)8.I3A8=@BDV]>_`aUbmbb4aEXC@XURMiIxD+?93=-& JBAʗĺ;"wCa0R nlZDϨ(ī+ʁӈܓQ EDN_V+^elSsyAKzP'UHY\_IcHa^|[WgSN0I[C=V6=/' 1;2)IGDZU6Ƽp`ݢퟐOڇӍ9%ԜXU_ڙ;f@;HPW - 4:@F%LQ}UgY\_acdjeied]QL:G{A^;4_W]PH@8g0(9j}"]k@Yoɛ#%ɛnR:i%gSqn̆Ե'Zq 2$+1W8o>+DIoNRVZ]&`:bVR;NXIDc>Y82W+h$=Bo󷯰ܢ_,Wܺ ¬*/COԛڜeeץ>_UpҀiR͡c 1$,*4;CIJIQX^djg@EJO6SV+Z\Z_?abcddcbHaf_]GZ WgSZOJF@h;5x_YuRKDc=6.'SFmu!ř\\ߞFAm.±|͊` 1t(C "u(.{4:f?gDIdMZQTXZO]J_`abbb3b+a_][XUlRNpJEqkf`ZTfNGG P?$om-߀wӳ&GHŸ?!0>RI ʤ;Vؼ߯{M $|"(`.3+90nrXw|{JRUX[]^``aaha`_[^\h~zkvqAmEh c]WRKEl?8f2+%V tX𿩹ʧ3֜Ғ5܉΅ ݶG&ӧY14Y\Yic"bH[N TY^chr?CuyN}QjOKGokfb]WnRLGBAH3 fjnrJJMPS[VXZ\]#__```v`9R|)yur?n'je[a\WRM_HBk=72X,& - \BƶHɰ%Μ?+m(y磆f[Wk@vӘ:3w  a$)G.277;.?B{FuxO~RTWYZ\J]/^^6_[~OLI}FCQ?r;f703.I*%  e3.(O#p #o,OڼO)(#4)ǡJ >cQo΂^#J,EմF# Y1%U*o/|4w9a6LQzUY]aeXi@'DNG@JMOQT VWGYZ[~\]]]]X]2SPNK)I/F C?>hd`\XT\PKrGB->o94/*CzȾf?5O͍v(8#άCʦ~ow7.ZUQJ 7ƿÐ);Ѵ= ʾk$ܡg1x-~16:?iCGKPTW[Q_b6fqilzoDrtWwy{}tVUT}b{Dyvtq/oLlDifbW51".[*|&"vV  7.!q q:}e\rۚ;лP ݿ>/䲼îEޤfL 0eHMn} q@* ,@g] RI#'Gr ^$"%p),Z0369fBE=ILORVY\^aGdfHikmp rsumwxkz{|}~~}TmSRPOoMKIGEsC%A>B<97D4o1.+(d%9"X n=R e &hc#R(  $RϓSeּ"<Q'n>+6^ !܂Ԇt}&ƑÕfȞ=ģ` ʫvc]iz>&ԂGޫT%C&),00r369<@CFIKNQCT0{35l8:=@?_AiC]E;GIJKLM7OPQRSTU`VWWWHXXXXX^XXW&{IFC@>;851.+(w%R"&j< ߗu\F6008Jb;fpwD".RBG挛iI?Ko]ܩnب8 8> #κQ/)FrʯLѱ"֜%۷Qb!iF0t]F' } AbC1FH1KMP[RT0335D7J9A;#=>@vBDE0GHJMKLMNOvw\xyyDzz+{~{{{| ||{{b{{zzyxxUwrvutksErqolnmkjhhf eBcra_]531i/=-+(x&$$!^Bq@=o;8L631m.+)l&# !T*rN:ݐDզ vah*ѹ9̰vryנW (ӸY17aA)Qqafyυl҆G̭e \B49HlԸ{߼Sҿ_ŸO ףo`^crѸ7vVƮ j7ңׅuib[TF3"%')J,.1[357;:{< .!F#[%a'`)Z+H-*/124W6 89J;<[>?=efg8iqjklmnopqir.sst!uu(vvvIwwwwxxxwwwyw1wvvvvutatssCrrqpKJIHGtFCE DBnA@>:a_8^\[lYW VLTRPNM"K9ICGMELCHA;,h 8 d$k,g%g*~JֿԗvT:$ 6RyڧXӥVλ*˝ȩ8՟{,䛩vN1!*BhЏhō/#A孒J¬N=Pk7˶к 5g7ÎT¦8<Ǭ[󯘱:괞VݢqD}mdZTPNLOOVY`djnx{wo`S? * V't1 !#:%&{(*+/-./013|VW4YZ[]O^_`abcdfDEFG~HHI JJvKLLLMMXNN>OOORPPPQ:Q_QzQQQQ~QfQHQ!QPPoPPOhOONNoomnm(mzlkk(  !7Nmʑ˸JІòK6@jBů%Ȝˎ Ή ѓԠ)׵EeވHu?s =i,Ru!#$ &'2)*<,-=/0723!568s9B!`"#%^&'(<*z+,-".Q/{02345789:;<==>?@rA?B CCvD"EEfFFGHH!IIJwJJ;KKK*LlLLjk:kYkykkkkkkk|k]k@kkjj{j;jiKQKJJ-JIIIHQHG?GFFrDB(BtA?@D?>?> >5=O -m :b--z.//00 112x22W33.V bN%b Bn'C\p t ^ J -  Q!B7~78766N655L54424i)L^jnj],+H+*,*))w('I'&&|%$@$$%a%%%u%%'%$#0$"!.! +#tiaT I D FJWl,SX0j\QPYf ܞ2\ْ1umy,͘VΕ[ ѸӇ\.ҿқ|`H2 %:Ok:bӍӽ!YԐDӆ Tқ2҃%y(Ԁ8֖Xڻ ܇W-ޜu[B,|}|{} !)+-0 - . %~fO4[0c ,I^`X?[  [ ? v  3 _  7 W p######## $$$'$+%,&0'0',''(#)))))))))))h(N'1'%$"""a"9""!!!Y * T  l 3 q0bDcz-8AA>:-|%pbSE6-}%upp y(3Jc=i%\\#r;d2rGxS1 rX<"}sg_WMJBC<><>BEKQW`js2Ia}(Ff;`(T}.YEv9m6j8m ?rFvI~LIy?n + Z  7 g  8 \ D g 4Qo5Nj~&4JWgszocTH8, wngb[PMLPVR]hwwu \U[rX:!eKei>)veVG9,,:M`t(5>MWbp|# '/,(~hNG-rV9$excellent-bifurcation-0.0.20071015/wavs/fire2.wav0000644000175000017500000002175410554674234020604 0ustar miriammiriamRIFF#WAVEfmt DXdata#  7j:1u9 /\?4x"S  2J;,:A& \v6| q(!$')+U-f./D/E/+//...?.-,+/*(&$! ^5J36; # f[]|MH=ϠԷ؎|#}8ӯ{$LN:<֨T m#XsH־;`'_¸W`xPnKM T G )$U(*- .B/0Z3628m997C520-,*)'$ w o e WN,\&I=2 28 uh^ ;!.""w$%o'''&%}%e%%%%M&''f'%#T!&. U@Uf fFl"ڰZtC11!8.Ͽ;',UV6j8߾,bqaΛ͋͐ˁəƙahbq$վt[`qlƦv͍̅̾ϬI6Լշ"iyK! {zM0<lX' [  6 6sd A8 e "$"$ $ %&'(''~'{'&R$ 6Z+;uX O D_?D}z{7ة]"U͘Sl{WHyqĖ^ÑĨąXĮ7›OďŁk5]`ʦPˣuxג;O%<) d cٙ Α̘hOMMĘ:+ Ⱦɇʊ̍αϩЩRҸu4/;5<ܜݢf S]w{yp {  .^ c  , m9 P 3 yR+hn^{FUV]!{ sQ 5}wc W `. !"#%'(t)*,-G*H%"#|" [4"zk ; + QFCM4 J޸!n֮͢fNJ}!" ϾžaœWŹ 9vϙ+n34IVX{0+E {lAa gZ-P`Yh f~@OGOğ[Pl?-i˷JڹwTci5t6֯!r }S<$Xa ɅCϢ׆Cv{ޮ}KwE1m`E/Jg M]O #(R+O)$#%%3#!!! v>*!5""r###A#"! !8  ? C goQZZ  D% [V93`e  J 8m  K1!#)&(*+ ,,.H//01)10=0/.-,a,t,D,+,*(f&_%,$" ,Psg 5 QI AOofbJh2kd2HJfUT@rbٖ֠ =^`slr˂3v?ǗgۿRܺTF{Y VJ!׭8չAɇ)^ȴXF1Kf˼H2УK?Ңw ٯںۼ=|id߄ޟ]%@ߗޘީހ5+RcT+)*פcl%sމQe_:qrnlqܞosS;ڤێؖjU'>@fR WQR !՜Ʉъ֐ыow$Bg-SڬrvcE \"'Y Lax  K M  ? x q ! B@ܷVܴM\ {iEr0p  Q*> nboyR~r0? 9lsd['YV31l*TyZ/uQ[ '4l r}eۇ}-@LBwNsZM04daH99ܱlܼ e 4$ ;bET[yi{gmiQY@` *Eh3tz{j&NR xXFgH I +5*k>,"xMW.iw#  / 8:P 5 w ( < hbq;%/gl;nj !@ "T ]uY}#CWLx,a#]}wzghHVr,XH_0 ZhY#\Y<9F8iq'  k8lLXu:'| {cr"K7,qdAb. 7 [d7VN>=6c/gXJ i? ;:PJ=; N 5~[+PX)d=%M\CqiZ })Ww Y2'vMk^}xyleBUoWd)# NC )Y3$A  Hb?x,_ :% E)GzyjD~3VVHV(".|BxUiWl=  };Ujw| /  g g/F]4mIO73x%]= r[hv0rcmHdH\3SaB`Lg}@`#KD*mih9 G&=A0T1N@<W+)|~gezv8 >f_cbkNTO 4NjoUFQ !=i0>?K*<  S.6K nC7hI$0:?VDGJ9D#sTz?+:KYj( ! g CC;!'73uEa B hLkkv z1=5*.< "0b9]p&jwfjT"y:*:6weRcQ["Z_B[TZ(1eaTp7~ #oGo` : <wz g\c2@M. ^o 9k6(#> G u*iNm4S-k$Jx{Wwb$ p\}'23BA\1ih !R gzs3g ZS9_&uq  JdCN0FS>$I>93Krv(v /@VQ {MVy/8<j8m\6-^av :..j>(<,DE}!'3~YCQ8a0f!5S%$GI#EE;BNqwzV&, Vs)C:l1[ebaE]`p TR excellent-bifurcation-0.0.20071015/wavs/powerup.wav0000644000175000017500000006246610560206372021272 0ustar miriammiriamRIFF.eWAVEfmt DXdata e &0@Pez%=o<qc8u {|9zAlSZn;-[T)7L]g~ly; 1Hc|z`H.,?KV[`c90(  ymfejqlYI60(>LV ^3`GGW:^:WED[,w g<:dzk_(fߔߑzXC,u,Bj^M0w# 57 +5 3# N t\"cL, ipH*5GSZ!Cct2/W\y<" w_E* *F]wyhZQICDC )1=FR[fq}xw~qmhedcbdgg #/;HS_kzvr}haZn^X\h}eC#4Tt}l[QJz_?/5HqhK3qm5F\r5D2 4Cen2Fk,OeC.)FW a CLOIIS7l[N#YB0j jfn^>;e y!q*n-.n[J:$*2=F KQUUU30:zBuEuEwC|>6.%/=D?4# *FgqQ5'9FSX# .Pyb2 Aug< ?Xlzj\e}j;T{5'ld(BeuYF<0 ;bxE4ln@*Ol<@8'$HgkB -5|9ytbRB!60):FPW ]`bbbZ soov q*`=PM>_2k)t vfx{t^?/T].@lmUB2)(ya?)vp/4vhF[V]uyF 8uT&\~U4(Fqj?$NsvY@, ;8/#'<L^nx}i^RLGA>=wsojhiklotx~ /53+!  3|HiWVgIs;2*; )-%*- > Xw[2@ ewfXP@h r,UL1wTTn/>\|'I] hF/| k9UOE\:f Y.BlX5-Jcw";xU_nD- ',.d]ULA8.& "#&&'&%#T_jp~pnjbZND7+  EP_d^P: /Tyc<+;FQ1,85#4ds: F[*Be.>?. 0tj5*se8$Dc[Mo;{2L@C Ur}M'\W0E fD x$\=@Z#u{v u5 zph)]3V#:%8$; =GOZfp}+^Nt@};?zJj]Ys?& (Dx]asM<0$bRdg]H(;itA(T}nO7$ K:;IexK4rg,#X`< PZWG*0_yE#MubB%{NLRawfE"9ZyxgXMGB  -<wKiX[bQmEu<|71/-,`UN JI L QX`itRO;_1c._5TBCV,ld-KA4V!gv~]h|c8A`_J2y !p3aBWJvI+dR$fV FpwFa{+*dH;Vmk^xSSilfV>#5WzqO/0CS\fiSYbj~yqaPA. %).0/!"#"   ]OLKR]m}yfR=+ *8BK@}OtRsL};!;laF ".}6tUw~hF(Yl+TyF6_ZK&x*A]m!R5@E1P)RZdF5p$ppQ2:]}xplnt)IkfT{C:8;@IRw]lffnbr^00U_PjB/0?Upzrorvz%r6x1u"NM/SiRIMYh{>_&O92h^pY*+D]zsf+4,VylEgHq_@g/k*aExG L $ W '`/c7l<(r3DPTPRb<, t3]8q#_ =n Dy @xK  P  Q$V&['^fe%W:v;BA1C %TT#m 3a'ZB{D x  P KLQOD+a/rwRi1/20`pH6h-XJ B u  L {GzAtAt zuv].u>`7rM*U&YPNL}  F w  Bq <n6g3b j8v;n+Ta?W"1-9F^~ZQ,U/`J~E u  D r 8i0`)YOf*v Y_4xFX 6vFbDsBhL : k  > i,] P}GuEz a@v=Y*"VOqBy(V3[M| : f  /]!P{?k0=JAZU}C#?h1[1d N{!Lx 8f&TD q 6 a #N{?j.Xo6w8=lG/V"I-{jy1g\\DrE>dFoO} 8 c  , VAm*VA\m!By~Q|3(9:u\]3\"EjNy  , X Gn0[>h9MM2//uL{G%L{;_ ;jDn 1YD j & O w4\Dk)lxMLSC"fU{W@q=^%Mt'Pz 4 Z  Ai"Jr-TzJeJf\R M6pakk:x)H o0Pr Ks K r 1Vy6]8| S}W0bGlGTEJ:^i V'Jt@`A h  < a>dCfvy^U0_gyI{Bg9Xx 3X,Sy .Rw 0 S u ,Os'JjA bl/dFYH ;i.Gc/Li5U x  = ]{ )Hd0LVr YVPw] zY?w)Ge1E[t ) A \ t 4Lh #;K^K){4eLr<[y (@]w,E \ s   ,AUl 5IRwyc&Hp."# 4"L0n8AHTd y"2CRcu+?Qar  ! 4 E Ueu!2A4,72fi}n2_6 ,8/Y0})+/9IXn)6 A P ^ n }'3>K;GK F+ENTWbB3%40B3Y,s%%/;HUakqy &( 0 2 7 = @FHKPUW* Ru$E 6M\`^WRMJIILRX[^bd c b b b aa`__`_x/C[SadG&>|=GkjzdvofS<*     ~ytmjaWlcF?XM*)DP~RxI}8' yng]ULE ? 9 0 * !ynM5/;&1)5DPWVPH<+wm`VK@6+  { o _ U I :.!q |>ETY ^. qF"uS3gK, y [ > "  s S5jJD) p.tkS(}R+jK'kN/yY9  i H ( wU0 ~Q Z|-kWC) ]=!yU0 a>dAiF l G # n I #kG" FS/$zqtBsl[?eC' b8iA}[5wN(  s K " j ?[2BK-h#2(HZeuq`W3-|FwKpN'g;] 0  n F  X.nB%'?8?"i%iG}S0 Y(qFxN%b4vG V + d 5 qBPS2ySsfO~-J!_)j@d:|M\+_3k: tC  { I  P U# uT#[hU` U OgA`&p<a1h3l8 h 6  h 4 i 4d04-(4`CtI}HS,CPg6o8k7]* X # R  { Dt<CZZ6ASc/f+_'L{@o4\%N  y @  h . U}"'67!wZV8g#|d ?Wz4P k ( E  _ z4jig3"POeV] =_o-Mc }8Sj%>U n ' > T  i $ b+DL|5Is l9V gQw)PR r);Lfs, > R a  t ,Vf'Am(t{sCAcx =\ ~5r)MVbz-6D T b  p % { 0ZgFtDM=1dt3p1}.,3.13 3 4 1 1 cbgy'dA/hI6^2?}X ^iSdVVVPNHC A 9 7 / '-|:U_Ag@h?  e @ aI M;;r^ =s 9+`F fEh=_6V1vN$nC  b 7 } (YWV{4%q9xwuR} v.T*wD#a<} T)kBZ,pE  \ , ! h^unjr>lAh ufh  Gh#=Z'q;Md/vA  S " `T1+ o7S2w\vpu:zO^"j2wC S]&k2v=  J mZZpjk!f;jJxQW#_-i6v=FPXa'g,o4s8 z < ~ NXk 5V. Hb{D(@+K#\gm%l+j.m1o0q1p/q/ p . m wz~$gL0 P;r<7/.=P WVNDA:7w3p-i# c  v&Ht.#oe#J$DDE@u8n+h `U J<{1l#c T -$P|NTe^PHT'] ]Oz Eo Np"DU#[,],a0e4e4fO&Q9S.j7^>T %q6h9d1k4h4c/b*^'W!T~4IFuQ].w7j7_*_%Y LFx =m0d'XL| ?n?Bp@5A8DB-5ESYLs 4j*VDv6aO <j&TuH^ )dR_SW<":JPQ|>`Sz8dMy1aEs(W 8f;,p'7H<Ii+J<_Gu,U 9dDr$R}0[ 7d?lL"^+jG'4@=5\3m^;[1[(Uy!KtBj 8^auKg,S}?gMJ=CHe9U!Go 5[ Fn 2U~@e%Mr 1X<`eZU ?aw< ZRb \i8S<Z?eCj"Fj!Hi EiRww}{%yY3hske;L~3L{%No Gg;`2Ux&Ik?B ip$ oQ1;n!3gy 4Pv%Bh5Vy%Dg3Rt=]'GhkaO'W_*'jp#Ia,So9X{?^#Ac&Ce$Db! }iJ53_'_(y)]c%Xj 1Ho*Df>\}3Sp$Db[%,:aTAtG'5jn(Vi&<cx-Kk6Tr!<Yv$@[z,uFQ2Ai4Kn5Pp5Qm3Nl-Ie %A]w7PkMJnnE0}h D^v=Or,Eaz6Nk"<Wp '?Ys$@CE+g 01Ts}HMv'6Xh5Og,F]w !:Qi1Vtq \?_9}l'"LLpv'@Mhs 4DZk}#7F[k~B^?yqBBdk*6P[q 6DWhz&:H\k|%5DVfwa0Rz+.SOuq%4HRju +;J\lz(9GVgt *:IVht; E{#!#4.aB]~=:\Yyy5=QZox $2@L\ix (4A~.8?3K][p ,4IMfi)5DO]hw %3>MWbp|0%=;XWor)1AIYco| !,8CMZfp{ +5BJW_ktg2Tv 1.DIT`ix{$,8@LU^is|$-6>GQZaks|BX} 3A1PJ]_luz !/4?DOU`gnw &-5=C )&<4JGXYfiu{ #(17>DKRZ`eksz5 ,':6DEPVZcgqs~  #*.4:=CHORX\`gknuy}V#b.j?mQoeqwu|  %&+0379<ADGKNPUWY]bbgjlortwz}hs~  !!$%&)*--1035779;<<@>ACDDFGG  excellent-bifurcation-0.0.20071015/wavs/tap.wav0000644000175000017500000002062210557750324020350 0ustar miriammiriamRIFF!WAVEfmt DXdataf!ws&sJWTHHvog [k4 b)R*f%~SiƗ7U^~!ttq׉D Cڶ4<$HA3H($(`-/. +(()+--j.,#ӯմ GY5NlӞ5pMA`l~ss!mj`O3>-I G `:<`z,X4 !2(>DvFsECA@?~??@@@AACF4IKMNQN}MmL:H:-$ ~9!+y&/rsyN;J_S"DZ;[6s¬KpgvG>-R:d<4y793wGT 3=TD@DI. !-.=E 2j $  BUp yF:"H4e,$n!c\a6,3*(,)2*IHFI>Km Q(h;xO-HO.wA8#罍8@^0"[&O*\>' ssBsGR aiW{_ԆJޤ6ݡSbM 蠺JCմ&G+S4<-./ 3o/ 0#Gi|qˢ($ g Z 1g<2461)!L'&H$ %[Ӌ˖҆-āpCŮ6b'&,3.-X/,R*+g,e~t ?L>[ rѷuzR̨{>>Ty6h8<3KL+vÏɘ6h80`1i 13 >D-C4@c9 yF[B;6>7bǼ5O\_,2(&T"k}VՁܨw0"OW HN 3g@1m).$Ը}}^-%JM;f5%ҨѼ\4'yID3-x- w5y>T|t:˴ӤJƂ?2m4J7C#$%051-rȶN9٪֑ҝC7 w!#_#)w2y/)=,83CCh>01 iR{R:S9GɄҽ#׿ȲpGN ,*%RmQ$)*m($$"T+P ) "->`63)0Rpdf> ÍvƘR*/[S6)('%%&/ܘ˃׋w#'ڋ,32?`  O)ڵzv5-0| RYͨA-F:c( _%|m5XA9G6;(8^y׾~G  3+3,$vuCv z#aϔ1<[4*88n1':LǥGo{lxOٵݰEe h > , Zs "687.'m''s' '!M︰ťYODٜ- k-1i";  ."s_6  gʼn B#;;.z#3|`t?ћ/ֽ3 j&8;;:1Q&lWJש.e#GB,"&;rXםqQaG/,B^Myx &393'яU@Ia*##^euQSL^JF&ލ$Aa B<(I"C*(2(2*.U*# e|"-M31, !XXok IQ56~*˗fi/).n| 1/Y'@$Ry Q?/ <3% 3h,C׈8Ne.8G)<ͮRCMϠ_Y#.! <WQ5p=Iq;U g  _&` tLz)H2/,*ӄ5{{j*vj^j0Q2v&`عipk!{*4+" gjϏZoݢ3 "(s$S,Hj ; ;}MK,ؚ̱?m,gq |Hnجd9ڹE?S^ ; M$ N$"xw͡?s yYDE~0E;p4h"iK  &p3ʡ # :0s "'&#'WEkJh %jn+$9 7L#׸xYs7#֏-p $,6 +d !(+)6'pYrF$4V-%"n$9P!htE3`mzz{jS;81` b r` '30&u{ǟ$SrwP _.]*PϗaSX +/ 6' Rӟ8p Kl T %rА!## 5, l (]?J}> [ > dNA P7?yB)$!v \o-T 0(f{,0CR#-$Q $ %̶ЂImj & Wcf_:p< ~ y<O}R^{ۅ V$-j#T9  }Ye I" 4)?-e -(|MykUIV )!&kBaR&3nݠpmV[&7\&N؎^ qV^ (F X lv@6wpSLi}[  @ GSx EOB-(&mY"s[a_]y;6+!p !2!blQ`H[ g~PbH R4!:oZ26^)#" l/ /Ec v F :)nAnJth:R ,i gUH&I< /Oq2TvC}V[C P:$8I~ 3(;3`coC5md][R|PL2~ a%' Qeh\;9g   EKSF-J}j LO } \e] X 4 ; oh>xJ8  ! d,FJB/q  { # ccgt u [RDR_+Y*  +n s;,+sy p 6ED^N9?Ez/yPzo? d nkxD"I g?w 0 L  )Zg 's ? w { Q^yJ>-FP   / >|oSP|b+`* 3 aVb P `i BSP?`k ;  Nn. X'   Ym!Gh}I$[ J ( z xUo9- z ? 5 , I)V ^ $ ' " qmWQdi2zs :8 W| Q >d.U|f  M }_9X  $MhBHbz\^@VCPMR5xz?6z|X)k9MZ2mFL\KnHM()4 g'@;3'N2jH_ia0 dE W~Po.nz BW1e1&aD--^Q=[8N# /}kP k$W =ZO*e   i1 ~Hutlqrxf`$J Q?RhMk7gp*]4/..LN@69!BEE m*$ j/ 4{re^sGms@4H\[UWe|// ,;4+*,-% " ,,)"$%#    excellent-bifurcation-0.0.20071015/wavs/blop.wav0000644000175000017500000003027210560207236020513 0ustar miriammiriamRIFF0WAVEfmt DXdata0*=PbulU3 o4v\LHO\sDBt*tX'7MQ!OWVk>}0?`%lL~~AJSR`S(&i9?+5_^;Q0$.Sz/$0l[Q?1@*3:;:2+*1BWs7zwmY?A'X93F`kUOx:l6S /   0XSaoZ #FDy@ c _~@ ;1r0E^7f'eT_ T S ch 9'"! !!""###$$z%%w&&u''o((^txP>LC,zcp(sߋ߲߉!cfvkkgea`^\VUQMLGEC>873/*)%#~xu s p m g e`\XUPMI@=983/('" !!"" ## $$%%%~&&z''s((k֐bБ.L8ߏ*`4J6:4/-)& |yvrlid_\XQMJGB57/-'$     xtolea[UQLGC>83-( "!!""##$$ %%&&&y''t(%. 5ɶ ّ|.wU߰݋ߝz6 zxsnjb_[OMEB=71-&  }xslhc\WOJC ? : 3 . &! |vqid]WQJC?72 *!!#""##$$%% &&'''z(: LgZ[տfS/F߂0rEsWJRE?;4-' ytkg`YSLG940%  |skg ` X R I B=6-&! yphbXMH?: 2!!+""$##$$%% &&'''w( ¾6p@LԬE/ݛ`XGhQ$* }rok_YRLD<5.&}ule\UMF<7/&  { u n e ]WLD<5+$ vne\SKD :!!3""(##!$$%%&&'''B#eVa]RA ׷< 3ް}ZV l@IRA1,) wmf\OF@6.% |ukbZQH?5- %    yqh`TLA:- ~vldZOE :!!1""(##$$%% &&'{'' QBO!P߳*^u5TllG0AzfrteTID=0& zqf_UJ@7.% vke]QG : 2 (   xpeZPE=/'uk_VL A!!5""%##$$ %%&&&s'%GD͛ۄ/0ےl:O-d|7XHo`QH@7, zpcWMD:,# zoe Z M C 7 ,zlcXOD7(wj_RE :!!/""###$$ %%%w&&m'0$˼ ۘ3{߷xR:{c$"p>*RaN,}yk\K@5*!tg]SF;0"x l _ P D 6,!vg[L@3%zhUI< 1!!&""## $$$x%%i&&&!_@M@Ӻ]#Ħz=qݧ1FD-|)J k-4.x. =PM3oa\WOC3 }rgZL>/!   l [ L @2( whZK?2&sdWJ; -!!""##${$$n%%`&&%Eufy)(fVcpީt1xwA}nhp8+lg!|oV>+ |o^N=.   ~ m ` Q@2$pbS=*zl_SE:) !! """p##`$$R%%D&&$\9Ը&ǹ+A@ݴ)_|[eF߳߬7 v\PPW\^ZJ 9  y ] I2 wdRD2!weTC3! t c!!S""@##.$$%% &%"er &ipͻ}+î<@g6YNWE8sm JSWK5,D8 >!@R[dl{2ap OA{13\#M^ D 8 1 1 //*#xaF-o[H7(vaK 5!! "" ###n$$Z%%z$z!z 2ߦXSվÇǿ[/la/|Ho5.5/ `LYzA4Ib P_M](j Fx   | R ~Bm8|`K=7411-(qY@ %!! "|""`##H$$0%2%# i ?FԌΞɌX*wVí@O5:F="z)pe: $| %GbqvmS,H[0L{#Q}!dY%   B o 6a $rLRNbA& t E!""#J$""###!Ev k4y&gcav\‚UsźUh2FU:ހY7dYa-btm $?jzN.h OpoBZ7Z%o`K] 0 Yxu&?w }' iw H ^)D )Y*1 v0":',0f1,u'$`!al$w+ /3h7_5.+(#q|6bX` &w12>p GD@muz֮3vWCLs3dM/E @ Zd| ) mgg/ 5V sk\`6d[S>K.[ {2 ws"F%T!i] M ]x *#',h0.(#.!uF#*] r=  > y#2{eg$= &zmh zk< r e"O#b c"]| , Jb $ Q$[).21U,$ E"6*045=2+%Z!-a FE A2`P4^0 ǭneV7ݢ3sНL5;"ċ˫AHܡݳGTf(* 5I| D5 3oV7kW% .w m R$!$ $aF _ 8%} X 7hqP"]%)./21,%L!*2772*# ` Z (St_%(ULY޸\zşÔ>YreY=y+ŦƊ֪I ۝A .kh /V XB:-qZBgS k  i"'V'!+/ , Ta qB;e#%'*S.0=0+${~(18Q:56.$n G `  _ݞN.Z\TrkJ ʢ6şihς#cy۹Nlqd d?zg I L1Uu BUa/w0Ay~Acoc[ (s#  &(& _KDt:vs ojO;Q1U#*+04640*# #$,~488?4,o#:3 E aNP۪[ߚk'@v˵2?<̬’g!`Ё{M Qmio5  !M t tVC j3߯y5$Y + """:` is$S&C$TXJ3 f | :;&.59960' M/#R'.;4P64/R( bj I ԄYuL#9&dl/s0Щ0ŷVN˷Jxg*Je"9#( / # C   NrzCCKW7)j83S ( "! i BQOe 2*% y & e X ?`%-2X674D0*j%! V#&) ,,j+\(#'S5>PK Nr  ID= 7. { %=-O l H e jM9 2 F dCPse?o): /< E W t E$!-C~{\[DB$8b} _ 1j;,QO&d/5Rek?Em" NXm HL +2~G gA%X B  ^ UDmjI_1}S$c BV_ l y C  -w \$\*=9oNB B-E E \ E z MFvn05m# U C G *HrR2`5yS lN[> jLacM*$y "apj>e@<. f s 8?o>wps r1  % ynpn~jN #|.uc`He h ''ye_&vi m eK*\] h8]L]gO4j* !| OZ  ; %sby7G]= ,XLf "ARuFFO "X l&#xR  f?S YYdtA KX|4 q+S^- re.Wf [j?v ]4 tj /w,f5pH*c 9C1|@il {/qGRoQ? Fber$J"4p2 wgs/YEFMR 5 +p5@mY  i^^U> Pk &oh5u^7 N iW<C*U @n+!5Si@e 8_6 8S, ZqE:oq|fV^X\agr *nW>T\  #J9/d`.C26zH R \F0?m (-fkflRJ! 1 v q 8 L = by}%<Wtp~ Cmt=Cuj-3&e 3qP&p}W = y\_%-0UbYi![iW)]sS1 tJ"ypnt|excellent-bifurcation-0.0.20071015/wavs/ambi/0000755000175000017500000000000010560222720017737 5ustar miriammiriamexcellent-bifurcation-0.0.20071015/wavs/ambi/snare.wav0000644000175000017500000001404010555766562021612 0ustar miriammiriamRIFFWAVEfmt "VDdata %!9+3?U2JM49~c =D 1?3T& =7&I| ^fGXy, T?g@>H-9sR;@AX j cd7k* *.kvV 08 DX -H  (PQ"hI{<d 2M5v ,n<93HmQ8u N5.- CXJzMGu,q Xw|t ވzG'@-E"^5ga 8jQ&`lJ d) M)l!,Qt U<},6< hK2^n=`fuA 1[l(2m7 aQ K 7Zՠ\l  dno m }az(> \e1|,h }$VhFTQ@MӨ UTx7!*oU&+1}I&! =g e ۏ1#O XIf(Y',kR# 7>S9:)L'2z.3*^&U, N-fCr2yiһ)|,P]U \w"%%& `ʹ&y4ypp Eb/Pt)Kԁ 5`T $ #h-&Xzϙ*2 J {US*  ;H ͤ$#7- U-[,/ ;@8 6? 3( .nݦJ 0 :_uQ y D +`)#3y_H , V XZ`+H<O& \]N}~/ s.0 -!0G >fjwGW Wnp'!e8mG` ~1a[#*t$2 LțC qeSܰP )~ - G m 5 vޙ $! !n|N =w a "n&  #v8! 8 K͟Ԯ~qu V-\O4p F b'L":48(Bߍ u4$0 4QոUr$   ۮ~} HU " _ݜ. (v3 EiP # '2F--(3m[hG$lhA{ Y^&NO2-#EI}Nq#6F96 V>S|p!(5 BFNS> T . k3i'-Y\P9کo}"+-'5S} *9a|3GCU"!@ ,@I tTSmk4e>2{_j bJ YmwL?a*-"U|  5 x qQ L~ ,6%ס: %6 Y% ?dq DDkF?M2 ML #I n8OP E \ܭ+#z[ GkXON@LD7Yok{zkJ.@O) DA-D f #]VBI# > 1~ y v= " r1У ^: 6g`s/ixDy R8Y`R1 9Z#&) $ ~,I߰p9D%>{Zڵ Vz .ob} P ApD9*W 7 ViE CJ&  R9 1W{ ^ s( @g? K:o ee} +! 2DJoX]t? 6$g ISS6 R ov#Dg.6$s \ ]eb 0 )(gfg>)CgN b }7 ( q[xe C" q?}>H yGBf9z[FQ$h2F |fM l;cZ W WSE!\?) .hm b7 e d4 Z B0J$ *P $>2 jd%0QO P _h r z>  TS _C8Dk|F/ 1 < > [=D />8<Q-<. kB <g' T jwzgSn(loxn {& j# Y} r 'c H t3 +@ (ep\50mE .* f, ^K*@K7j):QjrA] .=oR{S&kLF$h\M TI$r gIN-CX,8j[ ^vA]k[p H0 +NFDYuHH?V]y&W$L%IE qH=ItDx F( B{Hf1mo$w:N $_$#N`NcEY_66`+a:a 2 tV<B|qVZsx$|e?&l^J:]b#oC^OHFHc [L\x|sEK/)W" h! 0HtFp^5.<N;t%z#iT[Km#L3qsYO@=&yP> (og57(/}f RwW.{44@XEZF>[>oNNAsT!fC5D;KHZ2?QJw]?4  excellent-bifurcation-0.0.20071015/wavs/ambi/boom.wav0000644000175000017500000007475210555745524021451 0ustar miriammiriamRIFFyWAVEfmt "VDdatay~|{wuc`^\ZXTSOMKJ                                                                                                                                                                                                                              ! "#$$&&)+*,+1.20227697:9;=<=>BDCCGFEIHIJKLJILLLONOPPROQPQSQORPRSMPRPNMOOKMLOIJKGGGDCFA?B=<=98:55100-+-&("!$  zz|xpqoofddc[ZYZVONKNJJK@>??;=;;980---++)*(&'&%#-,***)''&&..-+++*24120;988AB@>JJHSSQO\ZZf d c o m m w y v  %(%34?BMNOZ\hjkvx#$%%&4768:9JHJKMMNOPQPbadcfeeghiikm]]]^`a`dcddUUXXWZHLKKM=;>?A-01! !"~lmm\[JJ787$&yzwfdPQQ: < = ' &    ywvxa__^^HFFFDFC--,)+()'&'      ''(&#$#99777LLKKa_`^vuss   (&'?<WVVnm23KLKef899UUUoqq :==??@\]]^_aabaceoprrsruuwvx\\]^`_EDEDG*+,+-iiLLM.00{|{^[?> bbBAA"  | | { Z [ Z : 8 8    hdfce@A?@=><!  @=?<<__]]~~    * ) ) L K K p n p "#GGFml&&KLqpq 31XW[~!FHIpprBBDEFEoqpqrstuvwwbbcfee=>@?@Azy{RRQ)(*XYW..XWX,+||OOP$"ooCB@   Z \ Z + , - ) lkijg;99776EEDBAspoo ) ( ) W W V GEFuvv  :8kkk13ddd-/bcc000eef698mmnpIKJKKNhjimlko88::<jjlk548_`)))ONnpq78WVVqs8:7P P P   c d b ( ) ' spppo34120/JKHIJ 2 2 0 o l m l   ]\ZOO DFG?=}};9:{z9:8{yz<=;}}~@CCD  PPQPSSTnqpsqtt22454sttt224lon,*+cddVUVEDvw102a``HGs s q , + + S S S R ywvuv-+,++(      SOPPM " # ! k h i j B A A fe@AB kjJK,-/yx^]BF-+-y{zegfgWUWXYZZ uywyzy.---/IGIH^^_qrs#$444CCRP\_   ighqpxww$$$| { | ) ' (  } } + ( * ( ~ | } { | '&%$"#qpoonlmkjkhggfX V V T V O M M J J H HIJLIIMLRQXWVa_`jhtts&(565GHGH]]^``a! !#$%%&'''*~}~&(&*(tuxuhih VXXBDE.0tv]_DDF*))mkk  NO/-.m l l H H H F      ROQNOMNKKJJGIF \ \ [ Z Z     z y x ; 9 9 ]]]!!"HHHrqr989fcd--\Z[&&%VWX%"&WYY&)(*cdeffg>@?ACBDEGFGGI "#"UYX##%&UVLMMzzz=>>jjk*,+UV~>=<ecE D B h g g e        3 1 2 . 0 . , , + + * ( ) & d b ` a a : 9 7 6    }ZYY76``?@qqqRPT44looTST8::; " |jjlmlo^``abbcdeeghi78;9QRTlkm%':;OPddxwu$#$44DDTSScbbpoo}z|y                     } | | { y z z g i g e f Y W W V IJH==<32/('  {~xxytssnqkmmikiihihjhijjjlmmoprrsrv}  ~}|tvnlfd\[QPPFEF:9:,,,       } | { { { n n l k j k i g h e f n n n l l wuvv$#!313BBBRTSedcvw'(<;RRii~~ $$$<>>@YZZ\vyxyz{ !!!#$morVWW<=?""zw\[=>? pqoRP.. {}|ZZX56~~XXW000-.     o m m m j k j j g h f \ Y Z W W W V V T U S tsssr((%&MJLrqs-.-VVW>>?khk--,ZYMLM}|FGHyyzFHHH}~ "!!$/02/335457 ssssAECFyyzEGGxvwACB oq798beb)+*TTRz{>>>cba"$"BBBAA[ZYZYWVWTTTGGHDFDBAB@@{yzwxRQR/1.noPP353xvx^_]FEE0.uvvabcPPQ@ABA4564/001123357BBCEEGGGIIJa`aasru'))547?BJHKQQRYU\[ ^^   `_   _\_\[YVSTSJFGGDDEBC@B5532201.0,.~})+)&(~}()()-+-422<;DEGQRR]` ml~}//?C@VWW onoo#"#$BACCEFFGIIUWVWWZY\[\_MMOP:<;%$&psr XXX<<  jjKI*)susPN,**tssLJL"! hfff635331000.-utqrrooommklii!! :;:9ab`_BDBpp*)*ZXDExw33hii$%\]\TSTPPQPSUWWWXZZ[[^"""#&$&hikjkmmnonp:;><~~~CEFGJI GHCEF?=}|}655qr*)(eeVTT@???y{wx" " VRURQROONMMLIJ      PLML_\]##"ts8:9RTqqo98YYX#"|~EEFlmo88ecff103fiiillmmnoo:=>=?>BABDDEEz|}|~()(*+_`ab657hk9:lll78jik31ebd('YVWGHFxww112_^^^      5553120//,/+++a___1/1.rtsFED`b563 VYV,,}RT())~VW+--`ba99::{{z~|[\\]^_`abadde?BABjkm 64[[\CCijk$&JJKop$$#GHklj;;<9]]Z~|}    rsrqOOMN,,+)  a`^A>~}_]]?> fgiHJ++- ~~}aaaDEF)** zz|}~!#!$???\Y]\wxw645MOiii22IIbbaxz202GIH\_]rtrrnomkXXVU@AA**,tq___JL887&%sr`abPP?A@.10 !#$$334CADPSR_`amp||~ $$%.0<:GFFPQ][]ehqqo||zxzwqonogfe]]VTUMMLEDD>=656-.'&' " excellent-bifurcation-0.0.20071015/wavs/ambi/drum.wav0000644000175000017500000004035210555767174021456 0ustar miriammiriamRIFF@WAVEfmt "VDdata@q` " 8 @("%)-1-6:%?CHnMaRmW\afiklnp2rs?uvwy0z0{||}.~~a`~,~}||/{/zywvKusHrpnm9k@i1geb`2^[@YVTSQNKHEB?<9v6<3/,Z)%"2PY X OF@BUݿkϤvQ9,+9VV9\ ̝<L ۇdžȅ߄W.f#KăeWckr˒vjp@!o*̺ßƮKք[_|C n *-y#@&r),/258;>ADqG.JLORTW~Y[^P`rbdfohIjlmbopersuKvow}xuyXz${{}|}{}}!~T~n~r~a~;~}}<}|%|{{zyxwvuotsq9pnmOkigeca_e]%[XvV TQOjLIGWDA>;86 30,)&# a2O  NPzQ* >rV(3ͪv-ɡř*xԒGɏa Njyq}ЅsjsH76Mv o} مxƋY3VlYWc~)߮OɳR⸁)^.Ѹԭרڦݮ ;Xv 1ER]ab!_$R'A*(-025y87;=@8CEXHJMMO RZTVXZ]_ abdfOhikmnoQqrstuvwxyy*zzW{{8||||}}}|||(|{D{zzayxwvutsrCqonmkjchfdcAaS_Y]P[:YWTRbPNKDIFQDA6?<9L741/O,~)&# #6HSbj s z:`݊ڹ.qϼj8¯.J䵌Aʬsoz+{חFÔO鑖Qފ7vƆ%Wփƃ7e)kfp2cvě~ECsL vgy̨HӜMܼ~?i; Z/ s?S!y$$')p, /1046:9;">@B>EGI L8N\PwRTVXqZP\%^_aXcdfhijWlmnp>qVr]sTt?uvvwIxxsyy_zz {L{x{{{{{{{J{ {zazyyyxRxwv(vQultysxrgqIpomlHkivhfpec9b`^]@[cY~WUSQOfMBKIFDeB@=l;96041?/,7*'%"Zw)~ (y!rr"=uXNWzʵ_ Jѵש(dO(0ŗiғnP?:G[>y0ᅝhA( 1R~X0=ڈ9̋]f՚RםhXԧxYC5/0:LgOƓ(y.ԏ^='#+4< < 7( } M#%(j*,/Z1358K:x<>@BDFHJLNPROTVWY-[\c^_qabVdeg]hijkm4n=o9p*qrrsyt1uuvvwwxqxx$yiyyyy zz zyyyy>yxx/xw>wvv{uttLs{rqponmlkcj.igfVecb#a_*^\[kYWV`TRP O5MWKsIGECA?={;b9H7&520.q,:*'%}#6!U^ Z  NA88Gn+ݯxBН΁fTH>=?IZpݴL׭)L9Hݟ|!ԛOӕɐ >yjъABӈpLJH߆ӆΆ׆1d=x} PN' Bk&u˟+w| ;ݮ7ﳩm7ڼy`PB;659AK\n؂ښܵ6],W =f  9d#7N!^#n%y')+-/y1m3Z5H7-9 ;<>@^B$DEGUIKLNNOQ STVWXhZ[']{^_ aIb~cdefg ij kklmnno3ppqRrrstt"uuvevvwVwwwwx-x;x@x>x1xxwwwgw#wv~v!vuIutLts+srq<;N97532=0b.,*(&$#!)8EPYajpsw { ~  9Rq܏ڳ,\ѐ=ʁ^òdż*zsC䪊7e,ȠkWKHHTbyZ9YˍAH֋kZ͉[- ׈ɈÈLjψBp-|Њ-oh󍂎[r1ƔsX>)!!-?Xvţ'`+zέ&J# )¼RƇ#lϼj~4ڦa `%u>a.W"~F c&k+Z|!.#$&6()+$-.a013&56C89R;?FAB*DEF`HIKpLMOWPQRTLU|VWXY [&\8]D^L_N`MaCb6c#deefgmh6iijsk(llzmnnMoodppeqqMrrs|ss%tsttt/ucuuuuuvvvvv vuuuu}uNuuttUt ts]srr0rqKqpNpo=onnuml-lkjjZihgg3f_edcba`_^^][ZYXWVUeT?SRPONGM LJIAHFEZDCAY@>=;<:q986-53K20^/-k,*p)'n&$g#!X F.fD  fDeC%{cP@958ߺDSnԎ$ҸQ͊+qr$FH޷T0 Я}xvxڡCmМ Cʙ` dÕ)n`ߑbw ;َ(ԍ>HËcQ>1*').;H\vڋ5g܌eN_ď,{txM閊/ט3皝Vٝf4աbD% ҩĪ˳۴)Daľ:dÒ#Zɏ~?@ABCDEFGHIJKLMlNYO@P(Q RRST~USV%WWXYUZ[[\Z]^^}_/``a-bbscddHeepffghhiijjk{kkXll&mmmInnnKooo1pvppp8qpqqq r6rarrrrrss*ss0ss srrrrorGrrqqqUqqppappoo8onnAnmm-mljllk-kjNjidihphgqgfifeWed;dccbaKa``n_^#^|]\%\v[ZZ]YXW3WvVUT4ToSRQQMP~ONM M8LdKJIHGGAFbEDCBA@@?.>B=SH בm: ܐ\5ȏnS9! ԎŎŎӎ 5Mgݏ#HoDrב >t [ٓ[&pK4՗(|Ҙ&֙2GgȜ-_Ğ/oݠI* iߤYϥI¦>6315;FʭQخct0O۴m"Fܸp1Ȼa*¾[.fâ={ƺ[ǜ=~!f ͫQΘ<Ѕ-y mֿfعcڸe ܼhmw%2@Qdz+D[u)D^|/Mi7Tp%@ X o "9Mat"/<EJ M!!"M##$K%%&B''(:))**++u,--_.//E001'22e344@55{677J889::H;;u< ==5>>\??@AA2BBPCClDDEFF"GG2HH@IIKJJSKKYLL[MM[NNUOOLPPBQQ2RR"SS TTThUUIVV&WWXoXXDYYZ}ZZK[[\v\\8]]]X^^_m__"`x``&a}aa$bwbbchccdPddd0exeefLfffgXggghPhhhi:iqiiijDjxjjjk6kckkkk l4lWl}llllm'mFmdmmmmmmmn)n;nNnanpn~nnnnnnnnnnnnnnnnnnnnnnnnnnnqnanOnZYoYYX0XWVWVzV VU*UTCTS]SRqRQQ QPPOON%NM(ML(LK#KJJIIH HGFsFE_EDJDC2CBBA@h@?G?>%>=ᣈ+Ԣ{%Сy$Ҡ~0ݟA񞦞\ŝ~8񜬜f#_ᚥf-󙺙JޘwG旷]0ܖiAڕy\>%ؔm^J>,! ݓדؓԓԓԓ֓ٓޓ #3ARavɔޔ,JeÕ)Ns–>k×#T$Xə:x.n3vD֝iL;ޠ/١.ޢ8G[|ަ@mԨ: tުL"m߭P6~n^ڳUдM˵IʶGȷIʸNйTغ_jz-B]z Ě)ŽMrț.Zʇ̴M̀ϳLЅҽYӔ3p׮Pؑ0tܺ]ޤHߐ8&tg]WPNLIJLLOQTXYY[] ]  \  YTQH>6&q^J 1!!v"##Y$$%5&&t'((L))*$++Y,,-(..[//0 11L22y3 44355Y66|7 88-99I::f;;~<==>>/??>@@LAAVBB^CCcDDdEEbFF^GGYHHPIIAJJ0KKLL M|MMaNNCOO"PPPkQQ@RRSSSKTTUzUU?VVW`WWX|XX2YYY=ZZZB[[[;\\\0]]]^g^^^G___`b```-amaaa-bjbbbcWcccc3dfdddd/e^eeeefiJiTi[iciiipirixiwi|izizixitipijidi]iUiLiAi4i*ii ihhhhhhhqhZh?h$h hggggrgQg,g gfffrfHffeeeje=e eddvdBddcchc0cbbbAbbaaDaa`|`6`__b__^^;^]]T]]\b\\[i[[ZiZZY`YYXNXWW6WVxVVUQUTT#TSVSRRRQFQPmPPO#ONANM]MLxLLKKJ)JI8IHDHGKGFTFEWEDWDCTCBPBAJA@?@?3?>$>==<:9788:>AILV]gr|ƙؙ(>Voޚ9\|›5\ڜ5c$X+e֟MȠDȡMעc<Ѥ l Z^lʨ&Ciʫ/_ĭ-hѯ?aϲA%~eݶTʷA2)¤&ë1ĺ@N_rȇʝ)˶A_{ Ϙ)зIkҏ!ԴFnו+ؿV۫Coޠ8h2b0e3j:q E{N"Z.e9r E{NV#V%V P  Fq 3]BhBa/Le !!""1##E$$U%%c&&p''{(()** ++,,--.. // 001y11p22a33Q44@55+66777j88L99,::;u;;M<<#===^>>/???]@@%AAAKBB CiCC%DDD:EEEFFFFLGGGKHHHCIII4JJJKhKKKHLLL MgMMM4NxNNN:O{OOO4PnPPPQWQQQQ1RfRRRR-S_SSSSTATkTTTTU5UYU~UUUUV&VFVbVVVVVVWW6WJW`WuWWWWWWWWWXXX!X(X2X7X>XDXHXIXKXNXPXMXLXIXHXCX>X9X2X+X"XX XXWWWWWWWWyWdWNW:W"W WVVVVVnVPV2VVUUUUmUEU#UTTTT]T2T TSSSSS'SRRRbR1RQQQ]Q$QPP|PAP POOTOONNVNNMMQM MLL=LKKgK KJJAJII\I IHqH"HGG/GFF6FEE8EDD3DCC)CBtBBAcAA@L@??,?>k> >=E=<<<;P;:: :9O98~887B76k665(54K43p332!21B10_0/|/ /.#.-;-,T,+i+*{**))(*('9'&H&%T%$a$#j#"t"!|!! #$')(+*('&%#!       }}|| &-8BM[iv!5I`u7Sq"Bfދ޴Foܛ3`ْ(\ב.f֟;wԶYҚ;с'nй_ϮUͧR̦S˫X ˵cu(ȍ@ǩ`ƃ:Ůe#ĘUÎOSa&|B տj7ξk; ڽ~Q#ͼyP(ڻiE$ߺ}^A"йjR<&ָøtgWM@5," %1;DS\kyɸܸ,@Wmҹ$?^{ۺ>a̻@f 4aBpѾ3d̿4h B|)aQÏ IĈKŌTƙ"gǬ:Ȁ\ɣ9ʁe˳M̜7͈'ymϿgй aѷ aҸ dӼlt(ր6אGؤ\ٻu1ۍMܫ j*ފN߬p4\#N}C s< o<m< p=uC}MT"[-d4k= sBwF{I}HzD r;g/ Y  E  k -M l*D_r);IV] cee _XN? +!z!!"b"""G###'$p$$%L%%%#&i&&&:''' (L((()T)))*W***+O+++,@,|,,,)-d--- .C.z.../N////0J0{000 1:1i11112G2s22223A3j33334'4J4m44444585X5w555556%6A6[6t66666677.7B7W7k7|777777777 88$818=8F8R8Z8c8k8u8z88888888888888888888888}8v8q8i8`8V8M8B888-8"88877777777z7h7U7A7.77766666{6`6F6.6655555h5K5+554444j4G4$44333n3J3%32222^262 2111c171 1000V0&0///k/7/ /..q.?. .--p-;--,,e,/,+++N++**j*0*)))E) )((R((''[''&&^&&%%[%%$$V$$##J##"~";"!!m!&! T ~9a?b:\y/Jd~2I`w&<O`s&6 F W  f  x ' 6 EVfw'8I[ n1G\ s$=So!>]{0Qu(Nv.W(׭ח׈seQ@1־ֱ֥֙֎քxqe]ULE>81-&!  $'+29?GNV\hoyփ֐ְֻ֤֙ +;J\l|אס׳+?Vk؃ؗد'BZuَ٩5Rnڋڪ&Ceۄۤ *Mmܔܴ Ekݎݳ$Lqޚ7aߊ߳/Y0\ :fLy7g(WNI|H~N"T,`:oK)^>uU8oS5oT:rX=w"\B|'` C~)b D}&^?wV3iG{T,b7j ;p ?r >o 8 j - ]  O } 9 h M z .Y4]/W$Kr5[;^3Tw>_~7Ws ;Us &@Wp%;Pfy#6FVhw #/9HQ[hq{   sl`WKA5* }m_Q@0p]J5$iS>&mV<' t[B& iN2kM0}_@"hH(gG&`@uS0b@ n K )  x R 1 ~ Y 4  ] 9  ` :  a=c=b@fCjG"pL*yT2`=qM, c?yY7wV5y\<fJ- {^A& }bF+qU=# q[B*mYA*iU@+~kWH5#zl\M<0 }pcYKA3+ ~ypia[SNFA;60*$  '+05<@FLRZ_eltx "+6@IT_it "-;FUamz-;JXgv +=L[k{ />Nar -KUbmx )09AINW^fnqz            ywqohea]YUPLHE>;81.(&" {ztpmiec^YYRPMKFB?=953/,)%!! excellent-bifurcation-0.0.20071015/wavs/ambi/tom.wav0000644000175000017500000014031010557760114021266 0ustar miriammiriamRIFFWAVEfmt DXdata veUB,iDtFf=58F*#2*O+_:Ep> V{ 5 @ m j > = G "P$gK[q ~K f  n  Z P   4U `&EWvKR,*~ 9=b8^g|&sMT !";#l#I#"! F*q]JELOI3n^  7ta[-v*ޔ ݁܌۩oXlڬO۟Z{L{ ͞Q7cf€to@ֱe j$*Y-.y.,D)$ 1 ? oYs*"ix@Zyާߐ$a;o: KݮۥڶّSEB`v  G.Z[ , %N~b0 D,%;fIU^ddif eaZRJuC<[73 1/x/011428344321P/,9*(7&$5#" v=gfs2(j, ##I#!N? lK>#4n x#.7F=U?<60*J%K!OZ!#;.5 84/-#L k h! k`ce (02/'"oiA>v$2|9n,8wxrfFC <9 Mewx3jM?6k_BJ%FB[D?߃_\~ׅ0ΜͿ[ln_C[Ɓ5jn9U3tHu 4[ *Z*"v% A>' ;hhH%6/:a2c' !$%_$Y! {&+/4O51-*q*++>+)'&z$;# " /qsO,06p8W4&.)()I++G* (%M$1#@" !'R#&#!,""50{ | 6  2 y)H^*Dv);DOBb:13*'2,>12h0-,(&6&r%y"!"""D#3&.Q@ATZGPD'ArBeDD{B?:77752/-b+ *p*O1H>G9G@85566O3/,*$XEmOdogܭ{T@)8JLKƗ^̭:gșЅχ=-Ϳyg.[ث{(c 6 "rVZKp g 6&$fe U  wrb_[b|8@rߔޅݚz٪١%qLhO"e|XL?-گ&u ! >6"Z!0NQT Fu t %G=_]4'_$)//8*d#q !% /lQCk((3-w" kC2 @H-c1% 2LL P]1`*ouWhxrkh}=A-= wviuk,X lD /-IGm21֒cj޷̽)жл%<3jԬ2m C }/R-XEnh*71M%k"&R'$ Ia"+3x3.0+?+,@-+)]('&%1$" 4@G$# 271+#)F+.-,*('&%p$"@!DC&(6.KH0 BK G T - 9jI> U  C #32*>&I'x))%n! ! ?<s%N%(9nPKXQMBADgFD@=:8p75?30.,*I))c2c@G?C:6v67'74w0-i,*u(%"ybQޑ8 1SÄU1u? ˈɉ_tlȲѯoެ)@ h ik "*" U n g WP `H(` o R 1Qm>;UG`"Df86jܷۛLFڪڞۋݴoblk߆qݸt"gڜ۵= X C  2}ie^ ) L 1nn &%Fg][LB4DJZMIDBz><@D\D/?85 42379517/,,-,)&2%$#m" h'API_aa"%!v P iHfa$ '$8=3'$S). /*(&"d"ERI!w g*9P3#2-$Ov$z C*3*m Mb^9Yb t . !- k?}Sx:Tb1~Qaw!(}lXNn/ ?Y\I$Y""?! #=#mv, u" Xu%Q7LwT5OG6BA0CA>=;853(20.B,*`((q0=FC;54563v0c-L+)'e%"vGnvb 9&N]TLnY9Ð (+lkˠyKе(cGɭ2"'y K ' # [& % : '  " yrn= <fI  Kr}flebw.t,߷ XB7> E[e&ܸۅ|ۄۊ2ۀܘ=f8 0[* Z q %] Q r ~   R&:A7)'.W7BMRNWIFFHFSDnB >$;#>BzC7?8%4\2W12685O1,((E,/-g(#!!4"-!( z1: zZ!$>";d;-4   ^o-^Q_ !4=q6*c#%+H.*#EjO7H)0-%ZCXc[@ V, #*&)U$#]8~)   :}d&;]y>1 ^j 7 *YHD Ob,a3#<`MYqZzV9`ڣppnάͬɡǷ^ɽ&DLL(  (T kcYTr9fq7&87 *!T%%v"/(0?3/*(_)**)'%$#"!;|FxI[D!.A520,'')**'%s$##!Q G !xr 7 A  #Wy@9pJk6>/:q@mA?;7?543t1)/,l*(''m.:CpBT;422{3r2//,^)\'%#6!Y|!8Z ے؈ֻ ˭/(z’Əȵɇϗ˱hǙǛëi;`ﯸܯ}Oaߔ?v !N3*e&  U1(Y  C   _[YXMY6hF,[ݡ܇FM۽ۥg8z8>?fXݍ݅6~)"mN9"?  ( N  D|#  vbZ - \! 5=8f/-z8IWTS#K`DpB`CEE@;:N65<7742-2d1 /[.e0j1/,)'&S&U%# "n 3/o%O+q#!D M   , u*GWS2<;5*$$)(,!*$vQ "u.00(r{R!x C[@''W2-<"!D1 [zz =  :r[p7Q[Lb L u; {G7+BBuT4y~tb~O'{U%ߘݓ >ͻ @˦̌)Rѓ@݌V >wT1c 9RljpJ#3M4N+!bp"$"2X%.2N0+`('()<)'%$" " _p1A$n+33 .(M&$'(c)<($&#$"!%!)J Y"sra*w b J> Nf_S -5SiE } h 0+Q1-(&&@'&/$t . n"4);8>KUQG>;<>?H=84 2030.,0*'&n&,8ABBH<151w0O1W1/,G)&$" c$pA Wc7ލ߶suբԶMɭ ̞;ÆäƉǽ)ŴOӞrĊŌGq_ǸHCܰ`t[MuX!pܛ(aGj z+ 4 i /   RzL%o a-8I8:/$ '-8/+&"! $?/8>&P "&0@SLNKsCf=:S99m;';Z8$4M0-,+e*(&%*y50?A>)71,/0//5/1-1*'$k" ;1`D% gn la)j׮ywϣQȫɗkmW'ǵ`V>Ѕz1(߹%:sȲ4YVkWdcRPih V   C U C  =y)Jrs@.#>I :ߐ݌:!^ޗ*`d%D[߯ޅ\"ݑfJPMn!Q%`{ ; u 3 EV  f- k .v8 :5+a%'93CORM(F@?f@AA>p:9@:8788n61z.--,U,--)%6%%3&i%#W!`\>SE5}!'"W i X1<X v,I8800X&P! "%(N*'!hqc`IL*%/+x#S j#C% #+Y+#-5 & 4k@"z5a \[)lg% .: )tgWoJMq8A;lrK3?@e _ ̄TVֺՇ϶;Ű;Ҭ_ G -<}vV&8A[ $..4/&qj!M!_")./- *n'Q&t&&&&w$"!NxBQ&/3s0+~&|$$,&&g&$" XV"y%g p 2 C f y/6E-mLd "s)G1Z1-8)P'&'(h'%o# Km)%!-]?DL#NH)Aa:668:97y3/e-+*Y)'%L%D)2q<@L>P8=2t.C---,O*Z'_$!%^$ hXSԦ_َ[ʃ̆ɌɆ);aնֆԏSHȈKɄō™9!4S̴ U;M <{ [6  [ Fn rj  9 $ ?U N:N2vcn8߬8ݎx]C?)H #޻ޠއx7S    + hm|!  g M ;j j.|0 v/+GU`WrOD=|;=?BYB?:/5264?78~51^.G-x.Q00{. +(&&,# w!! 5+ILLe0$m' !-Eo  y{E 0(58T2(2" "%(H(#7jwDi8]%*)$u=*d 9 >qK'1R51(/(UQ *$nb; H)U SN)r`a/KjP<\[G ZNqj@gVEI%Sg%N\R["P#UPMAVQy۝#9ΡΒ͚e˧ʴӨ->X % qFymJyZj I8,^52)| D' zb"'x,3.-X*'%L%b%n%%#t" EGoC.wF%6.1G0+&$s#I$E%m%x$" #v||  &V C : H = ! l ( N*TO%@7s [: Bt!@0B6E3N+>#@vS#{(2f@KMHo?7433/676(40--*('&n%$(1:>=82W.,~++6+)a't$!F yqjfhsQϾvό>ΐhӳSϵzϓL7˿ ?"Ŵ Då:%"[*T|IE^/aA < Ptm/ ~>k 5^5z8-TZU) ;wGފkޓ&sA}*=J/:7wߦc?J J& \`Es ]~% F G ,29F F8`;&z;LZT`RJ.Bv?=:l9R9998 61 .+,.3/-)y&%'&&&%#U!e9.~j};5 !w_1 . ] QY.Hw - '37N3*h# #)&&#^).+]%>NT7T4 m X"%051( mm<^V< gFue P3Hv#-}aG{#'g^26 3'+ 6eKHDD*O-F4GhPcB;Q^5݂WףzХΘ@oW;WOI1v3=!9ug  /g'k/u/G*2#tUc)"/'`+)-i,*u'y%x$<$=$$K#" p T&N"s+00,(=$]"L""###" !7u9{? ( P R ERbqQ z,8 >;4G*&"!%M)5*(V%!/+Q,(w6DGKAJB:5e45E67&630,)(&%$Q$i'/7 * 2`i;9gOwW7Lߠߴ+I8b|I` !A&OT[lo lDWN '61l v  K { $07-8;3..O6 @~GJIEVA=<;Q:j:49B767887{5,2.*((*,8-+]( %"OcQau 0z * Fn1  r f* #K #06s5N.%9!!$$>"qQ2  CHu$u+,](!\Y.y  l p+.&4"Z*)k"" p ; _  gzC< s!;|847ORr!#ndGR+.H>[XFYzF[یSRΦ^ ѼA  , $ ^@SIj$B-/,%t,aj(.6CLMwIA9411u2320+.=+(G&$U##&0-~5A;<':B5/+0)$(''&$" u#'GXN6  ,B^vC:ޥĩȕ=eTOժ׊ՉΑ07˿©ENҹSH$̍"")&*J )2| { 5o#H]`S 811%R0L?#nDLv-KeR9`I-5.jNv ()@9dv * ^ ? B  o G c X  $0W:[B;GHE[B>jyg]G  1 fL   ^-4v580z(!N!#!Jk  '*`+(!VS  ~MP' n&A1 5(("pWLHWed*1/VpK$0_p <_mdt$ {jY E n ~   u 9 ] IF27DhOR/OGz?843s4J55Z6j640../10.+)&`$b#v#,##"! 0} \+uTc  H>e ? j1uwX- (o)824s1*# A  2MV/_b%( (.$:Vwq ; E - U D  "u$w&%\""Ip  s[XE gLm]Ia?`ErRJ PH0uF;Y_ NNxkNyE}=Qk`,}CӌҠѯqY.ϫ<~~@ 4)yjL-~G.T}(-z-x)#~(5o#(+$,*N(%#v! _ S / ];D~0$j*--z+'# 0 8g`( K gfX 46uk+I8\n * 6w#+..,(5$ I;(bhj8- '3=E{HZGB<6g1a.$--m--,z+_)&^$ " "'M/5n99 72-p)A&U$b#"^"f!'rN(` /M[\_ld=NLF5!2 q=O͐Ёր?j j,ˁʄ U× ͹C&fwaf9, aT@- ~B )sdu$  S Ip~ZPs*j>*~ku'- pDE l) ! 3v' X" % j ( SH3DO$SPH@8|2/ //13320. ,)'&@&&0'5'&%$#S" /^3,:LX_ai{Cb!c<H:w  z 2 v fmI'`eY'031d,% XAd(3' j%''$F5a { " e   ,W*k  }%e%G!Y WUysz b(KM[h D0F2f w,NL 5}.JQR91rpD  q " l*`Pc-_#]V CoWNS]oE[i\-JO~MPv&8 B  3c8/W_B g   . & ")?---.M26;?*BB&A>9;75p2G0r/}/90=111J0.2+('' ''&%$Z#!)  *J[k:\- & @Y 3$-11-](" 1pKlXz"%e%#XF A k [ T SQ ` } "%T&W$) % " \9nx*zJQXLbpZA>_~2@8&&R\l#\bi T{ [6K'N ' sm3o3B@$xts*U_u#އ۾ ֳu_Ҹ٧پnsyf qf{`RP!,Q $"6+.-)#x =lY#/( ++y*'$!C|OTI% *,+)^&"{#|p^/( K :I ]}n |x  9 >`C$1'&P#fHOx"+S4<[ACB?:4e/`+](&&9''''%#!!$)-/t3553 0,'~$!?[ / yB2c!gCvZ ?t3.i`΃γKUj$oƼнdzɲ] tb k(3? ^7K EW6M#47ee5Q)Hg/[8:sv,9b//bsZ" )n} | >  N y\Oh n7? K r ,(,.12&58:

>_>=>;964{20/(/-4,H+a+ ,,,,C*g'$"!  \ vV5=i 1pv] W fLx<q`  )/1/+Q%s#\S > $&b&l#YI 9 Q1pO&hDD3    x1CICE:9.+(Lz d[/Rg lC!9 o~IG6_@%\ )LeX~'h?paZkQ٭Mv=ѠВ$hҸڀ^=Ӫ;Cqc\ =v0fh ]}!)- .*%s5N%(**L)&# G4T$&*#'*z+\*'$m![EWMap~ K  D&+Yoa\Vo  ) N"J%'u'&$I"y_u#+4<@A[@O=Qqr/K`X G[qJ IJ7QVpvNqTB<"P5w{9ۥaYսӝYһ@b՛Ձ=*$" >fJ49EP E U =4I /E<,FK8MJE>7t1+$(&&W(*,--,*\(L&a$v"h bJK.;R$`idPL{S{>1 h _I6(@c' #)-z.,E)$B 5@9NjL s :#gi!v!; J_+ : >*\ N9# j Hj7]"k*2G$`!h7oK m(CD@DA=$9d40),(.'&X'o(r)*)('K&E%E$^#"!y }-#o;$:$mNP  E"#  ^n%)+e+B)%"qEq .!j"D!@ \ ^F7HlM cE  w`y{c!v C}+@V!uh0 Ko [Cm(4\z1m hz7[K!M's(0ټp^ԙؑو&JZ ;  u6dC^Z Fz'y "+ #7%%T# >iW&{! ###"!+s&sBQ;"$%%$"] `+[^r<@  .q@SC [L%T+7 = .#'M))(u&Q#8U;n%[!3(.s4#8998571>-i)%"# `Q8RY}"&s),-).j-+)&"1F\ $ p $_9'xHvnu kۗAI;kݍښ>lӸ0ξh˫ocǝ#Oh,"" !5I KY'2@yk  l;G ' UCBm|xL&IRG0:]|)Bk*.Ixajm lv 752N/  u)"  |=u !q t&.5/;>?3?=961 .*'M%##$$%&&=&!%#! J>Z\w[+X^ K "  @ IA/~ k ZG "En~ 4 ?%'o(8'$q!@;#d nUZ] R8MHUC1>.V e9e[g OMD)^v> ? =0FXl-!P$ Ԋ^ \v0*4^t;$Ү_T8o@v`U^ k 2q  &`F!+W- ޴zۄ)ܷfޢߥߪ 8\"ۂ"١Cԓ ѳϣ͒͢4Αe%CUC<B% )D5C  _XRT 6d@`*VOe`Y( I}T.Jh% qqHa+zZV&^$  T)  L%? j 4i  G  t=v` !C)/478q8q6N32/*&&"P>VI f 3 Z 7 " % Q b]jdP 0LJ$!s! CC( P! cRn 1v "] o cBSHDG %nB: A I9[v, '`5'g0<"u GzrN)eg l K !D+y)`@PDVEk\'6!fj5!DߩG7~}L< 4^ ` 2 u iC<rKgX u b1?)T{ntiMW&pZ+ 3 t c q6p_+A^Y{  w l ^ A %  m h(P04h1m*~t'/{B< G@D`0Y=+ & t9m#'(+:.#/._-+'$!'KEXe[, _"j###! Os( A $ 2X*=;r|ߔߖ T1< e8.4޲(ۺuODMpԹ*ҽՄ]/j& Px=), h?fH U p + "`N;V^ ,]KB;sK=W8h]?U=bg3wL KzH  ><_ x R%#kiU SO!%Y)1,-.>/f/.M-I+(0&X# b=}/>/=tElrWOYx@  " O E  P / i  6'  Z *yBGyy 8}F>?Py Np zR *7I'VW [eV/{?u w L$,E{*WR ]meZi8%Aj( G u" o)]<2NZ xM? 4m4(RP:;` q *  vYxt- vD ^8_(RBQRzIy> &  d u?}{eLZ  + v : w kH?(b A6oo2vj  xr!P " 3"%'J))(\'!%k"ywI,%m]{,Z"R-bh l $ W]j>5 %6H4 $*߸_"b}c֖G-[m&S 979{ aG l + U~!>-S%k}'(b!\^b\LR\ O{rK`{* a f y l[y#m l N =5E\f* \Dd#'O+-.[.-*(% " -5?~| doy\nH"  2 } >>  / p T$R3 L   I r%C  aO70_ N UGKE; AjCeT ; bY J D]D{3 GAaV7F~>"0nOp0P "[mCJ-i sf9 }wvex%B"[j<$|J"+K7L&Da5ryfxjr G  X n'k:-`V .G$ z0@A&WgS!m ^ &1TgQ LZ  ~ % Q"Y_+1z  @ +Tv3D  ~ v"#b$0$_#"& $eG{CSoTi8| K]J) ! d"NWOKiZ!Tb, ckS߸ބgr۪9}L>K*I^wkn; < !J V /#uHJ{`MrvPVCR:VxN:7T.B^]$Kge_XdPm));pE  sf8 > %% M T % ;8^H/w ~_#&()))'m%"3 TtZOO}"OZ.;~ @9h2> m x < B Vjioy2!j v= ~ 6' & 4u9 # Pmfc 2 ( aZ}LaI(+H} +8iu9g8 = U } O2c;Oq^rI~ml}*aC3lcHwr[kz{, z W N URDH1r~P fsm4xrfdz 'yU!w m  Z j l 6;prUqd= h h   6 S P , S8:O-a$ c k + 6 ? 9 Cv? 3!!9!g MKKN 5{WV=T Z(UWVMi\J3np^;@M}o=,INK<# O߮8$ލ0b-w5 <Tb~ 6 C 7t hs}sX"WN!h\`~joSP+J_|[Klaw, Ow5GS0o @  S m  n *F |&gvqfO*M?i ( ."#y$$#"#!F9Vz f w % e U Q A j\Fos] =    `B<Tdnm @ 1O;- JA f  0 N + rG7].w9@ ( ? @ *^h 6>`nZ#st9::M7/vPI~gdV 4#-%^v,oQACksH@?2w}Ue!kHwMS!& 7_'FYsG W jcI-i@6 T  h $ z   $  L F ` I o/4*   7 C)O,[LNQV*b^pI* %:_A0Wl w _"64 DB9Gq=pnz|I  )lY&68+`|I649=:$ds?eA< Px|kgx&:5U %ZQ=  ,EG4H]H6u>m:x ^^ kH Y|5eD&~x[{ya>3 5 7 U i uZMy>&! 3U5 0aZ3  uz1W G  4 W j m Z 2 ? L =7^l "  cB<j(h 1I_ee] h,\3u {   }/`p~l[v6V+'\W O8RQK7'!{kctwB\:OBD].\yr;bMN 7}^FHVbT,}0;S> [ kh/Dp  E((p\ c0u  x d % z - A1 k ;oW+j A :$JmY+g4Opz `Krx.`U\S ,2 # =  k  2pOgLSrN9WD `'1 = ) S ?gh>i ' =FxffZ#1d2#Q=zuBE g)fK@bSc V|fcR@v5z4K;iBI?Kv,<'dANF~Sv0 L3w l {)=(G * z . AC { \ 3 4  t  q @ ~ F}8qo$Wq7my1+@K2LI  Cpj + "  (  'Oww:"B$K & f C B \ & M h j Y ) | ^ mMv 4{xw|]C\RICB`BLsZ@ ) h c 6 !  XW]dAKeoZ)Rz :qfd: ;w |(]tsX% ;VICO{ENwV9 h o > t<7x$.ke* %|WT!r < DyA% *A_r@s%V2*DvEMsF_7\ o9 6  Q j ^ G Cbu]`}%96a PW!p ^yVLi|GnCa|`WPo82GH2bw\/N7w ?wZAgR )@HNxMR ;XgrfK%Y=8erGicavo?%hk#_]Jb|l: I ?  J 4 5 U S xf}Bq'b  +  Z e 4 4KAYw7V+xAhKV[ib)?Z6q \ t } .  E ;0wgO  %  ( = @ 9  R a (q7F/O"cQZ%;uy/Z?,NTBZyUIKp`B!2fnrRkB*%/5^Fm.+~*y$q'l9W,dD" 5vw!lz7J_X *vL*mq+9)C)`Dn#nq?*fc?  Zl7JV v}&%-.+'#*>e-Wp}zb<Z}k<I21E@& f O h (z{(zgHNB1lD$/e&'*=doSmbi rNBI^| HYtT>#]B~{Bek?{=$:Pajpyk?XhFr~I=e1 bU^Pi 5J|BWJ2hr 8 | U H  d .dM`]@]\ S !:>DNKJ]2xjXB+"Y\4 d ( \ " A    G g  L j  b A (   b % /QF|3!HZ]QA0-N(!n2 9~Uin-tCs.,C>~[MYn{l?S7   v Q'kP)FmS9# oBg'`h7 K&p,YuoN%H=^q/tV:HACn1)O6A@ 2C;  4 E Z r fGv,%8T}@gsI}%Z}Df[f sF S ~ k ( Sa6k: \)j!8b C(w8[vNb#Jc+Z:tn\Cq!L!|c>j vi3Vit&]6 *?` ,Rid?9Z\D_r3BAJ.OV-    T 8Q[`u@V&3yZ'Z1T#>nG#w|K;X=fB_4 (\Y # 5 y ^ 8 h  w\I<730-$a{9;' zY J~I}`AbM Y/]uvjL)@>DtB AsFyd+N\R1Nri? pRV/F ];wX5h: aA$ 6]2f Z/5Loukq 4<at0#JgZ 7kTZ.bk;O=='p}@ y]?"I:oE,=NDK_N/ j G  YuC vF })g)5D]!D9vF(1zD$-T>}6JUUG,MIF[uLJe])ww  $v$e*Aqy7vV6sU8S*]=@j)SwmN*_1Sc?pj4_ dM ytmb I $ 2 % P P ! ~)J<_vC1GeN(+ @[a\HYIJfs[ Nwg4IuD{[9M`$cmWVi6t"MrwW(n'd6hF#i5vW6'h*CMA!cDzvphcXG8%\&w<Uv=_({sqvU;N J_rEoS^99:&ffL mh ^ } GY+FX`\I- Kn.Sc\&dF,[/Y]-w s(P,")>c9r 1Oad_K)lUD7-"b7BUF-sm;l[+`~VDDM_x+@QZYVB(f(vUOgB *KM6+"!y;U`XC[PRA`"gG-sh_XOOVg}=WkysgN8hZ[xpu!Q*^QE^23H :qT z / q|z a J /Lk.?DE:& SWvRCR}pL(B'# m-`= cCjBQih|<x@[oxxlW<v<|[E2# oQ0cKET}Uq!k]uL+{a?VJs<qDB_ Ys=TTE&{1Jsud1z@JJpqO"|;j$[(.Y*_&+&uGl1D xM-sdYMFFM`w9c<g;v?q Z4VqzgI!q2x[I9/)%# ~V(~@n$Hw6MKu%Dp[SU[ft{dI2"%6W=E=g9\p@Sa%yFqN/r`K5"xcR>0" /Da{   wfZZm"{G"? AoV&G~8&@K+ 0@>. ei K:`$qcUSOPVZcjt~2CS_b_YJ3V&vU<2=Z^PT}oBcL:(wV5f=$Mn|V0obYSQQQOONG?5'cF,1VH >nn@iYJ>52,)'% hD#pP6hH-@YE3 j2Uovq`F X"+`"i.lHsyT,rAte`gu3XxhG&_8 nO4 %;M`wL~)He}#O}=Qclmj\G- fC&fJ(Z*c1xL"v[A*pR7sgXK:)vs}+PJanV N\5 S%k@}gTF7+"whYK<0%!.?PauseXNEFTmDY-T|d>u]G@Gdi~3O|\.EMc?& &5CUen{}ueVC*gL7% %:V}At0FU\XQ=%yogYPC7%ybM9#7Sh|{jT@%}si^O?2!Aj/Jaqz}yo]G,|yyvsomkdb_UPG;. zbM:$ tmjhgnuMbJsrV=%%7So8Sq !  dK12HZl{vfVC-oYG5#4T{@a"+324,% ~vk^P>-qX<#n]J<,xlaXPD;3)"@dX<n-<HOTQLC6$iQ:"wqnfc_[URKIB=92-($$.6ERbr*37:=:62*%  !,4>HR\cmtzxrkd\VMG@;743479=AEKOSX\_abdcca^[XUPKE?;60-&  #*3;AILRUXXYXWSPMJIHIILNPSTVXY[[ZZXWRRMLGEDA@?=<<;9;8864401++(%! excellent-bifurcation-0.0.20071015/wavs/ambi/start.wav0000644000175000017500000003752210555524052021633 0ustar miriammiriamRIFFJ?WAVEfmt DXdata&? ~}u{qznuljejm]iaaYfTVXPPVHPJDDBCB<<58:7ZFU+]fejnrsv9vvyjw*{x&|>x|ax%}nxL}xZ}xJ}x'}x|'y|^y||y:|y|z{Vzt{z8{zzzz{zC{z]{czs{Kz{=z{3z{dž^V]䈓ρu!~Ç߂]J$,ׅ{92+kHWaKpKpFl\`hWA# ؄҅6\kxeVSC˅?څ:օCnGy{!y{ y{y{y{y{"y{1yx{QyY{yy+{y{yzyzzz"zpzBzCz`z2zlzz|zzzyzyzyzyzyzyzyzyzyszylzyVzyFzz?z z1zz!z#zzzz!zz"zz&zy&zy.zyMيۀ?doPӀ)*"!AԃkwudˆNQބ~ÄńτqJ>(m׆Ʌ򅍆i;La3~ ʆ녟Ts_shssssVt~t}suR}v|v|fwN{xzxz)yyyy zxkzZxzxzw {w!{w*{w!{w {wzwz xz1xszZx>zxzxyxy yy-y[yNy5ypyyyxyxyxyxyxy4 z3eTAy ޅ‡EiuAφӆ5MXj|z}u}zrnkfT׆?81), 5<@H HXWu{u'|au:|\u(|qu|u{u{v?{evzvzw%zvwywgy(xynxxxxxIx"yxJyw_ywywywywyw{ywsywZywByw!ywy xx&xx:xxVxxfxxuxtxx^xxNxx@xx0xx*xx(xjIɎH8X̎o፸Dm"ۋGC؈/' Tb߅щቾƅ܉߅'r]BƆ߈9vy9ڇˇ&Mk~}qrpE|;s|s|s|5s|nsL|s{7tf{tz(ugzuy/vRyvx-wVxwwwwNx9wxvxvxvyzv!yqv*yhv"ymvy}vxvxvxvxvsxwJx4wxUwxrwwwwwww}wwhww]wwLww;ww/wx%ȈՈ݈ ܈׈܈$و(Ј4ЈEĈMTizĈLjˈLjLjLjÈˆÈЈ͈Ȉ͈̈ÈȈЈˆ؈LjՈÈ܈iWs/{ sd{ru{rk{r6{"szkszs6z7tytUyuxucxuw\vwv,wwvbwvwGvwvwu xu!xu)xu$xuxuxuwuwvw)vwTviwlvDwv$wvwvvvvvvvv.ZPD[4(,] 1rz//Q_ lg0f6d?^JYNTOOVS\F_F`J[BdBc?hAeEeG^BdG[NZM^G_L[PVOVPSRXVOYR\NXIXRXK=cHkGgGsCnDjLcFiFcOcPdR[S`S_S^XS[R`R_S`X_S_SdJcTcTZTbSdTbX[SW\[S^W\\[Y]W^`[W_\_W[cWW?A?@@=F9C@@@??HADCDAC@@I@DHCD?GAdC::B3E2C1:>;F+N"Zkz}0lcD\CWGPSKTDSG`CWH[CWD[>`;`@ZE[HRDWGWHVINLSGOPOPKOLOLRHPJKPXGWL;W;]:d9]5\;X7`7Z<RDNIKGPCGGPCOGGPHGJKIFGMBK@GHGCT?HKGBOCG@OJHCLFLCKGKDGCKHGGHKHGGGGe"\'_#c&c#`&`"]*\/O7N7O7L>KAB?CK>M7H:K<J<L6G7K2K=F?L7F>C@C<K:E>CDG>@J<G>D7G?>CD:D@GX#U`[YS$W'T"T*K/G/L3J0B:<?:8?B8?;C6@3G3G/B3D.G3;6E3F7<7A885@7@:7@7>7><?8?:;2;8:;<Bvnmӎ.-ك؂bZ*$QAfɅQdȄ[.Mt僤„ӄ儜􄗃q)V~ ym~xn~xf~yD~&y~cy}y}yA}"z|hz|zb|z|7{{l{{{_{{4{{ {|z(|z9|z@|z5|z4|z/|z |z|z{z{z{{{{{*{{8{l{J{T{X{G{_{7{.l`8XQM IFiDCAA cTº&-2" +:H`w&;WA:tA:A:jA:NA;AP;@;{@;*@?=p>=)> >=60k-)(q%%#Q#!^" !! !j J!R 2!B !F I [ ` i r { ~  n s m l W  *޽Hޒ}f3-ߺUߙyuߚY߲D-# (5ANV߶lߢzߡ߁ߒߎߎߕ߁ߞ߇ߪvlM݄ݥO/"{"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" .yGfPpOdPjL}7ޓޭݦ.ݐGy[asP݄Gݞ$1Vzp&bAĭitE<1-5IЭ\­jx~ǭtȭtӭhMWpM^WFMmWFMTWrMWMVNhVoNUNcUqOTOSTxPSQ?S}QRQURZRQRQSUQ1SQfSPSPSPSPSPSPsSPSS Q,S(Q SMQRsQRQRQkRQERQ!RR R,RQBRQVRQbRQiRQoRQmRyccu^8*ůr?Qnҭ>IϭwǮs֮ohmܮ{ۮˮͭvnV'K=8O5Q0Z(kz~QQQQ~QQtQQvQQlQQjQQfQQkQQdQQmQQmQQzQQzQQ|QQQQQQQQQQQzQQ}QQ}QQvQQmQQqQQqQQiQQkQQaQQjQQjQ~QhQzQ`Q{QbQpQaQrQbQhQnQ\QfQmQaQcQ`Q]Q^QXQ331]] =2iѱ(uȰҬh=STv59pݭ̯˭ԯȭܯϭѯ֭ү譻6{QYzG)ĮܮЮĮ$2:9-BUOLU&LU$LUBLULKULTMMkTMS6NpSNR?ObROQ2PfQPPQPUQHPQPQORO!RO2R|O=R|O0RO RO ROQOQOQPQ+P^QIP3QrP QPPPPPPPPP}PQkPQfPQPPQUPQ8l-w1w9cQXbB)ڮݯ6Vss^O:;11ï&ǯ.ͯ1ʯ,ɯ9įA¯HUfc{OQNQNQNQNQNQNQOvQ3ONQRO)QOPOPOPOuPPTP5P7PQPPkPOPOPOPOPOPOPOPOPOPOtPOmPO^POXPO@PO4PP-PP%PPPP PPPPO(PO(PO#POzFJʹдS9 ˳M ϲKɱB#Ͱcb[$7`׮xѮîŮӮtd F*#Rwٰɯt\)9S+c|쯨鯭-RLRjLRjLRLRLRLAR+MQ}MQM@Q*NPyNPN4P"OOgOOO`OO*O PN5PNLPNaPNqPNqPNePNWPN:PN PNONONONON\ON4ONONNNNNNNNNsNNYNNFNN3NN#,7YxŮ®ٮԮ 1"F5WµLT]LT)LTLT)L`TVL TLSL(S2MRMRMQUNQNP OPSOOO>,@&u˴ ! D j$6ϵKcKDIeK$IUKI/KI KIJIJIJ#IZJ/I.J9IJ@IIPIIUIwITILI[I(ISIISIHNIH?IH3IH&I{HIkHHiHHPHHGHH;HH*HzHHhHHFHH/HG HGGGGGGGGGGGGGkGGVGxGGGeG̺,[캔׺ڷ&euT1@ ȹ۹Ϲ4kǺƹ׹%50W0~5>AEINBS^a|en̻޻Y@H?*H?%H?G?G?bG)@Fw@F@F(AE~AEA}D2BDBCBCCBUCcBuCBCACACACiACFACFAhCGAIC>A$CBABLABSABfA_BlA/BzAAAAAAAwAAVAA*AAAA@A@dA@`Ag 9IAF>F>E>B<BC<;=CA5i..- *-/.*# '""               R%$- '(%()0),'-1%0),+-+.'4,1,0115+5/10-04/41180354:44384588:=3868=5<97>87>=<<<==@8=@UePaMfQ_RaQaX^U`^\]^YeYaa^]bda`eac`aebj_ebe]imf`jiffiaqfanhmjjdjpgmqmmomhjnnmtfuprr~~~~{z~}z~z~{{uzvx}zv~wzzsvqz{*Ynsojnohffmfxnxitikjpgeccf[fZ^Z^VdQWNWPSKQFVGQCJBEEBAF6C59?52=21307,-/)%,*&t   ) )$)+'2'00,-58495;9=8=E?9EE{~}r~{vv{sqqnonej]k_`cYZYVVTRJRHJMN@ excellent-bifurcation-0.0.20071015/src/0000755000175000017500000000000010707334125016644 5ustar miriammiriamexcellent-bifurcation-0.0.20071015/src/input.h0000666000175000017500000000003110434130212020136 0ustar miriammiriam void get_input(void); excellent-bifurcation-0.0.20071015/src/sound.h0000666000175000017500000000222610560201026020141 0ustar miriammiriam void init_sound(void); void init_mtracks(void); void run_loops(); void run_mtracks(); void play_sound(int sample); void play_sound2(int sample, int frq, int vol, int pan); void play_soundf(int sample, int frq); void play_sound_pos(int sample, int frq, int vol, int x2, int y2); void play_wav(int sample); void play_wav2(int sample, int frq, int vol, int pan); void play_wavf(int sample, int frq); void play_wav_pos(int sample, int frq, int vol, int x2, int y2); void play_effect(int sample); void play_effectf(int sample, int freq); void play_effectw(int w, int sample); void play_effectwf(int w, int sample, int f); void play_effectwfx(int w, int sample, int f, int x); void play_effectwfvx(int w, int sample, int f, int v, int x); enum { SOUNDMODE_OFF, SOUNDMODE_MONO, SOUNDMODE_STEREO, SOUNDMODE_REVERSED }; enum { NWAV_NONE, NWAV_BANG, NWAV_BIGBANG, NWAV_FIRE, NWAV_FIRE2, NWAV_BLAST, NWAV_ZAP, NWAV_BEAM1, NWAV_BEAM2, NWAV_CIRCLE, NWAV_PBEAM2, NWAV_PBEAM1, NWAV_SHOT, NWAV_POP, NWAV_BLIP, NWAV_BLIP2, NWAV_TAP, NWAV_TONE, NWAV_BLAST2, NWAV_BEAM3, NWAV_WAVE, NWAV_POWERUP, NWAV_BLOP, NO_NWAVS }; excellent-bifurcation-0.0.20071015/src/stuff.c0000666000175000017500000001160210550201122020125 0ustar miriammiriam/* Angry Moth Copyright (C) 2006 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, 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 Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: stuff.c History: 11/9/2005 - Version 1.0 finalised This file contains: - a few common functions */ #include "config.h" #include "allegro.h" #include //#include int turn_towards_angle(int angle, int tangle, int turning); int delta_turn_towards_angle(int angle, int tangle, int turning); float lcos(int angle); float lsin(int angle); float angle_to_radians(int angle); // I have no idea why, but the first few elements of cos_table always get corrupted // unless I put a big fat decoy array just above. A similar thing happens to the // palette arrays; there seems to be a problem with global arrays like these. float decoy_table [ANGLE_1]; // not used float cos_table [ANGLE_1]; float sin_table [ANGLE_1]; inline int xpart(int angle, int length); void init_trig(void) { int i; for (i = 0; i < ANGLE_1; i ++) { cos_table [i] = cos(angle_to_radians(i));// * ANGLE_1; sin_table [i] = sin(angle_to_radians(i));// * ANGLE_1; } } inline int xpart(int angle, int length) { // return (lcos(angle) * length);// / ANGLE_1; return (cos_table [angle & 1023] * length);// / ANGLE_1; } inline int ypart(int angle, int length) { return (sin_table [angle & 1023] * length);// / ANGLE_1; } float lcos(int angle) { return cos_table [angle & 1023]; //0x4ffffffff]; } float lsin(int angle) { return sin_table [angle & 1023]; //0x4ffffffff]; } float angle_to_radians(int angle) { return ((float) angle * PI * 2) / ANGLE_1; // return ((float) angle / ANGLE_1) * PI * 2; } int radians_to_angle(float angle) { if (angle < 0) angle += PI * 2; return (int) ((angle * ANGLE_1) / (PI * 2)); } fixed angle_to_fixed(int angle) { return itofix(angle / ANGLE_TO_FIXED); } int grand(int number) { if (number == 0) return 0; return ((rand() + (rand() << 16)) & 0x7fffffff) % number; } int crandom(int number) { if (number == 0) return 0; return ((rand() + (rand() << 16)) & 0x7fffffff) % number; // return (rand() + (rand() << 16)) % number; } // returns the new angle int turn_towards_angle(int angle, int tangle, int turning) { if ((angle < tangle && tangle > angle + ANGLE_2) || (angle > tangle && tangle > angle - ANGLE_2)) { angle -= turning; if (angle < 0) angle += ANGLE_1; } else { angle += turning; if (angle > ANGLE_1) angle -= ANGLE_1; } return angle; } int turn_towards_xy(int x1, int y1, int x2, int y2, int angle, int turning) { int tangle = radians_to_angle(atan2((y2 - y1), (x2 - x1))); if (tangle < 0) tangle += ANGLE_1; if (tangle > ANGLE_1) tangle -= ANGLE_1; return turn_towards_angle(angle, tangle, turning); } // delta version just returns the change needed int delta_turn_towards_angle(int angle, int tangle, int turning) { if ((angle < tangle && tangle > angle + ANGLE_2) || (angle > tangle && tangle > angle - ANGLE_2)) { return turning * -1; } return turning; } int delta_turn_towards_xy(int x1, int y1, int x2, int y2, int angle, int turning) { int tangle = radians_to_angle(atan2((y2 - y1), (x2 - x1))); if (tangle < 0) tangle += ANGLE_1; if (tangle > ANGLE_1) tangle -= ANGLE_1; return delta_turn_towards_angle(angle, tangle, turning); } // speed must be at least 4, and a factor of 1024 int pulsate(int speed, int amount, int county) { return xpart((county * speed) & 1023, amount); } void error_message_out(const char *errm) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message(errm); exit(1); } int angle_difference(int a1, int a2) { int d1, d2; d1 = (a1 - a2 + ANGLE_1) % ANGLE_1; d2 = (a2 - a1 + ANGLE_1) % ANGLE_1; if (d1 < d2) return abs(d1); return abs(d2); } int pos_or_neg(int a) { if (grand(2) == 0) return a; return a * -1; } excellent-bifurcation-0.0.20071015/src/ebullet.h0000666000175000017500000000073710557133632020467 0ustar miriammiriam void init_ebullets(void); int create_ebullet(int w, int type, int status, int x, int y, int xs, int ys, int angle); int shoot_triangle(int w, int x, int y, int angle, int type); int shoot_diamond(int w, int x, int y, int xs, int ys, int angle, int type, int turn_direction); int shoot_star(int w, int x, int y, int xs, int ys, int angle, int type, int turn_direction); int shoot_circle(int w, int x, int y, int xs, int ys, int angle, int type); void run_ebullets(void); excellent-bifurcation-0.0.20071015/src/pickup.h0000666000175000017500000000026210550267756020327 0ustar miriammiriamvoid run_pickups(void); void init_pickups(void); //void destroy_pickup(int w, int p); int create_pickup(int w, int colour, int x, int y); void explode_pickup(int w, int p); excellent-bifurcation-0.0.20071015/src/cloud.c0000666000175000017500000001233610556652702020135 0ustar miriammiriam#include "config.h" #include "allegro.h" #include "globvars.h" #include "stuff.h" #include "enemy.h" #include "palette.h" void run_clouds(void); void destroy_cloud(int w, int c); void init_clouds(void) { int c, w; for (w = 0; w < 2; w ++) { for (c = 0; c < NO_CLOUDS; c ++) { cloud[w][c].type = CLOUD_NONE; } } } int create_cloud(int w, int type, int type2, int x, int y, int xs, int ys, int timer) { int c; for (c = 0; c < NO_CLOUDS; c ++) { if (cloud[w][c].type == CLOUD_NONE) break; if (c == NO_CLOUDS - 1) return -1; } cloud[w][c].type = type; cloud[w][c].x = x; cloud[w][c].y = y; cloud[w][c].x_speed = xs; cloud[w][c].y_speed = ys; cloud[w][c].type2 = type2; cloud[w][c].timeout = timer; return c; } void run_clouds(void) { // if (counter % 20 != 0) //return; int c, c2, w; for (w = 0; w < 2; w ++) { for (c = 0; c < NO_CLOUDS; c ++) { if (cloud[w][c].type == CLOUD_NONE) continue; switch(cloud[w][c].type) { case CLOUD_LARGE_SHOCKWAVE2: cloud[w][c].timeout --; break; case CLOUD_PURPLE_WAVE: cloud[w][c].type2 = cloud[w][c].timeout / 2; break; case CLOUD_BLUE_WAVE: cloud[w][c].type2 = cloud[w][c].timeout / 5; break; case CLOUD_GREEN_WAVE: cloud[w][c].timeout += cloud[w][c].delay; if (arena.counter % 3 == 0) cloud[w][c].delay -= 1; if (cloud[w][c].delay < -2) cloud[w][c].delay = -2; cloud[w][c].type2 = cloud[w][c].timeout / 3; break; case CLOUD_RED_WAVE: cloud[w][c].timeout += cloud[w][c].delay; if (arena.counter % 3 == 0) cloud[w][c].delay -= 1; if (cloud[w][c].delay < -2) cloud[w][c].delay = -2; cloud[w][c].type2 = cloud[w][c].timeout / 2;// / 3; break; case CLOUD_SPRAY: do { create_cloud(w, CLOUD_SLOW_EXPLODE, cloud[w][c].type2, cloud[w][c].x + grand(5000) - grand(5000), cloud[w][c].y + grand(5000) - grand(5000), grand(2000) - grand(2000), grand(2000) - grand(2000), 13 + grand(15) + 10 - cloud[w][c].timeout); cloud[w][c].timeout --; } while (cloud[w][c].timeout > 0); break; case CLOUD_LARGE_SPRAY: do { // cloud[w][c].x_speed += grand(2001) - 1000; // cloud[w][c].y_speed += grand(2001) - 1000; cloud[w][c].x += cloud[w][c].x_speed; cloud[w][c].y += cloud[w][c].y_speed; cloud[w][c].x_speed *= 95; cloud[w][c].x_speed /= 100; cloud[w][c].y_speed *= 95; cloud[w][c].y_speed /= 100; // if (cloud[w][c].timeout % 3 != 0) // break; c2 = create_cloud(w,CLOUD_DELAY_EXPLODE, cloud[w][c].type2, cloud[w][c].x + grand(18000) - grand(18000), cloud[w][c].y + grand(18000) - grand(18000), cloud[w][c].x_speed, cloud[w][c].y_speed, 5 + grand(5) + cloud[w][c].timeout / 4); if (c2 != -1) cloud[w][c2].delay = 20 - cloud[w][c].timeout / 2; cloud[w][c].timeout --; } while (cloud[w][c].timeout > 0); break; case CLOUD_SPAWNER: cloud[w][c].x += cloud[w][c].x_speed; cloud[w][c].y += cloud[w][c].y_speed; cloud[w][c].x_speed *= 95; cloud[w][c].x_speed /= 100; cloud[w][c].y_speed *= 95; cloud[w][c].y_speed /= 100; if (cloud[w][c].timeout % 3 != 0) break; c2 = create_cloud(w, CLOUD_EXPLODE, cloud[w][c].type2, cloud[w][c].x + grand(55000) - grand(55000), cloud[w][c].y + grand(55000) - grand(55000), cloud[w][c].x_speed, cloud[w][c].y_speed, 5 + grand(15) + cloud[w][c].timeout / 2); if (c2 != -1) cloud[w][c2].delay = 20 - cloud[w][c].timeout / 2; break; case CLOUD_DELAY_EXPLODE: cloud[w][c].x_speed *= 85; cloud[w][c].x_speed /= 100; cloud[w][c].y_speed *= 85; cloud[w][c].y_speed /= 100; if (cloud[w][c].delay > 0) { cloud[w][c].delay --; cloud[w][c].timeout ++; } else cloud[w][c].type = CLOUD_EXPLODE; break; case CLOUD_EXPLODE: case CLOUD_DRAG_EXPLODE: // cloud[w][c].x += cloud[w][c].x_speed; // cloud[w][c].y += cloud[w][c].y_speed; cloud[w][c].x_speed *= 90; cloud[w][c].x_speed /= 100; cloud[w][c].y_speed *= 90; cloud[w][c].y_speed /= 100; break; } cloud[w][c].x += cloud[w][c].x_speed; cloud[w][c].y += cloud[w][c].y_speed; if (cloud[w][c].x <= -50000 || cloud[w][c].y <= -50000 || cloud[w][c].x >= 510000 || cloud[w][c].y >= 510000) destroy_cloud(w, c); cloud[w][c].timeout --; if (cloud[w][c].timeout <= 0) destroy_cloud(w, c); } } } void destroy_cloud(int w, int c) { cloud[w][c].type = CLOUD_NONE; } excellent-bifurcation-0.0.20071015/src/globvars.h0000666000175000017500000000131110661152776020645 0ustar miriammiriam// Global variables: extern struct gamestruct game; extern struct arenastruct arena; extern struct playerstruct player; extern struct ebulletstruct ebullet [2] [NO_EBULLETS]; extern struct pbulletstruct pbullet [2] [NO_PBULLETS]; extern unsigned char counter; extern struct enemystruct enemy [2] [NO_ENEMIES]; extern struct eclassstruct eclass [NO_ENEMY_TYPES]; extern struct cloudstruct cloud [2] [NO_CLOUDS]; extern struct seekerstruct seeker [2] [NO_SEEKERS]; extern struct pickupstruct pickup [2] [NO_PICKUPS]; extern struct bossstruct boss; extern struct optionstruct options; // Remember: They still have to be defined somewhere // --- end global variables excellent-bifurcation-0.0.20071015/src/enemy.h0000666000175000017500000000063710547744102020146 0ustar miriammiriam int create_enemy(int w, int type, int pole, int x, int y, int angle, int att1, int att2, int att3, int att4, int att5, int att6, int att7); void init_enemies(void); int pbullet_hits_enemy(int w, int b, int e); int seeker_hits_enemy(int w, int s, int e); void hurt_enemy(int w, int e, int dam, int pole, int source); void run_enemies(void); enum { ATT1, ATT2, ATT3, ATT4, ATT5, ATT6, ATT7 }; excellent-bifurcation-0.0.20071015/src/display_init.h0000666000175000017500000000013210437661630021511 0ustar miriammiriam void prepare_display(void); //BITMAP *new_bitmap(int x, int y, const char errtxt []); excellent-bifurcation-0.0.20071015/src/input.c0000666000175000017500000004345710560221522020161 0ustar miriammiriam/* Angry Moth Copyright (C) 2005 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, 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 Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: input.c History: This file contains: - keyboard input. Commands are passed to cmds.c - see intro to that file for a bit more information. */ #include #include "config.h" #include "allegro.h" #include "pbullet.h" #include "math.h" #include "globvars.h" #include "cloud.h" #include "stuff.h" #include "sound.h" #define TARGET_ARRAY_SIZE 10 //#define SCREENSHOT //#define DEBUG_KEYS #ifdef SCREENSHOT #include #include "palette.h" extern RGB palet [256]; extern RGB palet2 [256]; #endif void check_red_fire(void); void enact_commands(int xc, int yc, int cfire, int cswitch, int ccharge); void move_player(int xm, int ym); void player_fire1(void); void player_fire2(void); void player_switch(void); void player_release_charge(void); int find_enemies(int w, int targets [TARGET_ARRAY_SIZE], int x, int y, int number, int start_number, int force); void shoot_multi_bullet(int type, int angle, int x_disp); void fire_turret2(int angle); void fire_turret(void); void get_input(void) { if (key [KEY_ESC]) exit(301); #ifdef SCREENSHOT static int scrs = 0; static int sshot_counter = 0; char sfile [20]; char istr [20]; if (sshot_counter > 0) sshot_counter --; if (key [KEY_F1] && sshot_counter <= 0) { BITMAP *scrshot_bmp; scrshot_bmp = create_bitmap(640, 480); blit(screen, scrshot_bmp, 0,0,0,0,640,480); strcpy(sfile, "scr"); strcat(sfile, itoa(scrs, istr, 10)); strcat(sfile, ".bmp"); if (arena.level == 1) save_bitmap(sfile, scrshot_bmp, palet); else save_bitmap(sfile, scrshot_bmp, palet2); clear_to_color(screen, TRANS_WHITE); scrs ++; sshot_counter = 15; destroy_bitmap(scrshot_bmp); } #endif #ifdef DEBUG_KEYS if (arena.counter % 20 == 0) { if (key [KEY_1]) { player.weapon [0] = WPN_RED; if (player.power [0] < 5) player.power [0] ++; } if (key [KEY_2]) { player.weapon [0] = WPN_BLUE; if (player.power [0] < 5) player.power [0] ++; } if (key [KEY_3]) { player.weapon [0] = WPN_GREEN; if (player.power [0] < 5) player.power [0] ++; } if (key [KEY_4]) { player.weapon [0] = WPN_WHITE; if (player.power [0] < 5) player.power [0] ++; } if (key [KEY_5]) { player.weapon [1] = WPN_RED; if (player.power [1] < 5) player.power [1] ++; } if (key [KEY_6]) { player.weapon [1] = WPN_BLUE; if (player.power [1] < 5) player.power [1] ++; } if (key [KEY_7]) { player.weapon [1] = WPN_GREEN; if (player.power [1] < 5) player.power [1] ++; } if (key [KEY_8]) { player.weapon [1] = WPN_WHITE; if (player.power [1] < 5) player.power [1] ++; } } #endif if (player.in_play == 0 || player.respawning > 0) return; int xc = 0; int yc = 0; int cfire = 0, cswitch = 0, ccharge = 0; player.blue_was_firing = player.blue_fire; if (key [player.key [CKEY_FIRE]] || player.autofire != 0) cfire = 1; else player.blue_fire = 0; if (key [player.key [CKEY_AUTOFIRE]]) { if (player.autofire_toggle == 0) { if (player.autofire == 0) player.autofire = 1; else player.autofire = 0; player.autofire_toggle = 20; } } if (key [player.key [CKEY_SWITCH]]) cswitch = 1; if (key [player.key [CKEY_CHARGE]]) ccharge = 1; if (key [player.key [CKEY_LEFT]]) { if (key [player.key [CKEY_RIGHT]] || player.x <= X_MIN) xc = 0; else xc = -1000; } else if (key [player.key [CKEY_RIGHT]] && player.x < X_MAX) xc = 1000; if (key [player.key [CKEY_UP]]) { if (key [player.key [CKEY_DOWN]] || player.y <= Y_MIN) yc = 0; else yc = -1000; } else if (key [player.key [CKEY_DOWN]] && player.y < Y_MAX) yc = 1000; if (xc > 0 && yc > 0) { xc = 707; yc = 707; } if (xc < 0 && yc > 0) { xc = -707; yc = 707; } if (xc < 0 && yc < 0) { xc = -707; yc = -707; } if (xc > 0 && yc < 0) { xc = 707; yc = -707; } if (xc > 0) { if (player.bank < 30) player.bank += 4; } else { if (player.bank > 0) player.bank -= 4; } if (xc < 0) { if (player.bank > -30) player.bank -= 4; } else { if (player.bank < 0) player.bank += 4; } enact_commands(xc, yc, cfire, cswitch, ccharge); } void enact_commands(int xc, int yc, int cfire, int cswitch, int ccharge) { if (player.charge > 0) move_player(xc * 2, yc * 2); else { move_player(xc * 5, yc * 5); if (player.weapon [0] == WPN_RED && player.power [0] > 0) { check_red_fire(); } } if (player.switch_recycle <= 0) { if (cfire && player.charge == 0) { if (player.recycle == 0) player_fire1(); if (player.recycle2 == 0) player_fire2(); } if (cswitch) player_switch(); if (ccharge) { // int old_charge = player.charge; if (player.charge <= 800) player.charge += 11; if (player.charge > 800) player.charge = 800; // if ((int) player.charge / 100 != (int) old_charge / 100) // { // play_effectf(NWAV_BLOP, 1000 + player.charge); // } // player.charge += 8; } if (!ccharge && player.charge > 0) player_release_charge(); } } void move_player(int xm, int ym) { player.x += xm; player.y += ym; if (player.x <= X_MIN) player.x = X_MIN; if (player.y <= Y_MIN) player.y = Y_MIN; if (player.x >= X_MAX) player.x = X_MAX; if (player.y >= Y_MAX) player.y = Y_MAX; } void player_fire1(void) { if (player.switch_recycle > 0) return; // switching int x; switch(player.weapon [0]) { case WPN_WHITE: player.white_recycle1 --; if (player.white_recycle1 <= 0) { fire_turret(); player.white_recycle1 = 11 - player.power [0]; } player.white_recycle2 --; if (player.white_recycle2 <= 0) { create_pbullet(player.sides, PBULLET_BASIC, player.x - 5000 + abs(player.bank * 40), player.y - 4000, 0, 1000); create_pbullet(player.sides, PBULLET_BASIC, player.x + 5000 - abs(player.bank * 40), player.y - 4000, 0, 1000); create_cloud(player.sides, CLOUD_EXPLODE, 0, player.x - 5000 + abs(player.bank * 40), player.y - 6000, 0, 0, 7 + grand(3)); create_cloud(player.sides, CLOUD_EXPLODE, 0, player.x + 5000 - abs(player.bank * 40), player.y - 6000, 0, 0, 7 + grand(3)); play_effectwfvx(player.sides, NWAV_FIRE, 1500, 200, player.x); // note - copied in WPN_RED player.white_recycle2 = 8; } player.recycle = 0; break; case WPN_RED: create_pbullet(player.sides, PBULLET_BASIC, player.x - 5000 + abs(player.bank * 40), player.y - 4000, 0, 1000); create_pbullet(player.sides, PBULLET_BASIC, player.x + 5000 - abs(player.bank * 40), player.y - 4000, 0, 1000); create_cloud(player.sides, CLOUD_EXPLODE, 0, player.x - 5000 + abs(player.bank * 40), player.y - 6000, 0, 0, 7 + grand(3)); create_cloud(player.sides, CLOUD_EXPLODE, 0, player.x + 5000 - abs(player.bank * 40), player.y - 6000, 0, 0, 7 + grand(3)); // note - copied in WPN_WHITE // play_effectwfx(player.sides, NWAV_FIRE, 1000, player.x); play_effectwfvx(player.sides, NWAV_FIRE, 1500, 200, player.x); player.recycle = 8; break; case WPN_BLUE: player.blue_fire ++; if (player.blue_fire > 10) player.blue_fire = 10; break; case WPN_GREEN: if (player.green_side == 0) { x = player.x - 5000 + abs(player.bank * 40); player.green_side = 1; } else { x = player.x + 5000 - abs(player.bank * 40); player.green_side = 0; } create_pbullet(player.sides, PBULLET_CIRCLE, x, player.y - 4000, player.power [0], 1000); create_cloud(player.sides, CLOUD_EXPLODE, 1, x, player.y - 6000, 0, 0, 7 + grand(3)); player.recycle = 10 - player.power [0]; play_effectwfvx(player.sides, NWAV_CIRCLE, 1800 + player.power [0] * 230, 120, player.x); break; } } void check_red_fire(void) { if (player.switch_recycle > 0) return; switch(player.recycle) { case 7: if (player.power [0] > 2) shoot_multi_bullet(PBULLET_MULTI1, ANGLE_32 - ANGLE_64, 5000 + abs(player.bank * 40)); break; case 6: if (player.power [0] > 0) shoot_multi_bullet(PBULLET_MULTI2, ANGLE_32, 5000 + abs(player.bank * 40)); break; case 5: if (player.power [0] > 1) shoot_multi_bullet(PBULLET_MULTI3, ANGLE_32 + ANGLE_64, 5000 + abs(player.bank * 40)); break; case 4: if (player.power [0] > 3) shoot_multi_bullet(PBULLET_MULTI4, ANGLE_16, 5000 + abs(player.bank * 40)); break; case 3: if (player.power [0] > 4) shoot_multi_bullet(PBULLET_MULTI5, ANGLE_16 + ANGLE_64, 5000 + abs(player.bank * 40)); break; } } void shoot_multi_bullet(int type, int angle, int x_disp) { int b = create_pbullet(player.sides, type, player.x + x_disp, player.y - 4000, 0, 1000); int speed = 12000 - (type - PBULLET_MULTI1) * 1000; if (b != -1) { pbullet[player.sides][b].x_speed = xpart(angle - ANGLE_4, speed); pbullet[player.sides][b].y_speed = ypart(angle - ANGLE_4, speed); } create_cloud(player.sides, CLOUD_EXPLODE, 0, player.x + x_disp, player.y - 6000, 0, 0, 5 + grand(3)); b = create_pbullet(player.sides, type, player.x - x_disp, player.y - 4000, 1, 1000); if (b != -1) { pbullet[player.sides][b].x_speed = xpart(ANGLE_1 - angle - ANGLE_4, speed); pbullet[player.sides][b].y_speed = ypart(ANGLE_1 - angle - ANGLE_4, speed); } create_cloud(player.sides, CLOUD_EXPLODE, 0, player.x - x_disp, player.y - 6000, 0, 0, 5 + grand(3)); play_effectwfvx(player.sides, NWAV_FIRE, 2000, 70, player.x); } void player_fire2(void) { if (player.switch_recycle > 0) return; // switching int side = 0, i; if (player.sides == 0) side = 1; switch(player.weapon [1]) { case WPN_RED: create_pbullet(side, PBULLET_HEAVY, player.x, player.y - 5000, player.power [1], 1000); switch(player.power [1]) { case 0: case 1: create_cloud(side, CLOUD_EXPLODE, 0, player.x, player.y - 8000, 0, 0, 12 + grand(3)); break; case 2: case 3: create_cloud(side, CLOUD_EXPLODE, 1, player.x, player.y - 8000, 0, 0, 12 + grand(3)); break; case 4: case 5: create_cloud(side, CLOUD_EXPLODE, 2, player.x, player.y - 8000, 0, 0, 12 + grand(3)); break; } // play_effectwfx(side, NWAV_FIRE2, 1000 + player.power [1] * 70, player.x); play_effectwfx(side, NWAV_FIRE, 300 + player.power [1] * 40, player.x); player.recycle2 = 24 - player.power [1]; break; case WPN_BLUE: player.blue2_fire = 5; player.recycle2 = 24 - player.power [1]; play_effectwfvx(side, NWAV_PBEAM2, 1300 + player.power [1] * 100, 100, player.x); break; case WPN_GREEN: create_pbullet(side, PBULLET_GREEN2, player.x, player.y - 5000, player.power [1], 1000); create_cloud(side, CLOUD_EXPLODE, 1, player.x, player.y - 8000, 0, 0, 15 + grand(3)); player.recycle2 = 20; play_effectwfvx(side, NWAV_CIRCLE, 1000 - player.power [1] * 30, 120, player.x); break; case WPN_WHITE: /* create_pbullet(side, PBULLET_WHITE2, player.x, player.y - 5000, 22000, 1000); create_pbullet(side, PBULLET_WHITE2, player.x, player.y - 5000, 20000, 1000); create_pbullet(side, PBULLET_WHITE2, player.x, player.y - 5000, 18000, 1000);*/ for (i = 0; i < player.power [1] + 3; i ++) { create_pbullet(side, PBULLET_WHITE2, player.x, player.y - 5000, 22000 - i * 2500, 1000); } player.recycle2 = 30 - player.power [1]; create_cloud(side, CLOUD_EXPLODE, 2, player.x, player.y - 8000, 0, 0, 15 + grand(3)); play_effectwfvx(side, NWAV_BLAST2, 1500 - player.power [1] * 90, 70, player.x); break; } } void player_switch(void) { if (player.sides == 0) player.switching = 1; else player.switching = 0; // player.pole = POLE_NONE; player.switch_recycle = 20; player.blue_fire = 0; } void player_release_charge(void) { if (player.switch_recycle > 0)// || player.energy == 0) return; if (player.charge < 100) { player.charge = 0; return; } if (player.charge >= 300) { if (player.sides == 0) { create_pbullet(1, PBULLET_WAVE, player.x, player.y - 3000, player.charge, 1000); play_effectwfvx(1, NWAV_WAVE, (1100 - player.charge) * 2, 250, player.x); } else { create_pbullet(0, PBULLET_WAVE, player.x, player.y - 3000, player.charge, 1000); play_effectwfvx(0, NWAV_WAVE, (1100 - player.charge) * 2, 250, player.x); } } int i; int angles [9] = {ANGLE_2, ANGLE_2 + ANGLE_16, ANGLE_2 - ANGLE_16, ANGLE_2 + ANGLE_8, ANGLE_2 - ANGLE_8, ANGLE_2 + ANGLE_8 + ANGLE_16, ANGLE_2 - ANGLE_8 - ANGLE_16, ANGLE_4, -ANGLE_4}; int targets [TARGET_ARRAY_SIZE]; // int no_targets = 0; int t; for (t = 0; t < TARGET_ARRAY_SIZE; t ++) { targets [t] = -1; } int number = player.charge / 100; int which_angle = 0; if (number % 2 == 0) which_angle = 1; if (number > 8) number = 8; find_enemies(player.sides, targets, player.x, player.y, number, 0, 0); //int found = find_enemies(player.sides, targets, player.x, player.y, number, 0, 0); /* if (found < number) { if (player.pole == POLE_WHITE) found += find_enemies(0, targets, POLE_BLACK, player.x, player.y, number, found, 0); else found += find_enemies(0, targets, POLE_WHITE, player.x, player.y, number, found, 0); } if (found < number) { if (player.pole == POLE_WHITE) found += find_enemies(0, targets, POLE_WHITE, player.x, player.y, number, found, 1); else found += find_enemies(0, targets, POLE_BLACK, player.x, player.y, number, found, 1); } */ for (i = 0; i < number; i ++) { create_seeker(player.sides, angles [which_angle] - ANGLE_4, targets [i]); which_angle ++; } play_effectwfvx(player.sides, NWAV_CIRCLE, 400 + number * 50, 100 + number * 15, player.x); player.charge = 0; //energy = player.energy % SEEKER_ENERGY; } int find_enemies(int w, int targets [TARGET_ARRAY_SIZE], int x, int y, int number, int start_number, int force) { int t; int targets_found = 0; int enemies_found = 0; /* for (t = 0; t < TARGET_ARRAY_SIZE; t ++) { targets [t] = -1; }*/ int e; for (e = 0; e < NO_ENEMIES; e ++) { if (enemy[w][e].type == ENEMY_NONE) { enemy[w][e].distance = 700000; continue; } enemy[w][e].distance = hypot(enemy[w][e].y - y, enemy[w][e].x - x) / 100; enemies_found ++; } if (enemies_found == 0) return 0; int closest = -1; int smallest_distance = 700000; for (t = start_number; t < TARGET_ARRAY_SIZE; t ++) { for (e = 0; e < NO_ENEMIES; e ++) { if (enemy[w][e].distance < smallest_distance) { closest = e; smallest_distance = enemy[w][e].distance; } } if (smallest_distance == 700000) { return targets_found; } targets [t] = closest; enemy[w][closest].distance = 700000; targets_found ++; closest = -1; smallest_distance = 700000; } return targets_found; } void fire_turret(void) { // int targets_found = 0; int enemies_found = 0; int e; for (e = 0; e < NO_ENEMIES; e ++) { if (enemy[player.sides][e].type == ENEMY_NONE) { enemy[player.sides][e].distance = 700000; continue; } enemy[player.sides][e].distance = (abs(enemy[player.sides][e].y - player.y) + abs(enemy[player.sides][e].x - player.x)) / 100;//hypot(enemy[w][e].y - y, enemy[w][e].x - x) / 100; enemies_found ++; } if (enemies_found == 0) { fire_turret2(-ANGLE_4); return; } int closest = -1; int smallest_distance = 700000; for (e = 0; e < NO_ENEMIES; e ++) { if (enemy[player.sides][e].distance < smallest_distance) { closest = e; smallest_distance = enemy[player.sides][e].distance; } } if (smallest_distance == 700000) { fire_turret2(-ANGLE_4); return; } int angle = radians_to_angle(atan2((enemy[player.sides][closest].y - player.y), (enemy[player.sides][closest].x - player.x))); fire_turret2(angle); // return targets_found; } void fire_turret2(int angle) { int x = player.x + xpart(angle, 5000); int y = player.y + ypart(angle, 5000); int b = create_pbullet(player.sides, PBULLET_TURRET, x, y, angle, 1000); if (b != -1) { pbullet[player.sides][b].x_speed = xpart(angle, 8000); pbullet[player.sides][b].y_speed = ypart(angle, 8000); create_cloud(player.sides, CLOUD_EXPLODE, 2, x, y, 0, 0, 7 + grand(3)); } play_effectwfvx(player.sides, NWAV_FIRE, 900, 200, player.x); } excellent-bifurcation-0.0.20071015/src/display.h0000666000175000017500000000452710557453510020501 0ustar miriammiriamvoid run_display(int shown); void run_underlay(void); void level_display_init(void); #define MEDIUM_ROTATIONS 128 struct RLE_STRUCT { RLE_SPRITE *sprite; int x; int y; }; enum { LARGE_BEAMER1_CENTRE, LARGE_BEAMER1_LWING, LARGE_BEAMER1_RWING, LARGE_ERLES }; enum { L_ENEMY_GLIDER1, L_ENEMY_SHOTTER1, L_ENEMY_ZAPPER1, L_ENEMY_DIPPER1_1, L_ENEMY_DIPPER1_2, L_ENEMY_DIPPER1_3, L_ENEMY_DIPPER2_1, L_ENEMY_DIPPER2_2, L_ENEMY_DIPPER2_3, L_ENEMY_CARRIER, L_ENEMY_CARRIER_LWING1, L_ENEMY_CARRIER_RWING1, L_ENEMY_CARRIER_LWING2, L_ENEMY_CARRIER_RWING2, L_ENEMY_BURSTER, L_ENEMY_BURSTER_LWING1, L_ENEMY_BURSTER_RWING1, L_ENEMY_BURSTER_LWING2, L_ENEMY_BURSTER_RWING2, L_ENEMY_BEAMER1, L_ENEMY_BEAMER1_LFIN, L_ENEMY_BEAMER1_RFIN, L_ENEMY_BEAMER1_LFIN2, L_ENEMY_BEAMER1_RFIN2, L_ENEMY_BOSS1, L_ENEMY_BOSS1_L1, L_ENEMY_BOSS1_L2, L_ENEMY_BOSS1_R1, L_ENEMY_BOSS1_R2, L_ENEMY_FLOWER1, L_ENEMY_WINGS_L, L_ENEMY_WINGS_R, L_ENEMY_MB2_L, L_ENEMY_MB2_R, L_ENEMY_MB1, L_ENEMY_RLES }; enum { S_ENEMY_BASIC1_CENTRE, S_ENEMY_BASIC1_LWING, S_ENEMY_BASIC1_RWING, S_ENEMY_GLIDER1_LFOOT, S_ENEMY_GLIDER1_RFOOT, S_ENEMY_BASIC2_1, S_ENEMY_BASIC2_2, S_ENEMY_BASIC2_3, S_ENEMY_BASIC2_4, S_ENEMY_BASIC2_5, S_ENEMY_CARRIER_LWING1, S_ENEMY_CARRIER_RWING1, S_ENEMY_CARRIER_LWING2, S_ENEMY_CARRIER_RWING2, S_ENEMY_BASIC3, S_ENEMY_BASIC3_LFOOT, S_ENEMY_BASIC3_RFOOT, S_ENEMY_CROSS_L, S_ENEMY_CROSS_R, S_ENEMY_CROSS2_1, S_ENEMY_CROSS2_2, S_ENEMY_CROSS2_3, S_ENEMY_BFIGHTER_1, S_ENEMY_BFIGHTER_2, S_ENEMY_BFIGHTER_3, S_ENEMY_BFIGHTER_4, S_ENEMY_BFIGHTER_5, S_ENEMY_RLES }; #define PLAT_Y 300 enum { FILE_PLATFORM_LR, FILE_PLATFORM_UD, FILE_PLATFORM_LR_TLR, FILE_PLATFORM_UD_TUD, FILE_PLATFORM_LR_TL, FILE_PLATFORM_UD_TU, FILE_PLATFORM_UL, FILE_PLATFORM_UDL, FILE_PLATFORM_ULR, FILE_PLATFORM_NODE, FILE_PLATFORM_L, FILE_PLATFORM_U, FILE_PLATFORM_RLES }; enum { PLATFORM_EMPTY = -1, PLATFORM_LR, PLATFORM_UD, PLATFORM_UL, PLATFORM_DL, PLATFORM_UR, PLATFORM_DR, PLATFORM_LR_TLR, // terminates L/R PLATFORM_LR_TL, PLATFORM_LR_TR, PLATFORM_UD_TUD, PLATFORM_UD_TU, PLATFORM_UD_TD, PLATFORM_UDL, PLATFORM_UDR, PLATFORM_ULR, PLATFORM_DLR, PLATFORM_L, PLATFORM_R, PLATFORM_U, PLATFORM_D, PLATFORM_NODE, /*PLATFORM1_, PLATFORM1_, PLATFORM1_, PLATFORM1_,*/ PLATFORM_RLES }; excellent-bifurcation-0.0.20071015/src/enemy.c0000666000175000017500000034703310560200372020134 0ustar miriammiriam #include "config.h" #include "allegro.h" #include "globvars.h" #include "stuff.h" #include "ebullet.h" #include "pbullet.h" #include "cloud.h" #include "sound.h" #include "palette.h" #include #include "stuff.h" // I don't know why, but Code::Blocks refuses to recognise the contents of pickup.h. Nothing I can do. #include "pickup.h" void run_pickups(void); void init_pickups(void); //void destroy_pickup(int w, int p); int create_pickup(int w, int colour, int x, int y); void explode_pickup(int w, int p); #define BOSS1_Y_MOD 7000 void move_drifter(int w, int e); //void register_enemy_destroyed(int w, int e); void destroy_enemy(int w, int e); void move_enemy(int w, int e); //void hurt_enemy(int e, int dam, int source); void hurt_enemy(int w, int e, int dam, int pole, int source); void move_dancer(int w, int e); void move_diver(int w, int e); void enemy_fire(int w, int e); void enemy_explodes(int w, int e, int bullets, int source); void explode_bullets(int e, int pole_match, int p); void drag_enemy(int w, int e, int drag); void track_target(int w, int e, int x, int y, int angle, int turn); void move_glider(int w, int e); void move_attacker(int w, int e); void move_marcher(int w, int e); void move_beamer(int w, int e); void move_pauser(int w, int e); void move_boss1(int w, int e); void move_boss2(int w, int e); void move_bflower(int w, int e); void move_bfighter(int w, int e); void move_mb2(int w, int e); void move_mb1(int w, int e); int attack_angle(int w, int e); void boss1_fire_circle(int w, int e, int col); void boss1_fire_scatter(int w, int e, int col); void set_boss1_firing(int pattern); void boss1_fire_spiral(int w, int e, int col); void boss1_fire_burst(int w, int e, int col); void new_boss1_firing(void); void boss1_new_pattern(void); void change_boss1_arms(int col); void boss1_arms(void); void boss1_arm_redshot(void); void boss1_arm_blueshot(void); void boss1_arm_greenbeam(void); void boss1_exploding(void); void kill_boss1(void); void kill_boss2(void); void kill_mb2(void); void kill_mb1(void); //void boss1_gives_powerup(void); void player_score(int amount); void new_mb2_firing(void); void new_mb2_firing2(void); void boss2_swap(void); void spawn_bflower(void); void spawn_bfighter(void); void init_enemies(void) { int e, w; for (w = 0; w < 2; w ++) { for (e = 0; e < NO_ENEMIES; e ++) { enemy[w] [e].type = ENEMY_NONE; } } } int create_enemy(int w, int type, int pole, int x, int y, int angle, int att1, int att2, int att3, int att4, int att5, int att6, int att7) { int e; for (e = 0; e < NO_ENEMIES + 1; e ++) { if (e == NO_ENEMIES) return -1; if (enemy[w] [e].type == ENEMY_NONE) break; } enemy[w] [e].type = type; enemy[w] [e].pole = pole; enemy[w] [e].x = x; enemy[w] [e].y = y; enemy[w] [e].angle1 = angle; enemy[w] [e].angle2 = angle; enemy[w] [e].angle3 = angle; enemy[w] [e].persistent = 0; enemy[w] [e].hurt_pulse = 0; enemy[w] [e].hp = eclass[enemy[w] [e].type].max_hp; enemy[w] [e].angle1_turning = 0; enemy[w] [e].angle1_turning_count = 0; enemy[w] [e].recycle = 0; enemy[w] [e].burst_recycle = 0; enemy[w] [e].turn_direction = 0; enemy[w] [e].target = 0; switch(type) { default: case ENEMY_TWISTER: enemy[w] [e].x2 = att1; enemy[w] [e].y2 = att2; break; case ENEMY_GLIDER1: enemy[w] [e].turn_direction = pos_or_neg(10); enemy[w] [e].angle2 = grand(ANGLE_1); enemy[w] [e].angle3 = 0; enemy[w] [e].recycle = 4; enemy[w] [e].burst_recycle = 4 + arena.difficulty; break; case ENEMY_BURSTER: enemy[w][e].angle2 = 0; enemy[w][e].angle3 = 0; enemy[w][e].recycle = 50; break; case ENEMY_CARRIER: enemy[w] [e].turn_direction = pos_or_neg(10); enemy[w][e].angle1 = 0; enemy[w][e].angle2 = 0; enemy[w][e].angle3 = 0; break; case ENEMY_CARRIER2: enemy[w] [e].turn_direction = pos_or_neg(24); enemy[w][e].angle1 = 0; enemy[w][e].angle2 = 0; enemy[w][e].angle3 = 0; break; case ENEMY_MARCHER1: enemy[w] [e].x2 = att1; enemy[w] [e].y2 = att2; break; case ENEMY_ATTACKER3: enemy[w] [e].recycle = 15; enemy[w] [e].burst_recycle = 4; break; case ENEMY_BEAMER1: enemy[w] [e].angle3 = 0; enemy[w] [e].angle2 = 0; break; case ENEMY_SHOTTER1: enemy[w] [e].recycle = 90; break; case ENEMY_ZAPPER1: enemy[w] [e].recycle = 70; enemy[w] [e].burst_recycle = 3; break; case ENEMY_DIPPER1: case ENEMY_DIPPER2: enemy[w][e].angle2 = 0; enemy[w][e].recycle = 50; break; case ENEMY_BASIC1: enemy[w] [e].recycle = 3000; break; case ENEMY_BASIC3: enemy[w] [e].recycle = 50; enemy[w] [e].x2 = att1; enemy[w] [e].y2 = att2; break; case ENEMY_CROSS: case ENEMY_CROSS2: enemy[w][e].a1 = 0; enemy[w][e].b1 = 0; enemy[w][e].c1 = 0; break; case ENEMY_WINGS: enemy[w][e].a1 = 0; enemy[w][e].b1 = 0; enemy[w][e].c1 = 0; enemy[w][e].d1 = 0; enemy[w][e].recycle = 60; break; case ENEMY_FLOWER1: enemy[w][e].angle1 = 0; enemy[w][e].recycle = 70 + grand(20); break; case ENEMY_FLOWER2: case ENEMY_FLOWER3: case ENEMY_FLOWER4: case ENEMY_FLOWER5: enemy[w][e].angle1 = 0; enemy[w][e].recycle = 70 + grand(20); break; case ENEMY_MB2: case ENEMY_MB1: enemy[w] [e].persistent = 1; break; case ENEMY_BFLOWER: enemy[w][e].recycle = 55; break; } return e; } void run_enemies(void) { int e, w; for (w = 0; w < 2; w ++) { for (e = 0; e < NO_ENEMIES; e ++) { if (enemy[w] [e].type == ENEMY_NONE) continue; if (!enemy[w] [e].persistent && (enemy[w] [e].x <= -150000 || enemy[w] [e].y <= -150000 || enemy[w] [e].x >= 390000 || enemy[w] [e].y >= 550000)) { destroy_enemy(w, e); continue; } if (enemy[w] [e].hurt_pulse > 0) enemy[w] [e].hurt_pulse --; switch(eclass[enemy[w] [e].type].ai) // replace with a switch for AI type { case AI_DANCER: move_dancer(w, e); break; case AI_DIVER: move_diver(w, e); break; case AI_GLIDER: move_glider(w, e); break; case AI_PAUSER: move_pauser(w, e); break; case AI_MARCH: move_marcher(w, e); break; case AI_ATTACKER: move_attacker(w, e); break; case AI_BEAMER: move_beamer(w, e); break; case AI_BOSS1: move_boss1(w, e); break; case AI_BOSS2: move_boss2(w, e); break; case AI_MB2: move_mb2(w, e); break; case AI_MB1: move_mb1(w, e); break; case AI_BFLOWER: move_bflower(w, e); break; case AI_BFIGHTER: move_bfighter(w, e); break; } } } // remember - enemy may have been destroyed by now! } void move_mb1(int w, int e) { if (boss.fight == 0) { destroy_enemy(w, e); return; } enemy[w][e].x += enemy[w][e].x_speed; enemy[w][e].y += enemy[w][e].y_speed; int angle; int i; if (grand(3) != 0) create_cloud(boss.side1, CLOUD_SLOW_EXPLODE, 0, enemy[w][e].x - 41000 + grand(5000), enemy[w][e].y + 47000, grand(1001) - 500, 3000 + grand(3000), 15 + grand(10)); if (grand(3) != 0) create_cloud(boss.side1, CLOUD_SLOW_EXPLODE, 0, enemy[w][e].x + 41000 - grand(5000), enemy[w][e].y + 47000, grand(1001) - 500, 3000 + grand(3000), 15 + grand(10)); switch(boss.moving) { case 0: if (enemy[w][e].y > 80000) { drag_enemy(w, e, 960); } if (enemy[w][e].y_speed < 500) { enemy[w][e].y_speed = 0; boss.moving = 1; } break; case 1: if (enemy[w][e].x_speed < -2000 || enemy[w][e].x_speed > 2000) drag_enemy(w, e, 960); if (enemy[w][e].x < 160000) enemy[w][e].x_speed += 50; if (enemy[w][e].x < 9000) enemy[w][e].x_speed += 100; if (enemy[w][e].y < 100000) enemy[w][e].y_speed += 50; if (enemy[w][e].y < 9000) enemy[w][e].y_speed += 100; if (enemy[w][e].x > 160000) enemy[w][e].x_speed -= 50; if (enemy[w][e].x > 311000) enemy[w][e].x_speed -= 100; if (enemy[w][e].y > 100000) enemy[w][e].y_speed -= 50; if (enemy[w][e].y > 200000) enemy[w][e].y_speed -= 100; if (arena.counter % 80 == 0) { angle = grand(ANGLE_1); enemy[w][e].x_speed += xpart(angle, 2500); enemy[w][e].y_speed += ypart(angle, 500); } break; } int t1x = enemy[w][e].x - 39000; int ty = enemy[w][e].y; int t2x = enemy[w][e].x + 39000; boss.angle_1 = radians_to_angle(atan2(player.y - ty, player.x - t1x)); boss.angle_2 = radians_to_angle(atan2(player.y - ty, player.x - t2x)); if (boss.side1 == 0) { boss.angle_3 += 16; } else boss.angle_3 -= 16; boss.angle_3 &= 1023; boss.bflower_recycle --; if (boss.bflower_recycle <= 0) { spawn_bfighter(); } boss.trecycle --; if (boss.trecycle <= 0) { create_ebullet(w, EBULLET_SHOT3, 2, enemy[w][e].x - 39000, enemy[w][e].y + 20000, xpart(boss.angle_1, 2700 + arena.difficulty * 300), ypart(boss.angle_1, 2700 + arena.difficulty * 300), boss.angle_1); create_cloud(w, CLOUD_EXPLODE, 2, enemy[w][e].x - 39000, enemy[w][e].y + 20000, 0, 0, 15 + grand(5)); create_ebullet(w, EBULLET_SHOT3, 2, enemy[w][e].x + 39000, enemy[w][e].y + 20000, xpart(boss.angle_2, 2700 + arena.difficulty * 300), ypart(boss.angle_2, 2700 + arena.difficulty * 300), boss.angle_2); create_cloud(w, CLOUD_EXPLODE, 2, enemy[w][e].x + 39000, enemy[w][e].y + 20000, 0, 0, 15 + grand(5)); boss.trecycle = 110 - arena.difficulty * 20; play_effectwfvx(w, NWAV_SHOT, 600 + grand(50), 150, enemy[w][e].x - 39000); play_effectwfvx(w, NWAV_SHOT, 600 + grand(50), 150, enemy[w][e].x + 39000); } boss.brecycle --; int b; int turn = pos_or_neg(10); int x = enemy[w][e].x; int y = enemy[w][e].y; boss.bpattern2 --; if (boss.bpattern2 == 0) { int new_pattern = grand(3); while(new_pattern == boss.bpattern) { new_pattern = grand(3); } boss.bpattern = new_pattern; boss.bpattern2 = 350 + grand(100); } if (boss.brecycle <= 0) { switch(boss.bpattern) { case 0: angle = boss.angle_3; play_effectwfvx(w, NWAV_BLAST, 1400 + grand(150), 150, enemy[w][e].x); for (i = 0; i < 3; i ++) { b = create_ebullet(w, EBULLET_SPIN, 2, x + xpart(angle, 5000), y + ypart(angle, 5000) + 20000, xpart(angle, 2000), ypart(angle, 2000), 0); if (b == -1) continue; create_cloud(w, CLOUD_EXPLODE, 2, x + xpart(angle, 5000), y + ypart(angle, 5000) + 20000, 0,0, 12 + grand(4)); ebullet[w][b].turn_direction = turn; angle += ANGLE_6; turn *= -1; b = create_ebullet(w, EBULLET_SPIN, 0, x + xpart(angle, 5000), y + ypart(angle, 5000) + 20000, xpart(angle, 800), ypart(angle, 800), 0); if (b == -1) continue; create_cloud(w, CLOUD_EXPLODE, 0, x + xpart(angle, 5000), y + ypart(angle, 5000) + 20000, 0,0, 12 + grand(4)); ebullet[w][b].turn_direction = turn; angle += ANGLE_6; turn *= -1; } boss.brecycle = 90 - arena.difficulty * 12; break; case 1: angle = boss.angle_3; play_effectwfvx(w, NWAV_BLAST, 1600 + grand(150), 150, enemy[w][e].x); for (i = 0; i < 3; i ++) { b = create_ebullet(w, EBULLET_SHOT, 1, x + xpart(angle, 5000), y + ypart(angle, 5000) + 20000, xpart(angle, 2000), ypart(angle, 2000), angle); create_cloud(w, CLOUD_EXPLODE, 1, x + xpart(angle, 5000), y + ypart(angle, 5000) + 20000, xpart(angle, 2000),ypart(angle, 2000), 25 + grand(4)); b = create_ebullet(w, EBULLET_SHOT, 1, x + xpart(angle, 5000), y + ypart(angle, 5000) + 20000, xpart(angle, 1500), ypart(angle, 1500), angle); b = create_ebullet(w, EBULLET_SHOT, 1, x + xpart(angle, 5000), y + ypart(angle, 5000) + 20000, xpart(angle, 1000), ypart(angle, 1000), angle); angle += ANGLE_3; } boss.brecycle = 80 - arena.difficulty * 10; break; case 2: angle = boss.angle_3;// - boss.bpattern2 * ANGLE_3; play_effectwfvx(w, NWAV_POP, 800, 200, enemy[w][e].x); b = create_ebullet(w, EBULLET_SHOT, 0, x + xpart(angle, 5000), y + ypart(angle, 5000) + 20000, xpart(angle, 2000), ypart(angle, 2000), angle); create_cloud(w, CLOUD_EXPLODE, 0, x + xpart(angle, 5000), y + ypart(angle, 5000) + 20000, xpart(angle, 2000),ypart(angle, 2000), 12 + grand(4)); boss.brecycle = 6 - arena.difficulty; break; } } } void spawn_bfighter(void) { int i; int bfs = 0; for (i = 0; i < NO_ENEMIES; i ++) { if (enemy[boss.side2][i].type == ENEMY_BFIGHTER) bfs ++; } if (bfs > 8) return; int bfx = -10000; if (grand(2)) bfx = 330000; int bfy = 120000 + grand(150000); int e2 = create_enemy(boss.side2, ENEMY_BFIGHTER, 0, bfx, bfy, 0, 0,0,0,0,0,0,0); if (e2 != -1) { enemy[boss.side2][e2].angle3 = grand(3); enemy[boss.side2][e2].x_speed = 2000 + grand(1000); if (bfx > 0) enemy[boss.side2][e2].x_speed = -2000 - grand(1000); enemy[boss.side2][e2].y_speed = 0; enemy[boss.side2][e2].recycle = 100 - arena.difficulty * 25; } boss.bflower_recycle = 50 - arena.difficulty * 9; } void move_bfighter(int w, int e) { enemy[w][e].x += enemy[w][e].x_speed; enemy[w][e].y += enemy[w][e].y_speed; drag_enemy(w, e, 995); enemy[w][e].y_speed -= 15; enemy[w][e].recycle --; if (enemy[w][e].x < 160000) enemy[w][e].x_speed -= 10; else enemy[w][e].x_speed += 10; int xd = 0; if (enemy[w][e].x_speed < -600) xd = 3000; if (enemy[w][e].x_speed < -150) xd = 1000; if (enemy[w][e].x_speed > 600) xd = -3000; if (enemy[w][e].x_speed > 150) xd = -1000; if (grand(3) == 0) create_cloud(w, CLOUD_SLOW_EXPLODE, 1, enemy[w][e].x + xd, enemy[w][e].y + 10000, grand(1001) - 500, 2000 + grand(2000), 10); if (enemy[w][e].recycle <= 0) { create_cloud(w, CLOUD_EXPLODE, 1, enemy[w][e].x, enemy[w][e].y, 0, 0, 14 + grand(5)); enemy_fire(w, e); enemy[w][e].recycle = 100 - arena.difficulty * 20; } if (enemy[w][e].y <= -15000) { destroy_enemy(w, e); } } void move_mb2(int w, int e) { if (boss.fight == 0) { destroy_enemy(w, e); return; } enemy[w][e].x += enemy[w][e].x_speed; enemy[w][e].y += enemy[w][e].y_speed; int angle; // if (boss.moving > 1) int i; boss.old_angle [0] = enemy[w][e].angle3; for (i = 9; i > 0; i --) { boss.old_angle [i] = boss.old_angle [i - 1]; } enemy[w][e].angle3 = enemy[w][e].angle2; { if (enemy[w][e].a1 == 0) { enemy[w][e].b1 -= 8; if (enemy[w][e].b1 < -25) enemy[w][e].b1 = -25; enemy[w][e].angle2 += enemy[w][e].b1; if (enemy[w][e].angle2 <= ANGLE_8 - ANGLE_4) enemy[w][e].a1 = 1; } else { enemy[w][e].b1 += 12; if (enemy[w][e].b1 > 50) enemy[w][e].b1 = 50; enemy[w][e].angle2 += enemy[w][e].b1; if (enemy[w][e].angle2 >= ANGLE_2 - ANGLE_4 - ANGLE_8) enemy[w][e].a1 = 0; } /* if (enemy[w][e].a1 == 0) { enemy[w][e].b1 -= 7; if (enemy[w][e].b1 < -15) enemy[w][e].b1 = -15; enemy[w][e].angle2 += enemy[w][e].b1; if (enemy[w][e].angle2 <= ANGLE_8 - ANGLE_4) enemy[w][e].a1 = 1; } else { enemy[w][e].b1 += 7; if (enemy[w][e].b1 > 30) enemy[w][e].b1 = 30; enemy[w][e].angle2 += enemy[w][e].b1; if (enemy[w][e].angle2 >= ANGLE_2 - ANGLE_4 - ANGLE_4 - ANGLE_16 - ANGLE_64) enemy[w][e].a1 = 0; }*/ } switch(boss.moving) { case 0: if (enemy[w][e].y > 80000) { drag_enemy(w, e, 960); } if (enemy[w][e].y_speed < 500) { enemy[w][e].y_speed = 0; boss.moving = 1; boss.move_time = 0; } break; case 1: boss.move_time += 1; if (boss.move_time >= 60) { boss.moving = 2; boss.bpattern = 1; boss.bpattern2 = 0; boss.new_bpattern = 400; boss.new_bpattern2 = 200; } break; case 2: if (enemy[w][e].x_speed < -2000 || enemy[w][e].x_speed > 2000) drag_enemy(w, e, 960); if (enemy[w][e].x < 160000) enemy[w][e].x_speed += 50; if (enemy[w][e].x < 9000) enemy[w][e].x_speed += 100; if (enemy[w][e].y < 100000) enemy[w][e].y_speed += 50; if (enemy[w][e].y < 9000) enemy[w][e].y_speed += 100; if (enemy[w][e].x > 160000) enemy[w][e].x_speed -= 50; if (enemy[w][e].x > 311000) enemy[w][e].x_speed -= 100; if (enemy[w][e].y > 100000) enemy[w][e].y_speed -= 50; if (enemy[w][e].y > 200000) enemy[w][e].y_speed -= 100; if (arena.counter % 80 == 0) { angle = grand(ANGLE_1); enemy[w][e].x_speed += xpart(angle, 1500); enemy[w][e].y_speed += ypart(angle, 500); } break; } int x = enemy[w][e].x; int y = enemy[w][e].y - 14000; int xa; if (boss.bpattern > 0) { boss.new_bpattern --; if (boss.new_bpattern <= 0) { new_mb2_firing(); boss.new_bpattern = 300; enemy[w][e].recycle = 40; } boss.new_bpattern2 --; if (boss.new_bpattern2 <= 0) { new_mb2_firing2(); boss.new_bpattern2 = 400; boss.brecycle = 40; } } switch(boss.bpattern) { case 0: break; case 1: // starburst enemy[w][e].recycle --; if (enemy[w][e].recycle > 0) break; xa = 1; if (grand(2) == 0) xa = -1; angle = grand(ANGLE_1); for (i = 0; i < 4; i ++) { shoot_diamond(w, x, y, xpart(angle + i * ANGLE_4, 3000), ypart(angle + i * ANGLE_4, 3000), angle, 2, xa); } xa *= -1; for (i = 0; i < 4; i ++) { shoot_diamond(w, x, y, xpart(angle + i * ANGLE_4 + ANGLE_8, 1000), ypart(angle + i * ANGLE_4 + ANGLE_8, 1000), angle, 2, xa); } xa *= -1; for (i = 0; i < 8; i ++) { shoot_diamond(w, x, y, xpart(angle + i * ANGLE_8 + ANGLE_16, 2000), ypart(angle + i * ANGLE_8 + ANGLE_16, 2000), angle, 1, xa); } enemy[w][e].recycle = 120 - arena.difficulty * 20; play_effectwfvx(w, NWAV_TONE, 1800, 200, enemy[w][e].x); break; case 2: // circle enemy[w][e].recycle --; if (enemy[w][e].recycle > 0) break; // angle = grand(ANGLE_1); // angle = radians_to_angle(atan2(player.y - (y + ypart(angle + i * ANGLE_8, 50000)), player.x - (x + xpart(angle + i * ANGLE_8, 50000)))); angle = attack_angle(w, e); for (i = 0; i < 8; i ++) { shoot_triangle(w, x + xpart(angle + i * ANGLE_8, 50000), y + ypart(angle + i * ANGLE_8, 50000), angle, 2); } enemy[w][e].recycle = 100 - arena.difficulty * 20; play_effectwfvx(w, NWAV_TONE, 2200, 200, enemy[w][e].x); break; default: case 3: // random enemy[w][e].recycle --; if (enemy[w][e].recycle > 0) break; xa = 1; if (grand(2) == 0) xa = -1; angle = grand(ANGLE_1); shoot_diamond(w, x, y, xpart(angle, 3000), ypart(angle, 3000), angle, 0, xa); enemy[w][e].recycle = 4 - arena.difficulty; play_effectwfvx(w, NWAV_TAP, 2200, 80, enemy[w][e].x); break; } switch(boss.bpattern2) { case 0: break; case 1: // inner spiral boss.brecycle --; if (boss.brecycle > 0) break; shoot_triangle(boss.side2, enemy[w][e].x + xpart(boss.spot_angle, 100000), enemy[w][e].y + ypart(boss.spot_angle, 100000), ANGLE_1 - boss.spot_angle, 0); shoot_triangle(boss.side2, enemy[w][e].x + xpart(boss.spot_angle + ANGLE_3, 100000), enemy[w][e].y + ypart(boss.spot_angle + ANGLE_3, 100000), ANGLE_1 - (boss.spot_angle + ANGLE_3), 1); shoot_triangle(boss.side2, enemy[w][e].x + xpart(boss.spot_angle - ANGLE_3, 100000), enemy[w][e].y + ypart(boss.spot_angle - ANGLE_3, 100000), ANGLE_1 - (boss.spot_angle - ANGLE_3), 2); boss.brecycle = 10 - arena.difficulty * 2; play_effectwfvx(w, NWAV_POP, 1500, 100, enemy[w][e].x); break; case 2: // bursts boss.brecycle --; if (boss.brecycle > 0) break; for (i = 0; i < 4; i ++) { shoot_triangle(boss.side2, enemy[w][e].x + xpart(boss.spot_angle, 100000), enemy[w][e].y + ypart(boss.spot_angle, 100000), ANGLE_1 - boss.spot_angle + i * ANGLE_4, 0); } for (i = 0; i < 4; i ++) { shoot_triangle(boss.side2, enemy[w][e].x + xpart(boss.spot_angle + ANGLE_3, 100000), enemy[w][e].y + ypart(boss.spot_angle + ANGLE_3, 100000), ANGLE_1 - (boss.spot_angle + ANGLE_3) + i * ANGLE_4, 1); } for (i = 0; i < 4; i ++) { shoot_triangle(boss.side2, enemy[w][e].x + xpart(boss.spot_angle - ANGLE_3, 100000), enemy[w][e].y + ypart(boss.spot_angle - ANGLE_3, 100000), ANGLE_1 - (boss.spot_angle - ANGLE_3) + i * ANGLE_4, 2); } boss.brecycle = 40 - arena.difficulty * 10; play_effectwfvx(w, NWAV_TAP, 2000, 70, enemy[w][e].x); break; default: case 3: // circle bursts boss.brecycle --; if (boss.brecycle > 0) break; switch(grand(3)) { case 0: for (i = 0; i < 16; i ++) { shoot_circle(boss.side2, enemy[w][e].x + xpart(boss.spot_angle, 100000), enemy[w][e].y + ypart(boss.spot_angle, 100000), xpart(i * ANGLE_16, 3000), ypart(i * ANGLE_16, 3000), i * ANGLE_16, 0); } break; case 1: for (i = 0; i < 16; i ++) { shoot_circle(boss.side2, enemy[w][e].x + xpart(boss.spot_angle + ANGLE_3, 100000), enemy[w][e].y + ypart(boss.spot_angle + ANGLE_3, 100000), xpart(i * ANGLE_16, 3000), ypart(i * ANGLE_16, 3000), i * ANGLE_16, 1); } break; case 2: for (i = 0; i < 16; i ++) { shoot_circle(boss.side2, enemy[w][e].x + xpart(boss.spot_angle - ANGLE_3, 100000), enemy[w][e].y + ypart(boss.spot_angle - ANGLE_3, 100000), xpart(i * ANGLE_16, 3000), ypart(i * ANGLE_16, 3000), i * ANGLE_16, 2); } break; } boss.brecycle = 60 - arena.difficulty * 15; play_effectwfvx(w, NWAV_TAP, 2200, 90, enemy[w][e].x); break; } boss.spot_angle += boss.spot_angle_inc; boss.spot_angle &= 1023; boss.spot_angle_inc += boss.spot_angle_inc_inc; if (boss.spot_angle_inc < -8) boss.spot_angle_inc = -8; if (boss.spot_angle_inc > 8) boss.spot_angle_inc = 8; if (arena.counter == 0) { boss.spot_angle_inc_inc *= -1; } } void new_mb2_firing(void) { int new_pattern = grand(3) + 1; while(new_pattern == boss.bpattern) { new_pattern = grand(3) + 1; } //set_boss1_firing(new_pattern); boss.bpattern = new_pattern; } void new_mb2_firing2(void) { int new_pattern = grand(3) + 1; while(new_pattern == boss.bpattern2) { new_pattern = grand(3) + 1; } boss.bpattern2 = new_pattern; } void move_boss2(int w, int e) { if (boss.fight == 0) { destroy_enemy(w, e); return; } if (w == 0) enemy[w][e].angle1 += 4; else enemy[w][e].angle1 -= 4; enemy[w][e].angle1 &= 1023; int x = enemy[w][e].x; int y = enemy[w][e].y; int xa, xb, i; enemy[w][e].angle2 += 12; enemy[w][e].angle2 &= 1023; if (boss.phase == 1) { enemy[w][e].recycle --; if (enemy[w][e].recycle <= 0) { switch(boss.colour) { case 0: xa = grand(ANGLE_1); for (i = 0; i < 16; i ++) { shoot_circle(w, x + xpart(xa, 20000), y + ypart(xa, 20000), xpart(xa, 1500), ypart(xa, 1500), xa, 0); xa += ANGLE_16; } play_effectwfvx(w, NWAV_TAP, 1200, 150, enemy[w][e].x); enemy[w][e].recycle = 50 - arena.difficulty * 10; break; case 1: xb = grand(ANGLE_1); xa = 1; if (grand(2) == 0) xa = -1; shoot_star(w, x + xpart(xb, 20000), y + ypart(xb, 20000), xpart(xb, 1500), ypart(xb, 1500), xb, 1, xa); play_effectwfvx(w, NWAV_TAP, 1200, 100, enemy[w][e].x); enemy[w][e].recycle = 30 - arena.difficulty * 5; break; case 2: xb = (enemy[w][e].angle2) & 1023; shoot_triangle(w, x + xpart(xb, 20000), y + ypart(xb, 20000), xb, 2); shoot_triangle(w, x + xpart((ANGLE_1 + ANGLE_4 + ANGLE_4) - xb, 20000), y + ypart((ANGLE_1 + ANGLE_4 + ANGLE_4) - xb, 20000), (ANGLE_1 + ANGLE_4 + ANGLE_4) - xb, 2); play_effectwfvx(w, NWAV_POP, 1200, 130, enemy[w][e].x); enemy[w][e].recycle = 7 - arena.difficulty; break; } } } switch(boss.phase) { case 0: // growing boss.size += boss.size_inc; if (arena.counter % 6 == 0) boss.size_inc ++; if (boss.size_inc > 6) boss.size_inc = 6; if (boss.size >= 100) { boss.size = 100; boss.phase = 1; boss.phase_count = 270; enemy[w][e].recycle = 10; } break; case 1: boss.phase_count --; if (boss.phase_count <= 0) { boss.phase = 2; boss.size_inc = 0; } boss.bflower_recycle --; if (boss.bflower_recycle <= 0) { spawn_bflower(); boss.bflower_recycle = 50 - arena.difficulty * 9; } break; case 2: // shrinking boss.size += boss.size_inc; if (arena.counter % 6 == 0) boss.size_inc --; if (boss.size_inc < -6) boss.size_inc = -6; if (boss.size <= 20) { boss.size = 20; boss.phase = 0; boss.size_inc = 1; boss2_swap(); } break; } } void boss2_swap(void) { create_cloud(0, CLOUD_SHOCKWAVE2, 2, 160000, 120000, 0, 0, 20); create_cloud(0, CLOUD_EXPLODE2, 0, 160000, 120000, 0, 0, 20); create_cloud(1, CLOUD_SHOCKWAVE2, 2, 160000, 120000, 0, 0, 20); create_cloud(1, CLOUD_EXPLODE2, 0, 160000, 120000, 0, 0, 20); play_effectwfvx(boss.side1, NWAV_BLOP, 700, 180, enemy[boss.side1][boss.e1].x); if (boss.side1 == 0) boss.side1 = 1; else boss.side1 = 0; if (boss.side1 == 0) boss.side2 = 1; else boss.side2 = 0; int w = boss.side2; int e = boss.e1; int e2 = create_enemy(boss.side1, ENEMY_BOSS2, 0, enemy[w][e].x, enemy[w][e].y, enemy[w][e].angle1, 0,0,0,0,0,0,0); enemy[boss.side1] [e2].persistent = 1; boss.e1 = e2; boss.colour = grand(3); destroy_enemy(boss.side2, e); } void spawn_bflower(void) { int i; int bfs = 0; for (i = 0; i < NO_ENEMIES; i ++) { if (enemy[boss.side2][i].type == ENEMY_BFLOWER) bfs ++; } if (bfs > 8) return; int angle = grand(ANGLE_1); int distance = 30000 + grand(70000); int angle2 = grand(ANGLE_1); int x = 160000 + xpart(angle, distance); int y = 120000 + ypart(angle, distance); int e = create_enemy(boss.side2, ENEMY_BFLOWER, 0, x, y, 0, 0,0,0,0,0,0,0); if (e != -1) { enemy[boss.side2][e].angle3 = grand(3); angle = grand(ANGLE_1); distance = 200 + grand(200); enemy[boss.side2][e].x_speed = xpart(angle, distance); enemy[boss.side2][e].y_speed = ypart(angle, distance); } // angle1 = angle // angle2 = size // angle3 = colour } void move_bflower(int w, int e) { enemy[w][e].x += enemy[w][e].x_speed; enemy[w][e].y += enemy[w][e].y_speed; if (w == 0) enemy[w][e].angle1 += 8; else enemy[w][e].angle1 -= 8; if (enemy[w][e].angle2 < 100) enemy[w][e].angle2 += 2; enemy[w][e].recycle --; int angle; int xa; if (enemy[w][e].recycle <= 0) { switch(enemy[w][e].angle3) { case 0: // single aimed triangle angle = attack_angle(w, e); shoot_triangle(w, enemy[w][e].x, enemy[w][e].y, angle, 0); enemy[w][e].recycle = 90 - arena.difficulty * 15; play_effectwfvx(w, NWAV_TAP, 2200, 80, enemy[w][e].x); break; case 1: // double aimed diamond angle = attack_angle(w, e); xa = 1; if (grand(2) == 0) xa = -1; shoot_diamond(w, enemy[w][e].x, enemy[w][e].y, xpart(angle - ANGLE_32, 2000), ypart(angle - ANGLE_32, 2000), angle - ANGLE_32, 1, xa); xa *= -1; shoot_diamond(w, enemy[w][e].x, enemy[w][e].y, xpart(angle + ANGLE_32, 2000), ypart(angle + ANGLE_32, 2000), angle + ANGLE_32, 1, xa); enemy[w][e].recycle = 130 - arena.difficulty * 20; play_effectwfvx(w, NWAV_TAP, 2000, 90, enemy[w][e].x); break; case 2: // triple random triangle angle = grand(ANGLE_1); shoot_triangle(w, enemy[w][e].x, enemy[w][e].y, angle, 2); shoot_triangle(w, enemy[w][e].x, enemy[w][e].y, angle - ANGLE_3, 2); shoot_triangle(w, enemy[w][e].x, enemy[w][e].y, angle + ANGLE_3, 2); enemy[w][e].recycle = 110 - arena.difficulty * 20; play_effectwfvx(w, NWAV_TAP, 1800, 100, enemy[w][e].x); break; } } if (enemy[w] [e].x <= -22000 || enemy[w] [e].y <= -22000 || enemy[w] [e].x >= 342000 || enemy[w] [e].y >= 502000) { destroy_enemy(w, e); } } void move_boss1(int w, int e) { if (boss.fight == 0) { destroy_enemy(w, e); return; } if (w == 0) enemy[w][e].angle1 += 4; else enemy[w][e].angle1 -= 4; enemy[w][e].angle1 &= 1023; if (w == 1) { enemy[w][e].x = enemy[0][boss.e1].x; enemy[w][e].y = enemy[0][boss.e1].y; return; } if (boss.exploding > 0) { boss1_exploding(); return; } switch(boss.moving) { case BOSS1_APPROACH: if (enemy[w][e].y > 100000) { drag_enemy(w, e, 960); } if (enemy[w][e].y_speed < 500) { enemy[w][e].y_speed = 0; boss.moving = BOSS1_OPEN; } break; case BOSS1_OPEN: if (boss.arm1 < 60) boss.arm1 += 2; else boss.arm2 += 2; if (boss.arm2 >= 60) { boss.moving = BOSS1_SIDES; boss.move_x = pos_or_neg(1); boss.move_time = 4; set_boss1_firing(BOSS1_FIRE_CIRCLES); } break; case BOSS1_SIDES: boss.pulse += 8; if (enemy[w][e].y < 60000) enemy[w][e].y_speed += 200; if (enemy[w][e].y > 170000) enemy[w][e].y_speed -= 200; if (boss.move_x == -1) { enemy[w][e].x_speed -= 250; drag_enemy(w, e, 850); if (enemy[w][e].x < 90000) { boss.move_x = 1; boss.move_time --; } } else { enemy[w][e].x_speed += 250; drag_enemy(w, e, 850); if (enemy[w][e].x > 230000) { boss.move_x = -1; boss.move_time --; } } if (boss.move_time == 0) { boss1_new_pattern(); new_boss1_firing(); } break; case BOSS1_SWIRL: boss.pulse += 32; if (enemy[w][e].x < 160000 && enemy[w][e].y < 100000) enemy[w][e].x_speed += 200; if (enemy[w][e].x >= 160000 && enemy[w][e].y < 100000) enemy[w][e].y_speed += 160; if (enemy[w][e].x >= 160000 && enemy[w][e].y >= 100000) enemy[w][e].x_speed -= 200; if (enemy[w][e].x < 160000 && enemy[w][e].y >= 100000) enemy[w][e].y_speed -= 160; drag_enemy(w, e, 970); boss.move_time --; if (boss.move_time == 0) { boss1_new_pattern(); new_boss1_firing(); } break; case BOSS1_SWIRL2: boss.pulse += 32; if (enemy[w][e].x < 160000 && enemy[w][e].y < 100000) enemy[w][e].y_speed += 160; if (enemy[w][e].x >= 160000 && enemy[w][e].y < 100000) enemy[w][e].x_speed -= 200; if (enemy[w][e].x >= 160000 && enemy[w][e].y >= 100000) enemy[w][e].y_speed -= 160; if (enemy[w][e].x < 160000 && enemy[w][e].y >= 100000) enemy[w][e].x_speed += 200; drag_enemy(w, e, 970); boss.move_time --; if (boss.move_time == 0) { boss1_new_pattern(); new_boss1_firing(); } break; case BOSS1_BEAM1: boss.pulse += 8; if (enemy[w][e].y < 110000) enemy[w][e].y_speed += 200; if (enemy[w][e].y > 130000) enemy[w][e].y_speed -= 200; if (enemy[w][e].x < 150000) enemy[w][e].x_speed += 200; if (enemy[w][e].x > 170000) enemy[w][e].x_speed -= 200; if (enemy[w][e].x > 150000 && enemy[w][e].x < 170000 && enemy[w][e].y > 110000 && enemy[w][e].y < 130000) { boss.moving = BOSS1_BEAM2; } drag_enemy(w, e, 950); break; case BOSS1_BEAM2: boss.pulse += 4; drag_enemy(w, e, 900); if (boss.arm_beam <= 0) boss.move_time --; if (boss.move_time <= 0) { boss.arm_change = 1; boss1_new_pattern(); new_boss1_firing(); } break; } switch(boss.bpattern) { case BOSS1_FIRE_CIRCLES: boss.brecycle --; if (boss.brecycle <= 0) { if (boss.bstatus1 == 0) { boss1_fire_circle(0, boss.e1, 0);//boss.bstatus2); boss.bstatus1 = 1; } else { boss1_fire_circle(1, boss.e2, 0);//boss.bstatus2); boss.bstatus1 = 0; } /* boss.bstatus2 ++; if (boss.bstatus2 == 3) boss.bstatus2 = 0;*/ boss.brecycle = 18 - arena.difficulty * 2; } break; case BOSS1_FIRE_SCATTER: boss.brecycle --; boss.bstatus1 = grand(2); if (boss.brecycle <= 0) { if (boss.bstatus1 == 0) { boss1_fire_scatter(0, boss.e1, 1);//boss.bstatus2); } else { boss1_fire_scatter(1, boss.e2, 1);//boss.bstatus2); } boss.brecycle = 3 - arena.difficulty; } break; case BOSS1_FIRE_SPIRAL: boss.brecycle --; if (boss.brecycle <= 0) { /* if (boss.bstatus1 == 0) { boss1_fire_spiral(0, boss.e1, 2);//boss.bstatus2); boss.bstatus1 = 1; } else { boss1_fire_spiral(1, boss.e2, 2);//boss.bstatus2); boss.bstatus1 = 0; }*/ boss1_fire_spiral(0, boss.e1, 2);//boss.bstatus2); boss.brecycle = 4 - arena.difficulty; } break; case BOSS1_FIRE_BURST: boss.brecycle --; if (boss.brecycle <= 0) { if (boss.bstatus1 == 0) { boss1_fire_burst(0, boss.e1, 0);//boss.bstatus2); } else { boss1_fire_burst(1, boss.e2, 0);//boss.bstatus2); } boss.brecycle = 6 - arena.difficulty; boss.bstatus2 --; if (boss.bstatus2 == 0) { if (boss.bstatus1 == 0) boss.bstatus1 = 1; else boss.bstatus1 = 0; boss.bstatus2 = 7; boss.brecycle = 6 - arena.difficulty; } } break; } enemy[w][e].x += enemy[w][e].x_speed; enemy[w][e].y += enemy[w][e].y_speed; boss1_arms(); boss.pulse &= 1023; } /*enum { BOSS1_APPROACH, BOSS1_HOLD, BOSS1_SIDES, BOSS1_SWIRL, BOSS1_DART }; */ void boss1_arms(void) { if (boss.moving == BOSS1_APPROACH) return; if (boss.moving == BOSS1_OPEN && boss.arm2 == 58) { change_boss1_arms(2); boss.arm_change = 150; return; } if (boss.moving == BOSS1_BEAM1 || boss.moving == BOSS1_BEAM2) { if (boss.arm_colour != 1) change_boss1_arms(1); boss.arm_change = 50; boss.arm_recycle --; if (boss.arm_beam > 0) { boss1_arm_greenbeam(); return; } if (boss.arm_recycle == 0) { boss1_arm_greenbeam(); boss.arm_recycle = 200; } return; } boss.arm_change --; if (boss.arm_change == 0) { if (boss.arm_colour == 0) change_boss1_arms(2); else change_boss1_arms(0); //change_boss1_arms(grand(2) * 2); // 0 or 2 boss.arm_change = 300; return; } boss.arm_recycle --; if (boss.arm_recycle == 0) { switch(boss.arm_colour) { case 0: default: boss1_arm_redshot(); boss.arm_recycle = 250 - arena.difficulty * 50; break; case 1: boss1_arm_greenbeam(); boss.arm_recycle = 250 - arena.difficulty * 50; break; case 2: boss1_arm_blueshot(); boss.arm_recycle = 125 - arena.difficulty * 25; break; } } } void boss1_arm_greenbeam(void) { int e = boss.e1; if (boss.arm_beam == 0) { boss.arm_beam = 300; boss.arm_beam_side = grand(2); play_effectwfvx(boss.arm_beam_side, NWAV_BEAM1, 600 + grand(50), 250, enemy[boss.arm_beam_side][e].x); } int xa = boss.arm1 * (1000 / 16); int xb = boss.arm1 * (1000 / 8); int ya = boss.arm2 * (1000 / 8); int yb = xpart(boss.pulse, 4000); int w = 0, b; int i; int x, y; //int angle; for (i = 0; i < 4; i ++) { switch(i) { case 0: x = enemy[w][e].x - 48000 - xa; y = enemy[w][e].y - 40000 - ya - yb; break; case 1: x = enemy[w][e].x - 29000 - xb; y = enemy[w][e].y + 40000 + ya + yb; break; case 2: x = enemy[w][e].x + 29000 + xb; y = enemy[w][e].y + 40000 + ya + yb; break; case 3: x = enemy[w][e].x + 48000 + xa; y = enemy[w][e].y - 40000 - ya - yb; break; } if (boss.arm_beam == 300) { boss.arm_beam_angle [i] = radians_to_angle(atan2(player.y - y, player.x - x)); } if (arena.counter % 3 == 0) { if ((i + 1) % 2 == 0) boss.arm_beam_angle [i] ++; else boss.arm_beam_angle [i] --; } b = create_ebullet(boss.arm_beam_side, EBULLET_BEAM1, 1, x, y, xpart(boss.arm_beam_angle [i], 4000), ypart(boss.arm_beam_angle [i], 4000), boss.arm_beam_angle [i]); if (b != -1) { ebullet[boss.arm_beam_side][b].timeout = 2; ebullet[boss.arm_beam_side][b].status = boss.arm_beam; ebullet[boss.arm_beam_side][b].status2 = 1; } } boss.arm_beam -= 2; } void boss1_arm_redshot(void) { // int angle = attack_angle(w, e); //radians_to_angle(atan2(player.y - enemy[w] [e].y, player.x - enemy[w] [e].x)); int xa = boss.arm1 * (1000 / 16); int xb = boss.arm1 * (1000 / 8); int ya = boss.arm2 * (1000 / 8); int yb = xpart(boss.pulse, 4000); int e = boss.e1; int w = 0, b; int i; int x, y; int angle; for (i = 0; i < 4; i ++) { switch(i) { case 0: x = enemy[w][e].x - 48000 - xa; y = enemy[w][e].y - 40000 - ya - yb; break; case 1: x = enemy[w][e].x - 29000 - xb; y = enemy[w][e].y + 40000 + ya + yb; break; case 2: x = enemy[w][e].x + 29000 + xb; y = enemy[w][e].y + 40000 + ya + yb; break; case 3: x = enemy[w][e].x + 48000 + xa; y = enemy[w][e].y - 40000 - ya - yb; break; } angle = radians_to_angle(atan2(player.y - y, player.x - x)); b = create_ebullet(i % 2, EBULLET_FAT_SHOT, 0, x, y, xpart(angle, 4500), ypart(angle, 4500), angle); create_ebullet(i % 2, EBULLET_FAT_SHOT, 0, x, y, xpart(angle, 3500), ypart(angle, 3500), angle); create_ebullet(i % 2, EBULLET_FAT_SHOT, 0, x, y, xpart(angle, 2500), ypart(angle, 2500), angle); if (b != -1) create_cloud(i % 2, CLOUD_EXPLODE, 0, x, y, ebullet[i % 2][b].x_speed, ebullet[i % 2][b].y_speed, 14 + grand(5)); } /*create_cloud(w, CLOUD_SHOCKWAVE, col, enemy[w][e].x - 29000 - xb, enemy[w][e].y + 40000 + ya + yb, enemy[w][e].x_speed, enemy[w][e].y_speed, 20); create_cloud(w, CLOUD_SHOCKWAVE, col, enemy[w][e].x + 29000 + xb, enemy[w][e].y + 40000 + ya + yb, enemy[w][e].x_speed, enemy[w][e].y_speed, 20); create_cloud(w, CLOUD_SHOCKWAVE, col, enemy[w][e].x - 48000 - xa, enemy[w][e].y - 40000 - ya - yb, enemy[w][e].x_speed, enemy[w][e].y_speed, 20); create_cloud(w, CLOUD_SHOCKWAVE, col, enemy[w][e].x + 48000 + xa, enemy[w][e].y - 40000 - ya - yb, enemy[w][e].x_speed, enemy[w][e].y_speed, 20); create_ebullet(w, EBULLET_SHOT, 0, enemy[w][e].x, enemy[w][e].y, xpart(angle, 4000), ypart(angle, 4000), angle); */ } void boss1_arm_blueshot(void) { // int angle = attack_angle(w, e); //radians_to_angle(atan2(player.y - enemy[w] [e].y, player.x - enemy[w] [e].x)); int xa = boss.arm1 * (1000 / 16); int xb = boss.arm1 * (1000 / 8); int ya = boss.arm2 * (1000 / 8); int yb = xpart(boss.pulse, 4000); int e = boss.e1; int w = 0, b; int i; int x, y; int angle; for (i = 0; i < 4; i ++) { switch(i) { case 0: x = enemy[w][e].x - 29000 - xb; y = enemy[w][e].y + 40000 + ya + yb; break; case 1: x = enemy[w][e].x - 48000 - xa; y = enemy[w][e].y - 40000 - ya - yb; break; case 2: x = enemy[w][e].x + 48000 + xa; y = enemy[w][e].y - 40000 - ya - yb; break; case 3: x = enemy[w][e].x + 29000 + xb; y = enemy[w][e].y + 40000 + ya + yb; break; } angle = radians_to_angle(atan2(player.y - y, player.x - x)); b = create_ebullet(i % 2, EBULLET_FATTER_SHOT, 2, x, y, xpart(angle, 3500 + arena.difficulty * 500), ypart(angle, 3500 + arena.difficulty * 500), angle); if (b != -1) create_cloud(i % 2, CLOUD_EXPLODE, 2, x, y, ebullet[i % 2][b].x_speed, ebullet[i % 2][b].y_speed, 14 + grand(5)); } /*create_cloud(w, CLOUD_SHOCKWAVE, col, enemy[w][e].x - 29000 - xb, enemy[w][e].y + 40000 + ya + yb, enemy[w][e].x_speed, enemy[w][e].y_speed, 20); create_cloud(w, CLOUD_SHOCKWAVE, col, enemy[w][e].x + 29000 + xb, enemy[w][e].y + 40000 + ya + yb, enemy[w][e].x_speed, enemy[w][e].y_speed, 20); create_cloud(w, CLOUD_SHOCKWAVE, col, enemy[w][e].x - 48000 - xa, enemy[w][e].y - 40000 - ya - yb, enemy[w][e].x_speed, enemy[w][e].y_speed, 20); create_cloud(w, CLOUD_SHOCKWAVE, col, enemy[w][e].x + 48000 + xa, enemy[w][e].y - 40000 - ya - yb, enemy[w][e].x_speed, enemy[w][e].y_speed, 20); create_ebullet(w, EBULLET_SHOT, 0, enemy[w][e].x, enemy[w][e].y, xpart(angle, 4000), ypart(angle, 4000), angle); */ } void change_boss1_arms(int col) { boss.arm_colour = col; /* int xa = boss.arm1 * (1000 / 16); int xb = boss.arm1 * (1000 / 8); int ya = boss.arm2 * (1000 / 8); int yb = xpart(boss.pulse, 4000); int e = boss.e1; int w = 0;*/ /*create_cloud(w, CLOUD_SHOCKWAVE, col, enemy[w][e].x - 29000 - xb, enemy[w][e].y + 40000 + ya + yb, enemy[w][e].x_speed, enemy[w][e].y_speed, 20); create_cloud(w, CLOUD_SHOCKWAVE, col, enemy[w][e].x + 29000 + xb, enemy[w][e].y + 40000 + ya + yb, enemy[w][e].x_speed, enemy[w][e].y_speed, 20); create_cloud(w, CLOUD_SHOCKWAVE, col, enemy[w][e].x - 48000 - xa, enemy[w][e].y - 40000 - ya - yb, enemy[w][e].x_speed, enemy[w][e].y_speed, 20); create_cloud(w, CLOUD_SHOCKWAVE, col, enemy[w][e].x + 48000 + xa, enemy[w][e].y - 40000 - ya - yb, enemy[w][e].x_speed, enemy[w][e].y_speed, 20); w = 1; create_cloud(w, CLOUD_SHOCKWAVE, col, enemy[w][e].x - 29000 - xb, enemy[w][e].y + 40000 + ya + yb, enemy[w][e].x_speed, enemy[w][e].y_speed, 20); create_cloud(w, CLOUD_SHOCKWAVE, col, enemy[w][e].x + 29000 + xb, enemy[w][e].y + 40000 + ya + yb, enemy[w][e].x_speed, enemy[w][e].y_speed, 20); create_cloud(w, CLOUD_SHOCKWAVE, col, enemy[w][e].x - 48000 - xa, enemy[w][e].y - 40000 - ya - yb, enemy[w][e].x_speed, enemy[w][e].y_speed, 20); create_cloud(w, CLOUD_SHOCKWAVE, col, enemy[w][e].x + 48000 + xa, enemy[w][e].y - 40000 - ya - yb, enemy[w][e].x_speed, enemy[w][e].y_speed, 20);*/ /* create_cloud(w, CLOUD_SHOCKWAVE, col, enemy[w][e].x - 29000 - xb, enemy[w][e].y + 40000 + ya + yb, 0, 0, 20); create_cloud(w, CLOUD_SHOCKWAVE, col, enemy[w][e].x + 29000 + xb, enemy[w][e].y + 40000 + ya + yb, 0, 0, 20); create_cloud(w, CLOUD_SHOCKWAVE, col, enemy[w][e].x - 48000 - xa, enemy[w][e].y - 40000 - ya - yb, 0, 0, 20); create_cloud(w, CLOUD_SHOCKWAVE, col, enemy[w][e].x + 48000 + xa, enemy[w][e].y - 40000 - ya - yb, 0, 0, 20); w = 1; create_cloud(w, CLOUD_SHOCKWAVE, col, enemy[w][e].x - 29000 - xb, enemy[w][e].y + 40000 + ya + yb, 0, 0, 20); create_cloud(w, CLOUD_SHOCKWAVE, col, enemy[w][e].x + 29000 + xb, enemy[w][e].y + 40000 + ya + yb, 0, 0, 20); create_cloud(w, CLOUD_SHOCKWAVE, col, enemy[w][e].x - 48000 - xa, enemy[w][e].y - 40000 - ya - yb, 0, 0, 20); create_cloud(w, CLOUD_SHOCKWAVE, col, enemy[w][e].x + 48000 + xa, enemy[w][e].y - 40000 - ya - yb, 0, 0, 20); */ } void boss1_new_pattern(void) { if (boss.arm_beam > 0) boss.arm_beam = 0; if (boss.moving != BOSS1_BEAM2 && boss.hp <= boss.max_hp / 2) { boss.moving = BOSS1_BEAM1; boss.move_time = 150 + grand(100); //set_boss1_firing(BOSS1_FIRE_SCATTER);//grand(3) + 1); return; } if ((boss.moving == BOSS1_SWIRL && grand(2) == 0) || (boss.moving == BOSS1_SWIRL2 && grand(2) == 0) || (boss.moving == BOSS1_BEAM2 && grand(2) == 0)) { boss.moving = BOSS1_SIDES; boss.move_x = pos_or_neg(1); boss.move_time = 3 + grand(3); return; } // if (boss.moving == BOSS1_SIDES) { if (boss.moving == BOSS1_SWIRL2) boss.moving = BOSS1_SWIRL; else { if (boss.moving == BOSS1_SWIRL) boss.moving = BOSS1_SWIRL2; else { boss.moving = BOSS1_SWIRL; if (grand(2) == 0) boss.moving = BOSS1_SWIRL2; } } boss.move_time = 500 + grand(500); return; } } void new_boss1_firing(void) { int new_pattern = grand(4) + 1; while(new_pattern == boss.bpattern) { new_pattern = grand(4) + 1; } set_boss1_firing(new_pattern); } void set_boss1_firing(int pattern) { switch(pattern) { case BOSS1_FIRE_CIRCLES: boss.bpattern = BOSS1_FIRE_CIRCLES; boss.brecycle = 50; boss.bstatus1 = 0; boss.bstatus2 = 0; break; case BOSS1_FIRE_SCATTER: boss.bpattern = BOSS1_FIRE_SCATTER; boss.brecycle = 50; boss.bstatus1 = 0; boss.bstatus2 = 0; break; case BOSS1_FIRE_SPIRAL: boss.bpattern = BOSS1_FIRE_SPIRAL; boss.brecycle = 50; boss.bstatus1 = 0; boss.bstatus2 = 0; break; case BOSS1_FIRE_BURST: boss.bpattern = BOSS1_FIRE_BURST; boss.brecycle = 50; boss.bstatus1 = 0; boss.bstatus2 = 10; break; } } void boss1_fire_spiral(int w, int e, int col) { int i = boss.bstatus2; int b; int angle = enemy[w][e].angle1 + i * ANGLE_8; w = 0; e = boss.e1; play_effectwfvx(w, NWAV_POP, 1500 + grand(50), 120, enemy[w][e].x); b = create_ebullet(w, EBULLET_SPIN, col, enemy[w][e].x + xpart(angle, 9000), enemy[w] [e].y + ypart(angle, 9000) + BOSS1_Y_MOD, xpart(angle, 2500), ypart(angle, 2500), angle); if (b != -1) { create_cloud(w, CLOUD_EXPLODE, col, ebullet[w][b].x, ebullet[w][b].y + BOSS1_Y_MOD, ebullet[w][b].x_speed, ebullet[w][b].y_speed, 14 + grand(5)); ebullet[w][b].turn_direction = 6; } i = 7 - boss.bstatus2; w = 1; e = boss.e2; angle = ANGLE_1 - enemy[w][e].angle1; angle += i * ANGLE_8; b = create_ebullet(w, EBULLET_SPIN, col, enemy[w][e].x + xpart(angle, 9000), enemy[w] [e].y + ypart(angle, 9000) + BOSS1_Y_MOD, xpart(angle, 2500), ypart(angle, 2500), angle); if (b != -1) { create_cloud(w, CLOUD_EXPLODE, col, ebullet[w][b].x, ebullet[w][b].y + BOSS1_Y_MOD, ebullet[w][b].x_speed, ebullet[w][b].y_speed, 14 + grand(5)); ebullet[w][b].turn_direction = -6; } boss.bstatus2 --; if (boss.bstatus2 == -1) boss.bstatus2 = 7; } void boss1_fire_scatter(int w, int e, int col) { int i = grand(8); int b; play_effectwfvx(w, NWAV_POP, 1250 + grand(50), 120, enemy[w][e].x); b = create_ebullet(w, EBULLET_SPIN, col, enemy[w][e].x + xpart(enemy[w] [e].angle1 + i * ANGLE_8, 9000), enemy[w] [e].y + ypart(enemy[w] [e].angle1 + i * ANGLE_8, 9000) + BOSS1_Y_MOD, xpart(enemy[w] [e].angle1 + i * ANGLE_8, 3000), ypart(enemy[w] [e].angle1 + i * ANGLE_8, 3000), enemy[w] [e].angle1 + i * ANGLE_8); if (b != -1) { create_cloud(w, CLOUD_EXPLODE, col, ebullet[w][b].x, ebullet[w][b].y, ebullet[w][b].x_speed, ebullet[w][b].y_speed, 14 + grand(5)); if (w == 0) ebullet[w][b].turn_direction = 6 + grand(10); else ebullet[w][b].turn_direction = -6 - grand(10); } } void boss1_fire_burst(int w, int e, int col) { int angle = enemy[w][e].angle1; int b; int i; play_effectwfvx(w, NWAV_POP, 1000 + grand(50), 120, enemy[w][e].x); for (i = 0; i < 3; i ++) { b = create_ebullet(w, EBULLET_SPIN, col, enemy[w][e].x + xpart(angle, 9000), enemy[w] [e].y + ypart(angle, 9000) + BOSS1_Y_MOD, xpart(angle, 3000), ypart(angle, 3000), angle); if (b != -1) { create_cloud(w, CLOUD_EXPLODE, col, ebullet[w][b].x, ebullet[w][b].y, ebullet[w][b].x_speed, ebullet[w][b].y_speed, 14 + grand(5)); if (w == 0) ebullet[w][b].turn_direction = 6 + boss.bstatus2 * 2; else ebullet[w][b].turn_direction = -6 - boss.bstatus2 * 2; } angle += ANGLE_1 / 3; } /* angle += ANGLE_4; b = create_ebullet(w, EBULLET_SPIN, col, enemy[w][e].x + xpart(angle, 9000), enemy[w] [e].y + ypart(angle, 9000) + BOSS1_Y_MOD, xpart(angle, 3000), ypart(angle, 3000), angle); if (b != -1) { create_cloud(w, CLOUD_EXPLODE, col, ebullet[w][b].x, ebullet[w][b].y, ebullet[w][b].x_speed, ebullet[w][b].y_speed, 14 + grand(5)); if (w == 0) ebullet[w][b].turn_direction = 6 + boss.bstatus2 * 2; else ebullet[w][b].turn_direction = -6 - boss.bstatus2 * 2; }*/ } // this was supposed to be a circle, but I made a mistake in the loop and I like it better this way. void boss1_fire_circle(int w, int e, int col) { int i; int b; play_effectwfvx(w, NWAV_SHOT, 1400 + grand(50), 120, enemy[w][e].x); for (i = 0; i < 6; i ++) { b = create_ebullet(w, EBULLET_FAT_SHOT, col, enemy[w][e].x + xpart(enemy[w] [e].angle1 + i * ANGLE_8, 9000), enemy[w] [e].y + ypart(enemy[w] [e].angle1 + i * ANGLE_8, 9000) + BOSS1_Y_MOD, xpart(enemy[w] [e].angle1 + i * ANGLE_8, 3000), ypart(enemy[w] [e].angle1 + i * ANGLE_8, 3000), enemy[w] [e].angle1 + i * ANGLE_8); if (b != -1) { create_cloud(w, CLOUD_EXPLODE, col, ebullet[w][b].x, ebullet[w][b].y, ebullet[w][b].x_speed, ebullet[w][b].y_speed, 14 + grand(5)); } } } void kill_boss1(void) { if (boss.exploding > 0) return; int e = boss.e1; play_effectwfvx(0, NWAV_BIGBANG, 1600 + grand(350), 120, enemy[0][e].x); play_effectwfvx(1, NWAV_BIGBANG, 500 + grand(150), 120, enemy[1][e].x); create_cloud(0, CLOUD_LARGE_SHOCKWAVE, 0, enemy[0] [e].x, enemy[0] [e].y + 13000, 0, 0, 50); create_cloud(0, CLOUD_EXPLODE, 0, enemy[0] [e].x, enemy[0] [e].y + 13000, 0, 0, 30 + grand(10)); create_cloud(1, CLOUD_LARGE_SHOCKWAVE, 0, enemy[0] [e].x, enemy[0] [e].y + 13000, 0, 0, 50); create_cloud(1, CLOUD_EXPLODE, 0, enemy[0] [e].x, enemy[0] [e].y + 13000, 0, 0, 30 + grand(10)); int i, j, angle, speed, distance = 15000, angle2; for (i = 0; i < 4; i ++) { angle += ANGLE_8 + grand(ANGLE_4); for (j = 0; j < 5; j ++) { speed = 2000 + grand(3500) + grand(3000); angle2 = angle + grand(ANGLE_16); create_cloud(0, CLOUD_DRAG_EXPLODE, 0, enemy[0] [e].x + xpart(angle2, distance), enemy[0] [e].y + ypart(angle2, distance) + 13000, xpart(angle2, speed), ypart(angle2, speed), 40 + grand(20)); create_cloud(1, CLOUD_DRAG_EXPLODE, 0, enemy[0] [e].x + xpart(angle2, distance), enemy[0] [e].y + ypart(angle2, distance) + 13000, xpart(angle2, speed), ypart(angle2, speed), 40 + grand(20)); } } boss.exploding = 80; if (enemy[0][e].x < 160000) enemy[0][e].x_speed += 4000; else enemy[0][e].x_speed -= 4000; if (enemy[0][e].y < 160000) enemy[0][e].y_speed += 4000; else enemy[0][e].y_speed -= 4000; } void boss1_exploding(void) { boss.exploding --; drag_enemy(0, boss.e1, 960); int w = 0; int e = boss.e1; enemy[0][e].x += enemy[0][e].x_speed; enemy[0][e].y += enemy[0][e].y_speed; if (boss.exploding <= 10) { boss.exploding = 10; create_cloud(0, CLOUD_LARGE_SHOCKWAVE, 0, enemy[w] [e].x, enemy[w] [e].y + 13000, 0, 0, 50); create_cloud(0, CLOUD_EXPLODE, 0, enemy[w] [e].x, enemy[w] [e].y + 13000, 0, 0, 40 + grand(20)); create_cloud(0, CLOUD_EXPLODE, 0, enemy[w] [e].x + 35000 + grand(10000), enemy[w] [e].y + 10000 - grand(10000), 0, 0, 40 + grand(20)); create_cloud(0, CLOUD_EXPLODE, 0, enemy[w] [e].x - 35000 - grand(10000), enemy[w] [e].y + 10000 - grand(10000), 0, 0, 40 + grand(20)); create_cloud(1, CLOUD_LARGE_SHOCKWAVE, 0, enemy[w] [e].x, enemy[w] [e].y + 13000, 0, 0, 50); create_cloud(1, CLOUD_EXPLODE, 0, enemy[w] [e].x, enemy[w] [e].y + 13000, 0, 0, 40 + grand(20)); create_cloud(1, CLOUD_EXPLODE, 0, enemy[w] [e].x + 35000 + grand(10000), enemy[w] [e].y + 10000 - grand(10000), 0, 0, 40 + grand(20)); create_cloud(1, CLOUD_EXPLODE, 0, enemy[w] [e].x - 35000 - grand(10000), enemy[w] [e].y + 10000 - grand(10000), 0, 0, 40 + grand(20)); create_cloud(0, CLOUD_SPAWNER, 0, enemy[w][e].x, enemy[w][e].y, 0, 0, 60); create_cloud(1, CLOUD_SPAWNER, 0, enemy[w][e].x, enemy[w][e].y, 0, 0, 60); create_cloud(0, CLOUD_LARGE_SPRAY, 0, enemy[w][e].x + 9000, enemy[w][e].y - 9000, xpart(-ANGLE_8, 6000), ypart(-ANGLE_8, 6000), 15 + grand(7)); create_cloud(0, CLOUD_LARGE_SPRAY, 0, enemy[w][e].x + 9000, enemy[w][e].y + 9000, xpart(ANGLE_8, 6000), ypart(ANGLE_8, 6000), 15 + grand(7)); create_cloud(0, CLOUD_LARGE_SPRAY, 0, enemy[w][e].x - 9000, enemy[w][e].y + 9000, xpart(ANGLE_4 + ANGLE_8, 6000), ypart(ANGLE_4 + ANGLE_8, 6000), 15 + grand(7)); create_cloud(0, CLOUD_LARGE_SPRAY, 0, enemy[w][e].x - 9000, enemy[w][e].y - 9000, xpart(-ANGLE_4 - ANGLE_8, 6000), ypart(- ANGLE_4 - ANGLE_8, 6000), 15 + grand(7)); create_cloud(1, CLOUD_LARGE_SPRAY, 0, enemy[w][e].x + 9000, enemy[w][e].y - 9000, xpart(-ANGLE_8, 6000), ypart(-ANGLE_8, 6000), 15 + grand(7)); create_cloud(1, CLOUD_LARGE_SPRAY, 0, enemy[w][e].x + 9000, enemy[w][e].y + 9000, xpart(ANGLE_8, 6000), ypart(ANGLE_8, 6000), 15 + grand(7)); create_cloud(1, CLOUD_LARGE_SPRAY, 0, enemy[w][e].x - 9000, enemy[w][e].y + 9000, xpart(ANGLE_4 + ANGLE_8, 6000), ypart(ANGLE_4 + ANGLE_8, 6000), 15 + grand(7)); create_cloud(1, CLOUD_LARGE_SPRAY, 0, enemy[w][e].x - 9000, enemy[w][e].y - 9000, xpart(-ANGLE_4 - ANGLE_8, 6000), ypart(- ANGLE_4 - ANGLE_8, 6000), 15 + grand(7)); play_effectwfvx(0, NWAV_BIGBANG, 1000 + grand(350), 120, enemy[0][e].x); play_effectwfvx(1, NWAV_BIGBANG, 200 + grand(150), 120, enemy[1][e].x); player_score(eclass[enemy[w][e].type].score); destroy_enemy(0, boss.e1); destroy_enemy(1, boss.e2); // boss.fight = 0; arena.level_finished = 250; // boss.exploding = 0; return; } create_cloud(0, CLOUD_EXPLODE, 0, enemy[w] [e].x - grand(80000) + grand(80000), enemy[w] [e].y - grand(80000) + grand(80000), 0, 0, 10 + grand(10)); create_cloud(1, CLOUD_EXPLODE, 0, enemy[w] [e].x - grand(80000) + grand(80000), enemy[w] [e].y - grand(80000) + grand(80000), 0, 0, 10 + grand(10)); } void kill_mb1(void) { int e = boss.e1; int w = boss.side1; int i; play_effectwfvx(w, NWAV_BIGBANG, 1000 + grand(350), 120, enemy[w][e].x); play_effectwfvx(w, NWAV_BIGBANG, 400 + grand(150), 120, enemy[w][e].x); create_cloud(w, CLOUD_LARGE_SHOCKWAVE, 2, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 50); create_cloud(w, CLOUD_LARGE_SHOCKWAVE, 0, enemy[w] [e].x - 39000, enemy[w] [e].y + 20000, 0, 0, 40); create_cloud(w, CLOUD_LARGE_SHOCKWAVE, 0, enemy[w] [e].x + 39000, enemy[w] [e].y + 20000, 0, 0, 40); for (i = 0; i < 4; i ++) { create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x + xpart(i * ANGLE_4 + ANGLE_8, 9000), enemy[w] [e].y + ypart(i * ANGLE_4 + ANGLE_8, 9000), xpart(i * ANGLE_4 + ANGLE_8, 3000), ypart(i * ANGLE_4 + ANGLE_8, 3000), 36); create_cloud(w, CLOUD_EXPLODE, 2, enemy[w] [e].x + xpart(i * ANGLE_4, 9000), enemy[w] [e].y + ypart(i * ANGLE_4, 9000), xpart(i * ANGLE_4, 1500), ypart(i * ANGLE_4, 1500), 36); } for (i = 0; i < 8; i ++) { create_cloud(w, CLOUD_EXPLODE, 1, enemy[w] [e].x + xpart(i * ANGLE_8 + ANGLE_16, 9000), enemy[w] [e].y + ypart(i * ANGLE_8 + ANGLE_16, 9000), xpart(i * ANGLE_8 + ANGLE_16, 2300), ypart(i * ANGLE_8 + ANGLE_16, 2300), 30); } create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 40); create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x - 30000, enemy[w] [e].y + 20000, 0, 0, 40 + grand(10)); create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x - 40000, enemy[w] [e].y + 25000, 0, 0, 40 + grand(10)); create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x - 50000, enemy[w] [e].y + 30000, 0, 0, 40 + grand(10)); create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x - 60000, enemy[w] [e].y + 35000, 0, 0, 40 + grand(10)); create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x + 30000, enemy[w] [e].y + 20000, 0, 0, 40 + grand(10)); create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x + 40000, enemy[w] [e].y + 25000, 0, 0, 40 + grand(10)); create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x + 50000, enemy[w] [e].y + 30000, 0, 0, 40 + grand(10)); create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x + 60000, enemy[w] [e].y + 35000, 0, 0, 40 + grand(10)); player_score(eclass[enemy[w][e].type].score); destroy_enemy(boss.side1, boss.e1); // destroy_enemy(1, boss.e2); // boss.fight = 0; boss.fight = 0; return; } void kill_mb2(void) { int e = boss.e1; int w = boss.side1; int i; play_effectwfx(w, NWAV_BLIP2, 400, enemy[w][e].x); create_cloud(w, CLOUD_LARGE_SHOCKWAVE2, 2, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 50); for (i = 0; i < 4; i ++) { create_cloud(w, CLOUD_EXPLODE2, 0, enemy[w] [e].x + xpart(i * ANGLE_4 + ANGLE_8, 9000), enemy[w] [e].y + ypart(i * ANGLE_4 + ANGLE_8, 9000), xpart(i * ANGLE_4 + ANGLE_8, 3000), ypart(i * ANGLE_4 + ANGLE_8, 3000), 36); create_cloud(w, CLOUD_EXPLODE2, 2, enemy[w] [e].x + xpart(i * ANGLE_4, 9000), enemy[w] [e].y + ypart(i * ANGLE_4, 9000), xpart(i * ANGLE_4, 1500), ypart(i * ANGLE_4, 1500), 36); } for (i = 0; i < 8; i ++) { create_cloud(w, CLOUD_EXPLODE2, 1, enemy[w] [e].x + xpart(i * ANGLE_8 + ANGLE_16, 9000), enemy[w] [e].y + ypart(i * ANGLE_8 + ANGLE_16, 9000), xpart(i * ANGLE_8 + ANGLE_16, 2300), ypart(i * ANGLE_8 + ANGLE_16, 2300), 30); } create_cloud(w, CLOUD_EXPLODE2, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 40); player_score(eclass[enemy[w][e].type].score); destroy_enemy(boss.side1, boss.e1); // destroy_enemy(1, boss.e2); // boss.fight = 0; boss.fight = 0; return; } void kill_boss2(void) { int e = boss.e1; int w = boss.side1; int i; play_effectwfx(w, NWAV_BLIP2, 330, enemy[w][e].x); create_cloud(w, CLOUD_LARGE_SHOCKWAVE2, 2, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 50); for (i = 0; i < 4; i ++) { create_cloud(w, CLOUD_EXPLODE2, 0, enemy[w] [e].x + xpart(i * ANGLE_4 + ANGLE_8, 9000), enemy[w] [e].y + ypart(i * ANGLE_4 + ANGLE_8, 9000), xpart(i * ANGLE_4 + ANGLE_8, 3000), ypart(i * ANGLE_4 + ANGLE_8, 3000), 36); create_cloud(w, CLOUD_EXPLODE2, 2, enemy[w] [e].x + xpart(i * ANGLE_4, 9000), enemy[w] [e].y + ypart(i * ANGLE_4, 9000), xpart(i * ANGLE_4, 1500), ypart(i * ANGLE_4, 1500), 36); } for (i = 0; i < 8; i ++) { create_cloud(w, CLOUD_EXPLODE2, 1, enemy[w] [e].x + xpart(i * ANGLE_8 + ANGLE_16, 9000), enemy[w] [e].y + ypart(i * ANGLE_8 + ANGLE_16, 9000), xpart(i * ANGLE_8 + ANGLE_16, 2300), ypart(i * ANGLE_8 + ANGLE_16, 2300), 30); } create_cloud(w, CLOUD_EXPLODE2, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 40); // destroy_enemy(1, boss.e2); player_score(eclass[enemy[w][e].type].score); destroy_enemy(boss.side1, boss.e1); arena.level_finished = 250; // boss.fight = 0; boss.fight = 0; return; } void move_drifter(int w, int e) { enemy[w] [e].x_speed = enemy[w] [e].x2; enemy[w] [e].y_speed = enemy[w] [e].y2; move_enemy(w, e); } void move_marcher(int w, int e) { switch(enemy[w][e].type) { case ENEMY_BASIC3: enemy[w][e].recycle --; if (enemy[w][e].recycle == 0) { create_cloud(w, CLOUD_EXPLODE, 2, enemy[w][e].x, enemy[w][e].y, enemy[w][e].x2, enemy[w][e].y2, 14 + grand(5)); enemy_fire(w, e); enemy[w][e].recycle = 100 - arena.difficulty * 15; } break; } enemy[w] [e].x_speed = enemy[w] [e].x2; enemy[w] [e].y_speed = enemy[w] [e].y2; move_enemy(w, e); } void move_dancer(int w, int e) { enemy[w][e].recycle --; if (enemy[w][e].recycle == 0 && enemy[w][e].type != ENEMY_WINGS) { if (enemy[w][e].y < 480000) { create_cloud(w, CLOUD_EXPLODE, 0, enemy[w][e].x, enemy[w][e].y, enemy[w][e].x_speed, enemy[w][e].y_speed, 14 + grand(5)); enemy_fire(w, e); } enemy[w][e].recycle = 5000; } switch(enemy[w][e].type) { case ENEMY_CROSS: enemy[w][e].angle3 = enemy[w][e].angle2; if (enemy[w][e].a1 == 0) { enemy[w][e].b1 -= 15; if (enemy[w][e].b1 < -40) enemy[w][e].b1 = -40; enemy[w][e].angle2 += enemy[w][e].b1; if (enemy[w][e].angle2 <= ANGLE_8 - ANGLE_4) enemy[w][e].a1 = 1; } else { enemy[w][e].b1 += 15; if (enemy[w][e].b1 > 90) enemy[w][e].b1 = 90; enemy[w][e].angle2 += enemy[w][e].b1; if (enemy[w][e].angle2 >= ANGLE_2 - ANGLE_4 - ANGLE_4 ) enemy[w][e].a1 = 0; } break; case ENEMY_CROSS2: enemy[w][e].angle3 = enemy[w][e].angle2; if (enemy[w][e].a1 == 0) { enemy[w][e].b1 -= 35; if (enemy[w][e].b1 < -60) enemy[w][e].b1 = -60; enemy[w][e].angle2 += enemy[w][e].b1; if (enemy[w][e].angle2 <= ANGLE_8 - ANGLE_4) enemy[w][e].a1 = 1; } else { enemy[w][e].b1 += 35; if (enemy[w][e].b1 > 150) enemy[w][e].b1 = 150; enemy[w][e].angle2 += enemy[w][e].b1; if (enemy[w][e].angle2 >= ANGLE_2 - ANGLE_4 - ANGLE_4 ) enemy[w][e].a1 = 0; } break; case ENEMY_WINGS: if (enemy[w][e].recycle == 0) { int angle = attack_angle(w, e); if (enemy[w][e].y < 480000) { shoot_triangle(w, enemy[w][e].x, enemy[w][e].y, angle, 1); shoot_triangle(w, enemy[w][e].x, enemy[w][e].y, angle - ANGLE_32, 1); shoot_triangle(w, enemy[w][e].x, enemy[w][e].y, angle + ANGLE_32, 1); } play_effectwfvx(w, NWAV_TAP, 1400, 120, enemy[w][e].x); enemy[w][e].recycle = 50 - arena.difficulty * 7; } enemy[w][e].d1 = enemy[w][e].c1; enemy[w][e].c1 = enemy[w][e].angle3; enemy[w][e].angle3 = enemy[w][e].angle2; if (enemy[w][e].a1 == 0) { enemy[w][e].b1 -= 15; if (enemy[w][e].b1 < -40) enemy[w][e].b1 = -40; enemy[w][e].angle2 += enemy[w][e].b1; if (enemy[w][e].angle2 <= ANGLE_8 - ANGLE_4) enemy[w][e].a1 = 1; } else { enemy[w][e].b1 += 15; if (enemy[w][e].b1 > 90) enemy[w][e].b1 = 90; enemy[w][e].angle2 += enemy[w][e].b1; if (enemy[w][e].angle2 >= ANGLE_2 - ANGLE_4 - ANGLE_4 ) enemy[w][e].a1 = 0; } /* if (enemy[w][e].a1 == 0) { enemy[w][e].b1 -= 15; if (enemy[w][e].b1 < -20) enemy[w][e].b1 = -20; enemy[w][e].angle2 += enemy[w][e].b1; if (enemy[w][e].angle2 <= ANGLE_8 - ANGLE_4 - ANGLE_8) enemy[w][e].a1 = 1; } else { enemy[w][e].b1 += 15; if (enemy[w][e].b1 > 60) enemy[w][e].b1 = 60; enemy[w][e].angle2 += enemy[w][e].b1; if (enemy[w][e].angle2 >= ANGLE_2 - ANGLE_4 - ANGLE_4 + ANGLE_16) enemy[w][e].a1 = 0; }*/ break; } if (enemy[w] [e].target_time > 0 && enemy[w] [e].x_target [enemy[w] [e].target] != -1) enemy[w] [e].target_time --; else { if (enemy[w] [e].x_target [enemy[w] [e].target] != -1) { enemy[w] [e].target_time = enemy[w] [e].max_target_time; enemy[w] [e].target ++; enemy[w][e].recycle = 30; } } if (enemy[w] [e].x / 15000 == enemy[w] [e].x_target [enemy[w] [e].target] / 15000 && enemy[w] [e].y / 15000 == enemy[w] [e].y_target [enemy[w] [e].target] / 15000) { if (enemy[w] [e].x_target [enemy[w] [e].target] != -1) { enemy[w] [e].target_time = enemy[w] [e].max_target_time; enemy[w] [e].target ++; enemy[w][e].recycle = 30; } } //if (enemy[w] [e].x_target [enemy[w] [e].target] == -1) exit(1); if (enemy[w] [e].x_target [enemy[w] [e].target] != -1 && enemy[w] [e].y < 420000) { // enemy[w] [e].angle1 = turn_towards_xy(enemy[w] [e].x, enemy[w] [e].y, // enemy[w] [e].x_target [enemy[w] [e].target], enemy[w] [e].y_target [enemy[w] [e].target], // enemy[w] [e].angle1, 8); track_target(w, e, enemy[w] [e].x_target [enemy[w] [e].target], enemy[w] [e].y_target [enemy[w] [e].target], enemy[w] [e].angle1, eclass[enemy[w] [e].type].speed2); enemy[w] [e].angle1 %= ANGLE_1; // radians_to_angle(atan2((actor[enemy[w] [e].attacking].y - enemy[w] [e].y), (actor[enemy[w] [e].attacking].x - enemy[w] [e].x))); } enemy[w] [e].x_speed = xpart (enemy[w] [e].angle1, eclass[enemy[w] [e].type].speed1); enemy[w] [e].y_speed = ypart (enemy[w] [e].angle1, eclass[enemy[w] [e].type].speed1); move_enemy(w,e); } void move_diver(int w, int e) { /* if (enemy[w] [e].target == 0) { if (enemy[w] [e].target_time > 0) { enemy[w] [e].target_time --; enemy[w] [e].y_speed = eclass[enemy[w] [e].type].speed3; enemy[w] [e].y += enemy[w] [e].y_speed; return; } enemy[w] [e].target = 1; enemy[w] [e].target_time = 50; // enemy[w] [e].y_speed = 2000; enemy[w] [e].x_speed = 0; return; } if (enemy[w] [e].target == 1) { drag_enemy(e, 950); move_enemy(e); // enemy[w] [e].angle1 = turn_towards_xy(enemy[w] [e].x, enemy[w] [e].y, // player[0].x, player[0].y, // enemy[w] [e].angle1, 8); track_target(e, player[0].x, player[0].y, enemy[w] [e].angle1, eclass[enemy[w] [e].type].speed2); enemy[w] [e].target_time --; if (enemy[w] [e].target_time <= 0) { enemy[w] [e].target = 2; // thrust explosion! enemy[w] [e].y_speed = 0; enemy[w] [e].x_speed = 0; enemy[w] [e].recycle = 15; return; } return; } if (enemy[w] [e].recycle > 0) enemy[w] [e].recycle --; else { enemy[w] [e].recycle = 15; create_ebullet(EBULLET_SHOT, enemy[w] [e].pole, enemy[w] [e].x + xpart(enemy[w] [e].angle1 + ANGLE_4, 4000), enemy[w] [e].y + ypart(enemy[w] [e].angle1 + ANGLE_4, 4000), xpart(enemy[w] [e].angle1 + ANGLE_4, 4000), ypart(enemy[w] [e].angle1 + ANGLE_4, 4000), enemy[w] [e].angle1 + ANGLE_4); create_ebullet(EBULLET_SHOT, enemy[w] [e].pole, enemy[w] [e].x + xpart(enemy[w] [e].angle1 - ANGLE_4, 4000), enemy[w] [e].y + xpart(enemy[w] [e].angle1 - ANGLE_4, 4000), xpart(enemy[w] [e].angle1 - ANGLE_4, 4000), ypart(enemy[w] [e].angle1 - ANGLE_4, 4000), enemy[w] [e].angle1 - ANGLE_4); } enemy[w] [e].x_speed += xpart(enemy[w] [e].angle1, eclass[enemy[w] [e].type].speed1); enemy[w] [e].y_speed += ypart(enemy[w] [e].angle1, eclass[enemy[w] [e].type].speed1); drag_enemy(e, 950); move_enemy(e);*/ } void move_glider(int w, int e) { int i, b, x, y, xa, xb; switch(enemy[w][e].type) { case ENEMY_FLOWER1: enemy[w][e].angle1 ++; if (enemy[w][e].angle1 >= 16) enemy[w][e].angle1 = 0; if (w == 0) enemy[w][e].angle2 += 4; else enemy[w][e].angle2 -= 4; enemy[w][e].angle2 &= 1023; enemy[w][e].recycle --; if (enemy[w][e].recycle <= 0) { x = enemy[w][e].x; y = enemy[w][e].y + 9000; shoot_triangle(w, x + xpart(enemy[w][e].angle2, 7000), y + ypart(enemy[w][e].angle2, 7000), enemy[w][e].angle2, 2); shoot_triangle(w, x + xpart(enemy[w][e].angle2 + ANGLE_3, 7000), y + ypart(enemy[w][e].angle2 + ANGLE_3, 7000), enemy[w][e].angle2 + ANGLE_3, 2); shoot_triangle(w, x + xpart(enemy[w][e].angle2 - ANGLE_3, 7000), y + ypart(enemy[w][e].angle2 - ANGLE_3, 7000), enemy[w][e].angle2 - ANGLE_3, 2); play_effectwfvx(w, NWAV_TAP, 1700, 200, enemy[w][e].x); enemy[w][e].recycle = 20 - arena.difficulty * 3; /* play_effectwfvx(w, NWAV_ZAP, 1800 + grand(50), 30, enemy[w b = create_ebullet(w, EBULLET_TRIANGLE, 2, x + xpart(enemy[w][e].angle2, 7000), y + ypart(enemy[w][e].angle2, 7000), 0, 0, enemy[w][e].angle2); b = create_ebullet(w, EBULLET_TRIANGLE, 2, x + xpart(enemy[w][e].angle2 + ANGLE_3, 7000), y + ypart(enemy[w][e].angle2 + ANGLE_3, 7000), 0, 0, enemy[w][e].angle2 + ANGLE_3); b = create_ebullet(w, EBULLET_TRIANGLE, 2, x + xpart(enemy[w][e].angle2 - ANGLE_3, 7000), y + ypart(enemy[w][e].angle2 - ANGLE_3, 7000), 0, 0, enemy[w][e].angle2 - ANGLE_3); enemy[w][e].recycle = 20 - arena.difficulty * 3;*/ } break; case ENEMY_FLOWER2: enemy[w][e].angle1 ++; if (enemy[w][e].angle1 >= 20) enemy[w][e].angle1 = 0; if (w == 0) enemy[w][e].angle2 += 4; else enemy[w][e].angle2 -= 4; enemy[w][e].angle2 &= 1023; enemy[w][e].recycle --; if (enemy[w][e].recycle <= 0) { x = enemy[w][e].x; y = enemy[w][e].y + 9000; xa = 1; if (grand(2) == 0) xa = -1; for (i = 0; i < 12; i ++) { shoot_diamond(w, x + xpart(enemy[w][e].angle2 + i * (ANGLE_1 / 12), 7000), y + ypart(enemy[w][e].angle2 + i * (ANGLE_1 / 12), 7000), xpart(enemy[w][e].angle2 + i * (ANGLE_1 / 12), 2000), ypart(enemy[w][e].angle2 + i * (ANGLE_1 / 12), 2000), enemy[w][e].angle2 + i * (ANGLE_1 / 12), 1, xa); } enemy[w][e].angle2 = grand(ANGLE_1); xa *= -1; for (i = 0; i < 8; i ++) { shoot_diamond(w, x + xpart(enemy[w][e].angle2 + i * (ANGLE_8), 7000), y + ypart(enemy[w][e].angle2 + i * (ANGLE_8), 7000), xpart(enemy[w][e].angle2 + i * (ANGLE_8), 1300), ypart(enemy[w][e].angle2 + i * (ANGLE_8), 1300), enemy[w][e].angle2 + i * (ANGLE_1 / 12), 2, xa); } enemy[w][e].angle2 = grand(ANGLE_1); xa *= -1; for (i = 0; i < 5; i ++) { shoot_diamond(w, x + xpart(enemy[w][e].angle2 + i * (ANGLE_5), 7000), y + ypart(enemy[w][e].angle2 + i * (ANGLE_8), 7000), xpart(enemy[w][e].angle2 + i * (ANGLE_5), 900), ypart(enemy[w][e].angle2 + i * (ANGLE_5), 900), enemy[w][e].angle2 + i * (ANGLE_5), 0, xa); } play_effectwfvx(w, NWAV_TONE, 2800, 200, enemy[w][e].x); enemy[w][e].recycle = 150 - arena.difficulty * 20; } break; case ENEMY_FLOWER3: enemy[w][e].angle1 ++; if (enemy[w][e].angle1 >= 20) enemy[w][e].angle1 = 0; enemy[w][e].angle2 &= 1023; enemy[w][e].recycle --; if (enemy[w][e].recycle <= 0) { x = enemy[w][e].x; y = enemy[w][e].y + 9000; xa = radians_to_angle(atan2((player.y) - enemy[w][e].y, player.x - enemy[w][e].x)); for (i = 0; i < 4; i ++) { shoot_triangle(w, x + xpart(enemy[w][e].angle2 + ANGLE_4 * i, 30000), y + ypart(enemy[w][e].angle2 + ANGLE_4 * i, 30000), xa, 1); } enemy[w][e].recycle = 100 - arena.difficulty * 15; play_effectwfvx(w, NWAV_TONE, 1500, 200, enemy[w][e].x); } break; case ENEMY_FLOWER4: enemy[w][e].angle1 ++; if (enemy[w][e].angle1 >= 20) enemy[w][e].angle1 = 0; enemy[w][e].angle2 &= 1023; enemy[w][e].recycle --; if (enemy[w][e].recycle <= 0) { x = enemy[w][e].x; y = enemy[w][e].y + 16000; // xa = grand(ANGLE_1); // for (i = 0; i < 8; i ++) { // xb = xa + grand(ANGLE_32) - grand(ANGLE_32); xb = grand(ANGLE_1); xa = grand(3); shoot_triangle(w, x + xpart(xb, 10000), y + ypart(xb, 10000), xb, xa); shoot_triangle(w, x + xpart(xb + ANGLE_2, 10000), y + ypart(xb + ANGLE_2, 10000), xb + ANGLE_2, xa); } // enemy[w][e].recycle = 70 - arena.difficulty * 15; play_effectwfvx(w, NWAV_TAP, 1300, 100, enemy[w][e].x); enemy[w][e].recycle = 30 - arena.difficulty * 4; } break; case ENEMY_FLOWER5: enemy[w][e].angle1 ++; if (enemy[w][e].angle1 >= 32) enemy[w][e].angle1 = 0; enemy[w][e].angle2 &= 1023; enemy[w][e].recycle --; if (enemy[w][e].recycle <= 0) { x = enemy[w][e].x; y = enemy[w][e].y + 16000; // xa = grand(ANGLE_1); // for (i = 0; i < 8; i ++) { // xb = xa + grand(ANGLE_32) - grand(ANGLE_32); xb = grand(ANGLE_1); xa = 1; if (grand(2) == 0) xa = -1; shoot_star(w, x + xpart(xb, 10000), y + ypart(xb, 10000), xpart(xb, 1500), ypart(xb, 1500), xb, 0, xa); } // enemy[w][e].recycle = 70 - arena.difficulty * 15; enemy[w][e].recycle = 30 - arena.difficulty * 5; play_effectwfvx(w, NWAV_TONE, 1900, 200, enemy[w][e].x); } break; case ENEMY_CARRIER: if (enemy[w][e].y > 25000 && enemy[w][e].y < 400000 && enemy[w][e].angle3 < 60) enemy[w][e].angle3 += 1; if (enemy[w][e].y > 25000 && enemy[w][e].y < 400000 && enemy[w][e].angle2 < 40) enemy[w][e].angle2 += 1; // enemy[w][e].angle1 += 4; if (arena.difficulty == 0) enemy[w][e].angle1 += 2; if (arena.difficulty == 1) enemy[w][e].angle1 += 4; if (arena.difficulty == 2) enemy[w][e].angle1 += 8; if (enemy[w][e].y > 50000 && enemy[w][e].angle1 % ANGLE_4 == 0) { x = enemy[w][e].x + xpart(enemy[w][e].angle1, 9000); y = enemy[w][e].y + ypart(enemy[w][e].angle1, 9000); create_cloud(w, CLOUD_EXPLODE, 2, x, y, enemy[w][e].x_speed, enemy[w][e].y_speed, 12 + grand(4)); for (i = -1; i < 2; i ++) { b = create_ebullet(w, EBULLET_SPIN, 2, x, y, xpart(enemy[w] [e].angle1 + ANGLE_16 * i, 2500) + enemy[w] [e].x_speed, ypart(enemy[w] [e].angle1 + ANGLE_16 * i, 2500) + enemy[w] [e].y_speed, 0); if (b == -1) continue; ebullet[w][b].turn_direction = enemy[w][e].turn_direction; } x = enemy[w][e].x - xpart(enemy[w][e].angle1, 9000); y = enemy[w][e].y - ypart(enemy[w][e].angle1, 9000); create_cloud(w, CLOUD_EXPLODE, 2, x, y, enemy[w][e].x_speed, enemy[w][e].y_speed, 12 + grand(4)); for (i = -1; i < 2; i ++) { b = create_ebullet(w, EBULLET_SPIN, 2, x, y, xpart(enemy[w] [e].angle1 + ANGLE_2 + ANGLE_16 * i, 2500) + enemy[w] [e].x_speed, ypart(enemy[w] [e].angle1 + ANGLE_2 + ANGLE_16 * i, 2500) + enemy[w] [e].y_speed, 0); if (b == -1) continue; ebullet[w][b].turn_direction = enemy[w][e].turn_direction * -1; } // play_effectwfvx(w, NWAV_ZAP, 600 + grand(50), 30, enemy[w][e].x); // play_effectwfvx(w, NWAV_SHOT, 1000 + grand(150), 150, enemy[w][e].x); play_effectwfvx(w, NWAV_POP, 500, 200, enemy[w][e].x); } break; case ENEMY_GLIDER1: if (enemy[w][e].y > 25000 && enemy[w][e].y < 400000 && enemy[w][e].angle3 < 50) enemy[w][e].angle3 ++; if (enemy[w][e].y > 370000 && enemy[w][e].angle3 > 0) enemy[w][e].angle3 --; enemy[w][e].angle2 += enemy[w] [e].turn_direction;// * 2; if (enemy[w][e].angle2 <= 0) enemy[w][e].angle2 += ANGLE_1; enemy[w][e].angle2 %= ANGLE_1; x = enemy[w][e].x - xpart(enemy[w][e].angle1, 2000); y = enemy[w][e].y - ypart(enemy[w][e].angle1, 2000); if (enemy[w][e].recycle > 0) { if (enemy[w][e].angle3 == 50) enemy[w][e].recycle --; } else { if (enemy[w][e].burst_recycle > 0) { enemy[w][e].burst_recycle --; enemy[w][e].recycle = 14; play_effectwfvx(w, NWAV_SHOT, 1200 + grand(150), 150, enemy[w][e].x); for (i = 0; i < 6; i ++) { b = create_ebullet(w, EBULLET_SPIN, 0, x + xpart(enemy[w] [e].angle2 + ANGLE_6 * i, 11000), y + ypart(enemy[w] [e].angle2 + ANGLE_6 * i, 11000) + GLIDER_Y_ADJUST * 1000, xpart(enemy[w] [e].angle2 + ANGLE_6 * i, 2000) + enemy[w] [e].x_speed, ypart(enemy[w] [e].angle2 + ANGLE_6 * i, 2000) + enemy[w] [e].y_speed, 0); if (b == -1) continue; create_cloud(w, CLOUD_EXPLODE, 0, x + xpart(enemy[w][e].angle2 + ANGLE_6 * i, 11000), y + ypart(enemy[w] [e].angle2 + ANGLE_6 * i, 11000) + GLIDER_Y_ADJUST * 1000, enemy[w][e].x_speed, enemy[w][e].y_speed + 1000, 12 + grand(4)); // b = create_ebullet(EBULLET_SHOT, enemy[w] [e].pole, x + xpart(enemy[w] [e].angle2 + ANGLE_8 * i, 4000), y + ypart(enemy[w] [e].angle2 + ANGLE_8 * i, 4000), xpart(enemy[w] [e].angle2 + ANGLE_8 * i, 2000) + enemy[w] [e].x_speed, ypart(enemy[w] [e].angle2 + ANGLE_8 * i, 2000) + enemy[w] [e].y_speed, enemy[w] [e].angle2 + ANGLE_8 * i); ebullet[w][b].turn_direction = enemy[w][e].turn_direction; } } else { enemy[w][e].recycle = 70 - arena.difficulty * 10; enemy[w][e].burst_recycle = 4 + arena.difficulty; // also in creation } // create_ebullet(EBULLET_SPIN, enemy[w] [e].pole, enemy[w] [e].x + xpart(enemy[w] [e].angle1 - ANGLE_8, 4000), enemy[w] [e].y + xpart(enemy[w] [e].angle1 - ANGLE_4, 4000), xpart(enemy[w] [e].angle1 - ANGLE_4, 2000), ypart(enemy[w] [e].angle1 - ANGLE_4, 2000), enemy[w] [e].angle1 + ANGLE_8); } break; case ENEMY_CARRIER2: enemy[w][e].angle1 += enemy[w][e].turn_direction; enemy[w][e].angle1 &= 1023; enemy[w][e].recycle --; if (enemy[w][e].recycle <= 0) { xa = grand(ANGLE_1); shoot_circle(w, enemy[w][e].x + xpart(xa, 10000), enemy[w][e].y + ypart(xa, 10000), xpart(xa, 3000), ypart(xa, 3000), xa, 2); enemy[w][e].recycle = 12 - arena.difficulty * 3; } break; } move_enemy(w, e); } void move_beamer(int w, int e) { int b; if (enemy[w] [e].target == 0) { if (enemy[w] [e].target_time > 0) { enemy[w] [e].target_time --; // enemy[w] [e].y_speed = eclass[enemy[w] [e].type].speed1; // enemy[w] [e].y += enemy[w] [e].y_speed; move_enemy(w, e); return; } enemy[w] [e].target = 1; enemy[w] [e].target_time = 100; // enemy[w] [e].x_speed = 0; return; } if (enemy[w] [e].target == 1) { drag_enemy(w, e, 950); move_enemy(w, e); if (enemy[w][e].angle2 < 60) enemy[w][e].angle2 ++; switch(arena.difficulty) { case 1: track_target(w, e, player.x, player.y, enemy[w] [e].angle1, 4); break; case 2: track_target(w, e, player.x, player.y, enemy[w] [e].angle1, 6); break; } enemy[w] [e].target_time --; if (enemy[w] [e].target_time % 5 == 0 && enemy[w] [e].angle3 < 5) enemy[w] [e].angle3 ++; if (enemy[w] [e].target_time <= 0) { enemy[w] [e].target = 2; enemy[w] [e].target_time = 300; play_effectwfvx(w, NWAV_BEAM1, 700 + grand(50), 200, enemy[w][e].x); return; } return; } if (enemy[w] [e].target == 2) { // b = create_ebullet(w, EBULLET_BEAM1, 0, enemy[w] [e].x + xpart(enemy[w] [e].angle1 + ANGLE_2, 4000), enemy[w] [e].y + ypart(enemy[w] [e].angle1 + ANGLE_2, 4000), xpart(enemy[w] [e].angle1, 4000), ypart(enemy[w] [e].angle1, 4000), enemy[w] [e].angle1); b = create_ebullet(w, EBULLET_BEAM1, 0, enemy[w] [e].x + xpart(enemy[w] [e].angle1 + ANGLE_2, 4000), enemy[w] [e].y + ypart(enemy[w] [e].angle1 + ANGLE_2, 4000), xpart(enemy[w] [e].angle1, 4000), ypart(enemy[w] [e].angle1, 4000), enemy[w] [e].angle1); track_target(w, e, player.x, player.y, enemy[w] [e].angle1, 1); if (b != -1) { ebullet[w][b].timeout = 2; ebullet[w][b].status = enemy[w] [e].target_time; ebullet[w][b].status2 = 0;//-1; } enemy[w] [e].target_time --; if (enemy[w] [e].target_time > 180) enemy[w] [e].target_time -= 2; // if (enemy[w] [e].target_time > 140) // enemy[w] [e].target_time --; if (enemy[w] [e].target_time <= 0) { enemy[w] [e].target = 3; enemy[w] [e].y_speed = 0; enemy[w] [e].x_speed = 0; enemy[w] [e].target_time = 500; return; } return; } if (enemy[w][e].angle2 > 0) enemy[w][e].angle2 --; // enemy[w] [e].x_speed += xpart(enemy[w] [e].angle1, eclass[enemy[w] [e].type].speed3); enemy[w] [e].target_time --; if (enemy[w] [e].target_time % 5 == 0 && enemy[w] [e].angle3 > 0) enemy[w] [e].angle3 --; enemy[w] [e].y_speed += eclass[enemy[w] [e].type].speed3;////ypart(enemy[w] [e].angle1, eclass[enemy[w] [e].type].speed3); drag_enemy(w, e, 950); move_enemy(w, e); } void move_attacker(int w, int e) { /* if (enemy[w] [e].target == 0) { if (enemy[w] [e].target_time > 0) { enemy[w] [e].target_time --; move_enemy(e); return; } enemy[w] [e].target = 1; enemy[w] [e].target_time = 250; // enemy[w] [e].y_speed = eclass[enemy[w] [e].type].speed1; // enemy[w] [e].x_speed = 0; return; } if (enemy[w] [e].target == 1) { drag_enemy(e, 970); move_enemy(e); track_target(e, player[0].x, player[0].y, enemy[w] [e].angle1, eclass[enemy[w] [e].type].speed2); enemy[w] [e].target_time --; if (enemy[w] [e].recycle > 0) enemy[w] [e].recycle --; else { switch(enemy[w] [e].type) { case ENEMY_ATTACKER1: enemy[w] [e].recycle = 50; create_ebullet(EBULLET_SHOT, enemy[w] [e].pole, enemy[w] [e].x + xpart(enemy[w] [e].angle1 + ANGLE_8, 9000), enemy[w] [e].y + ypart(enemy[w] [e].angle1 + ANGLE_8, 9000), xpart(enemy[w] [e].angle1, 5000), ypart(enemy[w] [e].angle1, 5000), enemy[w] [e].angle1); create_ebullet(EBULLET_SHOT, enemy[w] [e].pole, enemy[w] [e].x + xpart(enemy[w] [e].angle1 - ANGLE_8, 9000), enemy[w] [e].y + ypart(enemy[w] [e].angle1 - ANGLE_8, 9000), xpart(enemy[w] [e].angle1, 5000), ypart(enemy[w] [e].angle1, 5000), enemy[w] [e].angle1); break; case ENEMY_ATTACKER2: enemy[w] [e].recycle = 50; create_ebullet(EBULLET_SHOT, enemy[w] [e].pole, enemy[w] [e].x + xpart(enemy[w] [e].angle1, 9000), enemy[w] [e].y + ypart(enemy[w] [e].angle1, 9000), xpart(enemy[w] [e].angle1, 5000), ypart(enemy[w] [e].angle1, 5000), enemy[w] [e].angle1); create_ebullet(EBULLET_SHOT, enemy[w] [e].pole, enemy[w] [e].x + xpart(enemy[w] [e].angle1 - ANGLE_16, 9000), enemy[w] [e].y + ypart(enemy[w] [e].angle1 - ANGLE_8, 9000), xpart(enemy[w] [e].angle1 - ANGLE_16, 5000), ypart(enemy[w] [e].angle1 - ANGLE_16, 5000), enemy[w] [e].angle1 - ANGLE_16); create_ebullet(EBULLET_SHOT, enemy[w] [e].pole, enemy[w] [e].x + xpart(enemy[w] [e].angle1 + ANGLE_16, 9000), enemy[w] [e].y + ypart(enemy[w] [e].angle1 + ANGLE_8, 9000), xpart(enemy[w] [e].angle1 + ANGLE_16, 5000), ypart(enemy[w] [e].angle1 + ANGLE_16, 5000), enemy[w] [e].angle1 + ANGLE_16); break; case ENEMY_ATTACKER3: if (enemy[w] [e].burst_recycle > 0) { enemy[w] [e].recycle = 15; enemy[w] [e].burst_recycle --; create_ebullet(EBULLET_SHOT2, enemy[w] [e].pole, enemy[w] [e].x + xpart(enemy[w] [e].angle1 + ANGLE_8, 9000), enemy[w] [e].y + ypart(enemy[w] [e].angle1 + ANGLE_8, 9000), xpart(enemy[w] [e].angle1, 8000), ypart(enemy[w] [e].angle1, 8000), enemy[w] [e].angle1); create_ebullet(EBULLET_SHOT2, enemy[w] [e].pole, enemy[w] [e].x + xpart(enemy[w] [e].angle1 - ANGLE_8, 9000), enemy[w] [e].y + ypart(enemy[w] [e].angle1 - ANGLE_8, 9000), xpart(enemy[w] [e].angle1, 8000), ypart(enemy[w] [e].angle1, 8000), enemy[w] [e].angle1); } else { enemy[w] [e].recycle = 115; enemy[w] [e].burst_recycle = 4; } break; } } // attack here! if (enemy[w] [e].target_time <= 0) { enemy[w] [e].target = 2; // thrust explosion! enemy[w] [e].y_speed = 0; enemy[w] [e].x_speed = 0; return; } return; } // enemy[w] [e].x_speed += xpart(enemy[w] [e].angle1, 280); enemy[w] [e].y_speed -= eclass[enemy[w] [e].type].speed1; //ypart(enemy[w] [e].angle1, 280); drag_enemy(e, 950); move_enemy(e);*/ } void move_pauser(int w, int e) { int i; int angle; if (enemy[w][e].target == 0) { if (enemy[w][e].target_time > 0) { enemy[w][e].target_time --; move_enemy(w, e); return; } enemy[w][e].target = 1; enemy[w][e].target_time = 250; // enemy[w] [e].y_speed = eclass[enemy[w] [e].type].speed1; // enemy[w] [e].x_speed = 0; return; } if (enemy[w][e].target == 1) { drag_enemy(w, e, 970); move_enemy(w, e); // track_target(e, player[0].x, player[0].y, enemy[w] [e].angle1, eclass[enemy[w] [e].type].speed2); enemy[w][e].target_time --; switch(enemy[w] [e].type) { case ENEMY_BURSTER: if (enemy[w][e].target_time < 17) { enemy[w][e].angle2 --; break; } if (enemy[w][e].target_time < 200) { if (enemy[w][e].angle2 < 17) { enemy[w][e].angle2 ++; enemy[w][e].recycle ++; } } break; case ENEMY_DIPPER1: case ENEMY_DIPPER2: if (enemy[w][e].target_time < 15) { enemy[w][e].angle2 --; break; } if (enemy[w][e].target_time < 200) { if (enemy[w][e].angle2 < 15) { enemy[w][e].angle2 ++; enemy[w][e].recycle ++; } } break; case ENEMY_ZAPPER1: track_target(w, e, player.x, player.y, enemy[w][e].angle1, eclass[enemy[w][e].type].speed2); break; } if (enemy[w][e].recycle > 0) enemy[w][e].recycle --; else { switch(enemy[w] [e].type) { case ENEMY_DIPPER1: angle = attack_angle(w, e); create_ebullet(w, EBULLET_SHOT3, 0, enemy[w][e].x, enemy[w][e].y, xpart(angle, 3500), ypart(angle, 3500), angle); create_cloud(w, CLOUD_EXPLODE, 0, enemy[w][e].x, enemy[w][e].y, 0, 0, 20 + grand(5)); enemy[w][e].recycle = 60 - arena.difficulty * 10; play_effectwfvx(w, NWAV_SHOT, 600 + grand(50), 150, enemy[w][e].x); break; case ENEMY_DIPPER2: angle = attack_angle(w, e); create_ebullet(w, EBULLET_SHOT3, 1, enemy[w][e].x, enemy[w][e].y, xpart(angle, 4000), ypart(angle, 4000), angle); create_cloud(w, CLOUD_EXPLODE, 1, enemy[w][e].x, enemy[w][e].y, 0, 0, 20 + grand(5)); enemy[w][e].recycle = 50 - arena.difficulty * 10; play_effectwfvx(w, NWAV_SHOT, 800 + grand(50), 150, enemy[w][e].x); break; case ENEMY_ZAPPER1: angle = 1; if (enemy[w][e].burst_recycle == 3) { int bx = enemy[w][e].x + xpart(enemy[w][e].angle1, 15000); int by = enemy[w][e].y + ypart(enemy[w][e].angle1, 15000); create_ebullet(w, EBULLET_SHOT2, 0, bx, by, xpart(enemy[w][e].angle1, 4000), ypart(enemy[w][e].angle1, 4000), enemy[w][e].angle1); create_cloud(w, CLOUD_EXPLODE, 0, bx, by, 0, 0, 20 + grand(5)); angle = radians_to_angle(atan2((player.y) - enemy[w][e].y, player.x - enemy[w][e].x)); enemy[w][e].x_target [0] = enemy[w][e].x + xpart(angle, 100000); enemy[w][e].y_target [0] = enemy[w][e].y + ypart(angle, 100000); play_effectwfvx(w, NWAV_BLAST, 1100 + grand(50), 150, enemy[w][e].x); } angle = radians_to_angle(atan2(enemy[w][e].y_target [0] - enemy[w][e].y, enemy[w][e].x_target [0] - (enemy[w][e].x - 33000))); create_ebullet(w, EBULLET_SHOT, 0, enemy[w][e].x - 33000, enemy[w][e].y, xpart(angle, 4000), ypart(angle, 4000), angle); create_cloud(w, CLOUD_EXPLODE, 0, enemy[w][e].x - 33000, enemy[w][e].y, 0, 0, 15 + grand(5)); angle = radians_to_angle(atan2(enemy[w][e].y_target [0] - enemy[w][e].y, enemy[w][e].x_target [0] - (enemy[w][e].x + 33000))); create_ebullet(w, EBULLET_SHOT, 0, enemy[w][e].x + 33000, enemy[w][e].y, xpart(angle, 4000), ypart(angle, 4000), angle); create_cloud(w, CLOUD_EXPLODE, 0, enemy[w][e].x + 33000, enemy[w][e].y, 0, 0, 15 + grand(5)); play_effectwfvx(w, NWAV_ZAP, 1800 + grand(50), 30, enemy[w][e].x); enemy[w][e].burst_recycle --; enemy[w][e].recycle = 12 - arena.difficulty * 2; if (enemy[w][e].burst_recycle == 0) { enemy[w][e].burst_recycle = 3; // also in creation enemy[w][e].recycle = 120 - arena.difficulty * 10; } /* angle = radians_to_angle(atan2((player.y - 140000) - enemy[w][e].y, player.x - (enemy[w][e].x - 33000))); create_ebullet(w, EBULLET_SHOT, 0, enemy[w][e].x - 33000, enemy[w][e].y, xpart(angle, 4000), ypart(angle, 4000), angle); create_cloud(w, CLOUD_EXPLODE, 0, enemy[w][e].x - 33000, enemy[w][e].y, 0, 0, 15 + grand(5)); angle = radians_to_angle(atan2((player.y - 140000) - enemy[w][e].y, player.x - (enemy[w][e].x + 33000))); create_ebullet(w, EBULLET_SHOT, 0, enemy[w][e].x + 33000, enemy[w][e].y, xpart(angle, 4000), ypart(angle, 4000), angle); create_cloud(w, CLOUD_EXPLODE, 0, enemy[w][e].x + 33000, enemy[w][e].y, 0, 0, 15 + grand(5));*/ break; case ENEMY_SHOTTER1: angle = attack_angle(w, e); int angle2; int speed; for (i = 0; i < 9; i ++) { angle2 = angle + grand(ANGLE_16) - grand(ANGLE_16); speed = 3000 + grand(2000); create_ebullet(w, EBULLET_SHOT, 1, enemy[w][e].x, enemy[w][e].y + SHOTTER1_Y_ADJUST * 1000, xpart(angle2, speed), ypart(angle2, speed), angle2); } create_cloud(w, CLOUD_SHOCKWAVE, 1, enemy[w][e].x, enemy[w][e].y + SHOTTER1_Y_ADJUST * 1000, 0, 0, 20); enemy[w][e].recycle = 150 - arena.difficulty * 20; play_effectwfvx(w, NWAV_BLAST, 1100 + grand(50), 150, enemy[w][e].x); break; case ENEMY_BURSTER: angle = attack_angle(w, e) + ANGLE_2; int angle3; int speed2; switch(enemy[w][e].angle3) { default: case 0: for (i = 0; i < 5; i ++) { angle3 = angle + i * ANGLE_1 / 5; speed2 = 2500; create_ebullet(w, EBULLET_FATTER_SHOT, 2, enemy[w][e].x, enemy[w][e].y, xpart(angle3, speed2), ypart(angle3, speed2), angle3); } create_cloud(w, CLOUD_EXPLODE, 2, enemy[w][e].x, enemy[w][e].y, 0, 0, 20); enemy[w][e].recycle = 15; enemy[w][e].angle3 = 1; play_effectwfvx(w, NWAV_BLAST, 1800 + grand(50), 100, enemy[w][e].x); break; case 1: for (i = 0; i < 8; i ++) { angle3 = angle + i * ANGLE_1 / 8; speed2 = 3000; create_ebullet(w, EBULLET_FAT_SHOT, 1, enemy[w][e].x, enemy[w][e].y, xpart(angle3, speed2), ypart(angle3, speed2), angle3); } create_cloud(w, CLOUD_EXPLODE, 1, enemy[w][e].x, enemy[w][e].y, 0, 0, 20); enemy[w][e].recycle = 15; enemy[w][e].angle3 = 2; play_effectwfvx(w, NWAV_BLAST, 1500 + grand(50), 100, enemy[w][e].x); break; case 2: for (i = 0; i < 12; i ++) { angle3 = angle + i * ANGLE_1 / 12; speed2 = 3500; create_ebullet(w, EBULLET_SHOT, 0, enemy[w][e].x, enemy[w][e].y, xpart(angle3, speed2), ypart(angle3, speed2), angle3); } create_cloud(w, CLOUD_EXPLODE, 0, enemy[w][e].x, enemy[w][e].y, 0, 0, 20); enemy[w][e].recycle = 80 - arena.difficulty * 15; enemy[w][e].angle3 = 0; play_effectwfvx(w, NWAV_BLAST, 1200 + grand(50), 100, enemy[w][e].x); break; } break; /* case ENEMY_ATTACKER1: enemy[w] [e].recycle = 50; create_ebullet(EBULLET_SHOT, enemy[w] [e].pole, enemy[w] [e].x + xpart(enemy[w] [e].angle1 + ANGLE_8, 9000), enemy[w] [e].y + ypart(enemy[w] [e].angle1 + ANGLE_8, 9000), xpart(enemy[w] [e].angle1, 5000), ypart(enemy[w] [e].angle1, 5000), enemy[w] [e].angle1); create_ebullet(EBULLET_SHOT, enemy[w] [e].pole, enemy[w] [e].x + xpart(enemy[w] [e].angle1 - ANGLE_8, 9000), enemy[w] [e].y + ypart(enemy[w] [e].angle1 - ANGLE_8, 9000), xpart(enemy[w] [e].angle1, 5000), ypart(enemy[w] [e].angle1, 5000), enemy[w] [e].angle1); break; case ENEMY_ATTACKER2: enemy[w] [e].recycle = 50; create_ebullet(EBULLET_SHOT, enemy[w] [e].pole, enemy[w] [e].x + xpart(enemy[w] [e].angle1, 9000), enemy[w] [e].y + ypart(enemy[w] [e].angle1, 9000), xpart(enemy[w] [e].angle1, 5000), ypart(enemy[w] [e].angle1, 5000), enemy[w] [e].angle1); create_ebullet(EBULLET_SHOT, enemy[w] [e].pole, enemy[w] [e].x + xpart(enemy[w] [e].angle1 - ANGLE_16, 9000), enemy[w] [e].y + ypart(enemy[w] [e].angle1 - ANGLE_8, 9000), xpart(enemy[w] [e].angle1 - ANGLE_16, 5000), ypart(enemy[w] [e].angle1 - ANGLE_16, 5000), enemy[w] [e].angle1 - ANGLE_16); create_ebullet(EBULLET_SHOT, enemy[w] [e].pole, enemy[w] [e].x + xpart(enemy[w] [e].angle1 + ANGLE_16, 9000), enemy[w] [e].y + ypart(enemy[w] [e].angle1 + ANGLE_8, 9000), xpart(enemy[w] [e].angle1 + ANGLE_16, 5000), ypart(enemy[w] [e].angle1 + ANGLE_16, 5000), enemy[w] [e].angle1 + ANGLE_16); break; case ENEMY_ATTACKER3: if (enemy[w] [e].burst_recycle > 0) { enemy[w] [e].recycle = 15; enemy[w] [e].burst_recycle --; create_ebullet(EBULLET_SHOT2, enemy[w] [e].pole, enemy[w] [e].x + xpart(enemy[w] [e].angle1 + ANGLE_8, 9000), enemy[w] [e].y + ypart(enemy[w] [e].angle1 + ANGLE_8, 9000), xpart(enemy[w] [e].angle1, 8000), ypart(enemy[w] [e].angle1, 8000), enemy[w] [e].angle1); create_ebullet(EBULLET_SHOT2, enemy[w] [e].pole, enemy[w] [e].x + xpart(enemy[w] [e].angle1 - ANGLE_8, 9000), enemy[w] [e].y + ypart(enemy[w] [e].angle1 - ANGLE_8, 9000), xpart(enemy[w] [e].angle1, 8000), ypart(enemy[w] [e].angle1, 8000), enemy[w] [e].angle1); } else { enemy[w] [e].recycle = 115; enemy[w] [e].burst_recycle = 4; } break;*/ } } // attack here! if (enemy[w][e].target_time <= 0) { enemy[w][e].target = 2; // thrust explosion! enemy[w][e].y_speed = 0; enemy[w][e].x_speed = 0; return; } return; } // enemy[w] [e].x_speed += xpart(enemy[w] [e].angle1, 280); enemy[w][e].y_speed -= eclass[enemy[w][e].type].speed1; //ypart(enemy[w] [e].angle1, 280); drag_enemy(w, e, 950); move_enemy(w, e); } void move_enemy(int w, int e) { enemy[w] [e].x += enemy[w] [e].x_speed; enemy[w] [e].y += enemy[w] [e].y_speed; } void enemy_fire(int w, int e) { int angle = attack_angle(w, e); //radians_to_angle(atan2(player.y - enemy[w] [e].y, player.x - enemy[w] [e].x)); // int b; // create_ebullet( switch(enemy[w][e].type) { default: create_ebullet(w, EBULLET_SHOT, 0, enemy[w][e].x, enemy[w][e].y, xpart(angle, 3500 + arena.difficulty * 500), ypart(angle, 3500 + arena.difficulty * 500), angle); play_effectwfvx(w, NWAV_ZAP, 1800 + grand(50), 30, enemy[w][e].x); break; case ENEMY_BASIC3: play_effectwfvx(w, NWAV_ZAP, 1200 + grand(50), 30, enemy[w][e].x); create_ebullet(w, EBULLET_SHOT, 2, enemy[w][e].x, enemy[w][e].y, xpart(angle, 3000 + arena.difficulty * 500), ypart(angle, 3000 + arena.difficulty * 500), angle); break; case ENEMY_BFIGHTER: play_effectwfvx(w, NWAV_ZAP, 1400 + grand(50), 30, enemy[w][e].x); create_ebullet(w, EBULLET_SHOT, 1, enemy[w][e].x, enemy[w][e].y, xpart(angle, 2500 + arena.difficulty * 500), ypart(angle, 2500 + arena.difficulty * 500), angle); break; case ENEMY_CROSS: /* b = create_ebullet(w, EBULLET_TRIANGLE, 0, enemy[w][e].x, enemy[w][e].y, 0, 0, angle); if (b != -1) { ebullet[w][b].x2 = ebullet[w][b].x; ebullet[w][b].y2 = ebullet[w][b].y; ebullet[w][b].status3 = (int) angle / (SMALL_ROTATIONS_ANGLE) & (SMALL_ROTATIONS - 1); play_effectwfvx(w, NWAV_ZAP, 1800 + grand(50), 30, enemy[w][e].x); }*/ shoot_triangle(w, enemy[w][e].x, enemy[w][e].y, angle, 0); play_effectwfvx(w, NWAV_TAP, 2200, 100, enemy[w][e].x); // play_effectwfvx(w, NWAV_ZAP, 1800 + grand(50), 30, enemy[w][e].x); /* angle -= ANGLE_32; b = create_ebullet(w, EBULLET_TRIANGLE, 1, enemy[w][e].x, enemy[w][e].y, 0, 0, angle); if (b != -1) { ebullet[w][b].x2 = ebullet[w][b].x; ebullet[w][b].y2 = ebullet[w][b].y; ebullet[w][b].status3 = (int) angle / (SMALL_ROTATIONS_ANGLE) & (SMALL_ROTATIONS - 1); } angle += ANGLE_16; b = create_ebullet(w, EBULLET_TRIANGLE, 2, enemy[w][e].x, enemy[w][e].y, 0, 0, angle); if (b != -1) { ebullet[w][b].x2 = ebullet[w][b].x; ebullet[w][b].y2 = ebullet[w][b].y; ebullet[w][b].status3 = (int) angle / (SMALL_ROTATIONS_ANGLE) & (SMALL_ROTATIONS - 1); }*/ break; case ENEMY_CROSS2: shoot_triangle(w, enemy[w][e].x, enemy[w][e].y, angle - ANGLE_32, 2); shoot_triangle(w, enemy[w][e].x, enemy[w][e].y, angle + ANGLE_32, 2); play_effectwfvx(w, NWAV_TAP, 1900, 100, enemy[w][e].x); // play_effectwfvx(w, NWAV_ZAP, 1800 + grand(50), 30, enemy[w][e].x); break; } } int attack_angle(int w, int e) { return radians_to_angle(atan2(player.y - enemy[w][e].y, player.x - enemy[w][e].x)); } int pbullet_hits_enemy(int w, int b, int e) { int dam = 100; switch(pbullet[w][b].type) { case PBULLET_TURRET: case PBULLET_BASIC: dam = 100; break; case PBULLET_CIRCLE: dam = 200 + pbullet[w][b].type2 * 25; break; case PBULLET_HEAVY: dam = 1800 + pbullet[w][b].type2 * 400; break; case PBULLET_WHITE2: dam = 400; break; case PBULLET_WAVE: dam = (pbullet[w][b].type2 - 50) / 2; break; case PBULLET_MULTI1: case PBULLET_MULTI2: case PBULLET_MULTI3: case PBULLET_MULTI4: case PBULLET_MULTI5: dam = 40; break; case PBULLET_GREEN2_VORTEX: dam = 60; break; } // if (pbullet[w] [b].pole != enemy[w] [e].pole) // dam = 2; hurt_enemy(w, e, dam, 0, 0); return dam; } int seeker_hits_enemy(int w, int s, int e) { int dam = 400; // if (seeker[s].pole != enemy[w] [e].pole) // dam = 20; hurt_enemy(w, e, dam, 0, 0); return dam; } void hurt_enemy(int w, int e, int dam, int pole, int source) { int explode_b = 0; if (enemy[w][e].type == ENEMY_BOSS1) { if (boss.exploding > 0) return; if (boss.hp - dam < 0) { boss.hp = 0; kill_boss1(); return; } // if (boss.hp != boss.max_hp && boss.hp / 4 != (boss.hp - dam) / 4) //{ // boss1_gives_powerup(); //} boss.hp -= dam; return; } if (enemy[w][e].type == ENEMY_MB2) { // if (boss.exploding > 0) // return; if (boss.hp - dam < 0) { boss.hp = 0; kill_mb2(); return; } boss.hp -= dam; return; } if (enemy[w][e].type == ENEMY_MB1) { // if (boss.exploding > 0) // return; if (boss.hp - dam < 0) { boss.hp = 0; kill_mb1(); return; } boss.hp -= dam; return; } if (enemy[w][e].type == ENEMY_BOSS2) { // if (boss.exploding > 0) // return; if (boss.hp - dam < 0) { boss.hp = 0; kill_boss2(); return; } boss.hp -= dam; return; } enemy[w] [e].hp -= dam; // enemy[w] [e].hurt_pulse += dam * 5; // if (enemy[w] [e].hurt_pulse >= 15) // enemy[w] [e].hurt_pulse = 15; // if (pole == enemy[w] [e].pole) // explode_b = 1; if (enemy[w] [e].hp <= 0) enemy_explodes(w, e, explode_b, source); } /* void explode_bullets(int e, int pole_match, int p) { int i; int angle; if (player[p].in_play) angle = radians_to_angle(atan2(player[p].y - enemy[w] [e].y, player[p].x - enemy[w] [e].x)); else angle = - ANGLE_4;// straight down? int s_angle; int speed; for (i = 0; i < 4; i ++) { s_angle = angle + grand(ANGLE_32) - grand(ANGLE_32); speed = 2000 + grand(2500); create_ebullet(EBULLET_BALL, enemy[w] [e].pole, enemy[w] [e].x, enemy[w] [e].y, xpart(s_angle, speed), ypart(s_angle, speed), s_angle); } } */ void enemy_explodes(int w, int e, int bullets, int source) { int i, angle = grand(ANGLE_1), j, angle2; int distance, speed; switch(enemy[w] [e].type) { /* case ENEMY_GLIDER1: case ENEMY_BEAMER1: create_cloud(CLOUD_LARGE_SHOCKWAVE, POLE_NONE, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 50); create_cloud(CLOUD_EXPLODE, POLE_NONE, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 25 + grand(10)); create_cloud(CLOUD_EXPLODE, POLE_NONE, enemy[w] [e].x + grand(10000) - grand(10000), enemy[w] [e].y + grand(10000) - grand(10000), 0, 0, 25 + grand(10)); create_cloud(CLOUD_EXPLODE, POLE_NONE, enemy[w] [e].x + grand(10000) - grand(10000), enemy[w] [e].y + grand(10000) - grand(10000), 0, 0, 25 + grand(10)); create_cloud(CLOUD_EXPLODE, POLE_NONE, enemy[w] [e].x + grand(10000) - grand(10000), enemy[w] [e].y + grand(10000) - grand(10000), 0, 0, 25 + grand(10)); for (i = 0; i < 3; i ++) { angle += ANGLE_4 + grand(ANGLE_4); speed = 2000 + grand(1000) + grand(1000); distance = 5000; angle2 = angle + grand(ANGLE_16); // create_cloud(CLOUD_EXPLODE, POLE_NONE, enemy[w] [e].x + xpart(angle2, distance), enemy[w] [e].y + ypart(angle2, distance), xpart(angle2, speed), ypart(angle2, speed), 34 + grand(7)); create_cloud(CLOUD_LARGE_SPRAY, POLE_NONE, enemy[w] [e].x + xpart(angle2, distance), enemy[w] [e].y + ypart(angle2, distance), xpart(angle2, speed), ypart(angle2, speed), 20 + grand(7)); } break;*/ case ENEMY_ZAPPER1: create_cloud(w, CLOUD_LARGE_SHOCKWAVE, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 50); create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 30 + grand(10)); create_cloud(w, CLOUD_LARGE_SPRAY, 0, enemy[w][e].x + 3000, enemy[w][e].y, - 5000, 0, 20 + grand(7)); create_cloud(w, CLOUD_LARGE_SPRAY, 0, enemy[w][e].x - 3000, enemy[w][e].y, 5000, 0, 20 + grand(7)); play_effectwfvx(w, NWAV_BIGBANG, 1550 + grand(350), 100, enemy[w][e].x); break; case ENEMY_BURSTER: create_cloud(w, CLOUD_LARGE_SHOCKWAVE, 2, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 50); create_cloud(w, CLOUD_EXPLODE, 2, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 30 + grand(10)); for (i = 0; i < 4; i ++) { angle += ANGLE_8 + grand(ANGLE_4); for (j = 0; j < 5; j ++) { speed = 4000 + grand(4500) + grand(4000); distance = 15000; angle2 = angle + grand(ANGLE_16); create_cloud(w, CLOUD_DRAG_EXPLODE, 2, enemy[w] [e].x + xpart(angle2, distance), enemy[w] [e].y + ypart(angle2, distance), xpart(angle2, speed), ypart(angle2, speed), 20 + grand(10)); } } play_effectwfvx(w, NWAV_BIGBANG, 1450 + grand(450), 100, enemy[w][e].x); break; case ENEMY_CARRIER: create_pickup(w, grand(4), enemy[w][e].x, enemy[w][e].y); create_cloud(w, CLOUD_LARGE_SHOCKWAVE, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 50); create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 45 + grand(7)); play_effectwfvx(w, NWAV_BIGBANG, 1850 + grand(150), 100, enemy[w][e].x); break; case ENEMY_BEAMER1: create_cloud(w, CLOUD_LARGE_SHOCKWAVE, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 50); create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 45 + grand(7)); create_cloud(w, CLOUD_LARGE_SPRAY, 0, enemy[w][e].x + 5000, enemy[w][e].y - 5000, xpart(-ANGLE_8, 6000), ypart(-ANGLE_8, 6000), 15 + grand(7)); create_cloud(w, CLOUD_LARGE_SPRAY, 0, enemy[w][e].x + 5000, enemy[w][e].y + 5000, xpart(ANGLE_8, 6000), ypart(ANGLE_8, 6000), 15 + grand(7)); create_cloud(w, CLOUD_LARGE_SPRAY, 0, enemy[w][e].x - 5000, enemy[w][e].y + 5000, xpart(ANGLE_4 + ANGLE_8, 6000), ypart(ANGLE_4 + ANGLE_8, 6000), 15 + grand(7)); create_cloud(w, CLOUD_LARGE_SPRAY, 0, enemy[w][e].x - 5000, enemy[w][e].y - 5000, xpart(-ANGLE_4 - ANGLE_8, 6000), ypart(- ANGLE_4 - ANGLE_8, 6000), 15 + grand(7)); // create_cloud(w, CLOUD_LARGE_SPRAY, 0, enemy[w][e].x - 3000, enemy[w][e].y, 5000, 0, 20 + grand(7)); play_effectwfvx(w, NWAV_BIGBANG, 1000 + grand(300), 100, enemy[w][e].x); break; case ENEMY_GLIDER1: case ENEMY_SHOTTER1: create_cloud(w, CLOUD_LARGE_SHOCKWAVE, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 50); create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 45 + grand(7)); // create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x + grand(18000) - grand(18000), enemy[w] [e].y + grand(18000) - grand(18000), grand(3000) - grand(3000), grand(3000) - grand(3000), 14 + grand(7)); //create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x + grand(18000) - grand(18000), enemy[w] [e].y + grand(18000) - grand(18000), grand(3000) - grand(3000), grand(3000) - grand(3000), 14 + grand(7)); angle = 0; int col = 0; if (enemy[w][e].type == ENEMY_SHOTTER1) col = 1; for (i = 0; i < 6; i ++) { angle += ANGLE_6; speed = 4000 + grand(1500); distance = 12000; for (j = 0; j < 5; j ++) { create_cloud(w, CLOUD_EXPLODE, col, enemy[w][e].x + xpart(angle, distance), enemy[w] [e].y + ypart(angle, distance), xpart(angle, speed), ypart(angle, speed), 20 + grand(10)); } } play_effectwfvx(w, NWAV_BIGBANG, 1400 + grand(200), 100, enemy[w][e].x); break; case ENEMY_DIPPER1: case ENEMY_DIPPER2: create_cloud(w, CLOUD_SHOCKWAVE, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 30); create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 35 + grand(7)); create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x + grand(28000) - grand(28000), enemy[w] [e].y + grand(28000) - grand(28000), grand(3000) - grand(3000), grand(3000) - grand(3000), 17 + grand(7)); create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x + grand(28000) - grand(28000), enemy[w] [e].y + grand(28000) - grand(28000), grand(3000) - grand(3000), grand(3000) - grand(3000), 17 + grand(7)); int drag_colour = 0; if (enemy[w][e].type == ENEMY_DIPPER2) drag_colour = 1; for (i = 0; i < 4; i ++) { angle += ANGLE_8 + grand(ANGLE_4); for (j = 0; j < 5; j ++) { speed = 2000 + grand(3500) + grand(3000); distance = 9000; angle2 = angle + grand(ANGLE_16); create_cloud(w, CLOUD_DRAG_EXPLODE, drag_colour, enemy[w] [e].x + xpart(angle2, distance), enemy[w] [e].y + ypart(angle2, distance), xpart(angle2, speed), ypart(angle2, speed), 20 + grand(10)); } } play_effectwfvx(w, NWAV_BIGBANG, 2100 + grand(400), 100, enemy[w][e].x); break; default: play_effectwfx(w, NWAV_BANG, 1200 + grand(400), enemy[w][e].x); // create_cloud(CLOUD_LARGE_SHOCKWAVE, POLE_NONE, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 50); create_cloud(w, CLOUD_SHOCKWAVE, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 20); // create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 14 + grand(7)); // create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x + grand(18000) - grand(18000), enemy[w] [e].y + grand(18000) - grand(18000), grand(3000) - grand(3000), grand(3000) - grand(3000), 14 + grand(7)); //create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x + grand(18000) - grand(18000), enemy[w] [e].y + grand(18000) - grand(18000), grand(3000) - grand(3000), grand(3000) - grand(3000), 14 + grand(7)); create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 19 + grand(7)); create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x + grand(25000) - grand(25000), enemy[w] [e].y + grand(25000) - grand(25000), grand(3000) - grand(3000), grand(3000) - grand(3000), 16 + grand(7)); create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x + grand(25000) - grand(25000), enemy[w] [e].y + grand(25000) - grand(25000), grand(3000) - grand(3000), grand(3000) - grand(3000), 16 + grand(7)); for (i = 0; i < 3; i ++) { angle += ANGLE_4 + grand(ANGLE_4); for (j = 0; j < 5; j ++) { speed = 2000 + grand(3500) + grand(3000); distance = 3000; angle2 = angle + grand(ANGLE_16); create_cloud(w, CLOUD_DRAG_EXPLODE, 0, enemy[w] [e].x + xpart(angle2, distance), enemy[w] [e].y + ypart(angle2, distance), xpart(angle2, speed), ypart(angle2, speed), 20 + grand(10)); } } break; case ENEMY_BFLOWER: play_effectwfx(w, NWAV_BLIP, 800 + grand(200), enemy[w][e].x); // play_effectwfx(w, NWAV_BANG, 1200 + grand(400), enemy[w][e].x); create_cloud(w, CLOUD_SHOCKWAVE2, enemy[w][e].angle3, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 20); create_cloud(w, CLOUD_EXPLODE2, enemy[w][e].angle3, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 10); angle = grand(ANGLE_1); // create_cloud(w, CLOUD_EXPLODE2, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 20); create_cloud(w, CLOUD_EXPLODE2, enemy[w][e].angle3, enemy[w] [e].x + xpart(angle, 14000), enemy[w] [e].y + ypart(angle, 14000), 0, 0, 25); create_cloud(w, CLOUD_EXPLODE2, enemy[w][e].angle3, enemy[w] [e].x + xpart(angle + ANGLE_3, 14000), enemy[w] [e].y + ypart(angle + ANGLE_3, 14000), 0, 0, 25); create_cloud(w, CLOUD_EXPLODE2, enemy[w][e].angle3, enemy[w] [e].x + xpart(angle - ANGLE_3, 14000), enemy[w] [e].y + ypart(angle - ANGLE_3, 14000), 0, 0, 25); break; case ENEMY_BFIGHTER: play_effectwfx(w, NWAV_BANG, 1300 + grand(400), enemy[w][e].x); // create_cloud(w, CLOUD_SHOCKWAVE, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 20); create_cloud(w, CLOUD_EXPLODE, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 22 + grand(7)); angle = grand(ANGLE_16); for (i = 0; i < 16; i ++) { angle += ANGLE_16; speed = 2000; distance = 15000; create_cloud(w, CLOUD_DRAG_EXPLODE, 0, enemy[w] [e].x + xpart(angle, distance), enemy[w] [e].y + ypart(angle, distance), xpart(angle, speed), ypart(angle, speed), 30 + grand(10)); } break; case ENEMY_CROSS: // play_effectwfx(w, NWAV_BANG, 1200 + grand(400), enemy[w][e].x); play_effectwfx(w, NWAV_BLIP, 800 + grand(200), enemy[w][e].x); create_cloud(w, CLOUD_SHOCKWAVE2, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 20); create_cloud(w, CLOUD_EXPLODE2, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 20); angle = grand(ANGLE_1); // create_cloud(w, CLOUD_EXPLODE2, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 20); create_cloud(w, CLOUD_EXPLODE2, 0, enemy[w] [e].x + xpart(angle, 14000), enemy[w] [e].y + ypart(angle, 14000), 0, 0, 15); create_cloud(w, CLOUD_EXPLODE2, 0, enemy[w] [e].x + xpart(angle + ANGLE_3, 14000), enemy[w] [e].y + ypart(angle + ANGLE_3, 14000), 0, 0, 15); create_cloud(w, CLOUD_EXPLODE2, 0, enemy[w] [e].x + xpart(angle - ANGLE_3, 14000), enemy[w] [e].y + ypart(angle - ANGLE_3, 14000), 0, 0, 15); break; case ENEMY_CROSS2: // play_effectwfx(w, NWAV_BANG, 1200 + grand(400), enemy[w][e].x); play_effectwfx(w, NWAV_BLIP, 600 + grand(130), enemy[w][e].x); create_cloud(w, CLOUD_SHOCKWAVE2, 2, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 20); create_cloud(w, CLOUD_EXPLODE2, 2, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 20); angle = grand(ANGLE_1); // create_cloud(w, CLOUD_EXPLODE2, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 20); create_cloud(w, CLOUD_EXPLODE2, 2, enemy[w] [e].x + xpart(angle, 14000), enemy[w] [e].y + ypart(angle, 14000), xpart(angle, 3000), ypart(angle, 3000), 15); create_cloud(w, CLOUD_EXPLODE2, 2, enemy[w] [e].x + xpart(angle + ANGLE_4, 14000), enemy[w] [e].y + ypart(angle + ANGLE_4, 14000), xpart(angle + ANGLE_4, 3000), ypart(angle + ANGLE_4, 3000), 15); create_cloud(w, CLOUD_EXPLODE2, 2, enemy[w] [e].x + xpart(angle + ANGLE_2, 14000), enemy[w] [e].y + ypart(angle + ANGLE_2, 14000), xpart(angle + ANGLE_2, 3000), ypart(angle + ANGLE_2, 3000), 15); create_cloud(w, CLOUD_EXPLODE2, 2, enemy[w] [e].x + xpart(angle - ANGLE_4, 14000), enemy[w] [e].y + ypart(angle - ANGLE_4, 14000), xpart(angle - ANGLE_4, 3000), ypart(angle - ANGLE_4, 3000), 15); break; case ENEMY_WINGS: play_effectwfx(w, NWAV_BLIP2, 600, enemy[w][e].x); create_cloud(w, CLOUD_LARGE_SHOCKWAVE2, 2, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 50); create_cloud(w, CLOUD_EXPLODE2, 2, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 50); break; case ENEMY_FLOWER1: play_effectwfx(w, NWAV_BLIP2, 400 + grand(100), enemy[w][e].x); create_cloud(w, CLOUD_LARGE_SHOCKWAVE2, 2, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 50); for (i = 0; i < 8; i ++) { create_cloud(w, CLOUD_EXPLODE2, 2, enemy[w] [e].x + xpart(i * ANGLE_8, 9000), enemy[w] [e].y + ypart(i * ANGLE_8, 9000), xpart(i * ANGLE_8, 1500), ypart(i * ANGLE_8, 1500), 20); } break; case ENEMY_FLOWER2: play_effectwfx(w, NWAV_BLIP2, 300 + grand(50), enemy[w][e].x); // play_effectwfx(w, NWAV_BANG, 1200 + grand(400), enemy[w][e].x); create_cloud(w, CLOUD_LARGE_SHOCKWAVE2, 2, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 50); for (i = 0; i < 8; i ++) { create_cloud(w, CLOUD_EXPLODE2, 1, enemy[w] [e].x + xpart(i * ANGLE_8, 9000), enemy[w] [e].y + ypart(i * ANGLE_8, 9000), xpart(i * ANGLE_8, 1500), ypart(i * ANGLE_8, 1500), 20); } create_cloud(w, CLOUD_EXPLODE2, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 40); break; case ENEMY_FLOWER3: play_effectwfx(w, NWAV_BLIP2, 600 + grand(50), enemy[w][e].x); //lay_effectwfx(w, NWAV_BANG, 1200 + grand(400), enemy[w][e].x); create_cloud(w, CLOUD_LARGE_SHOCKWAVE2, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 50); for (i = 0; i < 8; i ++) { create_cloud(w, CLOUD_EXPLODE2, 2, enemy[w] [e].x + xpart(i * ANGLE_8, 30000), enemy[w] [e].y + ypart(i * ANGLE_8, 30000), xpart(i * ANGLE_8 + ANGLE_2, 2000), ypart(i * ANGLE_8 + ANGLE_2, 2000), 35); } create_cloud(w, CLOUD_EXPLODE2, 1, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 40); break; case ENEMY_FLOWER4: play_effectwfx(w, NWAV_BLIP2, 500 + grand(50), enemy[w][e].x); // play_effectwfx(w, NWAV_BANG, 1200 + grand(400), enemy[w][e].x); create_cloud(w, CLOUD_LARGE_SHOCKWAVE2, 2, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 50); for (i = 0; i < 8; i ++) { create_cloud(w, CLOUD_EXPLODE2, 1, enemy[w] [e].x + xpart(i * ANGLE_8, 30000), enemy[w] [e].y + ypart(i * ANGLE_8, 30000), xpart(i * ANGLE_8, 4000), ypart(i * ANGLE_8, 4000), 25); } create_cloud(w, CLOUD_EXPLODE2, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 40); break; case ENEMY_FLOWER5: play_effectwfx(w, NWAV_BLIP2, 200 + grand(50), enemy[w][e].x); // play_effectwfx(w, NWAV_BANG, 1200 + grand(400), enemy[w][e].x); create_cloud(w, CLOUD_LARGE_SHOCKWAVE2, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 50); create_cloud(w, CLOUD_EXPLODE2, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 50); break; case ENEMY_CARRIER2: create_pickup(w, grand(4), enemy[w][e].x, enemy[w][e].y); create_cloud(w, CLOUD_LARGE_SHOCKWAVE2, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 50); for (i = 0; i < 8; i ++) { create_cloud(w, CLOUD_EXPLODE2, 0, enemy[w] [e].x + xpart(i * ANGLE_8, 45000), enemy[w] [e].y + ypart(i * ANGLE_8, 45000), 0, 0, 30); } create_cloud(w, CLOUD_EXPLODE2, 0, enemy[w] [e].x, enemy[w] [e].y, 0, 0, 50); play_effectwfx(w, NWAV_BLIP2, 500 + grand(50), enemy[w][e].x); break; } //explode_bullets(e, bullets, source); player_score(eclass[enemy[w][e].type].score); destroy_enemy(w, e); } void drag_enemy(int w, int e, int drag) { enemy[w] [e].x_speed *= drag; enemy[w] [e].x_speed /= 1000; enemy[w] [e].y_speed *= drag; enemy[w] [e].y_speed /= 1000; } void track_target(int w, int e, int x, int y, int angle, int turn) { int angle_move = delta_turn_towards_xy(enemy[w] [e].x, enemy[w] [e].y, x, y, angle, turn); // textprintf_ex(screen, font, 5, 5, COLOUR_11, COLOUR_2, "%i %i %i %i %i %i ", e, enemy[w] [e].type, enemy[w] [e].x, enemy[w] [e].y, turn, angle_move); if (angle_move / turn != enemy[w] [e].angle1_turning) { if (enemy[w] [e].angle1_turning_count <= 0) { enemy[w] [e].angle1_turning_count = 20; if (angle_move < 0) enemy[w] [e].angle1_turning = -1; else enemy[w] [e].angle1_turning = 1; return; } enemy[w] [e].angle1_turning_count --; // enemy[w] [e].angle1 += turn * enemy[w] [e].angle1_turning; return; } enemy[w] [e].angle1_turning_count --; enemy[w] [e].angle1 += turn * enemy[w] [e].angle1_turning; if (enemy[w] [e].angle1 < 0) enemy[w] [e].angle1 += ANGLE_1; if (enemy[w] [e].angle1 >= ANGLE_1) enemy[w] [e].angle1 -= ANGLE_1; } void player_score(int amount) { int old_score = player.score; player.score += amount; if ((int) old_score / 1500 != (int) player.score / 1500) { if (arena.player_lives < 8) arena.player_lives ++; } } void destroy_enemy(int w, int e) { int s; enemy[w] [e].type = ENEMY_NONE; for (s = 0; s < NO_SEEKERS; s ++) { if (seeker[w][s].target == e) { seeker[w][s].target = -1; find_new_seeker_target(w, s); } } } excellent-bifurcation-0.0.20071015/src/ebullet.c0000666000175000017500000002447610557462022020466 0ustar miriammiriam#include "config.h" #include #include "allegro.h" #include "globvars.h" #include "stuff.h" #include "enemy.h" #include "cloud.h" #include "palette.h" void run_ebullets(void); void destroy_ebullet(int w, int b); //int ebullet_collision(int b); int check_eat_bullet(int b); void eat_bullet(int b, int p); void player_gain_energy(int p, int ev); void check_beam_absorb(int p, int b); int shoot_triangle(int w, int x, int y, int angle, int type); void init_ebullets(void) { int b, w; for (w = 0; w < 2; w ++) { for (b = 0; b < NO_EBULLETS; b ++) { ebullet[w] [b].type = EBULLET_NONE; } } } int create_ebullet(int w, int type, int status, int x, int y, int xs, int ys, int angle) { int b; for (b = 0; b < NO_EBULLETS; b ++) { if (ebullet[w] [b].type == EBULLET_NONE) break; if (b == NO_EBULLETS - 1) return -1; } ebullet[w] [b].type = type; ebullet[w] [b].x = x; ebullet[w] [b].y = y; ebullet[w] [b].x_speed = xs; ebullet[w] [b].y_speed = ys; // ebullet[w] [b].pole = pole; ebullet[w] [b].energy_value = 40; ebullet[w] [b].angle = angle; ebullet[w] [b].timeout = 5000; ebullet[w] [b].status = status; ebullet[w] [b].status2 = 0; return b; } void run_ebullets(void) { arena.old_beam = arena.beam; arena.beam = 0; int b, w; for (w = 0; w < 2; w ++) { for (b = 0; b < NO_EBULLETS; b ++) { if (ebullet[w][b].type == EBULLET_NONE) continue; // if (ebullet[b].type == EBULLET_BASIC) switch(ebullet[w][b].type) { case EBULLET_SHOT2: ebullet[w][b].x += ebullet[w][b].x_speed; ebullet[w][b].y += ebullet[w][b].y_speed; if (arena.counter % 2 == 0) create_cloud(w, CLOUD_DRAG_EXPLODE, ebullet[w][b].status, ebullet[w][b].x + grand(5000) - grand(5000), ebullet[w][b].y + grand(5000) - grand(5000), 0, 0, 25 + grand(15)); // create_cloud(w, CLOUD_EXPLODE, 0, ebullet[w][b].x + grand(5000) - grand(5000), ebullet[w][b].y + grand(5000) - grand(5000), 0, 0, 9 + grand(5)); break; case EBULLET_SHOT3: ebullet[w][b].x += ebullet[w][b].x_speed; ebullet[w][b].y += ebullet[w][b].y_speed; if (arena.counter % 2 == 0) create_cloud(w, CLOUD_DRAG_EXPLODE, ebullet[w][b].status, ebullet[w][b].x, ebullet[w][b].y, 0, 0, 12 + grand(10)); break; case EBULLET_SHOT: case EBULLET_FAT_SHOT: case EBULLET_FATTER_SHOT: case EBULLET_BALL: ebullet[w][b].x += ebullet[w][b].x_speed; ebullet[w][b].y += ebullet[w][b].y_speed; break; case EBULLET_SPIN: ebullet[w][b].x += ebullet[w][b].x_speed; ebullet[w][b].y += ebullet[w][b].y_speed; ebullet[w][b].angle += ebullet[w][b].turn_direction; if (ebullet[w][b].angle < 0) ebullet[w][b].angle += ANGLE_1; ebullet[w][b].angle %= ANGLE_1; break; case EBULLET_BEAM1: if (ebullet[w][b].status < 150)// && ebullet[w][b].status > 30) arena.beam = 1; break; case EBULLET_TRIANGLE: ebullet[w][b].status2 ++; if (ebullet[w][b].status2 < 60) { ebullet[w][b].x_speed += xpart(ebullet[w][b].angle, 50); ebullet[w][b].y_speed += ypart(ebullet[w][b].angle, 50); } ebullet[w][b].x += ebullet[w][b].x_speed; ebullet[w][b].y += ebullet[w][b].y_speed; break; case EBULLET_DIAMOND: ebullet[w][b].status2 ++; ebullet[w][b].x += ebullet[w][b].x_speed; ebullet[w][b].y += ebullet[w][b].y_speed; ebullet[w][b].status3 += ebullet[w][b].turn_direction; if (ebullet[w][b].status3 >= SMALL_ROTATIONS) ebullet[w][b].status3 = 0; if (ebullet[w][b].status3 < 0) ebullet[w][b].status3 = SMALL_ROTATIONS - 1; break; case EBULLET_CIRCLE: ebullet[w][b].status2 ++; ebullet[w][b].x += ebullet[w][b].x_speed; ebullet[w][b].y += ebullet[w][b].y_speed; break; case EBULLET_STAR: ebullet[w][b].status2 ++; ebullet[w][b].x += ebullet[w][b].x_speed; ebullet[w][b].y += ebullet[w][b].y_speed; ebullet[w][b].status3 += ebullet[w][b].turn_direction; if (ebullet[w][b].status3 >= SMALL_ROTATIONS) ebullet[w][b].status3 = 0; if (ebullet[w][b].status3 < 0) ebullet[w][b].status3 = SMALL_ROTATIONS - 1; if (ebullet[w][b].status2 > 100 && grand(80) == 0) { int angle = grand(ANGLE_1); shoot_triangle(w, ebullet[w][b].x + xpart(angle, 4000), ebullet[w][b].y + ypart(angle, 4000), angle, 2); shoot_triangle(w, ebullet[w][b].x + xpart(angle + ANGLE_4, 4000), ebullet[w][b].y + ypart(angle + ANGLE_4, 4000), angle + ANGLE_4, 2); shoot_triangle(w, ebullet[w][b].x + xpart(angle + ANGLE_2, 4000), ebullet[w][b].y + ypart(angle + ANGLE_2, 4000), angle + ANGLE_2, 2); shoot_triangle(w, ebullet[w][b].x + xpart(angle - ANGLE_4, 4000), ebullet[w][b].y + ypart(angle - ANGLE_4, 4000), angle - ANGLE_4, 2); create_cloud(w, CLOUD_EXPLODE2, 2, ebullet[w][b].x, ebullet[w][b].y, 0, 0, 12 + grand(5)); destroy_ebullet(w, b); return; } break; } // if (check_eat_bullet(b) == 1) // continue; ebullet[w][b].timeout --; if (arena.level == 1) { if (ebullet[w][b].x <= -20000 || ebullet[w][b].y <= -20000 || ebullet[w][b].x >= 330000 || ebullet[w][b].y >= 490000 || ebullet[w][b].timeout <= 0) destroy_ebullet(w, b); } else { if (ebullet[w][b].x <= -120000 || ebullet[w][b].y <= -120000 || ebullet[w][b].x >= 430000 || ebullet[w][b].y >= 590000 || ebullet[w][b].timeout <= 0) destroy_ebullet(w, b); } // stage 2 bullets have long trails } } } int shoot_triangle(int w, int x, int y, int angle, int type) { int b = create_ebullet(w, EBULLET_TRIANGLE, type, x, y, 0, 0, angle); if (b != -1) { ebullet[w][b].x2 = ebullet[w][b].x; ebullet[w][b].y2 = ebullet[w][b].y; ebullet[w][b].status3 = (int) angle / (SMALL_ROTATIONS_ANGLE) & (SMALL_ROTATIONS - 1); } return b; } int shoot_circle(int w, int x, int y, int xs, int ys, int angle, int type) { int b = create_ebullet(w, EBULLET_CIRCLE, type, x, y, xs, ys, angle); if (b != -1) { ebullet[w][b].x2 = ebullet[w][b].x; ebullet[w][b].y2 = ebullet[w][b].y; } return b; } int shoot_diamond(int w, int x, int y, int xs, int ys, int angle, int type, int turn_direction) { int b = create_ebullet(w, EBULLET_DIAMOND, type, x, y, xs, ys, angle); if (b != -1) { ebullet[w][b].x2 = ebullet[w][b].x; ebullet[w][b].y2 = ebullet[w][b].y; ebullet[w][b].status3 = (int) angle / (SMALL_ROTATIONS_ANGLE) & (SMALL_ROTATIONS - 1); ebullet[w][b].turn_direction = turn_direction; } return b; } int shoot_star(int w, int x, int y, int xs, int ys, int angle, int type, int turn_direction) { int b = create_ebullet(w, EBULLET_STAR, type, x, y, xs, ys, angle); if (b != -1) { ebullet[w][b].x2 = ebullet[w][b].x; ebullet[w][b].y2 = ebullet[w][b].y; ebullet[w][b].status3 = (int) angle / (SMALL_ROTATIONS_ANGLE) & (SMALL_ROTATIONS - 1); ebullet[w][b].turn_direction = turn_direction; } return b; } int check_eat_bullet(int b) { /* int p; for (p = 0; p < 2; p ++) { if (player[p].in_play == 0) continue; if (player[p].pole != ebullet[b].pole || player[p].switch_recycle > 0) continue; if (ebullet[b].type == EBULLET_BEAM1) { check_beam_absorb(p, b); continue; } if (ebullet[b].x >= player[p].x - 25000 && ebullet[b].x <= player[p].x + 25000 && ebullet[b].y >= player[p].y - 25000 && ebullet[b].y <= player[p].y + 25000) { if (hypot(ebullet[b].y - player[p].y, ebullet[b].x - player[p].x) <= 16000) { eat_bullet(b, p); return 1; } } } */ return 0; } void eat_bullet(int b, int p) { //player_gain_energy(p, ebullet[b].energy_value); //destroy_ebullet(b); } void check_beam_absorb(int p, int b) { /* if (ebullet[b].type == EBULLET_BEAM1 && (ebullet[b].status > 180 || ebullet[b].status < 30)) return; int bx = ebullet[b].x / GRAIN; int by = ebullet[b].y / GRAIN; int px = player[p].x / GRAIN; int py = player[p].y / GRAIN; int angle = radians_to_angle(atan2((py - by), (px - bx))); if ((angle > ANGLE_1 - ANGLE_8 || angle < ANGLE_8) && px < bx) return; // right quadrant if (angle > ANGLE_2 - ANGLE_8 && angle < ANGLE_2 + ANGLE_8 && px > bx) return; // left quadrant if (angle > ANGLE_8 && angle < ANGLE_2 - ANGLE_8 && py < by) return; // bottom quadrant if (angle < ANGLE_1 - ANGLE_8 && angle > ANGLE_2 + ANGLE_8 && py > by) return; // bottom quadrant // okay, it's in the right quadrant! let's be more specific: // int angle2 = // radians_to_angle(atan2((py - by), (px - bx))); bx = ebullet[b].x / GRAIN - xpart(ebullet[b].angle, 5000); by = ebullet[b].y / GRAIN - ypart(ebullet[b].angle, 5000); int angle2 = radians_to_angle(atan2((py - by), (px - bx))); if (angle2 < 16) { if (angle > ANGLE_1 - 16) angle = angle2; } if (angle < 16) { if (angle2 > ANGLE_1 - 16) angle2 = angle; } if (abs(angle2 - angle) < 16) { player_gain_energy(p, 1); ebullet[b].status2 = hypot(ebullet[b].y - player[p].y, ebullet[b].x - player[p].x) - grand(4000); if (ebullet[b].status2 <= 0) ebullet[b].status2 = 1; // if (arena.counter % 20 == 0) // create_cloud(CLOUD_SHOCKWAVE, POLE_NONE, enemy[e].x, enemy[e].y, 0, 0, 20); } */ } void player_gain_energy(int p, int ev) { //player[p].energy += ev; //if (player[p].energy >= 800) //player[p].energy = 800; } void destroy_ebullet(int w, int b) { ebullet[w] [b].type = EBULLET_NONE; } excellent-bifurcation-0.0.20071015/src/cloud.h0000666000175000017500000000021110543505354020123 0ustar miriammiriamvoid init_clouds(void); void run_clouds(void); int create_cloud(int w, int type, int type2, int x, int y, int xs, int ys, int timer); excellent-bifurcation-0.0.20071015/src/palette.c0000666000175000017500000004221210704762472020462 0ustar miriammiriam/* Angry Moth Copyright (C) 2006 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, 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 Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: palette.c History: 11/9/2005 - Version 1.0 finalised This file contains: - palette and transparency stuff. Various enums are in palette.h. */ #include "config.h" #include "allegro.h" #include "palette.h" #include "globvars.h" COLOR_MAP trans_table; //COLOR_MAP trans_table2; //int blend_function(int base, int trans, RGB *rgbl); int blend_function(int trans, int base, RGB *rgbl); int blend_function2(int trans, int base, RGB *rgbl); int limit_colour(int colour_input); void halfway_colour(int base, int target, int r, int g, int b); RGB other_palet [1324]; RGB palet [256]; RGB palet2 [256]; //RGB light_palet [256]; //RGB dark_palet [256]; RGB other_palet2 [2048]; // what seems to be a weird bug in Allegro forces me to put padding around // the palet array, or it becomes corrupted. The same thing happened in // World of Violence and I have no idea why. /* IMPORTANT TO REMEMBER: I created the palette for the GIMP by saving a 16x16 image with all colours as a gif then importing the palette from that. This let me get the colours in the right order! In the GIMP, must go to image|mode|indexed colour and change the settings there. */ void pork_create_color_table(COLOR_MAP *table, AL_CONST PALETTE pal); void pork_create_color_table2(COLOR_MAP *table, AL_CONST PALETTE pal); int base_colour(int y); void colour_table(const char *which_call); /* Colour scheme: Qn - how to leave space for zero? Answer: don't include outline in lights! Base colours: 0 outline 1 lower bg 1 - Dark 2 lower bg 2 - Red 3 lower bg 3 - Yellow 4 upper bg 1 - LBlue-grey 5 upper bg 2 - DBlue-grey 6 upper bg 3 - Brown 7 Red 1 (orangish) 8 Red 2 9 Blue 1 10 Blue 2 11 Yellow 1 12 White 1 13 White 2 14 White 3 (dgrey) 15 Green 2 I can probably get away with changing these between levels, anyway. Trans colours: 0 base 1 White 2 Yellow 3 LBlue 4 LRed 5 LGreen 6 LPurple 7 DBlue 8 Dred 9 Dgreen 10 DPurple 11 DDred 12 Black 13 Light 1 14 Light 2 15 Light 3 */ /* Base colours: 0 outline 1 lower bg 1 - Dark 2 lower bg 2 - Red 3 lower bg 3 - Yellow 4 upper bg 1 - LBlue-grey 5 upper bg 2 - DBlue-grey 6 upper bg 3 - Brown 7 Red 1 (orangish) 8 Red 2 9 Blue 1 10 Blue 2 11 Yellow 1 12 White 1 13 White 2 14 White 3 (dgrey) 15 Green 2 */ int base_palette [16] [3] = { // Outline {5, 5, 5}, // 1 //{16, 16, 16}, // 2 //{25, 10, 10}, // 3 //{20, 20, 5}, // 4 {9, 9, 9}, // 2 {16, 9, 9}, // 3 {13, 13, 9}, // 4 {14, 20, 14}, // 5 {14, 14, 14}, // 6 {5, 5, 24}, // 7 {50, 15, 15}, // 8 {40, 8, 8}, // 9 {20, 20, 50}, // 10 {15, 15, 35}, // 11 {48, 42, 12}, // 12 {52, 52, 52}, // 13 {36, 36, 36}, // 14 {25, 25, 25}, // 15 {2, 30, 2}, // 16 /* {5, 5, 5}, // 1 //{16, 16, 16}, // 2 //{25, 10, 10}, // 3 //{20, 20, 5}, // 4 {9, 9, 9}, // 2 {13, 13, 13}, // 3 {12, 12, 12}, // 4 {17, 17, 17}, // 5 {21, 21, 21}, // 6 {12, 12, 12}, // 7 {40, 40, 40}, // 8 {20, 20, 20}, // 9 {35, 35, 35}, // 10 {22, 22, 22}, // 11 {39, 38, 39}, // 12 {52, 52, 52}, // 13 {36, 36, 36}, // 14 {25, 25, 25}, // 15 {16, 16, 16}, // 16*/ }; int stage2_palette [16] [3] = { // Outline {5, 5, 5}, // 1 {0, 10, 0}, // 5 {0, 20, 0}, // 6 {0, 30, 0}, // 7 {8, 8, 0}, // 2 {19, 19, 2}, // 3 {27, 27, 4}, // 4 {50, 15, 15}, // 8 {40, 8, 8}, // 9 {20, 20, 50}, // 10 {15, 15, 35}, // 11 {48, 42, 12}, // 12 {52, 52, 52}, // 13 {36, 36, 36}, // 14 {25, 25, 25}, // 15 {2, 30, 2}, // 16 //{12, 32, 12}, // }; #define END_TRANSPARENCIES 104 void reset_palette(void) { vsync(); set_palette(palet); } void init_palette(void) { int i; palet [0].r = 0; palet [0].g = 0; palet [0].b = 0; for (i = 0; i < 256; i ++) { palet [i].r = 0; palet [i].g = 0; palet [i].b = 0; } // struct pstruct *bpal [16] = base_palette; // RGB *pal2 = palet; for (i = 1; i < 17; i ++) { palet [i].r = base_palette [i - 1] [0]; palet [i].g = base_palette [i - 1] [1]; palet [i].b = base_palette [i - 1] [2]; } for (i = 0; i < 16; i ++) { palet[i + TRANS_WHITE].r = limit_colour(base_palette [i] [0] / 3 + 54); palet[i + TRANS_WHITE].g = limit_colour(base_palette [i] [1] / 3 + 54); palet[i + TRANS_WHITE].b = limit_colour(base_palette [i] [2] / 3 + 54); palet[i + TRANS_YELLOW].r = limit_colour(base_palette [i] [0] / 4 + 45); palet[i + TRANS_YELLOW].g = limit_colour(base_palette [i] [1] / 4 + 36); palet[i + TRANS_YELLOW].b = limit_colour(base_palette [i] [2] / 4); palet[i + TRANS_LBLUE].r = limit_colour(base_palette [i] [0] / 3 + 20); palet[i + TRANS_LBLUE].g = limit_colour(base_palette [i] [1] / 3 + 20); palet[i + TRANS_LBLUE].b = limit_colour(base_palette [i] [2] / 3 + 40); palet[i + TRANS_LGREEN].r = limit_colour(base_palette [i] [0] / 3 + 5); palet[i + TRANS_LGREEN].g = limit_colour(base_palette [i] [1] / 3 + 30); palet[i + TRANS_LGREEN].b = limit_colour(base_palette [i] [2] / 3 + 5); palet[i + TRANS_LRED].r = limit_colour(base_palette [i] [0] / 2 + 36); palet[i + TRANS_LRED].g = limit_colour(base_palette [i] [1] / 2 + 10); palet[i + TRANS_LRED].b = limit_colour(base_palette [i] [2] / 2 + 0); /* palet[i + TRANS_LRED].r = limit_colour(base_palette [i] [0] / 3 + 36); palet[i + TRANS_LRED].g = limit_colour(base_palette [i] [1] / 3 + 20); palet[i + TRANS_LRED].b = limit_colour(base_palette [i] [2] / 3 + 0);*/ palet[i + TRANS_LPURPLE].r = limit_colour(base_palette [i] [0] / 2 + 30); palet[i + TRANS_LPURPLE].g = limit_colour(base_palette [i] [1] / 2 + 0); palet[i + TRANS_LPURPLE].b = limit_colour(base_palette [i] [2] / 2 + 40); palet[i + TRANS_DBLUE].r = limit_colour(base_palette [i] [0] / 2 + 5); palet[i + TRANS_DBLUE].g = limit_colour(base_palette [i] [1] / 2 + 5); palet[i + TRANS_DBLUE].b = limit_colour(base_palette [i] [2] / 2 + 35); palet[i + TRANS_DPURPLE].r = limit_colour(base_palette [i] [0] / 2 + 20); palet[i + TRANS_DPURPLE].g = limit_colour(base_palette [i] [1] / 2 + 0); palet[i + TRANS_DPURPLE].b = limit_colour(base_palette [i] [2] / 2 + 30); palet[i + TRANS_DGREEN].r = limit_colour(base_palette [i] [0] / 2 + 0); palet[i + TRANS_DGREEN].g = limit_colour(base_palette [i] [1] / 2 + 15); palet[i + TRANS_DGREEN].b = limit_colour(base_palette [i] [2] / 2 + 0); palet[i + TRANS_DRED].r = limit_colour(base_palette [i] [0] / 2 + 25); palet[i + TRANS_DRED].g = limit_colour(base_palette [i] [1] / 2 + 0); palet[i + TRANS_DRED].b = limit_colour(base_palette [i] [2] / 2 + 0); palet[i + TRANS_DDRED].r = limit_colour(base_palette [i] [0] + 12); palet[i + TRANS_DDRED].g = limit_colour(base_palette [i] [1] - 0); palet[i + TRANS_DDRED].b = limit_colour(base_palette [i] [2] - 0); palet[i + TRANS_BLACK].r = limit_colour(base_palette [i] [0] - 15); palet[i + TRANS_BLACK].g = limit_colour(base_palette [i] [1] - 15); palet[i + TRANS_BLACK].b = limit_colour(base_palette [i] [2] - 15); palet[i + TRANS_DDBLUE].r = limit_colour(base_palette [i] [0] + 3); palet[i + TRANS_DDBLUE].g = limit_colour(base_palette [i] [1] + 3); palet[i + TRANS_DDBLUE].b = limit_colour(base_palette [i] [2] + 20); palet[i + TRANS_DDGREEN].r = limit_colour(base_palette [i] [0] + 0); palet[i + TRANS_DDGREEN].g = limit_colour(base_palette [i] [1] + 9); palet[i + TRANS_DDGREEN].b = limit_colour(base_palette [i] [2] + 0); } palet[0].r = 0; palet[0].g = 0; palet[0].b = 0; // **********************************************************************88 // start palet2 // **********************************************************************88 palet2 [0].r = 0; palet2 [0].g = 0; palet2 [0].b = 0; for (i = 0; i < 256; i ++) { palet2 [i].r = 0; palet2 [i].g = 0; palet2 [i].b = 0; } // struct pstruct *bpal [16] = base_palet2te; // RGB *pal2 = palet2; for (i = 1; i < 17; i ++) { palet2 [i].r = stage2_palette [i - 1] [0]; palet2 [i].g = stage2_palette [i - 1] [1]; palet2 [i].b = stage2_palette [i - 1] [2]; } for (i = 0; i < 16; i ++) { palet2[i + TRANS_WHITE].r = limit_colour(stage2_palette [i] [0] / 3 + 54); palet2[i + TRANS_WHITE].g = limit_colour(stage2_palette [i] [1] / 3 + 54); palet2[i + TRANS_WHITE].b = limit_colour(stage2_palette [i] [2] / 3 + 54); palet2[i + TRANS_YELLOW].r = limit_colour(stage2_palette [i] [0] / 4 + 45); palet2[i + TRANS_YELLOW].g = limit_colour(stage2_palette [i] [1] / 4 + 36); palet2[i + TRANS_YELLOW].b = limit_colour(stage2_palette [i] [2] / 4); palet2[i + TRANS_LBLUE].r = limit_colour(stage2_palette [i] [0] / 3 + 20); palet2[i + TRANS_LBLUE].g = limit_colour(stage2_palette [i] [1] / 3 + 20); palet2[i + TRANS_LBLUE].b = limit_colour(stage2_palette [i] [2] / 3 + 40); palet2[i + TRANS_LGREEN].r = limit_colour(stage2_palette [i] [0] / 3 + 5); palet2[i + TRANS_LGREEN].g = limit_colour(stage2_palette [i] [1] / 3 + 30); palet2[i + TRANS_LGREEN].b = limit_colour(stage2_palette [i] [2] / 3 + 5); /* palet2[i + TRANS_LRED].r = limit_colour(stage2_palette [i] [0] / 3 + 36); palet2[i + TRANS_LRED].g = limit_colour(stage2_palette [i] [1] / 3 + 20); palet2[i + TRANS_LRED].b = limit_colour(stage2_palette [i] [2] / 3 + 0);*/ palet2[i + TRANS_LRED].r = limit_colour(stage2_palette [i] [0] / 2 + 36); palet2[i + TRANS_LRED].g = limit_colour(stage2_palette [i] [1] / 2 + 10); palet2[i + TRANS_LRED].b = limit_colour(stage2_palette [i] [2] / 2 + 0); palet2[i + TRANS_LPURPLE].r = limit_colour(stage2_palette [i] [0] / 2 + 30); palet2[i + TRANS_LPURPLE].g = limit_colour(stage2_palette [i] [1] / 2 + 0); palet2[i + TRANS_LPURPLE].b = limit_colour(stage2_palette [i] [2] / 2 + 40); palet2[i + TRANS_DBLUE].r = limit_colour(stage2_palette [i] [0] / 2 + 5); palet2[i + TRANS_DBLUE].g = limit_colour(stage2_palette [i] [1] / 2 + 5); palet2[i + TRANS_DBLUE].b = limit_colour(stage2_palette [i] [2] / 2 + 35); palet2[i + TRANS_DPURPLE].r = limit_colour(stage2_palette [i] [0] / 2 + 20); palet2[i + TRANS_DPURPLE].g = limit_colour(stage2_palette [i] [1] / 2 + 0); palet2[i + TRANS_DPURPLE].b = limit_colour(stage2_palette [i] [2] / 2 + 30); palet2[i + TRANS_DGREEN].r = limit_colour(stage2_palette [i] [0] / 2 + 0); palet2[i + TRANS_DGREEN].g = limit_colour(stage2_palette [i] [1] / 2 + 15); palet2[i + TRANS_DGREEN].b = limit_colour(stage2_palette [i] [2] / 2 + 0); palet2[i + TRANS_DRED].r = limit_colour(stage2_palette [i] [0] / 2 + 25); palet2[i + TRANS_DRED].g = limit_colour(stage2_palette [i] [1] / 2 + 5); palet2[i + TRANS_DRED].b = limit_colour(stage2_palette [i] [2] / 2 + 5); palet2[i + TRANS_DDRED].r = limit_colour(stage2_palette [i] [0] + 12); palet2[i + TRANS_DDRED].g = limit_colour(stage2_palette [i] [1] + 3); palet2[i + TRANS_DDRED].b = limit_colour(stage2_palette [i] [2] + 3); palet2[i + TRANS_BLACK].r = limit_colour(stage2_palette [i] [0] + 15); palet2[i + TRANS_BLACK].g = limit_colour(stage2_palette [i] [1] + 15); palet2[i + TRANS_BLACK].b = limit_colour(stage2_palette [i] [2] + 15); /* palet2[i + TRANS_BLACK].r = limit_colour(stage2_palette [i] [0] - 15); palet2[i + TRANS_BLACK].g = limit_colour(stage2_palette [i] [1] - 15); palet2[i + TRANS_BLACK].b = limit_colour(stage2_palette [i] [2] - 15);*/ palet2[i + TRANS_DDBLUE].r = limit_colour(stage2_palette [i] [0] + 3); palet2[i + TRANS_DDBLUE].g = limit_colour(stage2_palette [i] [1] + 3); palet2[i + TRANS_DDBLUE].b = limit_colour(stage2_palette [i] [2] + 20); palet2[i + TRANS_DDGREEN].r = limit_colour(stage2_palette [i] [0] + 0); palet2[i + TRANS_DDGREEN].g = limit_colour(stage2_palette [i] [1] + 9); palet2[i + TRANS_DDGREEN].b = limit_colour(stage2_palette [i] [2] + 0); } palet2[0].r = 0; palet2[0].g = 0; palet2[0].b = 0; // end palet2 vsync(); set_palette(palet); pork_create_color_table(&trans_table, palet); // pork_create_color_table2(&trans_table2, palet); color_map = &trans_table; // set_palette(palet2); } void halfway_colour(int base, int target, int r, int g, int b) { int diff; diff = palet[base].r - r; diff /= 2; palet[target].r += diff; diff = palet[base].g - g; diff /= 2; palet[target].g += diff; diff = palet[base].b - b; diff /= 2; palet[target].b += diff; } int limit_colour(int colour_input) { if (colour_input < 0) return 0; if (colour_input > 63) return 63; return colour_input; } /* int blend_function(int trans, int base, RGB *rgbl) { if (base <= COLOUR_11) return trans + base; // int low_colour = base % 12; // int low_trans = trans / 12; int trans_strength = (trans / 12 - 1) % 6; if (trans == TRANS_PURPLE1) trans_strength = 10; if (trans == TRANS_PURPLE2) trans_strength = 11; int base_trans_strength = (base / 12 - 1) % 6; if (trans == TRANS_PURPLE1) base_trans_strength = 10; if (trans == TRANS_PURPLE2) base_trans_strength = 11; if (trans_strength >= base_trans_strength) return trans + (base % 12); else return base; return trans; } */ int blend_function(int trans, int base, RGB *rgbl) { // base = COLOUR_12 = 12 // trans = TRANS_WHITE1 = 13 // trans + base = 25 // trans + base - 1 = 24 /* if (trans == CONVERT_POLE) { switch(base) { case 2: return 12; case 3: return 11; case 4: return 10; case 10: return 4; case 11: return 3; case 12: return 2; default: return base; } } */ /* if (trans == FIX_BITMAP) { switch(base) { case 1: return 0; case 5: case 6: return 9; case 4: return 10; case 2: return 12; case 3: return 12; default: return base; } } */ //if (base == COLOUR_12) //return trans + base - 1; //if (base <= COLOUR_12) //return trans + base - 1; // return trans + ((base) % 12); //// return base; // trans --; /* if (trans == TRANS_LIGHT1 || trans == TRANS_LIGHT2 || trans == TRANS_LIGHT3) { if (base == COL_OUTLINE) return COL_OUTLINE; // don't light up outline; this lets us cram more trans colours in if (base < TRANS_LIGHT1) return (base + trans - 2) % 0xFF; // the % 0xFF is just to make sure it doesn't break the array limits. Any number which is > 255 isn't used. trans -= TRANS_LIGHT1; base -= TRANS_LIGHT1; if (trans > base) return base; return trans + base % 15; }*/ if (base < TRANS_WHITE) return trans + base - 1; int trans_strength = (trans - 1) / 16; // if (trans == TRANS_PURPLE1) // trans_strength = 10; //if (trans == TRANS_PURPLE2) //trans_strength = 11; int base_trans_strength = (base - 1) / 16; if (trans_strength <= base_trans_strength) return trans + ((base - 1) % 16); else return base; return trans; } /*int blend_function(int trans, int base, RGB *rgbl) { if (base <= COLOUR_12) return trans + base; trans --; // int low_colour = base % 12; // int low_trans = trans / 12; int trans_strength = (trans / 12 - 1) % 6; if (trans == TRANS_PURPLE1) trans_strength = 10; if (trans == TRANS_PURPLE2) trans_strength = 11; int base_trans_strength = (base / 12 - 1) % 6; if (trans == TRANS_PURPLE1) base_trans_strength = 10; if (trans == TRANS_PURPLE2) base_trans_strength = 11; if (trans_strength >= base_trans_strength) return trans + (base % 12); else return base; return trans; } */ /* This function had to be modified from the allegro create_color_table because the allegro version used bestfit_color, whereas we need specific color values */ void pork_create_color_table(COLOR_MAP *table, AL_CONST PALETTE pal) { int x, y, z; RGB c; for (x=0; xdata[x][y] = z; } } } excellent-bifurcation-0.0.20071015/src/pbullet.h0000666000175000017500000000044510550221122020457 0ustar miriammiriamint create_pbullet(int w, int type, int x, int y, int type2, int timeout); void run_pbullets(void); void init_pbullets(void); void create_seeker(int w, int angle, int target); void find_new_seeker_target(int w, int s); void blue_beam_collision(void); void blue2_beam_collision(void); excellent-bifurcation-0.0.20071015/src/pickup.c0000666000175000017500000000260410553761074020317 0ustar miriammiriam#include "config.h" #include "allegro.h" #include "globvars.h" #include "stuff.h" #include "cloud.h" #include "palette.h" void run_pickups(void); void destroy_pickup(int w, int p); int create_pickup(int w, int colour, int x, int y); void init_pickups(void) { int p, w; for (w = 0; w < 2; w ++) { for (p = 0; p < NO_PICKUPS; p ++) { pickup[w][p].exists = 0; } } } int create_pickup(int w, int colour, int x, int y) { int p; for (p = 0; p < NO_PICKUPS; p ++) { if (pickup[w][p].exists == 0) { pickup[w][p].colour = colour; pickup[w][p].exists = 1; pickup[w][p].x = x; pickup[w][p].y = y; return p; } } return -1; } void run_pickups(void) { int p, w; for (w = 0; w < 2; w ++) { for (p = 0; p < NO_PICKUPS; p ++) { if (pickup[w][p].exists == 0) continue; pickup[w][p].y += 1000; if (pickup[w][p].y >= 510000) destroy_pickup(w, p); } } } void destroy_pickup(int w, int p) { pickup[w][p].exists = 0; } void explode_pickup(int w, int p) { int col = 0; switch(pickup[w][p].colour) { case WPN_WHITE: case WPN_BLUE: col = 2; break; case WPN_GREEN: col = 1; break; } create_cloud(w, CLOUD_SHOCKWAVE, col, pickup[w][p].x, pickup[w][p].y, 0, 0, 20); destroy_pickup(w, p); } excellent-bifurcation-0.0.20071015/src/sound.c0000666000175000017500000007663710560215232020161 0ustar miriammiriam/* Overgod Copyright (C) 2005 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, 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 Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: sound.c History: 11/9/2005 - Version 1.0 finalised This file contains: - sound initialisation and playing. enums in sound.h */ #include "config.h" #include "allegro.h" #include #include "sound.h" #include "globvars.h" #include "math.h" #include "stuff.h" //int debug_sound [5]; enum { NOTE_0C, NOTE_0CS, NOTE_0D, NOTE_0DS, NOTE_0E, NOTE_0F, NOTE_0FS, NOTE_0G, NOTE_0GS, NOTE_0A, NOTE_0AS, NOTE_0B, NOTE_1C, NOTE_1CS, NOTE_1D, NOTE_1DS, NOTE_1E, NOTE_1F, NOTE_1FS, NOTE_1G, NOTE_1GS, NOTE_1A, NOTE_1AS, NOTE_1B, NOTE_2C, NOTE_2CS, NOTE_2D, NOTE_2DS, NOTE_2E, NOTE_2F, NOTE_2FS, NOTE_2G, NOTE_2GS, NOTE_2A, NOTE_2AS, NOTE_2B, NOTE_3C, NOTE_3CS, NOTE_3D, NOTE_3DS, NOTE_3E, NOTE_3F, NOTE_3FS, NOTE_3G, NOTE_3GS, NOTE_3A, NOTE_3AS, NOTE_3B, NOTE_ENDNOTE }; #define L_1 16 #define L_2 8 #define L_3 6 #define L_4 4 #define L_8 2 #define PAN_LEFT 64 #define PAN_CENTRE 127 #define PAN_RIGHT 192 enum { BEAT_START, BEAT_BOOM, BEAT_SNARE, BEAT_TOM, BEAT_DRUM, NO_BEATS, BEAT_WAIT, BEAT_EMPTY }; // TO DO!!! Make sure display collision detection is always run!!! It isn't now!! int music [13] [51] [4] = { { {BEAT_START, NOTE_1C, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1C, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1C, L_2, PAN_CENTRE - 40}, {BEAT_START, NOTE_1G, L_3, PAN_CENTRE + 40}, {BEAT_START, NOTE_2C, L_2, PAN_CENTRE - 40}, {BEAT_START, NOTE_1C, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1C, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1C, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1C, L_2, PAN_CENTRE + 40}, {BEAT_START, NOTE_1G, L_3, PAN_CENTRE - 40}, {BEAT_START, NOTE_2C, L_2, PAN_CENTRE + 40}, {BEAT_START, NOTE_1C, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1DS, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1DS, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1DS, L_2, PAN_CENTRE - 40}, {BEAT_START, NOTE_1AS, L_3, PAN_CENTRE + 40}, {BEAT_START, NOTE_2DS, L_2, PAN_CENTRE - 40}, {BEAT_START, NOTE_1DS, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1D, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1D, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1D, L_2, PAN_CENTRE + 40}, {BEAT_START, NOTE_1A, L_3, PAN_CENTRE - 40}, {BEAT_START, NOTE_2D, L_2, PAN_CENTRE + 40}, {BEAT_START, NOTE_1D, L_1 - 1, PAN_CENTRE}, /* {BEAT_START, NOTE_1D, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1E, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1F, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1G, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1A, L_1, PAN_LEFT}, {BEAT_START, NOTE_1B, L_1, PAN_RIGHT}, {BEAT_START, NOTE_2C, L_1, PAN_RIGHT},*/ {BEAT_EMPTY, 0, 0}// loop }, { {BEAT_START, NOTE_1C, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1C, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1C, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1G, L_3, PAN_CENTRE}, {BEAT_START, NOTE_2C, L_2, PAN_CENTRE}, {BEAT_START, NOTE_2G, L_1, PAN_CENTRE}, /* {BEAT_START, NOTE_1C, L_1, PAN_CENTRE}, {BEAT_START, NOTE_2C, L_2, PAN_CENTRE}, {BEAT_START, NOTE_2DS, L_2, PAN_CENTRE}, {BEAT_START, NOTE_2G, L_3, PAN_CENTRE}, {BEAT_START, NOTE_2DS, L_2, PAN_CENTRE}, {BEAT_START, NOTE_2C, L_1, PAN_CENTRE},*/ {BEAT_START, NOTE_2C, L_1, PAN_CENTRE}, {BEAT_START, NOTE_2DS, L_2, PAN_CENTRE}, {BEAT_START, NOTE_2C, L_2, PAN_CENTRE}, {BEAT_START, NOTE_2DS, L_3, PAN_CENTRE}, {BEAT_START, NOTE_2G, L_2, PAN_CENTRE}, {BEAT_START, NOTE_2C, L_1, PAN_CENTRE}, {BEAT_START, NOTE_2DS, L_1, PAN_CENTRE}, {BEAT_START, NOTE_2DS, L_2, PAN_CENTRE}, {BEAT_START, NOTE_2C, L_2, PAN_CENTRE}, {BEAT_START, NOTE_2G, L_3, PAN_CENTRE}, {BEAT_START, NOTE_2DS, L_2, PAN_CENTRE}, {BEAT_START, NOTE_2C, L_1 - 1, PAN_CENTRE}, {BEAT_START, NOTE_2DS, L_1, PAN_CENTRE}, {BEAT_START, NOTE_2DS, L_1, PAN_CENTRE}, {BEAT_START, NOTE_2D, L_1, PAN_CENTRE}, {BEAT_START, NOTE_2CS, L_1 - 2, PAN_CENTRE}, /* {BEAT_START, NOTE_1D, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1E, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1F, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1G, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1A, L_1, PAN_LEFT}, {BEAT_START, NOTE_1B, L_1, PAN_RIGHT}, {BEAT_START, NOTE_2C, L_1, PAN_RIGHT},*/ {BEAT_EMPTY, 0, 0}// loop }, { {BEAT_BOOM, NOTE_1C, L_1, PAN_CENTRE}, {BEAT_BOOM, NOTE_1C, L_2, PAN_CENTRE}, {BEAT_BOOM, NOTE_1C, L_2, PAN_CENTRE}, {BEAT_BOOM, NOTE_1G, L_3, PAN_CENTRE}, {BEAT_BOOM, NOTE_2C, L_2, PAN_CENTRE}, {BEAT_BOOM, NOTE_1C, L_1, PAN_CENTRE}, {BEAT_BOOM, NOTE_1C, L_1, PAN_CENTRE}, {BEAT_BOOM, NOTE_1C, L_2, PAN_CENTRE}, {BEAT_BOOM, NOTE_1C, L_2, PAN_CENTRE}, {BEAT_BOOM, NOTE_1G, L_3, PAN_CENTRE}, {BEAT_BOOM, NOTE_2C, L_2, PAN_CENTRE}, {BEAT_BOOM, NOTE_1C, L_1, PAN_CENTRE}, {BEAT_BOOM, NOTE_1DS, L_1, PAN_CENTRE}, {BEAT_BOOM, NOTE_1DS, L_2, PAN_CENTRE}, {BEAT_BOOM, NOTE_1DS, L_2, PAN_CENTRE}, {BEAT_BOOM, NOTE_1AS, L_3, PAN_CENTRE}, {BEAT_BOOM, NOTE_2DS, L_2, PAN_CENTRE}, {BEAT_BOOM, NOTE_1DS, L_1, PAN_CENTRE}, {BEAT_BOOM, NOTE_1D, L_1, PAN_CENTRE}, {BEAT_BOOM, NOTE_1D, L_2, PAN_CENTRE}, {BEAT_BOOM, NOTE_1D, L_2, PAN_CENTRE}, {BEAT_BOOM, NOTE_1A, L_3, PAN_CENTRE}, {BEAT_BOOM, NOTE_2D, L_2, PAN_CENTRE}, {BEAT_BOOM, NOTE_1D, L_1 - 1, PAN_CENTRE}, {BEAT_EMPTY, 0, 0}// loop }, { {BEAT_DRUM, NOTE_1C, L_1 + L_1, PAN_CENTRE}, {BEAT_DRUM, NOTE_1C, L_1 + L_1 - 2, PAN_CENTRE}, {BEAT_DRUM, NOTE_1C, L_1 + L_1, PAN_CENTRE}, {BEAT_DRUM, NOTE_1C, L_1 + L_1 - 2, PAN_CENTRE}, {BEAT_DRUM, NOTE_1C, L_1 + L_1, PAN_CENTRE}, {BEAT_DRUM, NOTE_1C, L_1 + L_1 - 2, PAN_CENTRE}, {BEAT_DRUM, NOTE_1C, L_1 + L_1, PAN_CENTRE}, {BEAT_DRUM, NOTE_1C, L_1 + L_1 - 2, PAN_CENTRE}, {BEAT_EMPTY, 0, 0, 0}// loop }, { /* {BEAT_DRUM, NOTE_1C, L_1 - 1, PAN_CENTRE}, {BEAT_TOM, NOTE_1C, L_2, PAN_CENTRE}, {BEAT_TOM, NOTE_1C, L_2, PAN_CENTRE}, {BEAT_DRUM, NOTE_1C, L_1 - 1, PAN_CENTRE}, {BEAT_TOM, NOTE_1C, L_2, PAN_CENTRE}, {BEAT_TOM, NOTE_1C, L_2, PAN_CENTRE},*/ {BEAT_DRUM, NOTE_1C, L_1 - 1, PAN_CENTRE - 50}, {BEAT_DRUM, NOTE_2C, L_2, PAN_CENTRE}, {BEAT_DRUM, NOTE_2C, L_2, PAN_CENTRE}, {BEAT_DRUM, NOTE_1C, L_1 - 1, PAN_CENTRE + 50 }, {BEAT_DRUM, NOTE_2C, L_1, PAN_CENTRE}, {BEAT_DRUM, NOTE_1C, L_1 - 1, PAN_CENTRE - 50}, {BEAT_DRUM, NOTE_2C, L_2, PAN_CENTRE}, {BEAT_DRUM, NOTE_2C, L_2, PAN_CENTRE}, {BEAT_DRUM, NOTE_1C, L_1 - 1, PAN_CENTRE + 50}, {BEAT_DRUM, NOTE_2C, L_1, PAN_CENTRE}, {BEAT_DRUM, NOTE_1C, L_1 - 1, PAN_CENTRE - 50}, {BEAT_DRUM, NOTE_2C, L_2, PAN_CENTRE}, {BEAT_DRUM, NOTE_2C, L_2, PAN_CENTRE}, {BEAT_DRUM, NOTE_1C, L_1 - 1, PAN_CENTRE + 50}, {BEAT_DRUM, NOTE_2C, L_1, PAN_CENTRE}, {BEAT_DRUM, NOTE_1C, L_1 - 1, PAN_CENTRE - 50}, {BEAT_DRUM, NOTE_2C, L_2, PAN_CENTRE}, {BEAT_DRUM, NOTE_2C, L_2, PAN_CENTRE}, {BEAT_DRUM, NOTE_1C, L_1 - 1, PAN_CENTRE + 50}, {BEAT_DRUM, NOTE_2C, L_1, PAN_CENTRE}, {BEAT_EMPTY, 0, 0, 0}// loop }, { {BEAT_BOOM, NOTE_1C, L_1, PAN_CENTRE}, {BEAT_BOOM, NOTE_1C, L_2, PAN_CENTRE}, {BEAT_BOOM, NOTE_1C, L_2, PAN_CENTRE}, {BEAT_BOOM, NOTE_1G, L_3, PAN_CENTRE}, {BEAT_BOOM, NOTE_1C, L_2, PAN_CENTRE}, {BEAT_BOOM, NOTE_1C, L_1, PAN_CENTRE}, {BEAT_BOOM, NOTE_1C, L_1, PAN_CENTRE}, {BEAT_BOOM, NOTE_1C, L_2, PAN_CENTRE}, {BEAT_BOOM, NOTE_1C, L_2, PAN_CENTRE}, {BEAT_BOOM, NOTE_1G, L_3, PAN_CENTRE}, {BEAT_BOOM, NOTE_1C, L_2, PAN_CENTRE}, {BEAT_BOOM, NOTE_1C, L_1, PAN_CENTRE}, // total = 62 {BEAT_BOOM, NOTE_1DS, L_1, PAN_CENTRE}, {BEAT_BOOM, NOTE_1DS, L_1, PAN_CENTRE}, {BEAT_BOOM, NOTE_1DS, L_1 - 1, PAN_CENTRE}, {BEAT_BOOM, NOTE_1DS, L_1 - 1, PAN_CENTRE}, {BEAT_BOOM, NOTE_1D, L_1, PAN_CENTRE}, {BEAT_BOOM, NOTE_1D, L_2, PAN_CENTRE}, {BEAT_BOOM, NOTE_1CS, L_3, PAN_CENTRE}, {BEAT_BOOM, NOTE_1CS, L_2, PAN_CENTRE}, {BEAT_BOOM, NOTE_1CS, L_2 + 16 - 1, PAN_CENTRE}, {BEAT_EMPTY, 0, 0, 0}// loop }, { {BEAT_START, NOTE_1C, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1C, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1C, L_2, PAN_CENTRE - 40}, {BEAT_START, NOTE_1G, L_3, PAN_CENTRE + 40}, {BEAT_START, NOTE_2C, L_2, PAN_CENTRE - 40}, {BEAT_START, NOTE_1C, L_1, PAN_CENTRE}, {BEAT_START, NOTE_2C, L_1, PAN_CENTRE}, {BEAT_START, NOTE_2C, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1G, L_2, PAN_CENTRE + 40}, {BEAT_START, NOTE_2G, L_3, PAN_CENTRE - 40}, {BEAT_START, NOTE_1G, L_2, PAN_CENTRE + 40}, {BEAT_START, NOTE_1C, L_1, PAN_CENTRE}, {BEAT_START, NOTE_2DS, L_1, PAN_CENTRE}, {BEAT_START, NOTE_2DS, L_2, PAN_CENTRE}, {BEAT_START, NOTE_2AS, L_2, PAN_CENTRE - 40}, {BEAT_START, NOTE_2DS, L_3, PAN_CENTRE + 40}, {BEAT_START, NOTE_2AS, L_2, PAN_CENTRE - 40}, {BEAT_START, NOTE_1DS, L_1, PAN_CENTRE}, {BEAT_START, NOTE_2D, L_1, PAN_CENTRE}, {BEAT_START, NOTE_2D, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1A, L_2, PAN_CENTRE + 40}, {BEAT_START, NOTE_2D, L_3, PAN_CENTRE - 40}, {BEAT_START, NOTE_1A, L_2, PAN_CENTRE + 40}, {BEAT_START, NOTE_1D, L_1 - 1, PAN_CENTRE}, {BEAT_EMPTY, 0, 0, 0}// loop }, { {BEAT_START, NOTE_1C, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1G, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1A, L_2, PAN_CENTRE - 40}, {BEAT_START, NOTE_1DS, L_3, PAN_CENTRE + 40}, {BEAT_START, NOTE_1F, L_2, PAN_CENTRE - 40}, {BEAT_START, NOTE_1D, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1C, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1G, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1A, L_2, PAN_CENTRE - 40}, {BEAT_START, NOTE_1DS, L_3, PAN_CENTRE + 40}, {BEAT_START, NOTE_1F, L_2, PAN_CENTRE - 40}, {BEAT_START, NOTE_1D, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1C, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1G, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1A, L_2, PAN_CENTRE - 40}, {BEAT_START, NOTE_1DS, L_3, PAN_CENTRE + 40}, {BEAT_START, NOTE_1F, L_2, PAN_CENTRE - 40}, {BEAT_START, NOTE_1D, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1C, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1G, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1A, L_2, PAN_CENTRE - 40}, {BEAT_START, NOTE_1DS, L_3, PAN_CENTRE + 40}, {BEAT_START, NOTE_1F, L_2, PAN_CENTRE - 40}, {BEAT_START, NOTE_1D, L_1, PAN_CENTRE}, {BEAT_EMPTY, 0, 0, 0}// loop }, { {BEAT_WAIT, 0, 36, 0},// loop {BEAT_EMPTY, 0, 0, 0}// loop } }; /* int boom [51] [4] = { {BEAT_BOOM, NOTE_1C, L_1, PAN_LEFT}, {BEAT_BOOM, NOTE_1C, L_2, PAN_LEFT}, {BEAT_BOOM, NOTE_1C, L_2, PAN_LEFT}, {BEAT_BOOM, NOTE_1G, L_3, PAN_RIGHT}, {BEAT_BOOM, NOTE_1C, L_2, PAN_LEFT}, {BEAT_BOOM, NOTE_1C, L_1, PAN_LEFT}, {BEAT_BOOM, NOTE_1C, L_1, PAN_LEFT}, {BEAT_BOOM, NOTE_1C, L_2, PAN_LEFT}, {BEAT_BOOM, NOTE_1C, L_2, PAN_LEFT}, {BEAT_BOOM, NOTE_1G, L_3, PAN_RIGHT}, {BEAT_BOOM, NOTE_1C, L_2, PAN_LEFT}, {BEAT_BOOM, NOTE_1C, L_1, PAN_LEFT}, // total = 62 {BEAT_BOOM, NOTE_1DS, L_1, PAN_CENTRE}, {BEAT_BOOM, NOTE_1DS, L_1, PAN_CENTRE}, {BEAT_BOOM, NOTE_1DS, L_1 - 1, PAN_CENTRE}, {BEAT_BOOM, NOTE_1DS, L_1 - 1, PAN_CENTRE}, {BEAT_BOOM, NOTE_1D, L_1, PAN_CENTRE}, {BEAT_BOOM, NOTE_1D, L_2, PAN_CENTRE}, {BEAT_BOOM, NOTE_1CS, L_3, PAN_LEFT}, {BEAT_BOOM, NOTE_1CS, L_2, PAN_LEFT}, {BEAT_BOOM, NOTE_1CS, L_2 + 16, PAN_LEFT}, {BEAT_EMPTY, 0, 0}// loop */ /* {BEAT_BOOM, NOTE_1C, L_2, PAN_LEFT}, {BEAT_BOOM, NOTE_1C, L_1, PAN_LEFT}, {BEAT_START, NOTE_1C, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1C, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1G, L_3, PAN_CENTRE}, {BEAT_START, NOTE_2C, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1C, L_1, PAN_CENTRE}, */ //}; /* int music [51] [4] = { {BEAT_START, NOTE_1C, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1C, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1C, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1G, L_3, PAN_CENTRE}, {BEAT_START, NOTE_2C, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1C, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1C, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1C, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1C, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1G, L_3, PAN_CENTRE}, {BEAT_START, NOTE_2C, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1C, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1DS, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1DS, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1DS, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1AS, L_3, PAN_CENTRE}, {BEAT_START, NOTE_2DS, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1DS, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1D, L_1, PAN_CENTRE}, {BEAT_START, NOTE_1D, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1D, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1A, L_3, PAN_CENTRE}, {BEAT_START, NOTE_2D, L_2, PAN_CENTRE}, {BEAT_START, NOTE_1D, L_1, PAN_CENTRE}, {BEAT_EMPTY, 0, 0}// loop }; int boom [51] [4] = { {BEAT_BOOM, NOTE_1C, L_1, PAN_LEFT}, {BEAT_BOOM, NOTE_1C, L_2, PAN_LEFT}, {BEAT_BOOM, NOTE_1C, L_2, PAN_LEFT}, {BEAT_BOOM, NOTE_1G, L_3, PAN_RIGHT}, {BEAT_BOOM, NOTE_1C, L_2, PAN_LEFT}, {BEAT_BOOM, NOTE_1C, L_1, PAN_LEFT}, {BEAT_BOOM, NOTE_1C, L_1, PAN_LEFT}, {BEAT_BOOM, NOTE_1C, L_2, PAN_LEFT}, {BEAT_BOOM, NOTE_1C, L_2, PAN_LEFT}, {BEAT_BOOM, NOTE_1G, L_3, PAN_RIGHT}, {BEAT_BOOM, NOTE_1C, L_2, PAN_LEFT}, {BEAT_BOOM, NOTE_1C, L_1, PAN_LEFT}, // total = 62 {BEAT_BOOM, NOTE_1DS, L_1, PAN_CENTRE}, {BEAT_BOOM, NOTE_1DS, L_1, PAN_CENTRE}, {BEAT_BOOM, NOTE_1DS, L_1 - 1, PAN_CENTRE}, {BEAT_BOOM, NOTE_1DS, L_1 - 1, PAN_CENTRE}, {BEAT_BOOM, NOTE_1D, L_1, PAN_CENTRE}, {BEAT_BOOM, NOTE_1D, L_2, PAN_CENTRE}, {BEAT_BOOM, NOTE_1CS, L_3, PAN_LEFT}, {BEAT_BOOM, NOTE_1CS, L_2, PAN_LEFT}, {BEAT_BOOM, NOTE_1CS, L_2 + 16, PAN_LEFT}, {BEAT_EMPTY, 0, 0}// loop }; */ enum { MUSIC_BASIC, MUSIC_START2, MUSIC_BOOM, MUSIC_SNARE, MUSIC_SNARE2, MUSIC_BOOM2, MUSIC_START3, MUSIC_START4, MUSIC_WAIT, MUSIC_EMPTY, MUSIC_END }; // music, repeats, tone offset, pan offset, vol offset int overmusic [51] [4] [5] = { { {MUSIC_WAIT, 1, 0, 0, 0}, {MUSIC_EMPTY, 1, 13, 0, 0}, {MUSIC_EMPTY, 0, 0, 0, 0}, {MUSIC_EMPTY, 0, 0, 0, 0} }, /* { {MUSIC_SNARE, 1, 20, 0, 100}, {MUSIC_EMPTY, 1, 13, 0, 0}, {MUSIC_EMPTY, 0, 0, 0, 0}, {MUSIC_EMPTY, 0, 0, 0, 0} }, { {MUSIC_SNARE2, 1, 20, 0, 100}, {MUSIC_EMPTY, 1, 13, 0, 0}, {MUSIC_EMPTY, 0, 0, 0, 0}, {MUSIC_EMPTY, 0, 0, 0, 0} },*/ { {MUSIC_BOOM, 1, 20, 0, 150}, {MUSIC_SNARE2, 1, 20, 0, 100}, {MUSIC_EMPTY, 0, 0, 0, 0}, {MUSIC_EMPTY, 0, 0, 0, 0} }, /* { {MUSIC_END, 1, 0, 0, 0}, {MUSIC_BOOM, 1, 26, 0, 0}, {MUSIC_EMPTY, 0, 0, 0}, {MUSIC_EMPTY, 0, 0, 0} },*/ { {MUSIC_BOOM, 1, 20, 0, 150}, {MUSIC_SNARE2, 1, 20, 0, 100}, {MUSIC_EMPTY, 0, 0, 0, 0}, {MUSIC_EMPTY, 0, 0, 0, 0} }, { {MUSIC_BASIC, 1, 0, 0, - 40}, {MUSIC_EMPTY, 1, 13, 0, 100}, {MUSIC_EMPTY, 1, 20, 0, 100}, {MUSIC_EMPTY, 0, 0, 0, 0} }, { {MUSIC_BASIC, 1, 0, 0, - 40}, {MUSIC_BOOM, 1, 13, 0, 100}, {MUSIC_SNARE2, 1, 20, 0, 100}, {MUSIC_EMPTY, 0, 0, 0, 0} }, { {MUSIC_START2, 1, 0, 0, -40}, {MUSIC_BOOM, 1, 20, 0, 100}, {MUSIC_SNARE2, 1, 20, 0, 100}, {MUSIC_EMPTY, 0, 0, 0} }, { {MUSIC_END, 1, 0, 0, 0}, {MUSIC_BOOM, 1, 26, 0, 0}, {MUSIC_EMPTY, 0, 0, 0}, {MUSIC_EMPTY, 0, 0, 0} }, }; int overposition; int finished_overpositions; int random_tone; int mtrack_position [4]; int mtrack_count [4]; int mtrack_music [4]; int mtrack_volume [4]; int mtrack_tone_offset [4]; int mtrack_force_beat [4]; int mtrack_glitchy [4]; int random_track_length; //int boomtrack_position; //int boomtrack_count; int success_note [3]; int success_samp; int success_step; int success_base; #define NO_TONES 56 #define BASE_TONE 200 int tone [NO_TONES]; extern struct optionstruct options; SAMPLE *new_sounds [NO_NWAVS]; SAMPLE *beat [NO_BEATS]; char sound_active; void check_sound(SAMPLE *samp); void load_sample_in(int samp, const char *sfile); void load_new_sample_in(int samp, const char *sfile); void load_new_ambi_in(int samp, const char *sfile); void make_random_mtrack(void); void play_success_sound(void); void init_sound(void) { #ifdef SOUND_OFF return; #endif //set_config_int("Misc", "EffectVolume", 100); //set_config_int("Misc", "SoundInit", 1); //set_config_int("Misc", "MusicVolume", 100); //set_config_int("Misc", "StereoMode", SOUNDMODE_STEREO); options.sound_volume = get_config_int("Misc", "EffectVolume", 100); options.ambience_volume = get_config_int("Misc", "MusicVolume", 100); options.sound_init = get_config_int("Misc", "SoundInit", 1); options.sound_mode = get_config_int("Misc", "StereoMode", SOUNDMODE_STEREO); if (options.sound_volume > 100) options.sound_volume = 100; if (options.sound_volume < 0) options.sound_volume = 0; if (options.ambience_volume > 100) options.ambience_volume = 100; if (options.ambience_volume < 0) options.ambience_volume = 0; int i, j; float t; for (i = 0; i < NO_TONES; i ++) { t = (float) BASE_TONE; for (j = 0; j < i; j ++) { t *= (float) 1.059463094359;//(1000 + (1000 / 18)) / 1000; } tone [i] = t; // saves me from having to remember how to use the pow function } sound_active = 1; if (options.sound_init == 0) { sound_active = 0; return; } reserve_voices(16, 0); if (install_sound (DIGI_AUTODETECT, MIDI_AUTODETECT, NULL) == -1) { sound_active = 0; } set_volume(255, 0); load_new_sample_in(NWAV_BANG, "bang"); load_new_sample_in(NWAV_BIGBANG, "bigbang"); load_new_sample_in(NWAV_FIRE, "fire"); load_new_sample_in(NWAV_FIRE2, "fire2"); load_new_sample_in(NWAV_BLAST, "blast"); load_new_sample_in(NWAV_ZAP, "zap"); load_new_sample_in(NWAV_BEAM1, "beam1"); load_new_sample_in(NWAV_BEAM2, "beam2"); load_new_sample_in(NWAV_CIRCLE, "circle"); load_new_sample_in(NWAV_PBEAM2, "pbeam2"); load_new_sample_in(NWAV_PBEAM1, "pbeam1"); load_new_sample_in(NWAV_SHOT, "shot"); load_new_sample_in(NWAV_POP, "pop"); load_new_sample_in(NWAV_BLIP, "blip"); load_new_sample_in(NWAV_BLIP2, "blip2"); load_new_sample_in(NWAV_TAP, "tap"); load_new_sample_in(NWAV_TONE, "tone"); load_new_sample_in(NWAV_BLAST2, "blast2"); load_new_sample_in(NWAV_BEAM3, "beam3"); load_new_sample_in(NWAV_WAVE, "wave"); load_new_sample_in(NWAV_POWERUP, "powerup"); load_new_sample_in(NWAV_BLOP, "blop"); // boss2 swap load_new_ambi_in(BEAT_START, "start"); load_new_ambi_in(BEAT_BOOM, "boom"); load_new_ambi_in(BEAT_SNARE, "snare"); load_new_ambi_in(BEAT_TOM, "tom"); load_new_ambi_in(BEAT_DRUM, "drum"); } void init_mtracks(void) { overposition = 0; finished_overpositions = 0; random_tone = 0; random_track_length = 1 + grand(3); int i; for (i = 0; i < 4; i ++) { mtrack_position [i] = 0; mtrack_count [i] = 10; mtrack_music [i] = MUSIC_WAIT; mtrack_force_beat [i] = -1; mtrack_glitchy [i] = 0; } /* mtrack_position = 0; mtrack_count = 10; boomtrack_position = 0; boomtrack_count = 10;*/ } void run_mtracks() { int i, j; if (sound_active == 0 || options.ambience_volume == 0) return; for (i = 0; i < 4; i ++) { if (!finished_overpositions && overmusic [overposition] [i] [0] == MUSIC_EMPTY) continue; // can't have all four being empty if (finished_overpositions && mtrack_music [i] == MUSIC_EMPTY) continue; // can't have all four being empty mtrack_count [i] --; if (i == 0 && mtrack_count [i] <= 0 && music [mtrack_music [0]] [mtrack_position [i]] [0] == BEAT_EMPTY) { if (finished_overpositions) { make_random_mtrack(); return; } else { overposition ++; if (overmusic [overposition] [0] [0] == MUSIC_END) { overposition = 0; finished_overpositions = 1; return; // finished the track... now it's random time } for (j = 0; j < 4; j ++) { mtrack_position [j] = 0; mtrack_count [j] = 0; mtrack_music [j] = overmusic [overposition] [j] [0]; mtrack_volume [j] = overmusic [overposition] [j] [4]; mtrack_tone_offset [j] = overmusic [overposition] [j] [2]; } return; } } if (mtrack_count [i] <= 0) { /* if (music [mtrack_music [i]] [mtrack_position [i]] [0] != BEAT_WAIT && music [mtrack_music [i]] [mtrack_position [i]] [0] != BEAT_EMPTY) // if (music [mtrack_music [i]] [mtrack_position [i]] [0] == BEAT_START // || music [mtrack_music [i]] [mtrack_position [i]] [0] == BEAT_BOOM) play_sample(beat [music [mtrack_music [i]] [mtrack_position [i]] [0]], (int) ((100 + mtrack_volume [i]) * options.ambience_volume) / 100, music [mtrack_music [i]] [mtrack_position [i]] [3], tone [music [mtrack_music [i]] [mtrack_position [i]] [1] + mtrack_tone_offset [i]], 0); */ if (music [mtrack_music [i]] [mtrack_position [i]] [0] < NO_BEATS) { if (mtrack_glitchy [i] < grand(10) + 1) { if (mtrack_force_beat [i] == -1) play_sample(beat [music [mtrack_music [i]] [mtrack_position [i]] [0]], (int) ((100 + mtrack_volume [i]) * options.ambience_volume) / 100, music [mtrack_music [i]] [mtrack_position [i]] [3], tone [music [mtrack_music [i]] [mtrack_position [i]] [1] + mtrack_tone_offset [i]], 0); else // play_sample(beat [BEAT_TOM], (int) ((100 + mtrack_volume [i]) * options.ambience_volume) / 100, music [mtrack_music [i]] [mtrack_position [i]] [3], tone [music [mtrack_music [i]] [mtrack_position [i]] [1] + mtrack_tone_offset [i]], 0); play_sample(beat [mtrack_force_beat [i]], (int) ((100 + mtrack_volume [i]) * options.ambience_volume) / 100, music [mtrack_music [i]] [mtrack_position [i]] [3], tone [music [mtrack_music [i]] [mtrack_position [i]] [1] + mtrack_tone_offset [i]], 0); } } // play_sample(beat [BEAT_BOOM], (int) (190 * options.ambience_volume) / 100, music [0] [mtrack_position] [3], tone [music [0] [mtrack_position] [1] + 13], 0); mtrack_count [i] = music [mtrack_music [i]] [mtrack_position [i]] [2]; // fix so ambi_volume mtrack_position [i] ++; } } } /* void run_mtracks() { //if (arena.counter % 4 == 0) mtrack_count --; if (mtrack_count == 0) { if (music [0] [mtrack_position] [0] == BEAT_EMPTY) mtrack_position = 0; play_sample(beat [music [0] [mtrack_position] [0]], (int) (50 * options.ambience_volume) / 100, music [0] [mtrack_position] [3], tone [music [0] [mtrack_position] [1]], 0); //play_sample(beat [BEAT_BOOM], (int) (190 * options.ambience_volume) / 100, music [0] [mtrack_position] [3], tone [music [0] [mtrack_position] [1] + 13], 0); mtrack_count = music [0] [mtrack_position] [2]; // fix so ambi_volume mtrack_position ++; } boomtrack_count --; if (boomtrack_count == 0) { if (music [1] [boomtrack_position] [0] == BEAT_EMPTY) boomtrack_position = 0; play_sample(beat [music [1] [boomtrack_position] [0]], (int) (150 * options.ambience_volume) / 100, music [1] [boomtrack_position] [3], tone [music [1] [boomtrack_position] [1] + 18], 0); boomtrack_count = music [1] [boomtrack_position] [2]; // fix so ambi_volume boomtrack_position ++; } }*/ void make_random_mtrack(void) { int i = 0; random_track_length --; if (random_track_length > 0) { for (i = 0; i < 4; i ++) { mtrack_position [i] = 0; mtrack_count [i] = 0; // mtrack_force_beat [i] = -1; // mtrack_glitchy [i] = 0; } return; } random_track_length = 1 + grand(2) + grand(2) + grand(2) + grand(2) + grand(2); for (i = 0; i < 4; i ++) { mtrack_music [i] = MUSIC_EMPTY; mtrack_position [i] = 0; mtrack_count [i] = 0; mtrack_glitchy [i] = 0; mtrack_force_beat [i] = -1; } // int level = 0; i = 0; if (grand(5) == 0) { switch(grand(9)) { case 0: random_tone = 3; break; case 1: random_tone = 7; break; case 2: random_tone = 4; break; case 3: random_tone = -3; break; default: random_tone = 0; break; } } if (grand(4) != 0) { mtrack_music [i] = MUSIC_SNARE2; mtrack_volume [i] = 100; if (grand(8)) mtrack_volume [i] = 50 + grand(100); mtrack_tone_offset [i] = 20; if (!grand(8)) mtrack_tone_offset [i] = 13 + grand(3) * 7; i ++; } if (grand(4) != 0) { mtrack_music [i] = MUSIC_BOOM; mtrack_volume [i] = 100; if (grand(8)) mtrack_volume [i] = 50 + grand(100); mtrack_tone_offset [i] = 13; if (grand(4)) { switch(grand(4)) { case 0: mtrack_tone_offset [i] = 13 + 3; break; case 1: mtrack_tone_offset [i] = 13 + 4; break; case 2: mtrack_tone_offset [i] = 13 + 6; break; case 3: mtrack_tone_offset [i] = 13 + 7; break; } } if (grand(4) != 0) mtrack_tone_offset [i] += random_tone; if (grand(6) == 0) mtrack_force_beat [i] = BEAT_START; if (grand(6) == 0) { mtrack_force_beat [i] = BEAT_TOM; mtrack_volume [i] = -10 - grand(20); } if (grand (6) == 0) mtrack_glitchy [i] = 0 - grand(20);//grand(6) + 3; i ++; // i++ must be LAST!!! } if (grand(4) != 0 || i == 0) { switch(grand(8)) { default: case 0: mtrack_music [i] = MUSIC_BASIC; break; case 1: mtrack_music [i] = MUSIC_START2; break; case 2: mtrack_music [i] = MUSIC_START3; break; case 3: mtrack_music [i] = MUSIC_START4; break; } mtrack_volume [i] = -40; if (grand(8)) mtrack_volume [i] = -60 + grand(20); mtrack_tone_offset [i] = 13; // if (grand(8)) // mtrack_tone_offset [i] = 13 + grand(4) * 7; if (grand(5) != 0) mtrack_tone_offset [i] += random_tone; if (grand(5) == 0) { mtrack_force_beat [i] = BEAT_TOM; mtrack_volume [i] = -10 - grand(20);//20 + grand(5); } if (grand (4) == 0) mtrack_glitchy [i] = grand(5) + 2; i ++; // i++ must be LAST!!! } /* { MUSIC_BASIC, MUSIC_START2, MUSIC_BOOM, MUSIC_SNARE, MUSIC_SNARE2, MUSIC_BOOM2, MUSIC_START3, MUSIC_START4, MUSIC_WAIT, MUSIC_EMPTY, MUSIC_END }; */ } void run_loops(void) { if (sound_active == 0 || options.sound_volume == 0) return; if (arena.old_beam == 0) { if (arena.beam == 1) { play_sample(new_sounds [NWAV_BEAM2], (int) (150 * options.sound_volume) / 100, 127, 550, 1); } } else { if (arena.beam == 0) { stop_sample(new_sounds [NWAV_BEAM2]); play_sample(new_sounds [NWAV_BEAM3], (int) (150 * options.sound_volume) / 100, 127, 550, 0); } } if (player.blue_was_firing == 0) { if (player.blue_fire > 0) { play_sample(new_sounds [NWAV_PBEAM1], (int) (200 * options.sound_volume) / 100, 127, 1500, 1); } } else { if (player.blue_fire == 0) { stop_sample(new_sounds [NWAV_PBEAM1]); player.blue_was_firing = 0; // exit(1); } } } void load_new_sample_in(int samp, const char *sfile) { char sfile_name [50]; strcpy(sfile_name, ".//wavs//"); strcat(sfile_name, sfile); strcat(sfile_name, ".wav"); new_sounds [samp] = load_sample(sfile_name); if (new_sounds [samp] == NULL) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Error: Unable to load sound file: %s", sfile_name); exit(1); } } void load_new_ambi_in(int samp, const char *sfile) { char sfile_name [50]; strcpy(sfile_name, ".//wavs//ambi//"); strcat(sfile_name, sfile); strcat(sfile_name, ".wav"); beat [samp] = load_sample(sfile_name); if (beat [samp] == NULL) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Error: Unable to load ambience file: %s", sfile_name); exit(1); } } void play_effect(int sample) { #ifdef SOUND_OFF return; #endif if (sound_active == 0 || options.sound_volume == 0) return; play_sample(new_sounds [sample], (int) (250 * options.sound_volume) / 100, 127, 1000, 0); } void play_effectf(int sample, int freq) { #ifdef SOUND_OFF return; #endif if (sound_active == 0 || options.sound_volume == 0) return; play_sample(new_sounds [sample], (int) (250 * options.sound_volume) / 100, 127, freq, 0); } void play_effectw(int w, int sample) { #ifdef SOUND_OFF return; #endif if (sound_active == 0 || options.sound_volume == 0) return; int pan = 63; if (w == 1) pan = 191; switch(options.sound_mode) { case SOUNDMODE_MONO: pan = 127; break; case SOUNDMODE_REVERSED: pan = 255 - pan; break; } play_sample(new_sounds [sample], (int) (250 * options.sound_volume) / 100, pan, 1000, 0); } void play_effectwf(int w, int sample, int f) { #ifdef SOUND_OFF return; #endif if (sound_active == 0 || options.sound_volume == 0) return; int pan = 63; if (w == 1) pan = 191; switch(options.sound_mode) { case SOUNDMODE_MONO: pan = 127; break; case SOUNDMODE_REVERSED: pan = 255 - pan; break; } play_sample(new_sounds [sample], (int) (250 * options.sound_volume) / 100, pan, f, 0); } void play_effectwfx(int w, int sample, int f, int x) { #ifdef SOUND_OFF return; #endif if (sound_active == 0 || options.sound_volume == 0) return; /* int pan = 63; if (w == 1) pan = 191;*/ int pan = x / 3200; if (w == 1) pan += 127; switch(options.sound_mode) { case SOUNDMODE_MONO: pan = 127; break; case SOUNDMODE_REVERSED: pan = 255 - pan; break; } play_sample(new_sounds [sample], (int) (250 * options.sound_volume) / 100, pan, f, 0); } void play_effectwfvx(int w, int sample, int f, int v, int x) { #ifdef SOUND_OFF return; #endif if (sound_active == 0 || options.sound_volume == 0) return; /* int pan = 63; if (w == 1) pan = 191;*/ int pan = x / 3200; if (w == 1) pan += 127; switch(options.sound_mode) { case SOUNDMODE_MONO: pan = 127; break; case SOUNDMODE_REVERSED: pan = 255 - pan; break; } play_sample(new_sounds [sample], (int) (v * options.sound_volume) / 100, pan, f, 0); } void play_wav(int sample) { #ifdef SOUND_OFF return; #endif if (sound_active == 0 || options.sound_volume == 0) return; play_sample(new_sounds [sample], (int) (250 * options.sound_volume) / 100, 127, 1000, 0); } void play_wav2(int sample, int frq, int vol, int pan) { #ifdef SOUND_OFF return; #endif if (sound_active == 0 || options.sound_volume == 0) return; /* stop_sample(soundf[WAV_POP].dat); stop_sample(soundf[WAV_RICOCHET].dat); if (sample == WAV_S_PULSE) stop_sample(soundf[WAV_S_PULSE].dat);*/ // stop_sample(sounds [sample]); play_sample(new_sounds [sample], (vol * options.sound_volume) / 100, pan, frq, 0); } void play_wavf(int sample, int frq) { #ifdef SOUND_OFF return; #endif if (sound_active == 0 || options.sound_volume == 0) return; play_sample(new_sounds [sample], (int) (255 * options.sound_volume) / 100, 127, frq, 0); } excellent-bifurcation-0.0.20071015/src/Makefile0000644000175000017500000000046610707334121020306 0ustar miriammiriamCC=gcc CFLAGS=-Wall -O2 LDFLAGS=-lalleg-4.2.2 SOURCES=$(shell find . -name "*.c") OBJECTS=$(SOURCES:.c=.o) EXECUTABLE=excellent-bifurcation all: $(SOURCES) $(EXECUTABLE) $(EXECUTABLE): $(OBJECTS) $(CC) $(LDFLAGS) $(OBJECTS) -o $@ .c.o: $(CC) $(CFLAGS) -c $< -o $@ clean: rm -f $(EXECUTABLE) $(OBJECTS) excellent-bifurcation-0.0.20071015/src/stuff.h0000666000175000017500000000131010442577252020151 0ustar miriammiriamvoid init_trig(void); float angle_to_radians(int angle); int radians_to_angle(float angle); fixed angle_to_fixed(int angle); int grand(int number); int crandom(int number); int turn_towards_angle(int angle, int tangle, int turning); int turn_towards_xy(int x1, int y1, int x2, int y2, int angle, int turning); inline int xpart(int angle, int length); inline int ypart(int angle, int length); int pulsate(int speed, int amount, int county); int angle_difference(int a1, int a2); void error_message_out(const char *errm); int delta_turn_towards_angle(int angle, int tangle, int turning); int delta_turn_towards_xy(int x1, int y1, int x2, int y2, int angle, int turning); int pos_or_neg(int a); excellent-bifurcation-0.0.20071015/src/config.h0000666000175000017500000001746510557476216020316 0ustar miriammiriam #define ALLEGRO_STATICLINK #ifdef ALLEGRO_WINDOWS #define AMOTH_WINDOWS #endif #if defined (ALLEGRO_LINUX) || defined(ALLEGRO_UNIX) #define AMOTH_LINUX #endif #ifdef ALLEGRO_MACOSX #define AMOTH_MAC #endif #define NO_KEYS CKEY_END #define X_MIN 10000 #define Y_MIN 20000 #define X_MAX 315000 #define Y_MAX 468000 #define X_MIDDLE 200000 #define Y_MIDDLE 240000 #define RAND_X grand(X_MAX - (X_MIN * 4)) + X_MIN * 2 #define RAND_Y grand(Y_MAX - (Y_MIN * 4)) + Y_MIN * 2 //#define SANITY_CHECK #define SMALL_ROTATIONS 128 #define SMALL_ROTATIONS_ANGLE 8 // number of different angles bullets can appear in #define GRAIN 1000 #define MAX_SCORE 9999999 #define ANGLEFULL_HEX 0x400 #define ANGLE_1 1024 #define ANGLE_2 512 #define ANGLE_3 341 // 3 is not exact #define ANGLE_4 256 #define ANGLE_5 205 // not exact #define ANGLE_6 171 // 6 is not exact #define ANGLE_8 128 #define ANGLE_10 102 #define ANGLE_16 64 #define ANGLE_8_3 384 #define ANGLE_16_3 192 #define ANGLE_32 32 #define ANGLE_64 16 #define ANGLE_128 8 #define ANGLE_TO_FIXED 4 #ifndef PI #define PI 3.141592 #endif #define NO_ENEMIES 50 #define NO_PBULLETS 100 #define NO_EBULLETS 500 #define NO_CLOUDS 150 #define NO_SEEKERS 24 // should be plenty #define SEEKER_ENERGY 100 #define MAX_TARGETS 40 /* enum { POLE_NONE, POLE_WHITE, POLE_BLACK, POLE_BOTH, POLE_RANDOM };*/ enum { PBULLET_NONE, PBULLET_BASIC, PBULLET_WAVE, PBULLET_HEAVY, PBULLET_MULTI1, PBULLET_MULTI2, PBULLET_MULTI3, PBULLET_MULTI4, PBULLET_MULTI5, PBULLET_CIRCLE, PBULLET_BLAST, PBULLET_TURRET, PBULLET_WHITE2, PBULLET_GREEN2, PBULLET_GREEN2_VORTEX }; enum { EBULLET_NONE, EBULLET_BALL, EBULLET_SHOT, EBULLET_SPIN, EBULLET_SHOT2, EBULLET_SHOT3, EBULLET_FAT_SHOT, EBULLET_FATTER_SHOT, EBULLET_BEAM1, EBULLET_TRIANGLE, EBULLET_DIAMOND, EBULLET_STAR, EBULLET_CIRCLE }; struct optionstruct { int sound_init; // if 0, sound isn't initialised at all. Changed in config file only. int sound_mode; // mono, stereo, reversed, off int run_vsync; // on or off int sound_volume; // sound fx volume; if 0 sound effects not played int ambience_volume; // if 0 ambience not played int highscore [3]; // int unlock_purple; // int unlock_void; // int unlock_god; // int colour_text; }; struct gamestruct { int users; int single_player; }; struct arenastruct { int level; int difficulty; int level_finished; int game_over; int new_level_sign; int player_lives; int players; int underlay_position; int underlay2_position; int underlay_position2; int underlay2_position2; unsigned char counter; int beam; int old_beam; int starting_level; int just_got_highscore; }; enum { CMD_LEFT, CMD_RIGHT, CMD_UP, CMD_DOWN, CMD_UPLEFT, CMD_UPRIGHT, CMD_DOWNLEFT, CMD_DOWNRIGHT, CMD_FIRE, CMD_SWITCH, CMD_CHARGE, CMD_END }; #define NO_CMDS CMD_END enum { CKEY_LEFT, CKEY_RIGHT, CKEY_UP, CKEY_DOWN, CKEY_FIRE, CKEY_SWITCH, CKEY_CHARGE, CKEY_AUTOFIRE, CKEY_END }; struct playerstruct { // char player_cmd [NO_CMDS]; int score; int key [NO_KEYS]; int cmds [NO_CMDS]; int controller; char in_play; // in the game currently int playing; // playing (may be in respawn or eliminated and waiting for an extend) int x, y, x_speed, y_speed; int recycle; int recycle2; int pole; int switch_recycle; int switching; int sides; int charge; int autofire; int autofire_toggle; int power [2]; int weapon [2]; int red_fire; int blue_fire; int blue_was_firing; int white_recycle1; int white_recycle2; int green_side; int blue2_fire; int bank; int energy; int respawning; int grace; }; struct enemystruct { int type; int x; int y; int x_speed; int y_speed; int pole; int hp; int angle1; int angle2; int angle3; int angle1_turning; int angle1_turning_count; int persistent; int recycle; int burst_recycle; int turn_direction; int a1, b1, c1, d1; int x2; int y2; int x_target [MAX_TARGETS]; int y_target [MAX_TARGETS]; int target_time; int max_target_time; int target; int hurt_pulse; int distance; // used in calculating seeker locks }; struct bossstruct { int hp; int max_hp; int arm1; int arm1_change; int arm2; int arm2_change; int moving; int e1; int e2; int fight; int move_x; int move_y; int move_time; int bpattern; int btime; int brecycle; int bstatus1; int bstatus2; int pulse; int arm_colour; int arm_change; int arm_recycle; int arm_beam; int arm_beam_side; int arm_beam_angle [4]; int exploding; // mb2 int side1; int side2; int old_angle [10]; int spot_angle; int spot_angle_inc; int spot_angle_inc_inc; int bpattern2; int new_bpattern; int new_bpattern2; // boss2 int size; int phase; int phase_count; int size_inc; int colour; int bflower_recycle; // mb1 int angle_1; int angle_2; int angle_3; int trecycle; }; enum { BOSS1_FIRE_NONE, BOSS1_FIRE_CIRCLES, BOSS1_FIRE_SCATTER, BOSS1_FIRE_SPIRAL, BOSS1_FIRE_BURST }; enum { BOSS1_APPROACH, BOSS1_OPEN, BOSS1_HOLD, BOSS1_SIDES, BOSS1_SWIRL, BOSS1_DART, BOSS1_BEAM1, BOSS1_BEAM2, BOSS1_SWIRL2 }; #define NO_PICKUPS 4 struct pickupstruct { int colour; int exists; int x; int y; }; enum { ENEMY_NONE, ENEMY_TWISTER, ENEMY_DIVER, ENEMY_GLIDER1, ENEMY_MARCHER1, ENEMY_ATTACKER1, ENEMY_ATTACKER2, ENEMY_ATTACKER3, ENEMY_BEAMER1, ENEMY_BASIC1, ENEMY_SHOTTER1, ENEMY_ZAPPER1, ENEMY_DIPPER1, ENEMY_DIPPER2, ENEMY_BASIC2, ENEMY_BASIC3, ENEMY_CARRIER, ENEMY_BURSTER, ENEMY_BOSS1, ENEMY_CROSS, ENEMY_FLOWER1, ENEMY_FLOWER2, ENEMY_FLOWER3, ENEMY_FLOWER4, ENEMY_FLOWER5, ENEMY_CROSS2, ENEMY_WINGS, ENEMY_MB2, ENEMY_CARRIER2, ENEMY_BOSS2, ENEMY_BFLOWER, ENEMY_MB1, ENEMY_BFIGHTER, //ENEMY_BASIC3, NO_ENEMY_TYPES }; #define GLIDER_Y_ADJUST 20 #define SHOTTER1_Y_ADJUST 15 enum { AI_DIVER, AI_FALL, AI_DANCER, AI_GLIDER, AI_MARCH, AI_ATTACKER, AI_BEAMER, AI_PAUSER, AI_BOSS1, AI_MB2, AI_BOSS2, AI_BFLOWER, AI_MB1, AI_BFIGHTER, }; struct eclassstruct { int max_hp; int size; int ai; int speed1; int speed2; int speed3; int score; // int speed; }; enum { BULLET_NONE, BULLET_BLOB }; enum { CLOUD_NONE, CLOUD_SHOCKWAVE, CLOUD_EXPLODE, CLOUD_SLOW_EXPLODE, // same as explode, but shrinks more slowly CLOUD_SPRAY, CLOUD_DRAG_EXPLODE, // slow explodes with drag CLOUD_SEEKER_TRAIL, CLOUD_LARGE_SHOCKWAVE, CLOUD_LARGE_SPRAY, CLOUD_DELAY_EXPLODE, CLOUD_SPAWNER, CLOUD_BLUE_WAVE, CLOUD_GREEN_WAVE, CLOUD_RED_WAVE, CLOUD_PURPLE_WAVE, CLOUD_GREEN_RING, CLOUD_TURRET_TRAIL, CLOUD_ZAP, CLOUD_GREEN2_RING, CLOUD_SHOCKWAVE2, CLOUD_LARGE_SHOCKWAVE2, CLOUD_EXPLODE2 }; enum { WPN_RED, WPN_BLUE, WPN_GREEN, WPN_WHITE }; struct pbulletstruct { int type; int x; int y; int type2; int type3; int timeout; int xsize; int ysize; int x_speed; // only used for some bullets - eg multi int y_speed; }; struct seekerstruct { // int type; int active; int x; int y; int angle; int x_speed; int y_speed; int target; int player; int pole; int timeout; int acceleration; int drag; int turn; }; struct ebulletstruct { int type; int x; int y; int x_speed; int y_speed; int pole; int energy_value; int angle; int turn_direction; int timeout; int status; int status2; int status3; int x2; int y2; }; struct cloudstruct { int type; int x; int y; int x2; int y2; int x_speed; int y_speed; int type2; int timeout; int angle; int delay; }; excellent-bifurcation-0.0.20071015/src/pbullet.c0000666000175000017500000004664110557742742020511 0ustar miriammiriam#include "config.h" #include "allegro.h" #include "globvars.h" #include "stuff.h" #include "enemy.h" #include "cloud.h" #include "palette.h" #include void run_basic_pbullet(int w, int b); void run_multi_pbullet(int w, int b); void destroy_pbullet(int w, int b); int pbullet_collision(int w, int b, int survive); int seeker_collision(int w, int s); void pbullet_explodes(int w, int b); void run_circle_pbullet(int w, int b); void run_turret_pbullet(int w, int b); void run_white2_pbullet(int w, int b); void run_green2_vortex(int w, int b); void run_green2_pbullet(int w, int b); void run_seeker(int w, int s); void find_new_seeker_target(int w, int s); void destroy_seeker(int w, int s); void run_wave(int w, int b); void init_pbullets(void) { int b, w; for (w = 0; w < 2; w ++) { for (b = 0; b < NO_PBULLETS; b ++) { pbullet[w][b].type = PBULLET_NONE; } } for (w = 0; w < 2; w ++) { for (b = 0; b < NO_SEEKERS; b ++) { seeker[w][b].active = 0; } } } int create_pbullet(int w, int type, int x, int y, int type2, int timeout) { int b; for (b = 0; b < NO_PBULLETS; b ++) { if (pbullet[w][b].type == PBULLET_NONE) break; if (b == NO_PBULLETS - 1) return -1; } pbullet[w][b].type = type; pbullet[w][b].type2 = type2; pbullet[w][b].type3 = 0; pbullet[w][b].x = x; pbullet[w][b].y = y; pbullet[w][b].timeout = timeout; pbullet[w][b].xsize = 0; pbullet[w][b].ysize = 0; switch(type) { case PBULLET_WAVE: pbullet[w][b].xsize = (20 + ((type2 - 250) / 30) / 3) * GRAIN; break; } // pbullet[w][b].player = player; //bullet[w][b].pole = pole; return b; } void run_pbullets(void) { int b, w; for (w = 0; w < 2; w ++) { for (b = 0; b < NO_PBULLETS; b ++) { switch(pbullet[w][b].type) { case PBULLET_NONE: continue; case PBULLET_BASIC: case PBULLET_HEAVY: run_basic_pbullet(w, b); break; case PBULLET_WAVE: run_wave(w, b); break; case PBULLET_MULTI1: case PBULLET_MULTI2: case PBULLET_MULTI3: case PBULLET_MULTI4: case PBULLET_MULTI5: run_multi_pbullet(w, b); break; case PBULLET_CIRCLE: run_circle_pbullet(w, b); break; case PBULLET_TURRET: run_turret_pbullet(w, b); break; case PBULLET_WHITE2: run_white2_pbullet(w, b); break; case PBULLET_GREEN2: run_green2_pbullet(w, b); break; case PBULLET_GREEN2_VORTEX: run_green2_vortex(w, b); break; } } } for (w = 0; w < 2; w ++) { for (b = 0; b < NO_SEEKERS; b ++) { if (seeker[w][b].active == 1) run_seeker(w, b); } } } void run_basic_pbullet(int w, int b) { pbullet[w][b].y -= 16000; if (pbullet_collision(w, b, 0) == 1) return; if (pbullet[w][b].y <= -10000) destroy_pbullet(w, b); } void run_green2_pbullet(int w, int b) { pbullet[w][b].y -= 13000; if (pbullet_collision(w, b, 2) == 1) { int b2 = create_pbullet(w, PBULLET_GREEN2_VORTEX, pbullet[w][b].x, pbullet[w][b].y, pbullet[w][b].type2, pbullet[w][b].type2 * 10 + 20); if (b2 != -1) { pbullet[w][b2].xsize = 10000; pbullet[w][b2].ysize = 10000; } create_cloud(w, CLOUD_EXPLODE, 1, pbullet[w][b].x, pbullet[w][b].y, 0, 0, 22 + grand(4)); create_cloud(w, CLOUD_GREEN2_RING, 0, pbullet[w][b].x, pbullet[w][b].y, 0, 0, 25 + grand(10)); destroy_pbullet(w, b); return; } create_cloud(w, CLOUD_GREEN2_RING, 0, pbullet[w][b].x + grand(4000) - grand(4000), pbullet[w][b].y + grand(4000) - grand(4000), 0, 0, 5 + grand(10)); if (pbullet[w][b].y <= -10000) destroy_pbullet(w, b); } void run_green2_vortex(int w, int b) { // pbullet[w][b].y -= 13000; // size // if (pbullet_collision(w, b, 0) == 1) // return; pbullet_collision(w, b, 1); pbullet[w][b].timeout --; if (pbullet[w][b].timeout < 10) { pbullet[w][b].xsize = pbullet[w][b].timeout * 1000; pbullet[w][b].ysize = pbullet[w][b].timeout * 1000; } if (pbullet[w][b].timeout <= 0) destroy_pbullet(w, b); // create_cloud(w, CLOUD_GREEN2_RING, 0, pbullet[w][b].x + grand(5000) - grand(5000), pbullet[w][b].y + grand(5000) - grand(5000), 0, 0, 5 + grand(10)); // if (pbullet[w][b].y <= -10000) //destroy_pbullet(w, b); } void run_white2_pbullet(int w, int b) { pbullet[w][b].y -= pbullet[w][b].type2; if (pbullet_collision(w, b, 0) == 1) return; if (pbullet[w][b].y <= -10000) destroy_pbullet(w, b); } void run_multi_pbullet(int w, int b) { pbullet[w][b].x += pbullet[w][b].x_speed; pbullet[w][b].y += pbullet[w][b].y_speed; if (pbullet_collision(w, b, 0) == 1) return; if (pbullet[w][b].y <= -10000) destroy_pbullet(w, b); } void run_turret_pbullet(int w, int b) { pbullet[w][b].x += pbullet[w][b].x_speed; pbullet[w][b].y += pbullet[w][b].y_speed; if (pbullet_collision(w, b, 0) == 1) return; if (pbullet[w][b].y <= -10000) destroy_pbullet(w, b); } void run_circle_pbullet(int w, int b) { pbullet[w][b].y -= 10000; pbullet[w][b].timeout --; int size = 1000 - pbullet[w][b].timeout; if (size > 20) size = 20; size *= (8 + pbullet[w][b].type2); size /= 8; size *= GRAIN; pbullet[w][b].xsize = size; pbullet[w][b].ysize = size; if (pbullet_collision(w, b, 0) == 1) return; if (pbullet[w][b].y <= -10000) destroy_pbullet(w, b); } void run_wave(int w, int b) { pbullet[w][b].y -= 5000; pbullet_collision(w, b, 1); pbullet[w][b].timeout --; int c = 0; int pow = (pbullet[w][b].type2 - 250) / 30; if (pbullet[w][b].timeout % 4 == 0) { if (pbullet[w][b].type3 == 1) { c = create_cloud(w, CLOUD_PURPLE_WAVE, 10, pbullet[w][b].x, pbullet[w][b].y, 0, 0, 36 + pow + grand(30 + pow)); pbullet[w][b].type3 = 0; } else c = create_cloud(w, CLOUD_BLUE_WAVE, 10, pbullet[w][b].x, pbullet[w][b].y, 0, 0, 36 + pow + grand(30 + pow)); } if (pbullet[w][b].timeout % 4 == 2) { if (pbullet[w][b].type3 == 1) { c = create_cloud(w, CLOUD_RED_WAVE, 5, pbullet[w][b].x, pbullet[w][b].y, 0, 0, 10 + pow + grand(10 + pow)); pbullet[w][b].type3 = 0; } else c = create_cloud(w, CLOUD_GREEN_WAVE, 5, pbullet[w][b].x, pbullet[w][b].y, 0, 0, 10 + pow + grand(10 + pow)); if (c != -1) { cloud[w][c].delay = 2 + grand(3) + pow / 5; } } if (pbullet[w][b].y <= -10000) destroy_pbullet(w, b); } void destroy_pbullet(int w, int b) { pbullet[w][b].type = PBULLET_NONE; } int pbullet_collision(int w, int b, int survive) { int e; int destroy_type = 0; for (e = 0; e < NO_ENEMIES; e ++) { if (enemy[w][e].type == ENEMY_NONE) continue; if (pbullet[w][b].x >= enemy[w][e].x - eclass[enemy[w][e].type].size - pbullet[w][b].xsize && pbullet[w][b].x <= enemy[w][e].x + eclass[enemy[w][e].type].size + pbullet[w][b].xsize && pbullet[w][b].y >= enemy[w][e].y - eclass[enemy[w][e].type].size - pbullet[w][b].ysize && pbullet[w][b].y <= enemy[w][e].y + eclass[enemy[w][e].type].size + pbullet[w][b].ysize) { // if (hypot(pbullet[w][b].y - enemy[w][e].y, pbullet[w][b].x - pbullet[w][b].x) <= eclass[enemy[w][e].type].size) // if (hypot(pbullet[w][b].y - enemy[w][e].y, pbullet[w][b].x - enemy[w][e].x) <= eclass[enemy[w][e].type].size) { /* if (pbullet[w][b].type == PBULLET_GREEN2) { pbullet[w][b].type = PBULLET_GREEN2_VORTEX; pbullet[w][b].timeout = (pbullet[w][b].type2 * 5) + 10; return 1; // pbullet destroyed }*/ destroy_type = pbullet_hits_enemy(w, b, e); if (pbullet[w][b].type == PBULLET_WAVE) pbullet[w][b].type3 = 1; // create cloud according to destroy_type - eg POLE_WHITE, POLE_NONE etc if (survive == 2) return 1; // green2_circle if (survive == 0) { pbullet_explodes(w, b); destroy_pbullet(w, b); return 1; // bullet destroyed } else return 0; // bullet not destroyed } } } return 0; // bullet not destroyed } void blue_beam_collision(void) { int e; int w = player.sides; int i, x, y, dam, which_explode; int j, max_y; switch(player.power [0]) { case 1: dam = 12; which_explode = 0; break; case 2: dam = 15; which_explode = 0; break; case 3: dam = 18; which_explode = 1; break; case 4: dam = 21; which_explode = 2; break; case 5: dam = 24; which_explode = 2; break; /* case 1: dam = 5; which_explode = 0; break; case 2: dam = 7; which_explode = 0; break; case 3: dam = 9; which_explode = 1; break; case 4: dam = 11; which_explode = 2; break; case 5: dam = 13; which_explode = 2; break;*/ } for (i = 0; i < 2; i ++) { if (i == 0) x = player.x - 5000 + abs(player.bank * 40); else x = player.x + 5000 - abs(player.bank * 40); y = player.y - 3000; for (e = 0; e < NO_ENEMIES; e ++) { if (enemy[w][e].type == ENEMY_NONE) continue; if (x >= enemy[w][e].x - eclass[enemy[w][e].type].size && x <= enemy[w][e].x + eclass[enemy[w][e].type].size && y >= enemy[w][e].y - eclass[enemy[w][e].type].size) { if (grand(2) == 0) { max_y = y; if (enemy[w][e].y + eclass[enemy[w][e].type].size - 10000 < max_y) max_y = enemy[w][e].y + eclass[enemy[w][e].type].size - 10000; for (j = enemy[w][e].y - eclass[enemy[w][e].type].size + 10000 + grand(10000); j < max_y; j += 5000 + grand(15000)) { create_cloud(w, CLOUD_EXPLODE, which_explode, x, j, 0, 0, 3 + grand(3)); } } hurt_enemy(w, e, dam, 0, 0); // esize = eclass[enemy[w][e].type].size] * 2; // remember, enemy might be destroyed here!! // so we can't assume its values are still good (actually we prob can, but let's not) } } } } void blue2_beam_collision(void) { int e; int w = 0; if (player.sides == 0) w = 1; int i, x, y, dam, which_explode; int j, max_y; switch(player.power [1]) { case 1: dam = 1200; which_explode = 0; break; case 2: dam = 1400; which_explode = 0; break; case 3: dam = 1600; which_explode = 1; break; case 4: dam = 1800; which_explode = 2; break; case 5: dam = 2000; which_explode = 2; break; /* case 1: dam = 5; which_explode = 0; break; case 2: dam = 7; which_explode = 0; break; case 3: dam = 9; which_explode = 1; break; case 4: dam = 11; which_explode = 2; break; case 5: dam = 13; which_explode = 2; break;*/ } x = player.x; y = player.y - 5000; for (e = 0; e < NO_ENEMIES; e ++) { if (enemy[w][e].type == ENEMY_NONE) continue; if (x >= enemy[w][e].x - eclass[enemy[w][e].type].size && x <= enemy[w][e].x + eclass[enemy[w][e].type].size && y >= enemy[w][e].y - eclass[enemy[w][e].type].size) { max_y = y; if (enemy[w][e].y + eclass[enemy[w][e].type].size - 10000 < max_y) max_y = enemy[w][e].y + eclass[enemy[w][e].type].size - 10000; for (j = enemy[w][e].y - eclass[enemy[w][e].type].size + 10000 + grand(10000); j < max_y; j += 5000 + grand(15000)) { // create_cloud(w, CLOUD_SLOW_EXPLODE, which_explode, x, j, 0, 0, 20 + grand(20)); create_cloud(w, CLOUD_EXPLODE, which_explode, x, j, 0, 0, 8 + grand(8)); } hurt_enemy(w, e, dam, 0, 0); // esize = eclass[enemy[w][e].type].size] * 2; // remember, enemy might be destroyed here!! // so we can't assume its values are still good (actually we prob can, but let's not) } } int zx, z2x = x, z2y = y, c; i = y; zx = x; create_cloud(w, CLOUD_EXPLODE, which_explode, x, y, 0, 0, 12); //for (i = y; i > 0; i -= 10000 + grand(8000)) while(i > 0) { i -= 7000 + grand(5000); zx += grand(15000); zx -= grand(15000); if (zx < x - 20000) zx += grand(20000); if (zx > x + 20000) zx -= grand(20000); c = create_cloud(w, CLOUD_ZAP, player.power [1], zx, i, 0, 0, 12);//grand(2)); if (c != -1) { cloud[w][c].x2 = z2x; cloud[w][c].y2 = z2y; } z2x = zx; z2y = i; } } void pbullet_explodes(int w, int b) { int xa, i; switch(pbullet[w][b].type) { case PBULLET_BASIC: create_cloud(w, CLOUD_EXPLODE, 0, pbullet[w][b].x, pbullet[w][b].y, 0, 0, 10 + grand(5)); break; case PBULLET_MULTI1: case PBULLET_MULTI2: case PBULLET_MULTI3: case PBULLET_MULTI4: case PBULLET_MULTI5: create_cloud(w, CLOUD_EXPLODE, 0, pbullet[w][b].x, pbullet[w][b].y, 0, 0, 6 + grand(4)); break; case PBULLET_HEAVY: switch(pbullet[w][b].type2) { case 0: case 1: create_cloud(w, CLOUD_EXPLODE, 0, pbullet[w][b].x, pbullet[w][b].y, 0, 0, 15 + grand(10)); break; case 2: case 3: create_cloud(w, CLOUD_EXPLODE, 1, pbullet[w][b].x, pbullet[w][b].y, 0, 0, 15 + grand(10)); break; case 4: case 5: create_cloud(w, CLOUD_EXPLODE, 2, pbullet[w][b].x, pbullet[w][b].y, 0, 0, 15 + grand(10)); break; } break; case PBULLET_CIRCLE: create_cloud(w, CLOUD_GREEN_RING, pbullet[w][b].xsize, pbullet[w][b].x, pbullet[w][b].y, 0, 0, 16); for (i = 0; i < 4; i ++) { xa = grand(ANGLE_1); create_cloud(w, CLOUD_SLOW_EXPLODE, 1, pbullet[w][b].x + xpart(xa, pbullet[w][b].xsize), pbullet[w][b].y + ypart(xa, pbullet[w][b].xsize), 0, 0, 15 + grand(20)); // maybe slow_explode } break; case PBULLET_TURRET: create_cloud(w, CLOUD_EXPLODE, 2, pbullet[w][b].x, pbullet[w][b].y, 0, 0, 10 + grand(5)); break; case PBULLET_WHITE2: create_cloud(w, CLOUD_EXPLODE, 2, pbullet[w][b].x, pbullet[w][b].y, 0, 0, 15 + grand(7)); break; } } int seeker_collision(int w, int s) { int e; int destroy_type = 0; for (e = 0; e < NO_ENEMIES; e ++) { if (enemy[w][e].type == ENEMY_NONE) continue; if (seeker[w][s].x >= enemy[w][e].x - eclass[enemy[w][e].type].size && seeker[w][s].x <= enemy[w][e].x + eclass[enemy[w][e].type].size && seeker[w][s].y >= enemy[w][e].y - eclass[enemy[w][e].type].size && seeker[w][s].y <= enemy[w][e].y + eclass[enemy[w][e].type].size) { // if (hypot(pbullet[w][b].y - enemy[w][e].y, pbullet[w][b].x - pbullet[w][b].x) <= eclass[enemy[w][e].type].size) if (hypot(seeker[w][s].y - enemy[w][e].y, seeker[w][s].x - enemy[w][e].x) <= eclass[enemy[w][e].type].size) { destroy_type = seeker_hits_enemy(w, s, e); create_cloud(w, CLOUD_DRAG_EXPLODE, 0, seeker[w][s].x, seeker[w][s].y, 0, 0, 30 + grand(5)); // also see timeout destroy_seeker(w, s); return 1; // bullet destroyed } } } return 0; // bullet not destroyed } void create_seeker(int w, int angle, int target) { int s; for (s = 0; s < NO_SEEKERS; s ++) { if (seeker[w][s].active == 0) break; if (s >= NO_SEEKERS - 1) return; } seeker[w][s].active = 1; seeker[w][s].x = player.x + xpart(angle, 5000); seeker[w][s].y = player.y + ypart(angle, 5000); create_cloud(w, CLOUD_SLOW_EXPLODE, 0, player.x + xpart(angle, 5000), player.y + ypart(angle, 5000), xpart(angle, 1000), ypart(angle, 1000), 25 + grand(8)); seeker[w][s].angle = angle; seeker[w][s].x_speed = xpart(angle, 5000); seeker[w][s].y_speed = ypart(angle, 5000); seeker[w][s].target = target; //seeker[w][s].player = p; seeker[w][s].pole = player.pole; seeker[w][s].timeout = 160; seeker[w][s].acceleration = 700; seeker[w][s].drag = 970; seeker[w][s].turn = 450; } void run_seeker(int w, int s) { int old_x = seeker[w][s].x; int old_y = seeker[w][s].y; int target_x = -1, target_y = -1; if (seeker[w][s].target == -1 && seeker[w][s].timeout % 5 == 0) find_new_seeker_target(w, s); if (seeker[w][s].target != -1) { target_x = enemy[w][seeker[w][s].target].x; target_y = enemy[w][seeker[w][s].target].y; } else { target_x = player.x; target_y = player.y; } // seeker[w][s].acceleration += 80; seeker[w][s].acceleration += 300; if (seeker[w][s].acceleration > 1900) seeker[w][s].acceleration = 1900; seeker[w][s].x_speed += xpart(seeker[w][s].angle, 600); seeker[w][s].y_speed += ypart(seeker[w][s].angle, 600); seeker[w][s].x += seeker[w][s].x_speed; seeker[w][s].y += seeker[w][s].y_speed; seeker[w][s].drag -= 50; if (seeker[w][s].drag < 900) seeker[w][s].drag = 900; seeker[w][s].x_speed *= 95; seeker[w][s].x_speed /= 100; seeker[w][s].y_speed *= 95; seeker[w][s].y_speed /= 100; int c = create_cloud(w, CLOUD_SEEKER_TRAIL, 0, seeker[w][s].x, seeker[w][s].y, 0, 0, 11); if (c != -1) { cloud[w][c].x2 = old_x; cloud[w][c].y2 = old_y; cloud[w][c].angle = seeker[w][s].angle; } // seeker[w][s].turn += 185; // if (seeker[w][s].turn > 1300) seeker[w][s].turn = 1300; /* if (seeker[w][s].timeout < 130) { if (target_x != -1 || target_y != -1) seeker[w][s].angle = radians_to_angle(atan2((target_x - seeker[w][s].y), (target_y - seeker[w][s].x))) % ANGLE_1; } else*/ { if (target_x != -1 || target_y != -1) seeker[w][s].angle = turn_towards_xy(seeker[w][s].x, seeker[w][s].y, target_x, target_y, seeker[w][s].angle, (int) seeker[w][s].turn / 10); } // seeker[s].angle = turn_towards_xy(seeker[s].x, seeker[s].y, target_x, target_y, seeker[s].angle, 32); seeker[w][s].timeout --; if (seeker_collision(w, s)) return; if (seeker[w][s].timeout <= 0) { create_cloud(w, CLOUD_DRAG_EXPLODE, 0, seeker[w][s].x, seeker[w][s].y, 0, 0, 30 + grand(5)); // also in collision destroy_seeker(w, s); } } void find_new_seeker_target(int w, int s) { int enemies_found = 0; int e;//, j; int x = seeker[w][s].x; int y = seeker[w][s].y; for (e = 0; e < NO_ENEMIES; e ++) { if (enemy[w][e].type == ENEMY_NONE) { enemy[w][e].distance = 700000; continue; } enemy[w][e].distance = hypot(enemy[w][e].y - y, enemy[w][e].x - x) / 100; enemies_found ++; } if (enemies_found == 0) return; int closest = -1; int smallest_distance = 700000; for (e = 0; e < NO_ENEMIES; e ++) { if (enemy[w][e].distance < smallest_distance) { /* for (j = 0; j < NO_SEEKERS; j ++) { if (seeker[w][j].target == e) // should allow multiple seekers to lock on to big targets continue; }*/ closest = e; smallest_distance = enemy[w][e].distance; } } if (smallest_distance == 700000 || closest == -1) { return; } seeker[w][s].target = closest; } void destroy_seeker(int w, int s) { seeker[w][s].active = 0; } excellent-bifurcation-0.0.20071015/src/main.c0000666000175000017500000001467110560214352017745 0ustar miriammiriam/* Angry Moth Copyright (C) 2006 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, 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 Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: Main.c History: This file contains: - main() - various initialisation functions - miscellaneous stuff */ #include "config.h" #include "allegro.h" #include #include #include "globvars.h" #include "stuff.h" #include "game.h" #include "display_init.h" #include "menu.h" #include "sound.h" // timer interupt functions and variables: void framecount(void); volatile int framecounter; volatile int frames_per_second; volatile int inputcounter = 0; volatile int inputs_per_second = 0; volatile int turncounter = 0; volatile int turns_per_second = 0; void tickover(void); volatile unsigned char ticked; //volatile unsigned char tick_counter; int slacktime; // --- end timer interupt // init functions void init_at_startup(void); void begin_game(void); // --- end init functions void game_loop(void); struct optionstruct options; struct arenastruct arena; struct playerstruct player; struct enemystruct enemy [2] [NO_ENEMIES]; struct pbulletstruct pbullet [2] [NO_PBULLETS]; struct ebulletstruct ebullet [2] [NO_EBULLETS]; struct cloudstruct cloud [2] [NO_CLOUDS]; struct seekerstruct seeker [2] [NO_SEEKERS]; struct pickupstruct pickup [2] [NO_PICKUPS]; struct bossstruct boss; void framecount(void) { frames_per_second = framecounter; framecounter = 0; } END_OF_FUNCTION (framecount); void tickover(void) { ticked ++; } END_OF_FUNCTION (tickover); int main(void) { int allint = allegro_init(); if (allint == -1) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Failed to initialise Allegro! This isn't going to work, sorry."); exit(1); } set_config_file("init.txt"); install_keyboard(); install_timer(); three_finger_flag = 0; key_led_flag = 0; init_at_startup(); loading_screen_wait(); startup_menu(); /*arena.level = arena.starting_level; ticked = 0; new_game(); game_loop();*/ return 0; } END_OF_MAIN(); void init_at_startup(void) { LOCK_FUNCTION (framecount); LOCK_FUNCTION (tickover); LOCK_VARIABLE (ticked); // LOCK_VARIABLE (tick_counter); LOCK_VARIABLE (frames_per_second); LOCK_VARIABLE (framecounter); LOCK_VARIABLE (turns_per_second); LOCK_VARIABLE (turncounter); // LOCK_VARIABLE (inputs_per_second); // LOCK_VARIABLE (inputcounter); install_int (framecount, 1000); install_int (tickover, 25); set_color_depth(8); // set_config_file("amoth.cfg"); // options.resolution = get_config_int("Options", "Resolution", 0); int randseed = get_config_int("Misc", "Seed", 0); // set_config_int("Misc", "Seed", grand(5000)); options.run_vsync = get_config_int("Misc", "vsync", 0); options.highscore [0] = get_config_int("Misc", "Hscore0", 100); options.highscore [1] = get_config_int("Misc", "Hscore1", 100); options.highscore [2] = get_config_int("Misc", "Hscore2", 100); // set_config_int("Misc", "vsync", 0); srand(randseed); // int windowed = GFX_AUTODETECT_FULLSCREEN; int windowed2 = get_config_int("Misc", "Windowed", 0); // windowed2 = 0;//GFX_AUTODETECT_FULLSCREEN; //set_config_int("Misc", "Windowed", 0); int windowed; switch(windowed2) { default: case 1: windowed = GFX_AUTODETECT_WINDOWED; break; case 0: windowed = GFX_AUTODETECT_FULLSCREEN; break; } if (set_gfx_mode(windowed, 640, 480, 0, 0) != 0) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Unable to set 640x480 display mode\n%s\n", allegro_error); exit(1); } init_trig(); prepare_display(); init_sound(); // init_trig(); // init_palette(); // init_display(); // init_menus_once_only(); // init_sound(); // must come after init_menus_once_only, as that's where // options.sound_enabled is set. /* **************************************************** NOTE: CHECK if it is faster to use Allegro compiled without debugging stuff? **************************************************** */ player.key [CKEY_UP] = KEY_UP; player.key [CKEY_DOWN] = KEY_DOWN; player.key [CKEY_LEFT] = KEY_LEFT; player.key [CKEY_RIGHT] = KEY_RIGHT; player.key [CKEY_FIRE] = KEY_Z; player.key [CKEY_SWITCH] = KEY_C; player.key [CKEY_CHARGE] = KEY_X; player.key [CKEY_AUTOFIRE] = KEY_A; player.key [CKEY_UP] = get_config_int("Misc", "key_up", KEY_UP); player.key [CKEY_DOWN] = get_config_int("Misc", "key_down", KEY_DOWN); player.key [CKEY_LEFT] = get_config_int("Misc", "key_left", KEY_LEFT); player.key [CKEY_RIGHT] = get_config_int("Misc", "key_right", KEY_RIGHT); player.key [CKEY_FIRE] = get_config_int("Misc", "key_fire", KEY_Z); player.key [CKEY_CHARGE] = get_config_int("Misc", "key_charge", KEY_X); player.key [CKEY_SWITCH] = get_config_int("Misc", "key_switch", KEY_C); player.key [CKEY_AUTOFIRE] = get_config_int("Misc", "key_autofire", KEY_A); player.x = 270000; player.y = 350000; player.in_play = 1; arena.starting_level = 1; arena.difficulty = 1; arena.just_got_highscore = -1; /* player[1].key [CKEY_UP] = KEY_8_PAD; player[1].key [CKEY_DOWN] = KEY_2_PAD; player[1].key [CKEY_LEFT] = KEY_4_PAD; player[1].key [CKEY_RIGHT] = KEY_6_PAD; player[1].key [CKEY_FIRE] = KEY_0_PAD; player[1].key [CKEY_SWITCH] = KEY_5_PAD; player[1].key [CKEY_RELEASE] = KEY_ENTER_PAD; player[1].x = 330000; player[1].y = 350000; player[1].in_play = 1; */ } excellent-bifurcation-0.0.20071015/src/game.c0000666000175000017500000005022110560177714017733 0ustar miriammiriam/* Angry Moth Copyright (C) 2006 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, 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 Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: game.c History: This file contains: - main game loop and a bit of miscellany */ #include "config.h" #include "allegro.h" #include #include "globvars.h" #include "stuff.h" #include "input.h" #include "level.h" #include "pbullet.h" #include "ebullet.h" #include "enemy.h" //#include "display.h" #include "cloud.h" #include "palette.h" #include "display.h" #include "sound.h" // I don't know why, but Code::Blocks refuses to recognise the contents of pickup.h. Nothing I can do. #include "pickup.h" void run_pickups(void); void init_pickups(void); //void destroy_pickup(int w, int p); int create_pickup(int w, int colour, int x, int y); void explode_pickup(int w, int p); extern struct optionstruct options; void init_player_on_new_level(void); void begin_game(void); void init_structs_etc(void); //void check_player_intersect(void); void quit_query(void); void run_player(void); void make_platform(void); void run_platform(void); void fix_platform(int y1, int y2); int check_tile_flow(int t1, int t2); int get_tile(int x, int y); void player_check_pickups(void); void platform_hline(int x1, int y, int x2); void platform_vline(int x, int y1, int y2); extern volatile unsigned char ticked; extern volatile int framecounter; extern int slacktime; int long_slacktime; int long_slacktime_store; unsigned char counter; extern int platform_tile [9] [PLAT_Y]; // in display extern int platform_position; // in display extern int platform_step; // in display void init_player_on_spawn(void); void game_loop(void) { int playing = 1; counter = 0; do { arena.counter ++; if (player.playing) run_player(); run_loops(); if (arena.level_finished == 0 && arena.game_over == 0) run_mtracks(); get_input(); run_level(); run_clouds(); run_pbullets(); run_enemies(); run_ebullets(); run_pickups(); run_underlay(); // in display.c run_platform(); // play_beats(); if (arena.game_over > 0) { arena.game_over --; if (arena.game_over == 1) { playing = 0; // kill_gameover_loop(); } // if (arena.game_over == 120) // play_gameover_loop(1000); } else { if (arena.new_level_sign > 0) arena.new_level_sign --; } if (arena.level_finished > 0) { arena.level_finished --; if (arena.level_finished <= 1) { if (arena.level == 2) playing = 0; arena.level = 2; init_player_on_new_level(); init_level(); init_mtracks(); do { slacktime ++; } while (ticked == 0); ticked = 0; arena.level_finished = 0; continue; } } if (ticked == 0) { run_display(1); framecounter++; } else run_display(0); // just does what is needed for collision detection slacktime = 0; do { slacktime ++; } while(ticked == 0); ticked --; counter ++; if (counter % 32 == 0) { long_slacktime_store = long_slacktime; long_slacktime = 0; } long_slacktime += slacktime / 100; if (key [KEY_ESC]) { player.score = 0; playing = 0; } //quit_query(); } while(playing == 1); if (player.score > options.highscore [arena.difficulty]) { options.highscore [arena.difficulty] = player.score; switch(arena.difficulty) { case 0: set_config_int("Misc", "Hscore0", player.score); break; case 1: set_config_int("Misc", "Hscore1", player.score); break; case 2: set_config_int("Misc", "Hscore2", player.score); break; } arena.just_got_highscore = arena.difficulty; } } void quit_query(void) { /* if (arena.game_over > 0) return; display_quit_query(); do { if (key [KEY_Y]) { arena.game_over = 44; return; } if (key [KEY_N]) { return; } play_beats(); do { slacktime ++; slacktime = 0; } while(ticked == 0); ticked = 0; } while(TRUE); */ } void new_game(void) { // int i; arena.just_got_highscore = -1; counter = 0; init_structs_etc(); long_slacktime = 0; // arena.level = 1; init_level(); make_platform(); arena.players = 1; arena.level_finished = 0; arena.game_over = 0; player.in_play = 1; player.playing = 1; player.score = 0; player.respawning = 0; player.grace = 100; // player.pole = POLE_WHITE; player.recycle = 0; player.recycle2 = 0; player.switching = 0; player.switch_recycle = -1; player.bank = 0; player.energy = 0; player.charge = 0; player.autofire = 0; player.autofire_toggle = 0; player.weapon [0] = WPN_RED; player.weapon [1] = WPN_RED; player.power [0] = 0; player.power [1] = 0; player.red_fire = 0; player.blue_fire = 0; // player.white_target = 0; player.green_side = 0; arena.player_lives = 2; // arena.level = 1; // arena.difficulty = 0; init_player_on_spawn(); player.respawning = 0; player.grace = 0; player.y = 350000; boss.exploding = 0; } void init_structs_etc(void) { init_pbullets(); init_ebullets(); init_clouds(); init_pickups(); arena.underlay_position = 20; } void run_player(void) { if (player.recycle > 0) player.recycle --; if (player.recycle2 > 0) player.recycle2 --; if (player.respawning > 0) { player.respawning --; player.y -= 4000; } if (player.blue_fire > 0) blue_beam_collision(); if (player.blue2_fire == 5) blue2_beam_collision(); if (player.blue2_fire > 0) player.blue2_fire --; if (player.grace > 0) player.grace --; if (player.autofire_toggle > 0) player.autofire_toggle --; player_check_pickups(); if (player.switch_recycle >= 0) { // if (arena.counter % 5 == 0) player.switch_recycle -= 2; if (player.switch_recycle == 10) { player.sides = player.switching; create_cloud(0, CLOUD_SHOCKWAVE, 2, player.x, player.y, 0, 0, 20); create_cloud(0, CLOUD_EXPLODE, 0, player.x, player.y, 0, 0, 14 + grand(7)); create_cloud(1, CLOUD_SHOCKWAVE, 2, player.x, player.y, 0, 0, 20); create_cloud(1, CLOUD_EXPLODE, 0, player.x, player.y, 0, 0, 14 + grand(7)); } if (player.switch_recycle == -1) { player.switch_recycle = -1; } } } void player_check_pickups(void) { int p, w, vehicle = 0; for (w = 0; w < 2; w ++) { for (p = 0; p < NO_PICKUPS; p ++) { if (pickup[w][p].exists == 0) continue; if (pickup[w][p].x >= player.x - 18000 && pickup[w][p].x <= player.x + 18000 && pickup[w][p].y >= player.y - 18000 && pickup[w][p].y <= player.y + 18000) { if (w != player.sides) vehicle = 1; player.weapon [vehicle] = pickup[w][p].colour; if (player.power [vehicle] < 5) player.power [vehicle] ++; player.blue_was_firing = player.blue_fire; player.blue_fire = 0; player.blue2_fire = 0; if (player.sides == w) play_effectwfvx(w, NWAV_POWERUP, 1200 + grand(150), 200, player.x); else play_effectwfvx(w, NWAV_POWERUP, 500 + grand(150), 200, player.x); explode_pickup(w, p); } } } } void player_hit(int side_hit) { int i, angle = grand(ANGLE_1), angle2; int distance, speed; int w = 0; if (player.sides == 0) w = 1; int col1 = 0, col2 = 0; if (w == side_hit) col2 = 1; if (player.sides == side_hit) col1 = 1; create_cloud(w, CLOUD_SPAWNER, 0, player.x, player.y, 0, 0, 40); create_cloud(w, CLOUD_LARGE_SHOCKWAVE, col2, player.x, player.y, 0, 0, 50); create_cloud(w, CLOUD_EXPLODE, 0, player.x, player.y, 0, 0, 25 + grand(10)); create_cloud(w, CLOUD_EXPLODE, 0, player.x + grand(10000) - grand(10000), player.y + grand(10000) - grand(10000), 0, 0, 25 + grand(10)); create_cloud(w, CLOUD_EXPLODE, 0, player.x + grand(10000) - grand(10000), player.y + grand(10000) - grand(10000), 0, 0, 25 + grand(10)); create_cloud(w, CLOUD_EXPLODE, 0, player.x + grand(10000) - grand(10000), player.y + grand(10000) - grand(10000), 0, 0, 25 + grand(10)); for (i = 0; i < 3; i ++) { angle += ANGLE_4 + grand(ANGLE_4); speed = 2000 + grand(1000) + grand(1000); distance = 5000; angle2 = angle + grand(ANGLE_16); // create_cloud(CLOUD_EXPLODE, POLE_NONE, enemy[e].x + xpart(angle2, distance), enemy[e].y + ypart(angle2, distance), xpart(angle2, speed), ypart(angle2, speed), 34 + grand(7)); create_cloud(w, CLOUD_LARGE_SPRAY, 0, player.x + xpart(angle2, distance), player.y + ypart(angle2, distance), xpart(angle2, speed), ypart(angle2, speed), 20 + grand(7)); } play_effectwfvx(w, NWAV_BIGBANG, 500 + grand(350), 200, player.x); create_cloud(player.sides, CLOUD_SPAWNER, 0, player.x, player.y, 0, 0, 20); create_cloud(player.sides, CLOUD_SHOCKWAVE, col1, player.x, player.y, 0, 0, 20); create_cloud(player.sides, CLOUD_EXPLODE, 0, player.x, player.y, 0, 0, 20 + grand(10)); create_cloud(player.sides, CLOUD_EXPLODE, 0, player.x + grand(6000) - grand(6000), player.y + grand(6000) - grand(6000), 0, 0, 20 + grand(10)); create_cloud(player.sides, CLOUD_EXPLODE, 0, player.x + grand(6000) - grand(6000), player.y + grand(6000) - grand(6000), 0, 0, 20 + grand(10)); create_cloud(player.sides, CLOUD_EXPLODE, 0, player.x + grand(6000) - grand(6000), player.y + grand(6000) - grand(6000), 0, 0, 20 + grand(10)); play_effectwfvx(player.sides, NWAV_BLAST, 1000 + grand(350), 100, player.x); /* for (i = 0; i < 3; i ++) { angle += ANGLE_4 + grand(ANGLE_4); speed = 2000 + grand(1000) + grand(1000); distance = 5000; angle2 = angle + grand(ANGLE_16); // create_cloud(CLOUD_EXPLODE, POLE_NONE, enemy[e].x + xpart(angle2, distance), enemy[e].y + ypart(angle2, distance), xpart(angle2, speed), ypart(angle2, speed), 34 + grand(7)); create_cloud(w, CLOUD_LARGE_SPRAY, 0, player.x + xpart(angle2, distance), player.y + ypart(angle2, distance), xpart(angle2, speed), ypart(angle2, speed), 20 + grand(7)); }*/ /* create_cloud(CLOUD_SHOCKWAVE, POLE_NONE, player.x, player.y, 0, 0, 20); create_cloud(CLOUD_EXPLODE, POLE_NONE, player.x, player.y, 0, 0, 14 + grand(7)); for (i = 0; i < 3; i ++) { angle += ANGLE_4 + grand(ANGLE_4); for (j = 0; j < 5; j ++) { speed = 2000 + grand(3500) + grand(3000); distance = 3000; angle2 = angle + grand(ANGLE_16); create_cloud(CLOUD_DRAG_EXPLODE, POLE_NONE, player.x + xpart(angle2, distance), player.y + ypart(angle2, distance), xpart(angle2, speed), ypart(angle2, speed), 20 + grand(10)); } }*/ //int not_p = 0; // if (p == 0) //not_p = 1; // player.in_play = 0; if (arena.player_lives == 0) { // trigger_game_over(); player.in_play = 0; arena.game_over = 200; arena.level_finished = 0; } else { arena.player_lives --; if (arena.player_lives > -1) { init_player_on_spawn(); } } // need to add a respawning thing to the extend function } void init_player_on_spawn(void) { player.respawning = 75; player.grace = 220; player.y = 700000; player.x = 160000; player.charge = 0; player.weapon [0] = WPN_RED; player.weapon [1] = WPN_RED; player.power [0] = 0; player.power [1] = 0; player.red_fire = 0; player.blue_was_firing = player.blue_fire; player.blue_fire = 0; player.blue2_fire = 0; player.green_side = 0; player.white_recycle1 = 1; player.white_recycle2 = 1; player.recycle = 2; player.bank = 0; // MAY NEED TO ADD BELOW!!! } void init_player_on_new_level(void) { player.respawning = 0; player.grace = 0; player.y = 350000; player.x = 160000; player.charge = 0; player.red_fire = 0; player.blue_was_firing = player.blue_fire; player.blue_fire = 0; player.blue2_fire = 0; player.green_side = 0; player.white_recycle1 = 1; player.white_recycle2 = 1; player.recycle = 2; player.bank = 0; // MAY NEED TO ADD ABOVE!!! } void make_platform(void) { int i, j; platform_position = 0; platform_step = 0; int vert1 = grand(6) + 2; int vert2 = 0; int v21 = -1; int v22 = -1; for (j = 0; j < PLAT_Y; j ++) { for (i = 0; i < 9; i ++) { platform_tile [i] [j] = PLATFORM_EMPTY; // empty } } for (j = 0; j < PLAT_Y; j ++) { if (grand(7) == 0) { vert2 = vert1; vert1 = grand(6) + 2; //platform_hline(vert1, j, vert2); platform_hline(vert1, j, vert2); } if (grand(5) == 0) { if (grand(3) == 0) v21 = -1; else { v22 = v21; v21 = grand(7) + 2; platform_hline(v21, j, v22); } } if (grand(21) == 0) platform_hline(0, j, 8); if (grand(21) == 0) platform_hline(grand(6), j, 8); if (grand(21) == 0) platform_hline(0, j, grand(4) + 5); for (i = 0; i < 9; i ++) { // platform_tile [i] [j] = PLATFORM_EMPTY; // empty if (i == v21) platform_tile [i] [j] = 1; if (i == vert1) platform_tile [i] [j] = 1; if (grand(7) == 0) platform_tile [i] [j] = 1; } } fix_platform(0, PLAT_Y); } void platform_hline(int x1, int y, int x2) { int i; if (x1 < 0) x1 = 0; if (x1 > 8) x1 = 8; if (x2 < 0) x2 = 0; if (x2 > 8) x2 = 8; if (x2 > x1) { for (i = x1; i < x2; i ++) { platform_tile [i] [y] = 1; } } else for (i = x2; i < x1; i ++) { platform_tile [i] [y] = 1; } } /* void platform_vline(int x, int y1, int y2) { int i; if (y2 > y1) { for (i = y1; i < y2; i ++) { platform_tile [x] [i] = 1; } } else for (i = y2; i < y1; i ++) { platform_tile [x] [i] = 1; } }*/ void run_platform(void) { platform_position += 4; if (platform_position >= 55) { platform_position -= 55; platform_step ++; } if (platform_step > PLAT_Y) platform_step -= PLAT_Y; } void fix_platform(int y1, int y2) { int i, j, tile; for (i = 0; i < 9; i ++) { for (j = y1; j < y2; j ++) { if (platform_tile [i] [j] == PLATFORM_EMPTY) continue; tile = PLATFORM_NODE; // need to fix this if (get_tile(i - 1, j) != PLATFORM_EMPTY) tile = PLATFORM_L; if (get_tile(i + 1, j) != PLATFORM_EMPTY) tile = PLATFORM_R; if (get_tile(i, j + 1) != PLATFORM_EMPTY) tile = PLATFORM_U; if (get_tile(i, j - 1) != PLATFORM_EMPTY) tile = PLATFORM_D; if (get_tile(i - 1, j) != PLATFORM_EMPTY && get_tile(i + 1, j) != PLATFORM_EMPTY) tile = PLATFORM_LR_TLR; if (get_tile(i, j - 1) != PLATFORM_EMPTY && get_tile(i, j + 1) != PLATFORM_EMPTY) tile = PLATFORM_UD_TUD; if (get_tile(i + 1, j) != PLATFORM_EMPTY && get_tile(i, j + 1) != PLATFORM_EMPTY) tile = PLATFORM_UR; if (get_tile(i - 1, j) != PLATFORM_EMPTY && get_tile(i, j - 1) != PLATFORM_EMPTY) tile = PLATFORM_DL; if (get_tile(i + 1, j) != PLATFORM_EMPTY && get_tile(i, j - 1) != PLATFORM_EMPTY) tile = PLATFORM_DR; if (get_tile(i - 1, j) != PLATFORM_EMPTY && get_tile(i, j + 1) != PLATFORM_EMPTY) tile = PLATFORM_UL; if (get_tile(i + 1, j) != PLATFORM_EMPTY && get_tile(i, j + 1) != PLATFORM_EMPTY && get_tile(i, j - 1) != PLATFORM_EMPTY) tile = PLATFORM_UDL; if (get_tile(i - 1, j) != PLATFORM_EMPTY && get_tile(i, j + 1) != PLATFORM_EMPTY && get_tile(i, j - 1) != PLATFORM_EMPTY) tile = PLATFORM_UDR; if (get_tile(i - 1, j) != PLATFORM_EMPTY && get_tile(i + 1, j) != PLATFORM_EMPTY && get_tile(i, j - 1) != PLATFORM_EMPTY) tile = PLATFORM_DLR; if (get_tile(i - 1, j) != PLATFORM_EMPTY && get_tile(i + 1, j) != PLATFORM_EMPTY && get_tile(i, j + 1) != PLATFORM_EMPTY) tile = PLATFORM_ULR; if (get_tile(i - 1, j) == PLATFORM_EMPTY && get_tile(i + 1, j) == PLATFORM_EMPTY && get_tile(i, j - 1) == PLATFORM_EMPTY && get_tile(i, j + 1) == PLATFORM_EMPTY) tile = PLATFORM_EMPTY; if (get_tile(i - 1, j) != PLATFORM_EMPTY && get_tile(i + 1, j) != PLATFORM_EMPTY && get_tile(i, j - 1) != PLATFORM_EMPTY && get_tile(i, j + 1) != PLATFORM_EMPTY) tile = PLATFORM_NODE; platform_tile [i] [j] = tile; } } int t = 0; for (i = 0; i < 9; i ++) { for (j = y1; j < y2; j ++) { t = get_tile(i, j); if (t == PLATFORM_LR_TLR) { if (check_tile_flow(t, get_tile(i + 1, j))) t = PLATFORM_LR_TL; if (check_tile_flow(t, get_tile(i - 1, j))) t = PLATFORM_LR_TR; if (check_tile_flow(t, get_tile(i - 1, j)) && check_tile_flow(t, get_tile(i + 1, j))) t = PLATFORM_LR; } if (t == PLATFORM_UD_TUD) { if (check_tile_flow(t, get_tile(i, j + 1))) t = PLATFORM_UD_TU; if (check_tile_flow(t, get_tile(i, j - 1))) t = PLATFORM_UD_TD; if (check_tile_flow(t, get_tile(i, j - 1)) && check_tile_flow(t, get_tile(i, j + 1))) t = PLATFORM_UD; } platform_tile [i] [j] = t; } } for (i = 0; i < 9; i ++) { for (j = y1; j < y2; j ++) { if (get_tile(i, j) == PLATFORM_D && get_tile(i, j + 1) == PLATFORM_U) { platform_tile [i] [j] = PLATFORM_EMPTY; platform_tile [i] [j + 1] = PLATFORM_EMPTY; } } } } int check_tile_flow(int t1, int t2) { if (t1 == PLATFORM_LR_TLR || t1 == PLATFORM_LR_TL || t1 == PLATFORM_LR_TR || t1 == PLATFORM_LR) { if (t2 == PLATFORM_LR_TLR || t2 == PLATFORM_LR_TR || t2 == PLATFORM_LR_TL || t2 == PLATFORM_LR) return 1; return 0; } if (t1 == PLATFORM_UD_TUD || t1 == PLATFORM_UD_TU || t1 == PLATFORM_UD_TD || t1 == PLATFORM_UD) { if (t2 == PLATFORM_UD_TUD || t2 == PLATFORM_UD_TU || t2 == PLATFORM_UD_TD || t2 == PLATFORM_UD) return 1; return 0; } return 0; } int get_tile(int x, int y) { /* if (x == -1 && y == -1) return -1;//platform_tile [8] [PLAT_Y - 1]; if (x == -1 && y == PLAT_Y) return -1;//platform_tile [8] [0]; if (x == 9 && y == -1) return -1;//platform_tile [0] [PLAT_Y - 1]; if (x == 9 && y == PLAT_Y) return -1;//platform_tile [0] [0]; if (x == -1) return -1;//platform_tile [8] [y]; if (x == 9) return -1;//platform_tile [0] [y]; if (y == -1) return -1;//platform_tile [x] [PLAT_Y - 1]; if (y == PLAT_Y) return -1;*///platform_tile [x] [0]; if (x == -1 && y == -1) return platform_tile [8] [PLAT_Y - 1]; if (x == -1 && y == PLAT_Y) return platform_tile [8] [0]; if (x == 9 && y == -1) return platform_tile [0] [PLAT_Y - 1]; if (x == 9 && y == PLAT_Y) return platform_tile [0] [0]; if (x == -1) return platform_tile [8] [y]; if (x == 9) return platform_tile [0] [y]; if (y == -1) return platform_tile [x] [PLAT_Y - 1]; if (y == PLAT_Y) return platform_tile [x] [0]; return platform_tile [x] [y]; } excellent-bifurcation-0.0.20071015/src/display.c0000666000175000017500000043451610560176176020505 0ustar miriammiriam/* Angry Moth Copyright (C) 2006 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, 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 Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: display.c History: This file contains: - functions which put stuff onto the screen */ #include "config.h" #include "allegro.h" #include #include #include "globvars.h" #include "palette.h" #include "stuff.h" #include "game.h" #include "display.h" #include "cloud.h" // only necessary for a terrible hack. #define EGAUGE_Y 300 // Y location of energy gauge #define PGAUGE_Y 200 // Y location of powerup gauge int debug_info; void pline(BITMAP *bmp, int x1, int y1, int x2, int y2, int colour); int points [30]; void poly4(int w, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int col); int platform_tile [9] [PLAT_Y]; int platform_position; int platform_step; // externed in game.cc BITMAP *display [3]; RLE_SPRITE *aura_rle [2] [13]; RLE_SPRITE *player_rle [2] [21]; RLE_SPRITE *normal_player_rle [2] [7]; RLE_SPRITE *shock_rle [3] [20]; RLE_SPRITE *large_shock_rle [3] [50]; RLE_SPRITE *straight_bullet [2] [SMALL_ROTATIONS]; RLE_SPRITE *spin_bullet [2] [SMALL_ROTATIONS]; RLE_SPRITE *multi_bullet [2] [5]; RLE_SPRITE *green_ring [40]; struct RLE_STRUCT shock2_rle [3] [20]; struct RLE_STRUCT large_shock2_rle [3] [50]; struct RLE_STRUCT explode_rle [3] [40]; struct RLE_STRUCT triangle_bullet [3] [SMALL_ROTATIONS]; struct RLE_STRUCT diamond_bullet [3] [SMALL_ROTATIONS];; struct RLE_STRUCT star_bullet [3] [SMALL_ROTATIONS];; struct RLE_STRUCT eRLE_flower [5] [50]; struct RLE_STRUCT eRLE_twister [2] [MEDIUM_ROTATIONS]; struct RLE_STRUCT eRLE_attacker [3] [2] [2] [MEDIUM_ROTATIONS]; struct RLE_STRUCT eRLE_diver [2] [2] [MEDIUM_ROTATIONS]; // that's attacker#, tail or head, pole, number of rotations struct RLE_STRUCT eRLE_large [2] [LARGE_ERLES]; RLE_SPRITE *eRLE_basic1 [S_ENEMY_RLES]; RLE_SPRITE *basic_bullet [29]; RLE_SPRITE *eRLE_big [L_ENEMY_RLES]; RLE_SPRITE *platform_RLE [2] [PLATFORM_RLES]; RLE_SPRITE *exhaust [10]; BITMAP *underlay; BITMAP *underlay2; #ifdef DEBUG_DISPLAY #include // for itoa, used in the screenshot code but not needed for ports etc extern volatile int frames_per_second; extern volatile int ticked; extern int slacktime; extern int long_slacktime_store; extern int debug_sound [5]; int slack_graph [100]; int slack_graph_pos; int fps_graph [100]; int fps_graph_pos; #endif extern volatile int frames_per_second; extern int slacktime; extern int long_slacktime_store; extern int overposition; extern int mtrack_position [4]; extern int mtrack_count [4]; extern int mtrack_music [4]; extern int music [3] [51] [4]; extern struct optionstruct options; FONT *font2; FONT *small_font; void indicate_fps(BITMAP *bmp, int play); float angle_to_radians(int angle); void draw_player(void); void draw_enemies(void); void draw_an_enemy(int w, int e); void draw_pbullets(void); void draw_a_pbullet(int w, int b); void draw_a_seeker(int w, int s); void draw_ebullets(void); void draw_an_ebullet(int w, int b); void draw_clouds(void); void draw_a_cloud(int w, int c); void draw_pickups(void); void make_underlay(void); void draw_energy_gauge(int x); void draw_platform(void); void draw_underlay(void); int detect_player_collision(void); int check_pixel(int w, int x, int y); extern RGB palet [256]; extern RGB palet2 [256]; void level_display_init(void) { vsync(); clear_bitmap(screen); if (arena.level == 1) set_palette(palet); else set_palette(palet2); } void run_display(int shown) { // if (options.run_vsync > 0) // vsync(); // clear_to_color(display, COLOUR_6); if (shown == 1) { draw_underlay(); draw_platform(); draw_enemies(); } draw_player(); draw_ebullets(); if (player.in_play == 1 && player.grace == 0) { int side_hit = detect_player_collision(); if (side_hit != -1) player_hit(side_hit); } if (shown == 0) return; // skip the frame draw_pbullets(); draw_clouds(); draw_pickups(); draw_energy_gauge(305); /* textprintf_ex(display [0], font, 10, 20, -1, -1, "%i", frames_per_second); textprintf_ex(display [0], font, 10, 30, -1, -1, "%i", slacktime); textprintf_ex(display [0], font, 10, 40, -1, -1, "%i", long_slacktime_store); textprintf_ex(display [0], font, 10, 50, -1, -1, "%i", overposition); textprintf_ex(display [0], font, 10, 60, -1, -1, "%i", mtrack_position [0]); textprintf_ex(display [0], font, 10, 70, -1, -1, "%i", mtrack_count [0]); textprintf_ex(display [0], font, 10, 80, -1, -1, "%i", mtrack_music [0]); textprintf_ex(display [0], font, 10, 90, -1, -1, "%i", music [mtrack_music [0]] [mtrack_position [0]] [0]); */ if (arena.game_over > 0) { textprintf_centre_ex(display [0], font, 160, 200, -1, -1, "G A M E O V E R"); textprintf_centre_ex(display [1], font, 160, 200, -1, -1, "B A D L U C K"); } if (arena.new_level_sign > 0) { textprintf_centre_ex(display [0], font, 160, 200, -1, -1, "S T A G E %i", arena.level); switch(arena.difficulty) { case 0: textprintf_centre_ex(display [1], font, 160, 230, -1, -1, "EASY"); break; case 1: textprintf_centre_ex(display [1], font, 160, 230, -1, -1, "NORMAL"); break; case 2: textprintf_centre_ex(display [1], font, 160, 230, -1, -1, "HARD"); break; } switch(arena.level) { case 1: textprintf_centre_ex(display [0], font, 160, 230, -1, -1, "ORBITAL PLATFORM"); break; case 2: textprintf_centre_ex(display [0], font, 160, 230, -1, -1, "NERVE CENTRE"); break; } } if (arena.level_finished > 0) { textprintf_centre_ex(display [0], font, 160, 200, -1, -1, "S T A G E %i C O M P L E T E", arena.level); if (arena.level == 2) { textprintf_centre_ex(display [1], font, 160, 200, -1, -1, "Y O U H A V E W O N !"); textprintf_centre_ex(display [1], font, 160, 230, -1, -1, "C O N G R A T U L A T I O N S ! !"); } else { textprintf_centre_ex(display [1], font, 160, 200, -1, -1, "W E L L D O N E !"); } } //textprintf_ex(display [0], font, 10, 50, -1, -1, "%i", X_MAX); // textprintf_ex(display [2], font, 100, 120, -1, -1, "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG"); // vsync(); /* drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); rectfill(display, 50, 50, 300, 150, TRANS_WHITE1); rectfill(display, 60, 60, 300, 150, TRANS_WHITE2); rectfill(display, 70, 70, 300, 150, TRANS_WHITE3); rectfill(display, 80, 80, 300, 150, TRANS_WHITE4); rectfill(display, 90, 90, 300, 150, TRANS_WHITE5); rectfill(display, 100, 100, 300, 150, TRANS_WHITE6); rectfill(display, 110, 110, 300, 150, TRANS_WHITE4); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); */ // blit(display [0], screen, 0, 0, 120, 0, 400, 480); if (options.run_vsync > 0) vsync(); blit(display [0], screen, 0, 0, 0, 0, 640, 480); // blit(display [1], screen, 0, 0, 320, 0, 320, 480); } void draw_player(void) { if (player.in_play == 0) return; int x = player.x / GRAIN; int y = player.y / GRAIN; // rectfill(display, player.x / GRAIN - 10, player.y / GRAIN - 10, // player.x / GRAIN + 10, player.y / GRAIN + 10, COLOUR_11); //int col1, col2, col3; /* int aura_size = 0, aura_colour; if (player.switch_recycle >= 0) { if (player.switch_recycle < 10) { aura_colour = 0; if (player.switching == POLE_BLACK) aura_colour = 1; aura_size = player.switch_recycle; if (aura_size > 9) aura_size = 9; draw_trans_rle_sprite(display, aura_rle [aura_colour] [aura_size], x - 25, y - 21); } if (player.switch_recycle > 10) { aura_colour = 0; if (player.switching == POLE_WHITE) aura_colour = 1; aura_size = 20 - player.switch_recycle; if (aura_size > 9) aura_size = 9; draw_trans_rle_sprite(display, aura_rle [aura_colour] [aura_size], x - 25, y - 21); } } else { aura_colour = 0; if (player.pole == POLE_BLACK) aura_colour = 1; if (grand(4) == 0) draw_trans_rle_sprite(display, aura_rle [aura_colour] [0], x - 25, y - 21); else draw_trans_rle_sprite(display, aura_rle [aura_colour] [10 + grand(3)], x - 25, y - 21); } */ /* switch(player.pole) { default: col1 = COLOUR_4; col2 = COLOUR_5; col3 = COLOUR_6; break; case POLE_WHITE: col1 = COLOUR_12; col2 = COLOUR_11; col3 = COLOUR_10; break; case POLE_BLACK: col1 = COLOUR_1; col2 = COLOUR_2; col3 = COLOUR_3; break; } if (player.switch_recycle >= 0) { int which_rle = player.switch_recycle; if (which_rle > 19) which_rle = 19; if (player.switching == POLE_WHITE) draw_rle_sprite(display, player_rle [0] [which_rle], x - 18, y - 9); else draw_rle_sprite(display, player_rle [1] [19 - which_rle], x - 18, y - 9); } else { if (player.pole == POLE_WHITE) { draw_rle_sprite(display, normal_player_rle [0] [3 + player.bank / 10], x - 18, y - 9); } else draw_rle_sprite(display, normal_player_rle [1] [3 + player.bank / 10], x - 18, y - 9); } */ // draw_rle_sprite(display [0], normal_player_rle [1] [3 + player.bank / 10], x - 18, y - 9); //draw_rle_sprite(display [1], normal_player_rle [1] [3 + player.bank / 10], x - 18, y - 9); int bank_sprite1, bank_sprite2; // draw_rle_sprite(display [0], player_rle [0] [0], x - 10, y - 6); bank_sprite1 = player.bank / 5; bank_sprite2 = player.bank / 5; int little = 0; int big = 1; if (player.sides == 1) { little = 1; big = 0; } if (player.switch_recycle > 10) { int bankx; if (little == 0) { bankx = -20 + player.switch_recycle; if (bankx < bank_sprite1) bank_sprite1 = bankx; bankx = 20 - player.switch_recycle; if (bankx > bank_sprite2) bank_sprite2 = bankx; } else { bankx = 20 - player.switch_recycle; if (bankx > bank_sprite1) bank_sprite1 = bankx; bankx = -20 + player.switch_recycle; if (bankx < bank_sprite2) bank_sprite2 = bankx; } } else if (player.switch_recycle > 0) { int bankx; if (little == 0) { bankx = 0 - player.switch_recycle; // yes! bank_sprite1 = bankx; // bankx = 10 - player.switch_recycle; bankx = player.switch_recycle; bank_sprite2 = bankx; } else { bankx = player.switch_recycle; // yes! bank_sprite1 = bankx; bankx = 0 - player.switch_recycle; bank_sprite2 = bankx; } } /* THIS ONE WORKS!!!: if (player.switch_recycle > 10) { int bankx; if (little == 0) { bankx = -20 + player.switch_recycle; // yes! bank_sprite1 = bankx; bankx = 20 - player.switch_recycle; bank_sprite2 = bankx; } else { bankx = 20 - player.switch_recycle; bank_sprite1 = bankx; bankx = -20 + player.switch_recycle; bank_sprite2 = bankx; } } else if (player.switch_recycle > 0) { int bankx; if (little == 0) { bankx = 0 - player.switch_recycle; // yes! bank_sprite1 = bankx; // bankx = 10 - player.switch_recycle; bankx = player.switch_recycle; bank_sprite2 = bankx; } else { bankx = player.switch_recycle; // yes! bank_sprite1 = bankx; bankx = 0 - player.switch_recycle; bank_sprite2 = bankx; } } */ #define BIG_Y 19 #define LITTLE_Y 3 switch(bank_sprite1) { case -10: case -9: draw_rle_sprite(display [big], player_rle [1] [5], x - 14, y - BIG_Y); break; case -8: case -7: draw_rle_sprite(display [big], player_rle [1] [4], x - 14, y - BIG_Y); break; case -6: case -5: draw_rle_sprite(display [big], player_rle [1] [3], x - 14, y - BIG_Y); break; case -4: case -3: draw_rle_sprite(display [big], player_rle [1] [2], x - 14, y - BIG_Y); break; case -2: case -1: draw_rle_sprite(display [big], player_rle [1] [1], x - 14, y - BIG_Y); break; case 10: case 9: draw_rle_sprite(display [big], player_rle [1] [10], x - 14, y - BIG_Y); break; case 8: case 7: draw_rle_sprite(display [big], player_rle [1] [9], x - 14, y - BIG_Y); break; case 6: case 5: draw_rle_sprite(display [big], player_rle [1] [8], x - 14, y - BIG_Y); break; case 4: case 3: draw_rle_sprite(display [big], player_rle [1] [7], x - 14, y - BIG_Y); break; case 2: case 1: draw_rle_sprite(display [big], player_rle [1] [6], x - 14, y - BIG_Y); break; default: draw_rle_sprite(display [big], player_rle [1] [0], x - 14, y - BIG_Y); break; } // textprintf_centre_ex(display [big], font, x, y, COL_LRED, -1, "%i", bank_sprite1); switch(bank_sprite2) { case -10: case -9: draw_rle_sprite(display [little], player_rle [0] [5], x - 10, y - LITTLE_Y); break; case -8: case -7: draw_rle_sprite(display [little], player_rle [0] [4], x - 10, y - LITTLE_Y); break; case -6: case -5: draw_rle_sprite(display [little], player_rle [0] [3], x - 10, y - LITTLE_Y); break; case -4: case -3: draw_rle_sprite(display [little], player_rle [0] [2], x - 10, y - LITTLE_Y); break; case -2: case -1: draw_rle_sprite(display [little], player_rle [0] [1], x - 10, y - LITTLE_Y); break; case 10: case 9: draw_rle_sprite(display [little], player_rle [0] [10], x - 10, y - LITTLE_Y); break; case 8: case 7: draw_rle_sprite(display [little], player_rle [0] [9], x - 10, y - LITTLE_Y); break; case 6: case 5: draw_rle_sprite(display [little], player_rle [0] [8], x - 10, y - LITTLE_Y); break; case 4: case 3: draw_rle_sprite(display [little], player_rle [0] [7], x - 10, y - LITTLE_Y); break; case 2: case 1: draw_rle_sprite(display [little], player_rle [0] [6], x - 10, y - LITTLE_Y); break; default: draw_rle_sprite(display [little], player_rle [0] [0], x - 10, y - LITTLE_Y); break; } draw_trans_rle_sprite(display[little], exhaust [arena.counter % 4], x - 2, y + 5); draw_trans_rle_sprite(display[big], exhaust [arena.counter % 4], x - 4 + abs(bank_sprite1) / 4, y + 6); draw_trans_rle_sprite(display[big], exhaust [arena.counter % 4], x + 0 - abs(bank_sprite1) / 4, y + 6); int col1, col2, col3; int which_explode; if (player.blue_fire > 0) { int x1 = x - 5 + abs(player.bank / 25); int x2 = x + 5 - abs(player.bank / 25); int xa = 2 + grand(3);//5 + grand(3); int xb = (explode_rle [0] [xa].x); switch(player.power [0]) { case 1: col1 = TRANS_LRED; col2 = TRANS_DRED; col3 = TRANS_DDRED; which_explode = 0; break; case 2: col1 = TRANS_YELLOW; col2 = TRANS_LRED; col3 = TRANS_DRED; which_explode = 0; break; case 3: col1 = TRANS_YELLOW; col2 = TRANS_LGREEN; col3 = TRANS_DGREEN; which_explode = 1; break; case 4: col1 = TRANS_LBLUE; col2 = TRANS_DBLUE; col3 = TRANS_DDBLUE; which_explode = 2; break; case 5: col1 = TRANS_WHITE; col2 = TRANS_LPURPLE; col3 = TRANS_LBLUE; which_explode = 2; break; } draw_trans_rle_sprite(display[little], explode_rle [which_explode] [xa].sprite, x1 - xb, y - xb - 3); draw_trans_rle_sprite(display[little], explode_rle [which_explode] [xa].sprite, x2 - xb, y - xb - 3); drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); if (grand(3) == 0) { col1 = col2; col2 = col3; } else if (grand(5) == 0) { col3 = col2; col2 = col1; } vline(display[little], x1, y - 3, 0, col1); vline(display[little], x1 - 1, y - 3, 0, col2); vline(display[little], x1 + 1, y - 3, 0, col2); vline(display[little], x2, y - 3, 0, col1); vline(display[little], x2 - 1, y - 3, 0, col2); vline(display[little], x2 + 1, y - 3, 0, col2); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); } if (player.blue2_fire > 0) { int x2a = player.blue2_fire + 2 + grand(4);//5 + grand(3); int x2b = explode_rle [0] [x2a].x; int which_explode; switch(player.power [1]) { case 1: col1 = TRANS_YELLOW; col2 = TRANS_LRED; col3 = TRANS_DRED; which_explode = 0; break; case 2: col1 = TRANS_WHITE; col2 = TRANS_YELLOW; col3 = TRANS_LRED; which_explode = 0; break; case 3: col1 = TRANS_YELLOW; col2 = TRANS_LGREEN; col3 = TRANS_DGREEN; which_explode = 1; break; case 4: col1 = TRANS_WHITE; col2 = TRANS_LBLUE; col3 = TRANS_DBLUE; which_explode = 2; break; case 5: col1 = TRANS_WHITE; col2 = TRANS_LPURPLE; col3 = TRANS_DPURPLE; which_explode = 2; break; } draw_trans_rle_sprite(display[big], explode_rle [which_explode] [x2a].sprite, x - x2b, y - x2b - 13); drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); int b2f = player.blue2_fire;// / 3; if (b2f >= 3) { vline(display[big], x, y - 9, 0, col1); vline(display[big], x - 1, y - 9, 0, col1); vline(display[big], x + 1, y - 9, 0, col1); vline(display[big], x - 2, y - 9, 0, col2); vline(display[big], x + 2, y - 9, 0, col2); vline(display[big], x - 3, y - 9, 0, col3); vline(display[big], x + 3, y - 9, 0, col3); } if (b2f == 2) { vline(display[big], x, y - 9, 0, col1); vline(display[big], x - 1, y - 9, 0, col2); vline(display[big], x + 1, y - 9, 0, col2); vline(display[big], x - 2, y - 9, 0, col3); vline(display[big], x + 2, y - 9, 0, col3); } if (b2f == 1) { vline(display[big], x, y - 9, 0, col2); vline(display[big], x - 1, y - 9, 0, col3); vline(display[big], x + 1, y - 9, 0, col3); } if (b2f == 0) { vline(display[big], x, y - 9, 0, col3); } drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); } /* xa = 3 + grand(3); xb = (explode_rle [0] [xa]->w) / 2; draw_trans_rle_sprite(display[big], explode_rle [0] [xa], x - xb, y + 5 - xb); xa = 5 + grand(3); xb = (explode_rle [0] [xa]->w) / 2; draw_trans_rle_sprite(display[big], explode_rle [0] [xa], x - xb, y + 9 - xb);*/ if (player.grace > 0) { int i, w, xa, xb, angle; for (w = 0; w < 2; w ++) { for (i = 0; i < 6; i ++) { xa = 1 + grand(2) + player.grace / 10; if (xa > 4) xa = 4 + grand(2); xb = explode_rle [1] [xa].x; if (w == 1) angle = player.grace * 20 + i * ANGLE_6; else angle = player.grace *-20 + i * ANGLE_6; draw_trans_rle_sprite(display[w], explode_rle [2] [xa].sprite, x + xpart(angle, 10 + xa * 2) - xb, y + ypart(angle, 10 + xa * 2) - xb); } } } // textprintf_centre_ex(display [little], font, x, y, COL_LRED, -1, "%i", bank_sprite2); /*hline(display[0], 0, y, 320, TRANS_DBLUE); hline(display[1], 0, y, 320, TRANS_DBLUE); vline(display[0], x, 0, 480, TRANS_DBLUE); vline(display[1], x, 0, 480, TRANS_DBLUE);*/ /* switch(bank_sprite) { case -6: case -5: draw_rle_sprite(display [1], player_rle [1] [3], x - 14, y - 10); break; case -4: case -3: draw_rle_sprite(display [1], player_rle [1] [2], x - 14, y - 10); break; case -2: case -1: draw_rle_sprite(display [1], player_rle [1] [1], x - 14, y - 10); break; case 6: case 5: draw_rle_sprite(display [1], player_rle [1] [6], x - 14, y - 10); break; case 4: case 3: draw_rle_sprite(display [1], player_rle [1] [5], x - 14, y - 10); break; case 2: case 1: draw_rle_sprite(display [1], player_rle [1] [4], x - 14, y - 10); break; default: draw_rle_sprite(display [1], player_rle [1] [0], x - 14, y - 10); break; }*/ // rect(display, x - 13, y - 5, x - 7, y + 18, COLOUR_0); // rect(display, x + 13, y - 5, x + 7, y + 18, COLOUR_0); } // also draws lives void draw_energy_gauge(int x) { drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); int line_x = 310, line_x2 = 320; if (player.sides == 1) { line_x = 320; line_x2 = 310; } int col1 = TRANS_YELLOW; //8 - (arena.counter % 32) / 4; int col2 = TRANS_LRED; if (player.charge > 0) { int seekers = player.charge / 100; rectfill(display [2], line_x + 1, EGAUGE_Y, line_x + 9, EGAUGE_Y - seekers * 10, col1); rectfill(display [2], line_x + 1, EGAUGE_Y - seekers * 10, line_x + 9, EGAUGE_Y - seekers * 10 - (player.charge % 100) / 10, col2); if (player.charge > 300) { col1 = TRANS_DBLUE; col2 = (arena.counter / 4) % 3; if (col2 == 1) col1 = TRANS_LBLUE; if (col2 == 2) col1 = TRANS_WHITE; rectfill(display [2], line_x2 + 1, EGAUGE_Y, line_x2 + 9, EGAUGE_Y - player.charge / 10, col1);//COL_LBLUE); } else rectfill(display [2], line_x2 + 1, EGAUGE_Y, line_x2 + 9, EGAUGE_Y - player.charge / 10, TRANS_LBLUE); } // rect(display[0], x, 420, x + 10, 340, TRANS_LBLUE); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); int i; hline(display[2], line_x2, EGAUGE_Y - 30, line_x2 + 9, TRANS_WHITE); hline(display[2], line_x2, EGAUGE_Y - 29, line_x2 + 9, COL_OUTLINE); hline(display[2], line_x2, EGAUGE_Y - 31, line_x2 + 9, COL_OUTLINE); rect(display [2], 310, EGAUGE_Y - 80, 330, EGAUGE_Y, TRANS_WHITE); rect(display [2], 309, EGAUGE_Y - 81, 331, EGAUGE_Y + 1, COL_OUTLINE); rect(display [2], 311, EGAUGE_Y - 79, 329, EGAUGE_Y - 1, COL_OUTLINE); vline(display [2], 320, EGAUGE_Y, EGAUGE_Y - 80, TRANS_WHITE); vline(display [2], 319, EGAUGE_Y, EGAUGE_Y - 80, COL_OUTLINE); vline(display [2], 321, EGAUGE_Y, EGAUGE_Y - 80, COL_OUTLINE); for (i = EGAUGE_Y - 70; i < EGAUGE_Y; i += 10) { hline(display[2], line_x, i, line_x + 9, TRANS_WHITE); hline(display[2], line_x, i - 1, line_x + 9, COL_OUTLINE); hline(display[2], line_x, i + 1, line_x + 9, COL_OUTLINE); // hline(display[2], 0, 380 + i * 10, line_x + 9, TRANS_WHITE); } // Now for powerups! drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); if (player.power [0] > 0) { switch(player.weapon [0]) { case WPN_RED: col1 = TRANS_LRED; break; case WPN_BLUE: col1 = TRANS_LBLUE; break; case WPN_GREEN: col1 = TRANS_LGREEN; break; case WPN_WHITE: col1 = TRANS_WHITE; break; } rectfill(display [2], line_x + 1, PGAUGE_Y, line_x + 9, PGAUGE_Y - player.power [0] * 10, col1); } if (player.power [1] > 0) { switch(player.weapon [1]) { case WPN_RED: col1 = TRANS_LRED; break; case WPN_BLUE: col1 = TRANS_LBLUE; break; case WPN_GREEN: col1 = TRANS_LGREEN; break; case WPN_WHITE: col1 = TRANS_WHITE; break; } rectfill(display [2], line_x2 + 1, PGAUGE_Y, line_x2 + 9, PGAUGE_Y - player.power [1] * 10, col1); } drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); line_x = 310; rect(display [2], 310, PGAUGE_Y - 50, 330, PGAUGE_Y, TRANS_WHITE); rect(display [2], 309, PGAUGE_Y - 51, 331, PGAUGE_Y + 1, COL_OUTLINE); rect(display [2], 311, PGAUGE_Y - 49, 329, PGAUGE_Y - 1, COL_OUTLINE); vline(display [2], 320, PGAUGE_Y, PGAUGE_Y - 50, TRANS_WHITE); vline(display [2], 319, PGAUGE_Y, PGAUGE_Y - 50, COL_OUTLINE); vline(display [2], 321, PGAUGE_Y, PGAUGE_Y - 50, COL_OUTLINE); for (i = PGAUGE_Y - 40; i < PGAUGE_Y; i += 10) { hline(display[2], line_x, i, line_x + 19, TRANS_WHITE); hline(display[2], line_x, i - 1, line_x + 20, COL_OUTLINE); hline(display[2], line_x, i + 1, line_x + 20, COL_OUTLINE); // hline(display[2], 0, 380 + i * 10, line_x + 9, TRANS_WHITE); } if (boss.fight == 0) { vline(display [2], 320, 0, 480, TRANS_WHITE);//COL_OUTLINE); vline(display [2], 319, 0, 480, COL_OUTLINE); vline(display [2], 321, 0, 480, COL_OUTLINE); } else { vline(display [2], 320, 0, 7, TRANS_WHITE);//COL_OUTLINE); vline(display [2], 319, 0, 7, COL_OUTLINE); vline(display [2], 321, 0, 7, COL_OUTLINE); vline(display [2], 320, 18, 480, TRANS_WHITE);//COL_OUTLINE); vline(display [2], 319, 18, 480, COL_OUTLINE); vline(display [2], 321, 18, 480, COL_OUTLINE); } if (boss.fight) { line_x = (boss.hp * 100) / boss.max_hp; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); rectfill(display [2], 320 - line_x, 10, 320 + line_x, 15, TRANS_YELLOW); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); // rect(display [2], 320 - line_x - 1, 9, 320 + line_x + 1, 16, COL_OUTLINE); rect(display [2], 220 - 2, 8, 420 + 2, 17, COL_OUTLINE); rect(display [2], 220 - 3, 7, 420 + 3, 18, COL_WHITE); rect(display [2], 220 - 4, 6, 420 + 4, 19, COL_OUTLINE); putpixel(display [2], 320, 6, COL_WHITE); putpixel(display [2], 320, 19, COL_WHITE); // textprintf_ex(display [2], font, 210, 20, -1, -1, "%i", boss.move_time); } for (i = 0; i < arena.player_lives; i ++) { rectfill(display[2], 315, 130 - i * 10, 325, 133 - i * 10, TRANS_YELLOW); rect(display[2], 314, 129 - i * 10, 326, 134 - i * 10, COL_OUTLINE); rect(display[2], 313, 128 - i * 10, 327, 135 - i * 10, TRANS_WHITE); rect(display[2], 312, 127 - i * 10, 328, 136 - i * 10, COL_OUTLINE); putpixel(display[2], 320, 127 - i * 10, TRANS_WHITE); putpixel(display[2], 320, 136 - i * 10, TRANS_WHITE); } textprintf_right_ex(display [2], font, 315, 25, -1, -1, "%i", player.score); textprintf_ex(display [2], font, 325, 25, -1, -1, "%i", options.highscore [arena.difficulty]); //rectfill(display [2], 310, EGAUGE_Y - 80, 330, EGAUGE_Y, 0); // if (player.charge > 0) // rectfill(display [0], 309, 450 - player.charge / 10, 319, 450, TRANS_YELLOW); /* int line_x = 310, line_x2 = 320; if (player.sides == 1) { line_x = 320; line_x2 = 310; } if (player.charge > 0) { int seekers = player.charge / 100; int col1 = COL_YELLOW; //8 - (arena.counter % 32) / 4; int col2 = COL_LRED; rectfill(display [2], line_x + 1, EGAUGE_Y, line_x + 9, EGAUGE_Y - seekers * 10, col1); rectfill(display [2], line_x + 1, EGAUGE_Y - seekers * 10, line_x + 9, EGAUGE_Y - seekers * 10 - (player.charge % 100) / 10, col2); if (player.charge > 300) rectfill(display [2], line_x2 + 1, EGAUGE_Y, line_x2 + 9, EGAUGE_Y - player.charge / 10, TRANS_DBLUE + COL_WHITE + (arena.counter / 4) % 3 - 1);//COL_LBLUE); else rectfill(display [2], line_x2 + 1, EGAUGE_Y, line_x2 + 9, EGAUGE_Y - player.charge / 10, COL_DBLUE); } // rect(display[0], x, 420, x + 10, 340, TRANS_LBLUE); int i; hline(display[2], line_x2, EGAUGE_Y - 30, line_x2 + 9, TRANS_WHITE); hline(display[2], line_x2, EGAUGE_Y - 29, line_x2 + 9, COL_OUTLINE); hline(display[2], line_x2, EGAUGE_Y - 31, line_x2 + 9, COL_OUTLINE); rect(display [2], 310, EGAUGE_Y - 80, 330, EGAUGE_Y, TRANS_WHITE); rect(display [2], 309, EGAUGE_Y - 81, 331, EGAUGE_Y + 1, COL_OUTLINE); rect(display [2], 311, EGAUGE_Y - 79, 329, EGAUGE_Y - 1, COL_OUTLINE); vline(display [2], 320, EGAUGE_Y, EGAUGE_Y - 80, TRANS_WHITE); vline(display [2], 319, EGAUGE_Y, EGAUGE_Y - 80, COL_OUTLINE); vline(display [2], 321, EGAUGE_Y, EGAUGE_Y - 80, COL_OUTLINE); for (i = EGAUGE_Y - 70; i < EGAUGE_Y; i += 10) { hline(display[2], line_x, i, line_x + 9, TRANS_WHITE); hline(display[2], line_x, i - 1, line_x + 9, COL_OUTLINE); hline(display[2], line_x, i + 1, line_x + 9, COL_OUTLINE); // hline(display[2], 0, 380 + i * 10, line_x + 9, TRANS_WHITE); } // Now for powerups! line_x = 310; rect(display [2], 310, PGAUGE_Y - 50, 330, PGAUGE_Y, TRANS_WHITE); rect(display [2], 309, PGAUGE_Y - 51, 331, PGAUGE_Y + 1, COL_OUTLINE); rect(display [2], 311, PGAUGE_Y - 49, 329, PGAUGE_Y - 1, COL_OUTLINE); vline(display [2], 320, PGAUGE_Y, PGAUGE_Y - 50, TRANS_WHITE); vline(display [2], 319, PGAUGE_Y, PGAUGE_Y - 50, COL_OUTLINE); vline(display [2], 321, PGAUGE_Y, PGAUGE_Y - 50, COL_OUTLINE); for (i = PGAUGE_Y - 40; i < PGAUGE_Y; i += 10) { hline(display[2], line_x, i, line_x + 19, TRANS_WHITE); hline(display[2], line_x, i - 1, line_x + 20, COL_OUTLINE); hline(display[2], line_x, i + 1, line_x + 20, COL_OUTLINE); // hline(display[2], 0, 380 + i * 10, line_x + 9, TRANS_WHITE); } */ /*hline(display[0], x, 440, x + 9, TRANS_LBLUE); hline(display[0], x, 430, x + 9, TRANS_LBLUE); hline(display[0], x, 420, x + 9, TRANS_LBLUE); hline(display[0], x, 410, x + 9, TRANS_LBLUE); hline(display[0], x, 400, x + 9, TRANS_LBLUE); hline(display[0], x, 390, x + 9, TRANS_LBLUE); hline(display[0], x, 380, x + 9, TRANS_LBLUE);*/ // if (arena.players == 2 && p == 1) // return; /* for (i = 0; i < arena.player_lives; i ++) { rectfill(display[2], x, 320 - i * 20, x + 10, 330 - i * 20, TRANS_YELLOW); rect(display[2], x, 320 - i * 20, x + 10, 330 - i * 20, TRANS_LBLUE); }*/ } void display_quit_query(void) { // if (game.mode_void == 0) // { // drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); // rectfill(screen, 140, 150, 500, 280, TRANS_DGREY); // } /* rect(screen, 140, 150, 500, 280, COLOUR_1); rect(screen, 139, 149, 501, 281, COLOUR_1); rect(screen, 138, 148, 502, 282, COLOUR_2); rect(screen, 137, 147, 503, 283, COLOUR_3); rect(screen, 136, 146, 504, 284, COLOUR_4); */ textprintf_centre_ex(screen, font, 320, 180, COL_WHITE, -1, "quit?"); textprintf_centre_ex(screen, font, 320, 230, COL_WHITE, -1, "y or n"); } void draw_enemies(void) { int e, w; for (w = 0; w < 2; w ++) { for (e = 0; e < NO_ENEMIES; e ++) { if (enemy[w][e].type == ENEMY_NONE) continue; draw_an_enemy(w, e); } } } void draw_an_enemy(int w, int e) { /* circlefill(display [w], x, y, 8, COL_WHITE + enemy[w] [e].hurt_pulse); circle(display [w], x, y, 8, COL_OUTLINE); circlefill(display [w], x - 7, y + 4, 6, COL_LGREY); circle(display [w], x - 7, y + 4, 6, COL_OUTLINE); circlefill(display [w], x + 7, y + 4, 6, COL_DGREY); circle(display [w], x + 7, y + 4, 6, COL_OUTLINE);*/ int xa, ya, xb, yb, i; int x = enemy[w] [e].x / GRAIN; int y = enemy[w] [e].y / GRAIN; switch(enemy[w][e].type) { case ENEMY_MB1: xa = 6 + grand(4); xb = explode_rle [0] [xa].x; draw_rle_sprite(display [w], eRLE_big [L_ENEMY_MB1], x - 74, y - 31 + 20); draw_trans_rle_sprite(display[w], explode_rle [0] [xa].sprite, x - xb - 38 - grand(3), y - xb + 47 + grand(4)); draw_trans_rle_sprite(display[w], explode_rle [0] [xa].sprite, x - xb + 38 + grand(3), y - xb + 47 + grand(4)); circlefill(display [w], x - 39, y + 20, 4, COL_DBLUE); circle(display [w], x - 39, y + 20, 4, COL_OUTLINE); circlefill(display [w], x - 39 + xpart(boss.angle_1, 3), y + 20 + ypart(boss.angle_1, 3), 2, COL_LBLUE); circle(display [w], x - 39 + xpart(boss.angle_1, 3), y + 20 + ypart(boss.angle_1, 3), 2, COL_OUTLINE); circlefill(display [w], x + 39, y + 20, 4, COL_DBLUE); circle(display [w], x + 39, y + 20, 4, COL_OUTLINE); circlefill(display [w], x + 39 + xpart(boss.angle_2, 3), y + 20 + ypart(boss.angle_2, 3), 2, COL_LBLUE); circle(display [w], x + 39 + xpart(boss.angle_2, 3), y + 20 + ypart(boss.angle_2, 3), 2, COL_OUTLINE); circlefill(display [w], x, y + 28, 4, COL_DBLUE); circle(display [w], x, y + 28, 4, COL_OUTLINE); circlefill(display [w], x + xpart(boss.angle_3, 5), y + 28 + ypart(boss.angle_3, 5), 2, COL_LBLUE); circle(display [w], x + xpart(boss.angle_3, 5), y + 28 + ypart(boss.angle_3, 5), 2, COL_OUTLINE); circlefill(display [w], x + xpart(boss.angle_3 + ANGLE_3, 5), y + 28 + ypart(boss.angle_3 + ANGLE_3, 5), 2, COL_LBLUE); circle(display [w], x + xpart(boss.angle_3 + ANGLE_3, 5), y + 28 + ypart(boss.angle_3 + ANGLE_3, 5), 2, COL_OUTLINE); circlefill(display [w], x + xpart(boss.angle_3 - ANGLE_3, 5), y + 28 + ypart(boss.angle_3 - ANGLE_3, 5), 2, COL_LBLUE); circle(display [w], x + xpart(boss.angle_3 - ANGLE_3, 5), y + 28 + ypart(boss.angle_3 - ANGLE_3, 5), 2, COL_OUTLINE); break; case ENEMY_BFLOWER: xa = 1;//(10 * enemy[w][e].angle2) / 100; int c1, c2; switch(enemy[w][e].angle3) { case 0: c1 = COL_LRED; c2 = COL_DRED; break; case 1: c1 = COL_YELLOW; c2 = COL_DGREEN; break; case 2: c1 = COL_LBLUE; c2 = COL_DBLUE; break; } xa = (7 * enemy[w][e].angle2) / 100; xb = (14 * enemy[w][e].angle2) / 100; circlefill(display[w], x + xpart(enemy[w][e].angle1, xb), y + ypart(enemy[w][e].angle1, xb), xa, c2); circle(display[w], x + xpart(enemy[w][e].angle1, xb), y + ypart(enemy[w][e].angle1, xb), xa, COL_OUTLINE); circlefill(display[w], x + xpart(enemy[w][e].angle1 + ANGLE_3, xb), y + ypart(enemy[w][e].angle1 + ANGLE_3, xb), xa, c2); circle(display[w], x + xpart(enemy[w][e].angle1 + ANGLE_3, xb), y + ypart(enemy[w][e].angle1 + ANGLE_3, xb), xa, COL_OUTLINE); circlefill(display[w], x + xpart(enemy[w][e].angle1 - ANGLE_3, xb), y + ypart(enemy[w][e].angle1 - ANGLE_3, xb), xa, c2); circle(display[w], x + xpart(enemy[w][e].angle1 - ANGLE_3, xb), y + ypart(enemy[w][e].angle1 - ANGLE_3, xb), xa, COL_OUTLINE); xa = (10 * enemy[w][e].angle2) / 100; circlefill(display[w], x, y, xa, c1); circle(display[w], x, y, xa, COL_OUTLINE); break; case ENEMY_BOSS2: xa = (20 * boss.size) / 100; int col1; int col2; switch(boss.colour) { case 0: col1 = COL_LRED; break; case 1: col1 = COL_YELLOW; break; case 2: col1 = COL_LBLUE; break; } circlefill(display [w], x, y, xa, col1); circle(display [w], x, y, xa, COL_OUTLINE); xa = (11 * boss.size) / 100; xb = (7 * boss.size) / 100; switch(boss.colour) { case 0: col1 = COL_LBLUE; col2 = COL_DBLUE; break; case 1: col1 = COL_LRED; col2 = COL_DRED; break; case 2: col1 = COL_YELLOW; col2 = COL_DGREEN; break; } for (i = 0; i < 8; i ++) { circlefill(display [w], x + xpart(enemy[w][e].angle1 + i * ANGLE_8, boss.size), y + ypart(enemy[w][e].angle1 + i * ANGLE_8, boss.size), xa, col2); circle(display [w], x + xpart(enemy[w][e].angle1 + i * ANGLE_8, boss.size), y + ypart(enemy[w][e].angle1 + i * ANGLE_8, boss.size), xa, COL_OUTLINE); circlefill(display [w], x + xpart(enemy[w][e].angle1 + i * ANGLE_8, boss.size - 3), y + ypart(enemy[w][e].angle1 + i * ANGLE_8, boss.size - 3), xb, col1); circle(display [w], x + xpart(enemy[w][e].angle1 + i * ANGLE_8, boss.size - 3), y + ypart(enemy[w][e].angle1 + i * ANGLE_8, boss.size - 3), xb, COL_OUTLINE); } xa = boss.size / 2; xb = (15 * boss.size) / 100; switch(boss.colour) { case 0: col1 = COL_YELLOW; col2 = COL_DGREEN; break; case 1: col1 = COL_LBLUE; col2 = COL_DBLUE; break; case 2: col1 = COL_LRED; col2 = COL_DRED; break; } for (i = 0; i < 6; i ++) { circlefill(display [w], x + xpart(ANGLE_1 - (enemy[w][e].angle1 + i * ANGLE_6), xa), y + ypart(ANGLE_1 - (enemy[w][e].angle1 + i * ANGLE_6), xa), xb, col2); circle(display [w], x + xpart(ANGLE_1 - (enemy[w][e].angle1 + i * ANGLE_6), xa), y + ypart(ANGLE_1 - (enemy[w][e].angle1 + i * ANGLE_6), xa), xb, COL_OUTLINE); } xa = (45 * boss.size) / 100; xb = (9 * boss.size) / 100; for (i = 0; i < 6; i ++) { circlefill(display [w], x + xpart(ANGLE_1 - (enemy[w][e].angle1 + i * ANGLE_6), xa), y + ypart(ANGLE_1 - (enemy[w][e].angle1 + i * ANGLE_6), xa), xb, col1); circle(display [w], x + xpart(ANGLE_1 - (enemy[w][e].angle1 + i * ANGLE_6), xa), y + ypart(ANGLE_1 - (enemy[w][e].angle1 + i * ANGLE_6), xa), xb, COL_OUTLINE); } break; case ENEMY_FLOWER1: xb = enemy[w][e].angle1; if (w == 1) xb = 16 - xb; if (xb < 0) xb = 0; if (xb > 15) xb = 15; xa = eRLE_flower [0] [xb].x; ya = eRLE_flower [0] [xb].y; draw_rle_sprite(display [w], eRLE_flower [0] [xb].sprite, x - xa, y - ya); // circlefill(display [w], x, y, 10, COL_WHITE); break; case ENEMY_FLOWER2: xb = enemy[w][e].angle1; if (w == 1) xb = 20 - xb; if (xb < 0) xb = 0; if (xb > 19) xb = 19; xa = eRLE_flower [1] [xb].x; ya = eRLE_flower [1] [xb].y; draw_rle_sprite(display [w], eRLE_flower [1] [xb].sprite, x - xa, y - ya); break; case ENEMY_FLOWER3: xb = enemy[w][e].angle1; if (w == 1) xb = 20 - xb; if (xb < 0) xb = 0; if (xb > 19) xb = 19; xa = eRLE_flower [2] [xb].x; ya = eRLE_flower [2] [xb].y; draw_rle_sprite(display [w], eRLE_flower [2] [xb].sprite, x - xa, y - ya); break; case ENEMY_FLOWER4: xb = enemy[w][e].angle1; if (w == 1) xb = 20 - xb; if (xb < 0) xb = 0; if (xb > 19) xb = 19; xa = eRLE_flower [3] [xb].x; ya = eRLE_flower [3] [xb].y; draw_rle_sprite(display [w], eRLE_flower [3] [xb].sprite, x - xa, y - ya); break; case ENEMY_FLOWER5: xb = enemy[w][e].angle1; if (w == 1) xb = 32 - xb; if (xb < 0) xb = 0; if (xb > 31) xb = 31; xa = eRLE_flower [4] [xb].x; ya = eRLE_flower [4] [xb].y; draw_rle_sprite(display [w], eRLE_flower [4] [xb].sprite, x - xa, y - ya); break; case ENEMY_GLIDER1: // xa = x - 39; // ya = y - 2; xa = x - 34; ya = y - 0; xa += xpart(-ANGLE_4 -ANGLE_8 - ANGLE_32, enemy[w][e].angle3 / 3); ya += ypart(-ANGLE_4 -ANGLE_8 - ANGLE_32, enemy[w][e].angle3 / 3); draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_GLIDER1_LFOOT], xa, ya + GLIDER_Y_ADJUST); xa = x + 6; ya = y; xa -= xpart(-ANGLE_4 -ANGLE_8 - ANGLE_32, enemy[w][e].angle3 / 3); ya += ypart(-ANGLE_4 -ANGLE_8 - ANGLE_32, enemy[w][e].angle3 / 3); draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_GLIDER1_RFOOT], xa, ya + GLIDER_Y_ADJUST); draw_rle_sprite(display [w], eRLE_big [L_ENEMY_GLIDER1], x - 43, y - 50 + GLIDER_Y_ADJUST); circlefill(display [w], x, y + GLIDER_Y_ADJUST, 10, COL_DRED); circle(display [w], x, y + GLIDER_Y_ADJUST, 10, COL_OUTLINE); for (i = 0; i < 6; i ++) { xa = enemy[w][e].angle2 + i * (ANGLE_6); circlefill(display [w], x + xpart(xa, 9), y + ypart(xa, 9) + GLIDER_Y_ADJUST, 3, COL_LRED); circle(display [w], x + xpart(xa, 9), y + ypart(xa, 9) + GLIDER_Y_ADJUST, 3, COL_OUTLINE); } break; case ENEMY_BURSTER: xa = xpart(-ANGLE_4 - ANGLE_8, enemy[w][e].angle2 / 2); ya = ypart(-ANGLE_4 - ANGLE_8, enemy[w][e].angle2 / 2); draw_rle_sprite(display [w], eRLE_big [L_ENEMY_BURSTER_LWING1], x - 28 + xa, y - 28 + ya); draw_rle_sprite(display [w], eRLE_big [L_ENEMY_BURSTER_RWING1], x -1 - xa, y - 28 + ya); xa = xpart(ANGLE_4 + ANGLE_8, enemy[w][e].angle2 / 2); ya = ypart(ANGLE_4 + ANGLE_8, enemy[w][e].angle2 / 2); draw_rle_sprite(display [w], eRLE_big [L_ENEMY_BURSTER_LWING2], x - 25+ xa, y - 1 + ya); draw_rle_sprite(display [w], eRLE_big [L_ENEMY_BURSTER_RWING2], x -1 - xa, y - 1 + ya); draw_rle_sprite(display [w], eRLE_big [L_ENEMY_BURSTER], x - 13, y - 13); xa = 6 + grand(3); xb = explode_rle [2] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [2] [xa].sprite, x - xb, y - xb); break; case ENEMY_CARRIER: // enemy[w][e].angle2 = 0; //enemy[w][e].angle3 = 0; xa = x - 31 - enemy[w][e].angle2 / 5; draw_rle_sprite(display [w], eRLE_big [L_ENEMY_CARRIER_LWING1], xa, y - 31); xa = x - 3 + enemy[w][e].angle2 / 5; draw_rle_sprite(display [w], eRLE_big [L_ENEMY_CARRIER_RWING1], xa, y - 31); xa = x - 31 - enemy[w][e].angle3 / 5; draw_rle_sprite(display [w], eRLE_big [L_ENEMY_CARRIER_LWING2], xa, y + 0); xa = x - 3 + enemy[w][e].angle3 / 5; draw_rle_sprite(display [w], eRLE_big [L_ENEMY_CARRIER_RWING2], xa, y + 0); draw_rle_sprite(display [w], eRLE_big [L_ENEMY_CARRIER], x - 22, y - 22); circlefill(display [w], x, y, 9, COL_LGREY); circle(display [w], x, y, 9, COL_OUTLINE); circlefill(display [w], x + xpart(enemy[w][e].angle1, 9), y + ypart(enemy[w][e].angle1, 9), 3, COL_WHITE); circle(display [w], x + xpart(enemy[w][e].angle1, 9), y + ypart(enemy[w][e].angle1, 9), 3, COL_OUTLINE); circlefill(display [w], x + xpart(enemy[w][e].angle1 + ANGLE_2, 9), y + ypart(enemy[w][e].angle1 + ANGLE_2, 9), 3, COL_WHITE); circle(display [w], x + xpart(enemy[w][e].angle1 + ANGLE_2, 9), y + ypart(enemy[w][e].angle1 + ANGLE_2, 9), 3, COL_OUTLINE); /* xa = 4 + grand(3); xb = (explode_rle [0] [xa]->w) / 2; draw_trans_rle_sprite(display[w], explode_rle [0] [xa], x - xb - 7, y - xb + 25 - grand(2)); draw_trans_rle_sprite(display[w], explode_rle [0] [xa], x - xb + 8, y - xb + 25 - grand(2)); xa = x - 20 - enemy[w][e].angle2 / 10; draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_CARRIER_LWING1], xa, y - 18); xa = x + 10 + enemy[w][e].angle2 / 10; draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_CARRIER_RWING1], xa, y - 18); xa = x - 28 - enemy[w][e].angle3 / 10; draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_CARRIER_LWING2], xa, y - 2); xa = x + 13 + enemy[w][e].angle3 / 10; draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_CARRIER_RWING2], xa, y - 2);*/ break; case ENEMY_BEAMER1: xb = enemy[w][e].angle2 / 3; xa = xpart(-ANGLE_4 - ANGLE_8, xb); ya = ypart(-ANGLE_4 - ANGLE_8, xb); draw_rle_sprite(display [w], eRLE_big [L_ENEMY_BEAMER1_LFIN], x - 32 + xa, y + 19 + ya); xa = xpart(-ANGLE_8, xb); ya = ypart(-ANGLE_8, xb); draw_rle_sprite(display [w], eRLE_big [L_ENEMY_BEAMER1_RFIN], x + 11 + xa, y + 19 + ya); xa = xpart(ANGLE_4 + ANGLE_8, xb); ya = ypart(ANGLE_4 + ANGLE_8, xb); draw_rle_sprite(display [w], eRLE_big [L_ENEMY_BEAMER1_LFIN2], x - 32 + xa, y - 71 + ya); xa = xpart(ANGLE_8, xb); ya = ypart(ANGLE_8, xb); draw_rle_sprite(display [w], eRLE_big [L_ENEMY_BEAMER1_RFIN2], x + 11 + xa, y - 71 + ya); draw_rle_sprite(display [w], eRLE_big [L_ENEMY_BEAMER1], x - 34, y - 33); circlefill(display[w], x, y, 8, COL_DBLUE); circle(display[w], x, y, 8, COL_OUTLINE); circlefill(display[w], x - xpart(enemy[w][e].angle1, 7), y - ypart(enemy[w][e].angle1, 7), 4, COL_LBLUE); circle(display[w], x - xpart(enemy[w][e].angle1, 7), y - ypart(enemy[w][e].angle1, 7), 4, COL_OUTLINE); break; case ENEMY_BOSS1: draw_rle_sprite(display [w], eRLE_big [L_ENEMY_BOSS1], x - 47, y - 45); xa = boss.arm1 / 16; xb = boss.arm1 / 8; ya = boss.arm2 / 8; yb = xpart(boss.pulse, 4); draw_rle_sprite(display [w], eRLE_big [L_ENEMY_BOSS1_L1], x - 57 - xb, y - 25 + ya + yb); draw_rle_sprite(display [w], eRLE_big [L_ENEMY_BOSS1_L2], x - 40 - xa, y - 48 - ya - yb); draw_rle_sprite(display [w], eRLE_big [L_ENEMY_BOSS1_R1], x + 19 + xa, y - 48 - ya - yb); draw_rle_sprite(display [w], eRLE_big [L_ENEMY_BOSS1_R2], x + 36 + xb, y - 25 + ya + yb); /* draw_rle_sprite(display [w], eRLE_big [L_ENEMY_BOSS1_L1], x - 59 - xb, y - 25 + ya + yb); draw_rle_sprite(display [w], eRLE_big [L_ENEMY_BOSS1_L2], x - 49 - xa, y - 48 - ya - yb); draw_rle_sprite(display [w], eRLE_big [L_ENEMY_BOSS1_R1], x + 20 + xa, y - 48 - ya - yb); draw_rle_sprite(display [w], eRLE_big [L_ENEMY_BOSS1_R2], x + 30 + xb, y - 25 + ya + yb);*/ int xa2 = 5 + grand(3); if (xa2 > boss.arm_change / 4) xa2 = boss.arm_change / 4; if (xa2 < 1) xa2 = 1; int xb2 = explode_rle [1] [xa2].x; if (boss.arm_colour != -1) { draw_trans_rle_sprite(display[w], explode_rle [boss.arm_colour] [xa2].sprite, x - xb2 - 29 - xb, y - xb2 + 40 + ya + yb); draw_trans_rle_sprite(display[w], explode_rle [boss.arm_colour] [xa2].sprite, x - xb2 + 29 + xb, y - xb2 + 40 + ya + yb); draw_trans_rle_sprite(display[w], explode_rle [boss.arm_colour] [xa2].sprite, x - xb2 - 48 - xa, y - xb2 - 40 - ya - yb); draw_trans_rle_sprite(display[w], explode_rle [boss.arm_colour] [xa2].sprite, x - xb2 + 48 + xa, y - xb2 - 40 - ya - yb); } if (boss.exploding == 0) { circlefill(display[w], x, y + 13, 9, COL_LGREY); circle(display[w], x, y + 13, 9, COL_OUTLINE); for (i = 0; i < 8; i ++) { xa = (enemy[w][e].angle1) + i * (ANGLE_8); circlefill(display [w], x + xpart(xa, 9), y + ypart(xa, 9) + 13, 3, COL_WHITE); circle(display [w], x + xpart(xa, 9), y + ypart(xa, 9) + 13, 3, COL_OUTLINE); } } break; case ENEMY_SHOTTER1: draw_rle_sprite(display [w], eRLE_big [L_ENEMY_SHOTTER1], x - 54, y - 51 + SHOTTER1_Y_ADJUST); if (enemy[w][e].recycle < 50) { xa = 5 + grand(3) + (50 - enemy[w][e].recycle) / 7; xb = explode_rle [1] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [1] [xa].sprite, x - xb, y - xb + SHOTTER1_Y_ADJUST); for (i = 0; i < 6; i ++) { xa = i * ANGLE_6; xb = (50 - enemy[w][e].recycle) / 12; ya = enemy[w][e].recycle + 10; // yb = (explode_rle [1] [xb]->w) / 2; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(display [w], x + xpart(xa, ya), y + ypart(xa, ya) + SHOTTER1_Y_ADJUST, xb + grand(2), TRANS_LGREEN); circlefill(display [w], x + xpart(xa, ya), y + ypart(xa, ya) + SHOTTER1_Y_ADJUST, xb + grand(5), TRANS_DGREEN); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); } } else { xa = 5 + grand(3); xb = explode_rle [1] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [1] [xa].sprite, x - xb, y - xb + SHOTTER1_Y_ADJUST); } break; case ENEMY_ZAPPER1: draw_rle_sprite(display [w], eRLE_big [L_ENEMY_ZAPPER1], x - 44, y - 34); circlefill(display [w], x, y, 15, COL_DRED); circle(display [w], x, y, 15, COL_OUTLINE); xa = enemy[w][e].angle1; circlefill(display [w], x + xpart(xa, 14), y + ypart(xa, 14), 3, COL_LRED); circle(display [w], x + xpart(xa, 14), y + ypart(xa, 14), 3, COL_OUTLINE); xa = 5 + grand(3); xb = explode_rle [0] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [0] [xa].sprite, x - 33 - xb, y - xb); draw_trans_rle_sprite(display[w], explode_rle [0] [xa].sprite, x + 33 - xb, y - xb); /* circlefill(display [w], x - 33, y, 8, COL_DRED); circle(display [w], x - 33, y, 8, COL_OUTLINE); xa = enemy[w][e].angle2); circlefill(display [w], x - 33 + xpart(xa, 9), y + ypart(xa, 9), 3, COL_LRED); circle(display [w], x - 33 + xpart(xa, 9), y + ypart(xa, 9), 3, COL_OUTLINE); circlefill(display [w], x + 33, y, 8, COL_DRED); circle(display [w], x + 33, y, 8, COL_OUTLINE); xa = enemy[w][e].angle3); circlefill(display [w], x + 33 + xpart(xa, 9), y + ypart(xa, 9), 3, COL_LRED); circle(display [w], x + 33 + xpart(xa, 9), y + ypart(xa, 9), 3, COL_OUTLINE);*/ break; case ENEMY_DIPPER1: xa = enemy[w][e].angle2 / 5; if (xa < 0) xa = 0; if (xa > 2) xa = 2; draw_rle_sprite(display [w], eRLE_big [L_ENEMY_DIPPER1_1 + xa], x - 23, y - 19); // xa = enemy[w][e].angle1; xa = 5 + grand(3); xb = explode_rle [0] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [0] [xa].sprite, x - xb - 1 + grand(3), y - xb - 1 + grand(3)); // circlefill(display [w], x + xpart(xa, 4), y + ypart(xa, 4), 3, COL_LRED); // circle(display [w], x + xpart(xa, 4), y + ypart(xa, 4), 3, COL_OUTLINE); break; case ENEMY_DIPPER2: xa = enemy[w][e].angle2 / 5; if (xa < 0) xa = 0; if (xa > 2) xa = 2; draw_rle_sprite(display [w], eRLE_big [L_ENEMY_DIPPER2_1 + xa], x - 23, y - 19); // xa = enemy[w][e].angle1; xa = 3 + grand(3); xb = explode_rle [1] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [1] [xa].sprite, x - xb - 1 + grand(3), y - xb - 1 + grand(3)); // circlefill(display [w], x + xpart(xa, 4), y + ypart(xa, 4), 3, COL_LRED); // circle(display [w], x + xpart(xa, 4), y + ypart(xa, 4), 3, COL_OUTLINE); break; case ENEMY_CROSS: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); triangle(display[w], x + 5, y, x + 5 + xpart(enemy[w][e].angle2, 25), y + ypart(enemy[w][e].angle2, 25), x + 5 + xpart(enemy[w][e].angle3, 25), y + ypart(enemy[w][e].angle3, 25), TRANS_BLACK); triangle(display[w], x - 5, y, x - 5 - xpart(ANGLE_1 - enemy[w][e].angle2, 25), y - ypart(ANGLE_1 - enemy[w][e].angle2, 25), x - 5 - xpart(ANGLE_1 - enemy[w][e].angle3, 25), y - ypart(ANGLE_1 - enemy[w][e].angle3, 25), TRANS_BLACK); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); xa = (enemy[w][e].angle2 + ANGLE_4) / 150;//xpart(arena.counter * 32, 2) + 2; // if (xa < 0) // xa = 0; draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_CROSS_L], x - 9 - 4 + xa, y - 11); draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_CROSS_R], x + 4 - xa, y - 11); circlefill(display [w], x, y, 3, COL_DGREEN); circle(display [w], x, y, 3, COL_OUTLINE); break; case ENEMY_CROSS2: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); triangle(display[w], x + 3, y, x + 5 + xpart(enemy[w][e].angle2, 21), y + ypart(enemy[w][e].angle2, 21), x + 5 + xpart(enemy[w][e].angle3, 21), y + ypart(enemy[w][e].angle3, 21), TRANS_BLACK); triangle(display[w], x - 3, y, x - 5 - xpart(ANGLE_1 - enemy[w][e].angle2, 21), y - ypart(ANGLE_1 - enemy[w][e].angle2, 21), x - 5 - xpart(ANGLE_1 - enemy[w][e].angle3, 21), y - ypart(ANGLE_1 - enemy[w][e].angle3, 21), TRANS_BLACK); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); xa = (enemy[w][e].angle2 + ANGLE_4) / 150;//xpart(arena.counter * 32, 2) + 2; if (xa < -2) xa = -2; if (xa > 2) xa = 2; draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_CROSS2_1], x - 7 + xa, y + 2); draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_CROSS2_2], x - xa, y + 2); draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_CROSS2_3], x - 7, y - 8); break; case ENEMY_WINGS: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); triangle(display[w], x + 19, y - 14, x + 14 + xpart(enemy[w][e].angle2, 41), y + ypart(enemy[w][e].angle2, 41) - 14, x + 14 + xpart(enemy[w][e].angle3, 41), y + ypart(enemy[w][e].angle3, 41) - 14, TRANS_YELLOW); triangle(display[w], x + 19, y - 14, x + 14 + xpart(enemy[w][e].angle3, 41), y + ypart(enemy[w][e].angle3, 41) - 14, x + 14 + xpart(enemy[w][e].c1, 41), y + ypart(enemy[w][e].c1, 41) - 14, TRANS_LGREEN); triangle(display[w], x + 19, y - 14, x + 14 + xpart(enemy[w][e].c1, 41), y + ypart(enemy[w][e].c1, 41) - 14, x + 14 + xpart(enemy[w][e].d1, 41), y + ypart(enemy[w][e].d1, 41) - 14, TRANS_DGREEN); triangle(display[w], x - 19, y - 14, x - 14 - xpart(ANGLE_1 - enemy[w][e].angle2, 41), y - ypart(ANGLE_1 - enemy[w][e].angle2, 41) - 14, x - 14 - xpart(ANGLE_1 - enemy[w][e].angle3, 41), y - ypart(ANGLE_1 - enemy[w][e].angle3, 41) - 14, TRANS_YELLOW); triangle(display[w], x - 19, y - 14, x - 14 - xpart(ANGLE_1 - enemy[w][e].angle3, 41), y - ypart(ANGLE_1 - enemy[w][e].angle3, 41) - 14, x - 14 - xpart(ANGLE_1 - enemy[w][e].c1, 41), y - ypart(ANGLE_1 - enemy[w][e].c1, 41) - 14, TRANS_LGREEN); triangle(display[w], x - 19, y - 14, x - 14 - xpart(ANGLE_1 - enemy[w][e].c1, 41), y - ypart(ANGLE_1 - enemy[w][e].c1, 41) - 14, x - 14 - xpart(ANGLE_1 - enemy[w][e].d1, 41), y - ypart(ANGLE_1 - enemy[w][e].d1, 41) - 14, TRANS_DGREEN); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); // draw_rle_sprite(display [w], eRLE_big [L_ENEMY_WINGS], x - 20, y - 27); rectfill(display [w], x - 8, y - 12, x + 8, y - 6, COL_DRED); hline(display [2], x-8, y-13, x + 8, COL_OUTLINE); hline(display [2], x-8, y-5, x + 8, COL_OUTLINE); xa = (enemy[w][e].angle2 + ANGLE_4) / 150;//150; draw_rle_sprite(display [w], eRLE_big [L_ENEMY_WINGS_L], x - 19 - 4 + xa, y - 24); draw_rle_sprite(display [w], eRLE_big [L_ENEMY_WINGS_R], x + 4 - xa, y - 24); // circlefill(display [w], x, y - 8, 3, COL_YELLOW); // circle(display [w], x, y - 8, 3, COL_OUTLINE); break; case ENEMY_CARRIER2: circlefill(display [w], x, y, 20, COL_LGREY); circle(display [w], x, y, 20, COL_OUTLINE); for (i = 0; i < 8; i ++) { circlefill(display [w], x + xpart(enemy[w][e].angle1 + i * ANGLE_8, 21), y + ypart(enemy[w][e].angle1 + i * ANGLE_8, 21), 4, COL_WHITE); circle(display [w], x + xpart(enemy[w][e].angle1 + i * ANGLE_8, 21), y + ypart(enemy[w][e].angle1 + i * ANGLE_8, 21), 4, COL_OUTLINE); } for (i = 0; i < 4; i ++) { circlefill(display [w], x + xpart(ANGLE_1 - (enemy[w][e].angle1 + i * ANGLE_4), 9), y + ypart(ANGLE_1 - (enemy[w][e].angle1 + i * ANGLE_4), 9), 4, COL_LBLUE); circle(display [w], x + xpart(ANGLE_1 - (enemy[w][e].angle1 + i * ANGLE_4), 9), y + ypart(ANGLE_1 - (enemy[w][e].angle1 + i * ANGLE_4), 9), 4, COL_OUTLINE); } break; case ENEMY_MB2: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); ya = boss.move_time; triangle(display[w], x + 19, y - 14, x + 14 + xpart(enemy[w][e].angle2, ya), y + ypart(enemy[w][e].angle2, ya) - 14, x + 14 + xpart(boss.old_angle [1], ya), y + ypart(boss.old_angle [1], ya) - 14, TRANS_YELLOW); triangle(display[w], x + 19, y - 14, x + 14 + xpart(boss.old_angle [3], ya), y + ypart(boss.old_angle [3], ya) - 14, x + 14 + xpart(boss.old_angle [5], ya), y + ypart(boss.old_angle [5], ya) - 14, TRANS_LGREEN); triangle(display[w], x + 19, y - 14, x + 14 + xpart(boss.old_angle [7], ya), y + ypart(boss.old_angle [7], ya) - 14, x + 14 + xpart(boss.old_angle [9], ya), y + ypart(boss.old_angle [9], ya) - 14, TRANS_DGREEN); triangle(display[w], x - 19, y - 14, x - 14 - xpart(ANGLE_1 - enemy[w][e].angle2, ya), y - ypart(ANGLE_1 - enemy[w][e].angle2, ya) - 14, x - 14 - xpart(ANGLE_1 - boss.old_angle [1], ya), y - ypart(ANGLE_1 - boss.old_angle [1], ya) - 14, TRANS_YELLOW); triangle(display[w], x - 19, y - 14, x - 14 - xpart(ANGLE_1 - boss.old_angle [3], ya), y - ypart(ANGLE_1 - boss.old_angle [3], ya) - 14, x - 14 - xpart(ANGLE_1 - boss.old_angle [5], ya), y - ypart(ANGLE_1 - boss.old_angle [5], ya) - 14, TRANS_LGREEN); triangle(display[w], x - 19, y - 14, x - 14 - xpart(ANGLE_1 - boss.old_angle [7], ya), y - ypart(ANGLE_1 - boss.old_angle [7], ya) - 14, x - 14 - xpart(ANGLE_1 - boss.old_angle [9], ya), y - ypart(ANGLE_1 - boss.old_angle [9], ya) - 14, TRANS_DGREEN); /* triangle(display[w], x + 19, y - 14, x + 14 + xpart(enemy[w][e].angle2, ya), y + ypart(enemy[w][e].angle2, ya) - 14, x + 14 + xpart(enemy[w][e].angle3, ya), y + ypart(enemy[w][e].angle3, ya) - 14, TRANS_BLACK); ya -= 4; triangle(display[w], x + 19, y - 14, x + 14 + xpart(enemy[w][e].angle2 + ANGLE_8, ya), y + ypart(enemy[w][e].angle2 + ANGLE_8, ya) - 14, x + 14 + xpart(enemy[w][e].angle3 + ANGLE_8, ya), y + ypart(enemy[w][e].angle3 + ANGLE_8, ya) - 14, TRANS_BLACK); ya -= 4; triangle(display[w], x + 19, y - 14, x + 14 + xpart(enemy[w][e].angle2 + ANGLE_4, ya), y + ypart(enemy[w][e].angle2 + ANGLE_4, ya) - 14, x + 14 + xpart(enemy[w][e].angle3 + ANGLE_4, ya), y + ypart(enemy[w][e].angle3 + ANGLE_4, ya) - 14, TRANS_BLACK);*/ /* triangle(display[w], x - 19, y - 14, x - 14 - xpart(ANGLE_1 - enemy[w][e].angle2, 41), y - ypart(ANGLE_1 - enemy[w][e].angle2, 41) - 14, x - 14 - xpart(ANGLE_1 - enemy[w][e].angle3, 41), y - ypart(ANGLE_1 - enemy[w][e].angle3, 41) - 14, TRANS_YELLOW);*/ drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); xa = (enemy[w][e].angle2 + ANGLE_4) / 100; draw_rle_sprite(display [w], eRLE_big [L_ENEMY_MB2_L], x - 31 - 4 + xa, y - 35); draw_rle_sprite(display [w], eRLE_big [L_ENEMY_MB2_R], x + 5 - xa, y - 35); y -= 14; circlefill(display[w], x, y, 8, COL_LRED); circle(display[w], x, y, 8, COL_OUTLINE); // xa /= 2; for (i = 0; i < 4; i ++) { circlefill(display[w], x + xpart(ANGLE_8 + ANGLE_4 * i, 6 + xa), y + ypart(ANGLE_8 + ANGLE_4 * i, 6 + xa), 3, COL_YELLOW); circle(display[w], x + xpart(ANGLE_8 + ANGLE_4 * i, 6 + xa), y + ypart(ANGLE_8 + ANGLE_4 * i, 6 + xa), 3, COL_OUTLINE); } /* circlefill(display[w], x + 4, y + 4, 3, COL_YELLOW); circle(display[w], x + 4, y + 4, 3, COL_OUTLINE); circlefill(display[w], x + 4, y - 4, 3, COL_YELLOW); circle(display[w], x + 4, y - 4, 3, COL_OUTLINE); circlefill(display[w], x - 4, y - 4, 3, COL_YELLOW); circle(display[w], x - 4, y - 4, 3, COL_OUTLINE); circlefill(display[w], x - 4, y + 4, 3, COL_YELLOW); circle(display[w], x - 4, y + 4, 3, COL_OUTLINE);*/ drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(display[w], x + xpart(boss.spot_angle, 100), y + ypart(boss.spot_angle, 100), 3, TRANS_LRED); circle(display[w], x + xpart(boss.spot_angle, 100), y + ypart(boss.spot_angle, 100), 3, TRANS_YELLOW); circlefill(display[w], x + xpart(boss.spot_angle + ANGLE_3, 100), y + ypart(boss.spot_angle + ANGLE_3, 100), 3, TRANS_LGREEN); circle(display[w], x + xpart(boss.spot_angle + ANGLE_3, 100), y + ypart(boss.spot_angle + ANGLE_3, 100), 3, TRANS_YELLOW); circlefill(display[w], x + xpart(boss.spot_angle - ANGLE_3, 100), y + ypart(boss.spot_angle - ANGLE_3, 100), 3, TRANS_LBLUE); circle(display[w], x + xpart(boss.spot_angle - ANGLE_3, 100), y + ypart(boss.spot_angle - ANGLE_3, 100), 3, TRANS_WHITE); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); int w2 = 0; if (w == 0) w2 = 1; circlefill(display[w2], x + xpart(boss.spot_angle, 100), y + ypart(boss.spot_angle, 100), 7, TRANS_LRED); circle(display[w2], x + xpart(boss.spot_angle, 100), y + ypart(boss.spot_angle, 100), 7, TRANS_YELLOW); for (i = 0; i < 3; i ++) { circlefill(display[w2], x + xpart(boss.spot_angle, 100) + xpart(ANGLE_1 - boss.spot_angle + i * ANGLE_3, 14), y + ypart(boss.spot_angle, 100) + ypart(ANGLE_1 - boss.spot_angle + i * ANGLE_3, 14), 3, TRANS_DRED); circle(display[w2], x + xpart(boss.spot_angle, 100) + xpart(ANGLE_1 - boss.spot_angle + i * ANGLE_3, 14), y + ypart(boss.spot_angle, 100) + ypart(ANGLE_1 - boss.spot_angle + i * ANGLE_3, 14), 3, TRANS_YELLOW); } circlefill(display[w2], x + xpart(boss.spot_angle + ANGLE_3, 100), y + ypart(boss.spot_angle + ANGLE_3, 100), 7, TRANS_LGREEN); circle(display[w2], x + xpart(boss.spot_angle + ANGLE_3, 100), y + ypart(boss.spot_angle + ANGLE_3, 100), 7, TRANS_YELLOW); for (i = 0; i < 3; i ++) { circlefill(display[w2], x + xpart(boss.spot_angle + ANGLE_3, 100) + xpart(ANGLE_1 - boss.spot_angle + i * ANGLE_3, 14), y + ypart(boss.spot_angle + ANGLE_3, 100) + ypart(ANGLE_1 - boss.spot_angle + i * ANGLE_3, 14), 3, TRANS_DGREEN); circle(display[w2], x + xpart(boss.spot_angle + ANGLE_3, 100) + xpart(ANGLE_1 - boss.spot_angle + i * ANGLE_3, 14), y + ypart(boss.spot_angle + ANGLE_3, 100) + ypart(ANGLE_1 - boss.spot_angle + i * ANGLE_3, 14), 3, TRANS_YELLOW); } circlefill(display[w2], x + xpart(boss.spot_angle - ANGLE_3, 100), y + ypart(boss.spot_angle - ANGLE_3, 100), 7, TRANS_LBLUE); circle(display[w2], x + xpart(boss.spot_angle - ANGLE_3, 100), y + ypart(boss.spot_angle - ANGLE_3, 100), 7, TRANS_WHITE); for (i = 0; i < 3; i ++) { circlefill(display[w2], x + xpart(boss.spot_angle - ANGLE_3, 100) + xpart(ANGLE_1 - boss.spot_angle + i * ANGLE_3, 14), y + ypart(boss.spot_angle - ANGLE_3, 100) + ypart(ANGLE_1 - boss.spot_angle + i * ANGLE_3, 14), 3, TRANS_DBLUE); circle(display[w2], x + xpart(boss.spot_angle - ANGLE_3, 100) + xpart(ANGLE_1 - boss.spot_angle + i * ANGLE_3, 14), y + ypart(boss.spot_angle - ANGLE_3, 100) + ypart(ANGLE_1 - boss.spot_angle + i * ANGLE_3, 14), 3, TRANS_WHITE); } break; case ENEMY_BASIC1: xa = -3; if (enemy[w][e].recycle <= 30) xa += (30 - enemy[w][e].recycle) / 5; if (enemy[w][e].recycle >= 4970) xa = 3 - (5000 - enemy[w][e].recycle) / 5; // xa = xpart(arena.counter * 16, 3); draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_BASIC1_CENTRE], x - 8, y - 8); draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_BASIC1_LWING], x - 15 - xpart(0, xa), y - 11); draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_BASIC1_RWING], x - 15 + 18 + xpart(0, xa), y - 11); /* xa = xpart(arena.counter * 16, 3); draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_BASIC1_CENTRE], x - 8, y - 8); draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_BASIC1_LWING], x - 15 - xpart(0, xa), y - 11); draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_BASIC1_RWING], x - 15 + 18 + xpart(0, xa), y - 11); */ // textprintf_ex(display [w], font, x, y, TRANS_WHITE, -1, "%i %i", xa, arena.counter); /* if (enemy[w][e].x_speed > 2500) { draw_rle_sprite(display [w], eRLE_basic1 [6], x - 8, y - 8); draw_rle_sprite(display [w], eRLE_basic1 [7], x - 15 - xpart(angle1, xa), y - 12 - ypart(angle1, xa)); draw_rle_sprite(display [w], eRLE_basic1 [8], x - 15 + 18 + xpart(angle1, xa), y - 10 + ypart(angle1, xa)); textprintf_ex(display [w], font, x, y, TRANS_WHITE, -1, "%i %i", xa, arena.counter); break; } if (enemy[w][e].x_speed > 900) { draw_rle_sprite(display [w], eRLE_basic1 [3], x - 8, y - 8); draw_rle_sprite(display [w], eRLE_basic1 [4], x - 16 - xpart(angle2, xa), y - 12 - ypart(angle2, xa)); draw_rle_sprite(display [w], eRLE_basic1 [5], x - 15 + 18 + xpart(angle2, xa), y - 10 + ypart(angle2, xa)); textprintf_ex(display [w], font, x, y, TRANS_WHITE, -1, "%i %i", xa, arena.counter); break; } //xa = 0; if (enemy[w][e].x_speed < -2500) { draw_rle_sprite(display [w], eRLE_basic1 [12], x - 8, y - 8); draw_rle_sprite(display [w], eRLE_basic1 [14], x - 15 + xpart(angle1, xa), y - 10 + ypart(angle1, xa)); draw_rle_sprite(display [w], eRLE_basic1 [13], x - 15 + 18 - xpart(angle1, xa), y - 12 - ypart(angle1, xa)); textprintf_ex(display [w], font, x, y, TRANS_WHITE, -1, "%i %i", xa, arena.counter); break; } if (enemy[w][e].x_speed < -900) { draw_rle_sprite(display [w], eRLE_basic1 [9], x - 8, y - 8); draw_rle_sprite(display [w], eRLE_basic1 [11], x - 16 + xpart(angle2, xa), y - 10 + ypart(angle2, xa)); draw_rle_sprite(display [w], eRLE_basic1 [10], x - 15 + 18 - xpart(angle2, xa), y - 12 - ypart(angle2, xa)); textprintf_ex(display [w], font, x, y, TRANS_WHITE, -1, "%i %i", xa, arena.counter); break; } draw_rle_sprite(display [w], eRLE_basic1 [0], x - 8, y - 8); draw_rle_sprite(display [w], eRLE_basic1 [1], x - 15 - xpart(0, xa), y - 11); draw_rle_sprite(display [w], eRLE_basic1 [2], x - 15 + 18 + xpart(0, xa), y - 11); textprintf_ex(display [w], font, x, y, TRANS_WHITE, -1, "%i %i", xa, arena.counter); */ break; case ENEMY_BASIC2: if (enemy[w][e].x_speed > 600) { xa = 2 + grand(4); xb = explode_rle [0] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [2] [xa].sprite, x - xb - 3, y - xb + 10 - grand(2)); draw_trans_rle_sprite(display[w], explode_rle [2] [xa].sprite, x - xb + 5, y - xb + 10 - grand(2)); draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_BASIC2_5], x - 14, y - 10); break; } if (enemy[w][e].x_speed > 150) { xa = 2 + grand(4); xb = explode_rle [0] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [2] [xa].sprite, x - xb - 5, y - xb + 10 - grand(2)); draw_trans_rle_sprite(display[w], explode_rle [2] [xa].sprite, x - xb + 6, y - xb + 10 - grand(2)); draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_BASIC2_4], x - 14, y - 10); break; } if (enemy[w][e].x_speed < -600) { xa = 2 + grand(4); xb = explode_rle [0] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [2] [xa].sprite, x - xb - 4, y - xb + 10 - grand(2)); draw_trans_rle_sprite(display[w], explode_rle [2] [xa].sprite, x - xb + 4, y - xb + 10 - grand(2)); draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_BASIC2_3], x - 14, y - 10); break; } if (enemy[w][e].x_speed < -150) { xa = 2 + grand(4); xb = explode_rle [0] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [2] [xa].sprite, x - xb - 5, y - xb + 10 - grand(2)); draw_trans_rle_sprite(display[w], explode_rle [2] [xa].sprite, x - xb + 6, y - xb + 10 - grand(2)); draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_BASIC2_2], x - 14, y - 10); break; } xa = 2 + grand(4); xb = explode_rle [0] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [2] [xa].sprite, x - xb - 5, y - xb + 10 - grand(2)); draw_trans_rle_sprite(display[w], explode_rle [2] [xa].sprite, x - xb + 6, y - xb + 10 - grand(2)); draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_BASIC2_1], x - 14, y - 10); break; case ENEMY_BFIGHTER: if (enemy[w][e].x_speed > 600) { xa = 2 + grand(4); xb = explode_rle [0] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [1] [xa].sprite, x - xb - 3, y - xb + 10 - grand(2)); // xa = 2 + grand(4); // xb = explode_rle [0] [xa].x; // draw_trans_rle_sprite(display[w], explode_rle [1] [xa].sprite, x - xb - 2, y - xb + 10 - grand(2)); // draw_trans_rle_sprite(display[w], explode_rle [1] [xa].sprite, x - xb + 4, y - xb + 10 - grand(2)); draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_BFIGHTER_5], x - 9, y - 10); break; } if (enemy[w][e].x_speed > 150) { xa = 2 + grand(4); xb = explode_rle [0] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [1] [xa].sprite, x - xb - 1, y - xb + 10 - grand(2)); // xa = 2 + grand(4); // xb = explode_rle [0] [xa].x; // draw_trans_rle_sprite(display[w], explode_rle [1] [xa].sprite, x - xb - 4, y - xb + 10 - grand(2)); // draw_trans_rle_sprite(display[w], explode_rle [1] [xa].sprite, x - xb + 5, y - xb + 10 - grand(2)); draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_BFIGHTER_4], x - 9, y - 10); break; } if (enemy[w][e].x_speed < -600) { xa = 2 + grand(4); xb = explode_rle [0] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [1] [xa].sprite, x - xb + 3, y - xb + 10 - grand(2)); xa = 2 + grand(4); xb = explode_rle [0] [xa].x; // draw_trans_rle_sprite(display[w], explode_rle [1] [xa].sprite, x - xb - 3, y - xb + 10 - grand(2)); //draw_trans_rle_sprite(display[w], explode_rle [1] [xa].sprite, x - xb + 3, y - xb + 10 - grand(2)); draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_BFIGHTER_3], x - 9, y - 10); break; } if (enemy[w][e].x_speed < -150) { xa = 2 + grand(4); xb = explode_rle [0] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [1] [xa].sprite, x - xb + 1, y - xb + 10 - grand(2)); // xa = 2 + grand(4); // xb = explode_rle [0] [xa].x; // draw_trans_rle_sprite(display[w], explode_rle [1] [xa].sprite, x - xb - 4, y - xb + 10 - grand(2)); // draw_trans_rle_sprite(display[w], explode_rle [1] [xa].sprite, x - xb + 5, y - xb + 10 - grand(2)); draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_BFIGHTER_2], x - 9, y - 10); break; } xa = 2 + grand(4); xb = explode_rle [0] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [1] [xa].sprite, x - xb, y - xb + 10 - grand(2)); // xa = 2 + grand(4); // xb = explode_rle [0] [xa].x; // draw_trans_rle_sprite(display[w], explode_rle [1] [xa].sprite, x - xb - 4, y - xb + 10 - grand(2)); // draw_trans_rle_sprite(display[w], explode_rle [1] [xa].sprite, x - xb + 5, y - xb + 10 - grand(2)); draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_BFIGHTER_1], x - 9, y - 10); break; case ENEMY_BASIC3: /* xa = -3; if (enemy[w][e].recycle <= 30) xa += (30 - enemy[w][e].recycle) / 5; if (enemy[w][e].recycle >= 4970) xa = 3 - (5000 - enemy[w][e].recycle) / 5;*/ xa = xpart(arena.counter * 32, 2); draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_BASIC3], x - 13, y - 11); draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_BASIC3_LFOOT], x - 11 - xa - 2, y + 4); draw_rle_sprite(display [w], eRLE_basic1 [S_ENEMY_BASIC3_RFOOT], x + 0 + xa + 2, y + 4); break; default: circlefill(display [w], x, y, 8, COL_WHITE + enemy[w] [e].hurt_pulse); circle(display [w], x, y, 8, COL_OUTLINE); circlefill(display [w], x - 7, y + 4, 6, COL_LGREY); circle(display [w], x - 7, y + 4, 6, COL_OUTLINE); circlefill(display [w], x + 7, y + 4, 6, COL_DGREY); circle(display [w], x + 7, y + 4, 6, COL_OUTLINE); break; } // int size = eclass[enemy[w][e].type].size / 1000; // rect(display [w], x - size, y - size, x + size, y + size, TRANS_WHITE); /* case ENEMY_ATTACKER2: while (enemy[w] [e].angle1 < 0) enemy[w] [e].angle1 += ANGLE_1; xb = enemy[w] [e].angle1 / (ANGLE_1 / MEDIUM_ROTATIONS); if (xb > MEDIUM_ROTATIONS - 1) xb = MEDIUM_ROTATIONS - 1; draw_rle_sprite(display[w], eRLE_attacker [0] [0] [pole] [xb].sprite, x - eRLE_attacker [0] [0] [pole] [xb].x, y - eRLE_attacker [0] [0] [pole] [xb].y); xa = x - xpart(enemy[w] [e].angle1, enemy[w] [e].recycle / 8 - 3); ya = y - ypart(enemy[w] [e].angle1, enemy[w] [e].recycle / 8 - 3); // draw_rle_sprite(display, eRLE_attacker [0] [1] [pole] [xb], xa - 28, ya - 28); draw_rle_sprite(display [w], eRLE_attacker [1] [1] [pole] [xb].sprite, xa - eRLE_attacker [1] [1] [pole] [xb].x, ya - eRLE_attacker [1] [1] [pole] [xb].y); break; case ENEMY_ATTACKER1: while (enemy[w] [e].angle1 < 0) enemy[w] [e].angle1 += ANGLE_1; xb = enemy[w] [e].angle1 / (ANGLE_1 / MEDIUM_ROTATIONS); if (xb > MEDIUM_ROTATIONS - 1) xb = MEDIUM_ROTATIONS - 1; // draw_rle_sprite(display, eRLE_attacker [0] [0] [pole] [xb], x - 28, y - 28); draw_rle_sprite(display [w], eRLE_attacker [0] [0] [pole] [xb].sprite, x - eRLE_attacker [0] [0] [pole] [xb].x, y - eRLE_attacker [0] [0] [pole] [xb].y); xa = x - xpart(enemy[w] [e].angle1, enemy[w] [e].recycle / 8 - 3); ya = y - ypart(enemy[w] [e].angle1, enemy[w] [e].recycle / 8 - 3); // draw_rle_sprite(display, eRLE_attacker [0] [1] [pole] [xb], xa - 28, ya - 28); draw_rle_sprite(display [w], eRLE_attacker [0] [1] [pole] [xb].sprite, xa - eRLE_attacker [0] [1] [pole] [xb].x, ya - eRLE_attacker [0] [1] [pole] [xb].y); //circle(display, x, y, 9, COLOUR_1); break; case ENEMY_ATTACKER3: while (enemy[w] [e].angle1 < 0) enemy[w] [e].angle1 += ANGLE_1; xb = enemy[w] [e].angle1 / (ANGLE_1 / MEDIUM_ROTATIONS); if (xb > MEDIUM_ROTATIONS - 1) xb = MEDIUM_ROTATIONS - 1; draw_rle_sprite(display [w], eRLE_attacker [0] [0] [pole] [xb].sprite, x - eRLE_attacker [0] [0] [pole] [xb].x, y - eRLE_attacker [0] [0] [pole] [xb].y); yb = enemy[w] [e].recycle * 4; if (yb > 50) yb = 50; xa = x - xpart(enemy[w] [e].angle1, yb / 8 - 3); ya = y - ypart(enemy[w] [e].angle1, yb / 8 - 3); draw_rle_sprite(display [w], eRLE_attacker [2] [1] [pole] [xb].sprite, xa - eRLE_attacker [2] [1] [pole] [xb].x, ya - eRLE_attacker [2] [1] [pole] [xb].y); break; }*/ // textprintf_ex(display, font, enemy[e].x / GRAIN, y, TRANS_WHITE6, -1, "%i %i", enemy[e].angle1, radians_to_angle(atan2(player[0].y - enemy[e].y, player[0].x - enemy[e].x))); // textprintf_ex(display, font, enemy[e].x / GRAIN, y, TRANS_BLACK2, -1, "%i %i %i %i", enemy[e].target, enemy[e].target_time, enemy[e].max_target_time, enemy[e].x_target [enemy[e].target]); // textprintf_ex(display, font, enemy[e].x / GRAIN, enemy[e].y / GRAIN, TRANS_BLACK2, -1, "%i %i", enemy[e].target, enemy[e].target_time); // line(display, enemy[e].x / GRAIN, enemy[e].y / GRAIN, enemy[e].x_target [enemy[e].target] / GRAIN, enemy[e].y_target [enemy[e].target] / GRAIN, COLOUR_10); } void draw_pbullets(void) { int b, w; for (w =0; w < 2; w ++) { for (b = 0; b < NO_PBULLETS; b ++) { if (pbullet[w] [b].type == PBULLET_NONE) continue; draw_a_pbullet(w, b); } } for (w = 0; w < 2; w ++) { for (b = 0; b < NO_SEEKERS; b ++) { if (seeker[w][b].active == 1) draw_a_seeker(w, b); } } } void draw_a_pbullet(int w, int b) { // int col1 = TRANS_YELLOW, col2 = TRANS_DRED; int x = pbullet[w] [b].x / GRAIN; int y = pbullet[w] [b].y / GRAIN; int xa, xb, i; switch(pbullet[w][b].type) { case PBULLET_BASIC: draw_trans_rle_sprite(display[w], basic_bullet [0 + grand(2) ], x - 3, y - 2); break; case PBULLET_HEAVY: draw_trans_rle_sprite(display[w], basic_bullet [2 + (pbullet[w][b].type2 * 4) + grand(4)], x - 5, y - 4); break; case PBULLET_MULTI1: case PBULLET_MULTI2: case PBULLET_MULTI3: case PBULLET_MULTI4: case PBULLET_MULTI5: draw_trans_rle_sprite(display[w], multi_bullet [pbullet[w][b].type2] [pbullet[w][b].type - PBULLET_MULTI1], x - 17, y - 10); break; case PBULLET_TURRET: xa = 3 + grand(4); xb = explode_rle [2] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [2] [xa].sprite, x - xb, y - xb); xa = 2 + grand(4); xb = explode_rle [2] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [2] [xa].sprite, x - xb - xpart(pbullet[w][b].type2, 6), y - xb - ypart(pbullet[w][b].type2, 6)); xa = 1 + grand(4); xb = explode_rle [2] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [2] [xa].sprite, x - xb - xpart(pbullet[w][b].type2, 12), y - xb - ypart(pbullet[w][b].type2, 12)); break; case PBULLET_WHITE2: xa = 4 + grand(4); xb = explode_rle [2] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [2] [xa].sprite, x - xb, y - xb); xa = 3 + grand(4); xb = explode_rle [2] [xa].x; // draw_trans_rle_sprite(display[w], explode_rle [2] [xa], x - xb, y - xb + pbullet[w][b].type2 / 2500); draw_trans_rle_sprite(display[w], explode_rle [2] [xa].sprite, x - xb, y - xb + 8); xa = 2 + grand(4); xb = explode_rle [2] [xa].x; // draw_trans_rle_sprite(display[w], explode_rle [2] [xa], x - xb, y - xb + pbullet[w][b].type2 / 1400); draw_trans_rle_sprite(display[w], explode_rle [2] [xa].sprite, x - xb, y - xb + 16); break; case PBULLET_CIRCLE: xa = 1000 - pbullet[w][b].timeout; if (xa > 20) xa = 20; xa *= (8 + pbullet[w][b].type2); xa /= 8; // xa += grand(3); if (xa > 39) xa = 39; draw_trans_rle_sprite(display[w], green_ring [xa], x - xa, y - xa); /* xa = 1000 - pbullet[w][b].timeout; if (xa > 20) xa = 20; xa *= (8 + pbullet[w][b].type2); xa /= 8; xa += grand(3); drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circle(display[w], x, y, xa, TRANS_LGREEN); circle(display[w], x, y, xa + 1, TRANS_LGREEN); circle(display[w], x, y, xa + 2, TRANS_DGREEN); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0);*/ break; case PBULLET_GREEN2: xa = 6;//1000 - pbullet[w][b].timeout; /* if (xa > 20) xa = 20; xa *= (8 + pbullet[w][b].type2); xa /= 8; if (xa > 40) xa = 40;*/ draw_trans_rle_sprite(display[w], green_ring [xa], x - xa, y - xa); break; case PBULLET_GREEN2_VORTEX: // xa = 6 + grand(10); //draw_trans_rle_sprite(display[w], green_ring [xa], x - xa, y - xa); xa = 1; int dist = 10; if (pbullet[w][b].timeout < 10) dist = pbullet[w][b].timeout + 1; xa = 4 + grand(3); if (xa > dist) xa = dist; xb = explode_rle [2] [xa].x; int angle = pbullet[w][b].timeout * 25; if (w == 1) { angle &= 1023; angle = ANGLE_1 - angle; } for (i = 0; i < 4; i ++) { draw_trans_rle_sprite(display[w], explode_rle [1] [xa].sprite, x - xb + xpart(angle + i * ANGLE_4, dist), y - xb + ypart(angle + i * ANGLE_4, dist)); } xa = dist - grand(3); if (xa < 1) xa = 1; xb = explode_rle [2] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [1] [xa].sprite, x - xb, y - xb); angle &= 1023; angle = ANGLE_1 - angle; dist *= 2; dist -= 3; if (dist < 0) dist = 0; xa = 3 + grand(3); if (xa > dist) xa = dist + 1; xb = explode_rle [1] [xa].x; int ya, yb, angle_diff = - ANGLE_16; if (w == 1) angle_diff = ANGLE_16; for (i = 0; i < 6; i ++) { draw_trans_rle_sprite(display[w], explode_rle [1] [xa].sprite, x - xb + xpart(angle + i * ANGLE_4, dist), y - xb + ypart(angle + i * ANGLE_4, dist)); ya = xa - 1; yb = explode_rle [1] [xa].x; if (ya > 0) draw_trans_rle_sprite(display[w], explode_rle [1] [ya - 1].sprite, x - yb + xpart(angle + i * ANGLE_4 + angle_diff, dist), y - yb + ypart(angle + i * ANGLE_4 + angle_diff, dist)); } break; } } void draw_a_seeker(int w, int s) { int col1 = TRANS_YELLOW, col2 = TRANS_LRED; /* if (seeker[s].pole == POLE_BLACK) { col1 = TRANS_BLACK5; col2 = TRANS_BLACK3; }*/ // int x = (seeker[s].x - seeker[s].x_speed) / GRAIN; // int y = (seeker[s].y - seeker[s].y_speed) / GRAIN; int x = (seeker[w][s].x) / GRAIN; int y = (seeker[w][s].y) / GRAIN; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(display [w], x, y, 1 + grand(2), col1); circlefill(display [w], x, y, 3 + grand(2), col2); // circlefill(display, x + xpart(seeker[s].angle, 5), y + ypart(seeker[s].angle, 5), 3, col2); //triangle(display, x // triangle(display, x - 3, y, x + 3, y, x, y + 15, col2); // rectfill(display, x - 2, y - 2, x + 2, y + 19, col1); // rectfill(display, x - 1, y - 1, x + 1, y + 7, col2); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); //if (seeker[w][s].target != -1) // line(display[w], x, y, enemy[w][seeker[w][s].target].x / GRAIN, enemy[w][seeker[w][s].target].y / GRAIN, TRANS_LGREEN); } void draw_ebullets(void) { int b, w; for (w = 0; w < 2; w ++) { for (b = 0; b < NO_EBULLETS; b ++) { if (ebullet[w][b].type == EBULLET_NONE) continue; draw_an_ebullet(w, b); } } } void draw_an_ebullet(int w, int b) { int col [4] = {TRANS_YELLOW, TRANS_LRED, TRANS_DRED, TRANS_DDRED}; int x = ebullet[w][b].x / GRAIN; int y = ebullet[w][b].y / GRAIN; int xa, xb, ya, yb, beam_length, arc_angle; switch(ebullet[w][b].type) { case EBULLET_STAR: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); if (ebullet[w][b].status2 < 21) { xa = ebullet[w][b].status2 / 3; switch(ebullet[w][b].status) { case 1: col [1] = TRANS_LGREEN; col [2] = TRANS_DGREEN; col [3] = TRANS_DDGREEN; break; case 2: col [0] = TRANS_WHITE; col [1] = TRANS_LBLUE; col [2] = TRANS_DBLUE; col [3] = TRANS_DDBLUE; break; } switch(xa / 2) { case 0: xb = col [3]; break; case 1: xb = col [2]; break; case 2: xb = col [1]; break; case 3: xb = col [0]; break; } poly4(w, x + xpart(ebullet[w][b].angle, xa), y + ypart(ebullet[w][b].angle, xa), x + xpart(ebullet[w][b].angle + ANGLE_4, xa / 2 + 1), y + ypart(ebullet[w][b].angle + ANGLE_4, xa / 2 + 1), x - xpart(ebullet[w][b].angle, xa), y - ypart(ebullet[w][b].angle, xa), x + xpart(ebullet[w][b].angle - ANGLE_4, xa / 2 + 1), y + ypart(ebullet[w][b].angle - ANGLE_4, xa / 2 + 1), xb); } else { xb = star_bullet [ebullet[w][b].status] [ebullet[w][b].status3].x; yb = star_bullet [ebullet[w][b].status] [ebullet[w][b].status3].y; draw_trans_rle_sprite(display[w], star_bullet [ebullet[w][b].status] [ebullet[w][b].status3].sprite, x - xb, y - yb); } if (ebullet[w][b].status2 < 60) { switch(ebullet[w][b].status) { case 1: col [1] = TRANS_LGREEN; col [2] = TRANS_DGREEN; col [3] = TRANS_DDGREEN; break; case 2: col [0] = TRANS_WHITE; col [1] = TRANS_LBLUE; col [2] = TRANS_DBLUE; col [3] = TRANS_DDBLUE; break; } xa = col [1]; if (ebullet[w][b].status2 > 50) xa = col [2]; if (ebullet[w][b].status2 > 55) xa = col [3]; xb = ebullet[w][b].x2 / GRAIN; yb = ebullet[w][b].y2 / GRAIN; // pline(display[w], x - xpart(ebullet[w][b].angle, 5), y - ypart(ebullet[w][b].angle, 5), xb, yb, xa); pline(display[w], x, y, xb, yb, xa); circlefill(display[w], xb, yb, (90 - ebullet[w][b].status2) / 20, col [2]); circlefill(display[w], xb, yb, (90 - ebullet[w][b].status2) / 30, col [1]); circle(display[w], xb, yb, (90 - ebullet[w][b].status2) / 25, col [1]); } drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); // textprintf_ex(display [w], font, x, y, -1, -1, "%i", ebullet[w][b].status3); break; case EBULLET_DIAMOND: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); if (ebullet[w][b].status2 < 21) { xa = ebullet[w][b].status2 / 3; switch(ebullet[w][b].status) { case 1: col [1] = TRANS_LGREEN; col [2] = TRANS_DGREEN; col [3] = TRANS_DDGREEN; break; case 2: col [0] = TRANS_WHITE; col [1] = TRANS_LBLUE; col [2] = TRANS_DBLUE; col [3] = TRANS_DDBLUE; break; } switch(xa / 2) { case 0: xb = col [3]; break; case 1: xb = col [2]; break; case 2: xb = col [1]; break; case 3: xb = col [0]; break; } poly4(w, x + xpart(ebullet[w][b].angle, xa), y + ypart(ebullet[w][b].angle, xa), x + xpart(ebullet[w][b].angle + ANGLE_4, xa / 2 + 1), y + ypart(ebullet[w][b].angle + ANGLE_4, xa / 2 + 1), x - xpart(ebullet[w][b].angle, xa), y - ypart(ebullet[w][b].angle, xa), x + xpart(ebullet[w][b].angle - ANGLE_4, xa / 2 + 1), y + ypart(ebullet[w][b].angle - ANGLE_4, xa / 2 + 1), xb); } else { xb = diamond_bullet [ebullet[w][b].status] [ebullet[w][b].status3].x; yb = diamond_bullet [ebullet[w][b].status] [ebullet[w][b].status3].y; draw_trans_rle_sprite(display[w], diamond_bullet [ebullet[w][b].status] [ebullet[w][b].status3].sprite, x - xb, y - yb); } if (ebullet[w][b].status2 < 60) { switch(ebullet[w][b].status) { case 1: col [1] = TRANS_LGREEN; col [2] = TRANS_DGREEN; col [3] = TRANS_DDGREEN; break; case 2: col [0] = TRANS_WHITE; col [1] = TRANS_LBLUE; col [2] = TRANS_DBLUE; col [3] = TRANS_DDBLUE; break; } xa = col [1]; if (ebullet[w][b].status2 > 50) xa = col [2]; if (ebullet[w][b].status2 > 55) xa = col [3]; xb = ebullet[w][b].x2 / GRAIN; yb = ebullet[w][b].y2 / GRAIN; // pline(display[w], x - xpart(ebullet[w][b].angle, 5), y - ypart(ebullet[w][b].angle, 5), xb, yb, xa); pline(display[w], x, y, xb, yb, xa); circlefill(display[w], xb, yb, (90 - ebullet[w][b].status2) / 20, col [2]); circlefill(display[w], xb, yb, (90 - ebullet[w][b].status2) / 30, col [1]); circle(display[w], xb, yb, (90 - ebullet[w][b].status2) / 25, col [1]); } drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); // textprintf_ex(display [w], font, x, y, -1, -1, "%i", ebullet[w][b].status3); break; case EBULLET_TRIANGLE: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); if (ebullet[w][b].status2 < 21) { xa = ebullet[w][b].status2 / 3; switch(ebullet[w][b].status) { case 1: col [1] = TRANS_LGREEN; col [2] = TRANS_DGREEN; col [3] = TRANS_DDGREEN; break; case 2: col [0] = TRANS_WHITE; col [1] = TRANS_LBLUE; col [2] = TRANS_DBLUE; col [3] = TRANS_DDBLUE; break; } switch(xa / 2) { case 0: xb = col [3]; break; case 1: xb = col [2]; break; case 2: xb = col [1]; break; case 3: xb = col [0]; break; } triangle(display[w], x + xpart(ebullet[w][b].angle, xa), y + ypart(ebullet[w][b].angle, xa), x + xpart(ebullet[w][b].angle + ANGLE_4 + ANGLE_8, xa), y + ypart(ebullet[w][b].angle + ANGLE_4 + ANGLE_8, xa), x + xpart(ebullet[w][b].angle - ANGLE_4 - ANGLE_8, xa), y + ypart(ebullet[w][b].angle - ANGLE_4 - ANGLE_8, xa), xb); } else { xb = triangle_bullet [0] [ebullet[w][b].status3].x; yb = triangle_bullet [0] [ebullet[w][b].status3].y; draw_trans_rle_sprite(display[w], triangle_bullet [ebullet[w][b].status] [ebullet[w][b].status3].sprite, x - xb, y - yb); } // circlefill(display [w], x, y, 2 + grand(2), col [0]); // circlefill(display [w], x, y, 3 + grand(2), col [2]); if (ebullet[w][b].status2 < 90) { switch(ebullet[w][b].status) { case 1: col [1] = TRANS_LGREEN; col [2] = TRANS_DGREEN; col [3] = TRANS_DDGREEN; break; case 2: col [0] = TRANS_WHITE; col [1] = TRANS_LBLUE; col [2] = TRANS_DBLUE; col [3] = TRANS_DDBLUE; break; } switch((int) ebullet[w][b].status2 / 9) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: xa = col [1]; break; case 7: xa = col [1]; break; case 8: xa = col [2]; break; default: case 9: xa = col [3]; break; } xb = ebullet[w][b].x2 / GRAIN; yb = ebullet[w][b].y2 / GRAIN; pline(display[w], x - xpart(ebullet[w][b].angle, 5), y - ypart(ebullet[w][b].angle, 5), xb, yb, xa); circlefill(display[w], xb, yb, (90 - ebullet[w][b].status2) / 20, col [2]); circlefill(display[w], xb, yb, (90 - ebullet[w][b].status2) / 30, col [1]); circle(display[w], xb, yb, (90 - ebullet[w][b].status2) / 25, col [1]); } drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); // textprintf_ex(display [w], font, x, y, -1, -1, "%i", ebullet[w][b].status3); break; case EBULLET_CIRCLE: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); switch(ebullet[w][b].status) { case 1: col [1] = TRANS_LGREEN; col [2] = TRANS_DGREEN; col [3] = TRANS_DDGREEN; break; case 2: col [0] = TRANS_WHITE; col [1] = TRANS_LBLUE; col [2] = TRANS_DBLUE; col [3] = TRANS_DDBLUE; break; } if (ebullet[w][b].status2 < 21) { xa = ebullet[w][b].status2 / 3; switch(xa / 2) { case 0: xb = col [3]; break; case 1: xb = col [2]; break; case 2: xb = col [1]; break; case 3: xb = col [0]; break; } circlefill(display[w], x, y, xa, xb); } else { circlefill(display [w], x, y, 1, col [0]); circlefill(display [w], x, y, 5, col [1]); circle(display [w], x, y, 4, col [0]); } // circlefill(display [w], x, y, 2 + grand(2), col [0]); // circlefill(display [w], x, y, 3 + grand(2), col [2]); // circlefill(display [w], x, y, 2 + grand(2), col [0]); // circlefill(display [w], x, y, 3 + grand(2), col [2]); if (ebullet[w][b].status2 < 90) { switch(ebullet[w][b].status) { case 1: col [1] = TRANS_LGREEN; col [2] = TRANS_DGREEN; col [3] = TRANS_DDGREEN; break; case 2: col [0] = TRANS_WHITE; col [1] = TRANS_LBLUE; col [2] = TRANS_DBLUE; col [3] = TRANS_DDBLUE; break; } switch((int) ebullet[w][b].status2 / 9) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: xa = col [1]; break; case 7: xa = col [1]; break; case 8: xa = col [2]; break; default: case 9: xa = col [3]; break; } xb = ebullet[w][b].x2 / GRAIN; yb = ebullet[w][b].y2 / GRAIN; pline(display[w], x - xpart(ebullet[w][b].angle, 5), y - ypart(ebullet[w][b].angle, 5), xb, yb, xa); circlefill(display[w], xb, yb, (90 - ebullet[w][b].status2) / 20, col [2]); circlefill(display[w], xb, yb, (90 - ebullet[w][b].status2) / 30, col [1]); circle(display[w], xb, yb, (90 - ebullet[w][b].status2) / 25, col [1]); } drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); // textprintf_ex(display [w], font, x, y, -1, -1, "%i", ebullet[w][b].status3); break; case EBULLET_SHOT: switch(ebullet[w][b].status) { case 1: col [1] = TRANS_DGREEN; col [2] = TRANS_DGREEN; col [3] = TRANS_DGREEN; break; case 2: col [0] = TRANS_WHITE; col [1] = TRANS_LBLUE; col [2] = TRANS_DBLUE; col [3] = TRANS_DDBLUE; break; } drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(display [w], x, y, 2 + grand(2), col [0]); circlefill(display [w], x, y, 3 + grand(2), col [1]); circlefill(display [w], x, y, 3 + grand(3), col [3]); circlefill(display [w], x - xpart(ebullet[w][b].angle, 4), y - ypart(ebullet[w][b].angle, 4), 1 + grand(3), col [0]); circlefill(display [w], x - xpart(ebullet[w][b].angle, 4), y - ypart(ebullet[w][b].angle, 4), 2 + grand(3), col [1]); circlefill(display [w], x - xpart(ebullet[w][b].angle, 4), y - ypart(ebullet[w][b].angle, 4), 2 + grand(3), col [3]); circlefill(display [w], x - xpart(ebullet[w][b].angle, 8), y - ypart(ebullet[w][b].angle, 8), 2 + grand(2), col [1]); circlefill(display [w], x - xpart(ebullet[w][b].angle, 8), y - ypart(ebullet[w][b].angle, 8), 1 + grand(2), col [3]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case EBULLET_FAT_SHOT: switch(ebullet[w][b].status) { case 1: col [1] = TRANS_DGREEN; col [2] = TRANS_DGREEN; col [3] = TRANS_DGREEN; break; case 2: col [0] = TRANS_WHITE; col [1] = TRANS_LBLUE; col [2] = TRANS_DBLUE; col [3] = TRANS_DDBLUE; break; } drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(display [w], x, y, 3 + grand(2), col [0]); circlefill(display [w], x, y, 4 + grand(2), col [1]); circlefill(display [w], x, y, 4 + grand(3), col [3]); circlefill(display [w], x - xpart(ebullet[w][b].angle, 6), y - ypart(ebullet[w][b].angle, 6), 1 + grand(3), col [0]); circlefill(display [w], x - xpart(ebullet[w][b].angle, 6), y - ypart(ebullet[w][b].angle, 6), 2 + grand(3), col [1]); circlefill(display [w], x - xpart(ebullet[w][b].angle, 6), y - ypart(ebullet[w][b].angle, 6), 2 + grand(3), col [3]); circlefill(display [w], x - xpart(ebullet[w][b].angle, 10), y - ypart(ebullet[w][b].angle, 10), 2 + grand(2), col [1]); circlefill(display [w], x - xpart(ebullet[w][b].angle, 10), y - ypart(ebullet[w][b].angle, 10), 1 + grand(2), col [3]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case EBULLET_FATTER_SHOT: switch(ebullet[w][b].status) { case 1: col [1] = TRANS_DGREEN; col [2] = TRANS_DGREEN; col [3] = TRANS_DGREEN; break; case 2: col [0] = TRANS_WHITE; col [1] = TRANS_LBLUE; col [2] = TRANS_DBLUE; col [3] = TRANS_DDBLUE; break; } drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(display [w], x, y, 4 + grand(2), col [0]); circlefill(display [w], x, y, 5 + grand(2), col [1]); circlefill(display [w], x, y, 6 + grand(3), col [3]); circlefill(display [w], x - xpart(ebullet[w][b].angle, 8), y - ypart(ebullet[w][b].angle, 8), 2 + grand(3), col [1]); circlefill(display [w], x - xpart(ebullet[w][b].angle, 8), y - ypart(ebullet[w][b].angle, 8), 3 + grand(3), col [2]); circlefill(display [w], x - xpart(ebullet[w][b].angle, 8), y - ypart(ebullet[w][b].angle, 8), 3 + grand(3), col [3]); circlefill(display [w], x - xpart(ebullet[w][b].angle, 12), y - ypart(ebullet[w][b].angle, 12), 3 + grand(2), col [2]); circlefill(display [w], x - xpart(ebullet[w][b].angle, 12), y - ypart(ebullet[w][b].angle, 12), 2 + grand(2), col [3]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case EBULLET_SPIN: switch(ebullet[w][b].status) { case 1: col [1] = TRANS_LGREEN; col [2] = TRANS_DGREEN; col [3] = TRANS_DDGREEN; break; case 2: col [0] = TRANS_WHITE; col [1] = TRANS_LBLUE; col [2] = TRANS_DBLUE; col [3] = TRANS_DDBLUE; break; } drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(display[w], x, y, 1 + grand(3), col [0]); circlefill(display[w], x, y, 2 + grand(3), col [1]); circlefill(display[w], x, y, 4 + grand(2), col [3]); circlefill(display[w], x - xpart(ebullet[w][b].angle, 5), y - ypart(ebullet[w][b].angle, 4), 1 + grand(2), col [0]); circlefill(display[w], x - xpart(ebullet[w][b].angle, 5), y - ypart(ebullet[w][b].angle, 4), 2 + grand(2), col [1]); circlefill(display[w], x - xpart(ebullet[w][b].angle + ANGLE_2, 5), y - ypart(ebullet[w][b].angle + ANGLE_2, 4), 1 + grand(2), col [0]); circlefill(display[w], x - xpart(ebullet[w][b].angle + ANGLE_2, 5), y - ypart(ebullet[w][b].angle + ANGLE_2, 4), 2 + grand(2), col [1]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case EBULLET_SHOT2: xa = 8 + grand(4); xb = explode_rle [ebullet[w][b].status] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [ebullet[w][b].status] [xa].sprite, x - xb, y - xb); /* switch(ebullet[w][b].status) { case 1: col [1] = TRANS_DGREEN; col [2] = TRANS_DGREEN; col [3] = TRANS_DGREEN; break; } drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(display [w], x, y, 5 + grand(4), col [0]); circlefill(display [w], x, y, 7 + grand(3), col [1]); circlefill(display [w], x, y, 8 + grand(3), col [3]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0);*/ break; case EBULLET_SHOT3: xa = 5 + grand(3); xb = explode_rle [ebullet[w][b].status] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [ebullet[w][b].status] [xa].sprite, x - xb, y - xb); /* xa = 3 + grand(3); xb = (explode_rle [ebullet[w][b].status] [xa]->w) / 2; draw_trans_rle_sprite(display[w], explode_rle [ebullet[w][b].status] [xa], x - xb - xpart(ebullet[w][b].angle, 5), y - xb - ypart(ebullet[w][b].angle, 5));*/ break; case EBULLET_BEAM1: switch(ebullet[w][b].status2) { case 1: col [1] = TRANS_LGREEN; col [2] = TRANS_DGREEN; col [3] = TRANS_DDGREEN; break; } drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); beam_length = 500; while(beam_length > 0) { if (x + xpart(ebullet[w][b].angle, beam_length) > -5 && y + ypart(ebullet[w][b].angle, beam_length) > -5 && x + xpart(ebullet[w][b].angle, beam_length) < 330 && y + ypart(ebullet[w][b].angle, beam_length) < 490) { beam_length += 50; break; } beam_length -= 50; } if (beam_length <= 0) break; /* if (w == 0) circle(display[2], x + xpart(ebullet[w][b].angle, beam_length), y + ypart(ebullet[w][b].angle, beam_length), 100, COL_WHITE); if (w == 1) circle(display[2], x - 320 + xpart(ebullet[w][b].angle, beam_length), y + ypart(ebullet[w][b].angle, beam_length), 100, COL_WHITE);*/ xa = 12 + grand(4); if (ebullet[w][b].status > 240) xa = (300 - ebullet[w][b].status) / 7 + 2 + grand(4); if (ebullet[w][b].status < 30) xa = ebullet[w][b].status / 4 + 2 + grand(4); // xa /= 3; // xa *= 2; if (xa < 0) xa = 0; if (xa > 39) xa = 39; xb = 0; xb = ebullet[w][b].status2; ya = explode_rle [xb] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [xb] [xa].sprite, x - ya, y - ya); /* if (ebullet[w][b].status2 != -1) { beam_length = ebullet[w][b].status2 / GRAIN; xa = 14 + grand(5); ya = (explode_rle [xb] [xa]->w) / 2; draw_trans_rle_sprite(display, explode_rle [xb] [xa], x - ya + xpart(ebullet[w][b].angle, beam_length), y - ya + ypart(ebullet[w][b].angle, beam_length)); if (arena.counter % 15 == 0) create_cloud(w, CLOUD_SHOCKWAVE, 0, (x + xpart(ebullet[w][b].angle, beam_length)) * GRAIN, (y + ypart(ebullet[w][b].angle, beam_length)) * GRAIN, 0, 0, 20); // THIS IS REALLY WRONG AND SHOULDN'T BE HERE! // HACK HACK HACK // Remember to make sure it's placed even when not all bullets are drawn }*/ // if (ebullet[w][b].status > 200) //ebullet[w][b].angle += grand(3) - grand(3); xa = x + xpart(ebullet[w][b].angle, beam_length); ya = y + ypart(ebullet[w][b].angle, beam_length); if (ebullet[w][b].status < 30) { /* arc_angle = (ebullet[w][b].status) / 4 + 1; if (arc_angle > 8) arc_angle = 8; arc_angle += grand(2); poly4(w, x + xpart(ebullet[w][b].angle + ANGLE_4, arc_angle), y + ypart(ebullet[w][b].angle + ANGLE_4, arc_angle), x + xpart(ebullet[w][b].angle - ANGLE_4, arc_angle), y + ypart(ebullet[w][b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[w][b].angle - ANGLE_4, arc_angle), ya + ypart(ebullet[w][b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[w][b].angle + ANGLE_4, arc_angle), ya + ypart(ebullet[w][b].angle + ANGLE_4, arc_angle), col [4]);*/ int wcol = 1; if (ebullet[w][b].status < 27) wcol = 2; if (ebullet[w][b].status < 19) wcol = 3; arc_angle = ebullet[w][b].status / 5; if (arc_angle > 6) arc_angle = 6; // arc_angle += grand(2); poly4(w, x + xpart(ebullet[w][b].angle + ANGLE_4, arc_angle), y + ypart(ebullet[w][b].angle + ANGLE_4, arc_angle), x + xpart(ebullet[w][b].angle - ANGLE_4, arc_angle), y + ypart(ebullet[w][b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[w][b].angle - ANGLE_4, arc_angle), ya + ypart(ebullet[w][b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[w][b].angle + ANGLE_4, arc_angle), ya + ypart(ebullet[w][b].angle + ANGLE_4, arc_angle), col [wcol]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; } { arc_angle = (300 - ebullet[w][b].status) / 15 + 2; if (arc_angle > 7) arc_angle = 7; // arc_angle += grand(2); xa = x + xpart(ebullet[w][b].angle, beam_length); ya = y + ypart(ebullet[w][b].angle, beam_length); poly4(w, x + xpart(ebullet[w][b].angle + ANGLE_4, arc_angle), y + ypart(ebullet[w][b].angle + ANGLE_4, arc_angle), x + xpart(ebullet[w][b].angle - ANGLE_4, arc_angle), y + ypart(ebullet[w][b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[w][b].angle - ANGLE_4, arc_angle), ya + ypart(ebullet[w][b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[w][b].angle + ANGLE_4, arc_angle), ya + ypart(ebullet[w][b].angle + ANGLE_4, arc_angle), col [3]); } /* if (ebullet[w][b].status < 270) { arc_angle = (270 - ebullet[w][b].status) / 15 + 2; if (arc_angle > 8) arc_angle = 8; arc_angle += grand(2); poly4(w, x + xpart(ebullet[w][b].angle + ANGLE_4, arc_angle), y + ypart(ebullet[w][b].angle + ANGLE_4, arc_angle), x + xpart(ebullet[w][b].angle - ANGLE_4, arc_angle), y + ypart(ebullet[w][b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[w][b].angle - ANGLE_4, arc_angle), ya + ypart(ebullet[w][b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[w][b].angle + ANGLE_4, arc_angle), ya + ypart(ebullet[w][b].angle + ANGLE_4, arc_angle), col [4]); }*/ if (ebullet[w][b].status < 240) { arc_angle = (240 - ebullet[w][b].status) / 15 + 2; if (arc_angle > 7) arc_angle = 7; // arc_angle += grand(2); poly4(w, x + xpart(ebullet[w][b].angle + ANGLE_4, arc_angle), y + ypart(ebullet[w][b].angle + ANGLE_4, arc_angle), x + xpart(ebullet[w][b].angle - ANGLE_4, arc_angle), y + ypart(ebullet[w][b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[w][b].angle - ANGLE_4, arc_angle), ya + ypart(ebullet[w][b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[w][b].angle + ANGLE_4, arc_angle), ya + ypart(ebullet[w][b].angle + ANGLE_4, arc_angle), col [3]); } if (ebullet[w][b].status < 210) { arc_angle = (210 - ebullet[w][b].status) / 15 + 2; if (arc_angle > 6) arc_angle = 6; // arc_angle += grand(2); poly4(w, x + xpart(ebullet[w][b].angle + ANGLE_4, arc_angle), y + ypart(ebullet[w][b].angle + ANGLE_4, arc_angle), x + xpart(ebullet[w][b].angle - ANGLE_4, arc_angle), y + ypart(ebullet[w][b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[w][b].angle - ANGLE_4, arc_angle), ya + ypart(ebullet[w][b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[w][b].angle + ANGLE_4, arc_angle), ya + ypart(ebullet[w][b].angle + ANGLE_4, arc_angle), col [2]); } if (ebullet[w][b].status < 180) { arc_angle = (180 - ebullet[w][b].status) / 15 + 2; if (arc_angle > 5) arc_angle = 5; arc_angle += grand(2); poly4(w, x + xpart(ebullet[w][b].angle + ANGLE_4, arc_angle), y + ypart(ebullet[w][b].angle + ANGLE_4, arc_angle), x + xpart(ebullet[w][b].angle - ANGLE_4, arc_angle), y + ypart(ebullet[w][b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[w][b].angle - ANGLE_4, arc_angle), ya + ypart(ebullet[w][b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[w][b].angle + ANGLE_4, arc_angle), ya + ypart(ebullet[w][b].angle + ANGLE_4, arc_angle), col [1]); } if (ebullet[w][b].status < 150) { arc_angle = (150 - ebullet[w][b].status) / 15 + 2; if (arc_angle > 3) arc_angle = 3; // arc_angle += grand(2); poly4(w, x + xpart(ebullet[w][b].angle + ANGLE_4, arc_angle), y + ypart(ebullet[w][b].angle + ANGLE_4, arc_angle), x + xpart(ebullet[w][b].angle - ANGLE_4, arc_angle), y + ypart(ebullet[w][b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[w][b].angle - ANGLE_4, arc_angle), ya + ypart(ebullet[w][b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[w][b].angle + ANGLE_4, arc_angle), ya + ypart(ebullet[w][b].angle + ANGLE_4, arc_angle), col [0]); } // textprintf_ex(display, font, x, y - 20, COLOUR_11, -1, "%i", radians_to_angle(atan2((player[0].y / GRAIN - y), (player[0].x / GRAIN - x)))); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; /*switch(ebullet[w][b].status) { case 1: col [1] = TRANS_DGREEN; col [2] = TRANS_DGREEN; col [3] = TRANS_DGREEN; break; } drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(display[w], x, y, 2 + grand(2), col [0]); circlefill(display[w], x, y, 3 + grand(2), col [1]); circlefill(display[w], x, y, 3 + grand(3), col [2]); circlefill(display[w], x - xpart(ebullet[w][b].angle, 5), y - ypart(ebullet[w][b].angle, 6), 2 + grand(2), col [0]); circlefill(display[w], x - xpart(ebullet[w][b].angle, 5), y - ypart(ebullet[w][b].angle, 6), 3 + grand(2), col [1]); circlefill(display[w], x - xpart(ebullet[w][b].angle, 5), y - ypart(ebullet[w][b].angle, 6), 3 + grand(2), col [2]); circlefill(display[w], x - xpart(ebullet[w][b].angle, 10), y - ypart(ebullet[w][b].angle, 12), 1 + grand(2), col [0]); circlefill(display[w], x - xpart(ebullet[w][b].angle, 10), y - ypart(ebullet[w][b].angle, 12), 2 + grand(2), col [1]); circlefill(display[w], x - xpart(ebullet[w][b].angle, 10), y - ypart(ebullet[w][b].angle, 12), 2 + grand(2), col [2]); circlefill(display[w], x - xpart(ebullet[w][b].angle, 13), y - ypart(ebullet[w][b].angle, 17), 1 + grand(3), col [1]); circlefill(display[w], x - xpart(ebullet[w][b].angle, 13), y - ypart(ebullet[w][b].angle, 17), 1 + grand(3), col [2]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0);*/ break; } /* int col [6] = {TRANS_WHITE6, TRANS_WHITE5, TRANS_WHITE4, TRANS_WHITE3, TRANS_WHITE2, TRANS_WHITE1}; if (ebullet[b].pole == POLE_BLACK) { col [0] = TRANS_BLACK6; col [1] = TRANS_BLACK5; col [2] = TRANS_BLACK4; col [3] = TRANS_BLACK3; col [4] = TRANS_BLACK2; col [5] = TRANS_BLACK1; } int x = ebullet[b].x / GRAIN; int y = ebullet[b].y / GRAIN; int xb, xa, ya, arc_angle, beam_length; switch(ebullet[b].type) { case EBULLET_BEAM1: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); beam_length = 500; xa = 12 + grand(4); if (ebullet[b].status > 240) xa = (300 - ebullet[b].status) / 7 + 2 + grand(4); if (ebullet[b].status < 30) xa = ebullet[b].status / 4 + 2 + grand(4); xa /= 3; xa *= 2; if (xa < 0) xa = 0; if (xa > 39) xa = 39; xb = 0; if (ebullet[b].pole == POLE_BLACK) xb = 1; if (ebullet[b].pole == POLE_NONE) xb = 2; ya = (explode_rle [xb] [xa]->w) / 2; draw_trans_rle_sprite(display[w], explode_rle [xb] [xa], x - ya, y - ya); if (ebullet[b].status2 != -1) { beam_length = ebullet[b].status2 / GRAIN; xa = 14 + grand(5); ya = (explode_rle [xb] [xa]->w) / 2; draw_trans_rle_sprite(display, explode_rle [xb] [xa], x - ya + xpart(ebullet[b].angle, beam_length), y - ya + ypart(ebullet[b].angle, beam_length)); if (arena.counter % 15 == 0) create_cloud(CLOUD_SHOCKWAVE, ebullet[b].pole, (x + xpart(ebullet[b].angle, beam_length)) * GRAIN, (y + ypart(ebullet[b].angle, beam_length)) * GRAIN, 0, 0, 20); // THIS IS REALLY WRONG AND SHOULDN'T BE HERE! // HACK HACK HACK // Remember to make sure it's placed even when not all bullets are drawn } // if (ebullet[b].status > 200) ebullet[b].angle += grand(3) - grand(3); xa = x + xpart(ebullet[b].angle, beam_length); ya = y + ypart(ebullet[b].angle, beam_length); if (ebullet[b].status < 30) { arc_angle = (ebullet[b].status) / 4 + 1; if (arc_angle > 8) arc_angle = 8; arc_angle += grand(2); poly4(x + xpart(ebullet[b].angle + ANGLE_4, arc_angle), y + ypart(ebullet[b].angle + ANGLE_4, arc_angle), x + xpart(ebullet[b].angle - ANGLE_4, arc_angle), y + ypart(ebullet[b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[b].angle - ANGLE_4, arc_angle), ya + ypart(ebullet[b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[b].angle + ANGLE_4, arc_angle), ya + ypart(ebullet[b].angle + ANGLE_4, arc_angle), col [5]); arc_angle = ebullet[b].status / 5; if (arc_angle > 6) arc_angle = 6; arc_angle += grand(2); poly4(x + xpart(ebullet[b].angle + ANGLE_4, arc_angle), y + ypart(ebullet[b].angle + ANGLE_4, arc_angle), x + xpart(ebullet[b].angle - ANGLE_4, arc_angle), y + ypart(ebullet[b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[b].angle - ANGLE_4, arc_angle), ya + ypart(ebullet[b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[b].angle + ANGLE_4, arc_angle), ya + ypart(ebullet[b].angle + ANGLE_4, arc_angle), col [3]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; } { arc_angle = (300 - ebullet[b].status) / 15 + 2; if (arc_angle > 7) arc_angle = 7; arc_angle += grand(2); xa = x + xpart(ebullet[b].angle, beam_length); ya = y + ypart(ebullet[b].angle, beam_length); poly4(x + xpart(ebullet[b].angle + ANGLE_4, arc_angle), y + ypart(ebullet[b].angle + ANGLE_4, arc_angle), x + xpart(ebullet[b].angle - ANGLE_4, arc_angle), y + ypart(ebullet[b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[b].angle - ANGLE_4, arc_angle), ya + ypart(ebullet[b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[b].angle + ANGLE_4, arc_angle), ya + ypart(ebullet[b].angle + ANGLE_4, arc_angle), col [5]); } if (ebullet[b].status < 270) { arc_angle = (270 - ebullet[b].status) / 15 + 2; if (arc_angle > 8) arc_angle = 8; arc_angle += grand(2); poly4(x + xpart(ebullet[b].angle + ANGLE_4, arc_angle), y + ypart(ebullet[b].angle + ANGLE_4, arc_angle), x + xpart(ebullet[b].angle - ANGLE_4, arc_angle), y + ypart(ebullet[b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[b].angle - ANGLE_4, arc_angle), ya + ypart(ebullet[b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[b].angle + ANGLE_4, arc_angle), ya + ypart(ebullet[b].angle + ANGLE_4, arc_angle), col [4]); } if (ebullet[b].status < 240) { arc_angle = (240 - ebullet[b].status) / 15 + 2; if (arc_angle > 7) arc_angle = 7; arc_angle += grand(2); poly4(x + xpart(ebullet[b].angle + ANGLE_4, arc_angle), y + ypart(ebullet[b].angle + ANGLE_4, arc_angle), x + xpart(ebullet[b].angle - ANGLE_4, arc_angle), y + ypart(ebullet[b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[b].angle - ANGLE_4, arc_angle), ya + ypart(ebullet[b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[b].angle + ANGLE_4, arc_angle), ya + ypart(ebullet[b].angle + ANGLE_4, arc_angle), col [3]); } if (ebullet[b].status < 210) { arc_angle = (210 - ebullet[b].status) / 15 + 2; if (arc_angle > 6) arc_angle = 6; arc_angle += grand(2); poly4(x + xpart(ebullet[b].angle + ANGLE_4, arc_angle), y + ypart(ebullet[b].angle + ANGLE_4, arc_angle), x + xpart(ebullet[b].angle - ANGLE_4, arc_angle), y + ypart(ebullet[b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[b].angle - ANGLE_4, arc_angle), ya + ypart(ebullet[b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[b].angle + ANGLE_4, arc_angle), ya + ypart(ebullet[b].angle + ANGLE_4, arc_angle), col [2]); } if (ebullet[b].status < 180) { arc_angle = (180 - ebullet[b].status) / 15 + 2; if (arc_angle > 3) arc_angle = 3; arc_angle += grand(2); poly4(x + xpart(ebullet[b].angle + ANGLE_4, arc_angle), y + ypart(ebullet[b].angle + ANGLE_4, arc_angle), x + xpart(ebullet[b].angle - ANGLE_4, arc_angle), y + ypart(ebullet[b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[b].angle - ANGLE_4, arc_angle), ya + ypart(ebullet[b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[b].angle + ANGLE_4, arc_angle), ya + ypart(ebullet[b].angle + ANGLE_4, arc_angle), col [1]); } if (ebullet[b].status < 150) { arc_angle = (150 - ebullet[b].status) / 15 + 2; if (arc_angle > 2) arc_angle = 2; arc_angle += grand(2); poly4(x + xpart(ebullet[b].angle + ANGLE_4, arc_angle), y + ypart(ebullet[b].angle + ANGLE_4, arc_angle), x + xpart(ebullet[b].angle - ANGLE_4, arc_angle), y + ypart(ebullet[b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[b].angle - ANGLE_4, arc_angle), ya + ypart(ebullet[b].angle - ANGLE_4, arc_angle), xa + xpart(ebullet[b].angle + ANGLE_4, arc_angle), ya + ypart(ebullet[b].angle + ANGLE_4, arc_angle), col [0]); } // textprintf_ex(display, font, x, y - 20, COLOUR_11, -1, "%i", radians_to_angle(atan2((player[0].y / GRAIN - y), (player[0].x / GRAIN - x)))); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case EBULLET_SHOT: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(display, x, y, 2 + grand(2), col [0]); circlefill(display, x, y, 3 + grand(2), col [3]); circlefill(display, x, y, 3 + grand(3), col [5]); circlefill(display, x - xpart(ebullet[b].angle, 4), y - ypart(ebullet[b].angle, 4), 1 + grand(3), col [0]); circlefill(display, x - xpart(ebullet[b].angle, 4), y - ypart(ebullet[b].angle, 4), 2 + grand(3), col [3]); circlefill(display, x - xpart(ebullet[b].angle, 4), y - ypart(ebullet[b].angle, 4), 2 + grand(3), col [5]); circlefill(display, x - xpart(ebullet[b].angle, 8), y - ypart(ebullet[b].angle, 8), 2 + grand(2), col [3]); circlefill(display, x - xpart(ebullet[b].angle, 8), y - ypart(ebullet[b].angle, 8), 1 + grand(2), col [5]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case EBULLET_SHOT2: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(display, x, y, 3 + grand(2), col [0]); circlefill(display, x, y, 4 + grand(2), col [3]); circlefill(display, x, y, 4 + grand(3), col [5]); circlefill(display, x - xpart(ebullet[b].angle, 6), y - ypart(ebullet[b].angle, 6), 2 + grand(3), col [1]); circlefill(display, x - xpart(ebullet[b].angle, 6), y - ypart(ebullet[b].angle, 6), 3 + grand(3), col [4]); circlefill(display, x - xpart(ebullet[b].angle, 6), y - ypart(ebullet[b].angle, 6), 3 + grand(3), col [5]); circlefill(display, x - xpart(ebullet[b].angle, 12), y - ypart(ebullet[b].angle, 12), 1 + grand(2), col [1]); circlefill(display, x - xpart(ebullet[b].angle, 12), y - ypart(ebullet[b].angle, 12), 2 + grand(3), col [4]); circlefill(display, x - xpart(ebullet[b].angle, 12), y - ypart(ebullet[b].angle, 12), 2 + grand(3), col [5]); circlefill(display, x - xpart(ebullet[b].angle, 17), y - ypart(ebullet[b].angle, 17), 1 + grand(3), col [4]); circlefill(display, x - xpart(ebullet[b].angle, 17), y - ypart(ebullet[b].angle, 17), 1 + grand(3), col [5]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case EBULLET_BALL: // textprintf_ex(display, font, x, y, COLOUR_11, -1, "%i", which_bullet); // draw_rle_sprite(display, straight_bullet [0], x - 6, y - 6); drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(display, x, y, 2 + grand(2), col [0]); circlefill(display, x, y, 3 + grand(2), col [3]); circlefill(display, x, y, 3 + grand(3), col [5]); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case EBULLET_SPIN: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); circlefill(display, x, y, 2 + grand(3), col [0]); circlefill(display, x, y, 2 + grand(3), col [3]); circlefill(display, x, y, 4 + grand(2), col [4]); circlefill(display, x - xpart(ebullet[b].angle, 5), y - ypart(ebullet[b].angle, 4), 1 + grand(2), col [0]); circlefill(display, x - xpart(ebullet[b].angle, 5), y - ypart(ebullet[b].angle, 4), 2 + grand(2), col [3]); // circlefill(display, x - xpart(ebullet[b].angle + ANGLE_2, 4), y - ypart(ebullet[b].angle + ANGLE_2, 4), 1 + grand(3), col); circlefill(display, x - xpart(ebullet[b].angle + ANGLE_2, 5), y - ypart(ebullet[b].angle + ANGLE_2, 4), 1 + grand(2), col [0]); circlefill(display, x - xpart(ebullet[b].angle + ANGLE_2, 5), y - ypart(ebullet[b].angle + ANGLE_2, 4), 2 + grand(2), col [3]); // circlefill(display, x - xpart(ebullet[b].angle, 8), y - ypart(ebullet[b].angle, 8), 2 + grand(2), col2); // circlefill(display, x - xpart(ebullet[b].angle, 8), y - ypart(ebullet[b].angle, 8), 1 + grand(2), col3); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; } */ } void draw_pickups(void) { drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); int p, w, x, y, size1, size2, col1, col2, col3, col4, i; // int col [4] = {TRANS_YELLOW, TRANS_LRED, TRANS_DRED, TRANS_DDRED}; int col [4] = {TRANS_WHITE, TRANS_YELLOW, TRANS_LRED, TRANS_DRED}; int angle = arena.counter * 32; angle *= -1; angle &= 1023; int xa, xb; int bsize1 = arena.counter % 16; int bsize2 = (arena.counter + 8) % 16; size1 = arena.counter % 16; size2 = (arena.counter + 8) % 16; // size1 = (arena.counter / 8) % 16; size2 = ((arena.counter / 8) + 8) % 16; //bsize1 = (arena.counter / 8) % 16; bsize2 = ((arena.counter / 8) + 8) % 16; col1 = size1 - 6; col2 = size1 - 12; if (size1 < 6) { col1 = 0; } if (size1 < 12) { col2 = 0; } col3 = size2 - 6; col4 = size2 - 12; if (size2 < 6) { col3 = 0; } if (size2 < 12) { col4 = 0; } for (w = 0; w < 2; w ++) { angle *= -1; angle &= 1023; for (p = 0; p < NO_PICKUPS; p ++) { if (pickup[w][p].exists == 0) continue; x = pickup[w][p].x / GRAIN; y = pickup[w][p].y / GRAIN; size1 = bsize1; size2 = bsize2; switch(pickup[w][p].colour) { /* case WPN_RED: col [0] = TRANS_YELLOW; col [1] = TRANS_LRED; col [2] = TRANS_DRED; col [3] = TRANS_DDRED; size1 += 5; size2 += 5; if (col1 == 0) col1 = 1; if (col3 == 0) col3 = 1; if (col1 < 4 && col1 >= 0) { triangle(display[w], x + xpart(angle - ANGLE_4, size1), y + ypart(angle - ANGLE_4, size1), x + xpart(angle + ANGLE_16, size1), y + ypart(angle + ANGLE_16, size1), x + xpart(angle + ANGLE_2 - ANGLE_16, size1), y + ypart(angle + ANGLE_2 - ANGLE_16, size1), col [col1]); } if (col2 < 4 && col2 >= 0) { pline(display[w], x + xpart(angle - ANGLE_4, size1), y + ypart(angle - ANGLE_4, size1), x + xpart(angle + ANGLE_16, size1), y + ypart(angle + ANGLE_16, size1), col [col2]); pline(display[w], x + xpart(angle + ANGLE_16, size1), y + ypart(angle + ANGLE_16, size1), x + xpart(angle + ANGLE_2 - ANGLE_16, size1), y + ypart(angle + ANGLE_2 - ANGLE_16, size1), col [col2]); pline(display[w], x + xpart(angle + ANGLE_2 - ANGLE_16, size1), y + ypart(angle + ANGLE_2 - ANGLE_16, size1), x + xpart(angle - ANGLE_4, size1), y + ypart(angle - ANGLE_4, size1), col [col2]); } if (col3 < 4 && col3 >= 0) triangle(display[w], x + xpart(angle - ANGLE_4, size2), y + ypart(angle - ANGLE_4, size2), x + xpart(angle + ANGLE_16, size2), y + ypart(angle + ANGLE_16, size2), x + xpart(angle + ANGLE_2 - ANGLE_16, size2), y + ypart(angle + ANGLE_2 - ANGLE_16, size2), col [col3]); if (col4 < 4 && col4 >= 0) { pline(display[w], x + xpart(angle - ANGLE_4, size2), y + ypart(angle - ANGLE_4, size2), x + xpart(angle + ANGLE_16, size2), y + ypart(angle + ANGLE_16, size2), col [col4]); pline(display[w], x + xpart(angle + ANGLE_16, size2), y + ypart(angle + ANGLE_16, size2), x + xpart(angle + ANGLE_2 - ANGLE_16, size2), y + ypart(angle + ANGLE_2 - ANGLE_16, size2), col [col4]); pline(display[w], x + xpart(angle + ANGLE_2 - ANGLE_16, size2), y + ypart(angle + ANGLE_2 - ANGLE_16, size2), x + xpart(angle - ANGLE_4, size2), y + ypart(angle - ANGLE_4, size2), col [col4]); } break; case WPN_BLUE: col [0] = TRANS_WHITE; col [1] = TRANS_LBLUE; col [2] = TRANS_DBLUE; col [3] = TRANS_DDBLUE; //size1 += 5; // size2 += 5; if (col1 == 0) col1 = 1; if (col3 == 0) col3 = 1; if (col1 < 4 && col1 >= 0) { poly4(w, x + xpart(angle + ANGLE_4, size1), y + ypart(angle + ANGLE_4, size1), x + xpart(angle + ANGLE_2, size1), y + ypart(angle + ANGLE_2, size1), x + xpart(angle - ANGLE_4, size1), y + ypart(angle - ANGLE_4, size1), x + xpart(angle, size1), y + ypart(angle, size1), col [col1]); } if (col2 < 4 && col2 >= 0) { pline(display[w], x + xpart(angle + ANGLE_4, size1), y + ypart(angle + ANGLE_4, size1), x + xpart(angle + ANGLE_2, size1), y + ypart(angle + ANGLE_2, size1), col [col2]); pline(display[w], x + xpart(angle + ANGLE_2, size1), y + ypart(angle + ANGLE_2, size1), x + xpart(angle - ANGLE_4, size1), y + ypart(angle - ANGLE_4, size1), col [col2]); pline(display[w], x + xpart(angle - ANGLE_4, size1), y + ypart(angle - ANGLE_4, size1), x + xpart(angle, size1), y + ypart(angle, size1), col [col2]); pline(display[w], x + xpart(angle, size1), y + ypart(angle, size1), x + xpart(angle + ANGLE_4, size1), y + ypart(angle + ANGLE_4, size1), col [col2]); } if (col3 < 4 && col3 >= 0) { poly4(w, x + xpart(angle + ANGLE_4, size2), y + ypart(angle + ANGLE_4, size2), x + xpart(angle + ANGLE_2, size2), y + ypart(angle + ANGLE_2, size2), x + xpart(angle - ANGLE_4, size2), y + ypart(angle - ANGLE_4, size2), x + xpart(angle, size2), y + ypart(angle, size2), col [col3]); } if (col4 < 4 && col4 >= 0) { pline(display[w], x + xpart(angle + ANGLE_4, size2), y + ypart(angle + ANGLE_4, size2), x + xpart(angle + ANGLE_2, size2), y + ypart(angle + ANGLE_2, size2), col [col4]); pline(display[w], x + xpart(angle + ANGLE_2, size2), y + ypart(angle + ANGLE_2, size2), x + xpart(angle - ANGLE_4, size2), y + ypart(angle - ANGLE_4, size2), col [col4]); pline(display[w], x + xpart(angle - ANGLE_4, size2), y + ypart(angle - ANGLE_4, size2), x + xpart(angle, size2), y + ypart(angle, size2), col [col4]); pline(display[w], x + xpart(angle, size2), y + ypart(angle, size2), x + xpart(angle + ANGLE_4, size2), y + ypart(angle + ANGLE_4, size2), col [col4]); } break;*/ case WPN_BLUE: //size1 = (arena.counter / 4) % 16; size2 = ((arena.counter / 4) + 8) % 16; col [0] = TRANS_WHITE; col [1] = TRANS_LBLUE; col [2] = TRANS_DBLUE; col [3] = TRANS_DDBLUE; if (col1 == 0) col1 = 1; if (col3 == 0) col3 = 1; if (col1 < 4 && col1 >= 0) circlefill(display[w], x, y, size1, col [col1]); if (col2 < 4 && col2 >= 0) circle(display[w], x, y, size1, col [col2]); if (col3 < 4 && col3 >= 0) circlefill(display[w], x, y, size2, col [col3]); if (col4 < 4 && col4 >= 0) circle(display[w], x, y, size2, col [col4]); break; case WPN_WHITE: xa = 6 + grand(3); xb = explode_rle [2] [xa].x; // draw_trans_rle_sprite(display[w], explode_rle [2] [xa], x - xb, y - xb); size1 = 16 - size1; size2 = 16 - size2; xa = 3 + grand(3) - size1 / 5; if (xa < 1) xa = 1; xb = explode_rle [2] [xa].x; for (i = 0; i < 6; i ++) { draw_trans_rle_sprite(display[w], explode_rle [2] [xa].sprite, x + xpart(angle + i * (ANGLE_1 / 6), size1) - xb, y + ypart(angle + i * (ANGLE_1 / 6), size1) - xb); } xa = 3 + grand(3) - size2 / 5; if (xa < 1) xa = 1; xb = explode_rle [2] [xa].x; for (i = 0; i < 6; i ++) { draw_trans_rle_sprite(display[w], explode_rle [2] [xa].sprite, x + xpart(ANGLE_1 - angle + i * (ANGLE_1 / 6), size2) - xb, y + ypart(ANGLE_1 - angle + i * (ANGLE_1 / 6), size2) - xb); } break; case WPN_RED: xa = 3 + grand(3); xb = explode_rle [2] [xa].x; for (i = 0; i < 3; i ++) { draw_trans_rle_sprite(display[w], explode_rle [0] [xa].sprite, x + xpart(angle + i * ANGLE_3, 12) - xb, y + ypart(angle + i * ANGLE_3, 12) - xb); } for (i = 0; i < 3; i ++) { draw_trans_rle_sprite(display[w], explode_rle [0] [xa].sprite, x + xpart(ANGLE_1 - (angle + i * ANGLE_3), 6) - xb, y + ypart(ANGLE_1 - (angle + i * ANGLE_3), 6) - xb); } break; case WPN_GREEN: xa = 10 + grand(3); xb = (green_ring [xa]->w) / 2; draw_trans_rle_sprite(display[w], green_ring [xa], x - xb, y - xb); size1 = 5 + grand(3); xb = (green_ring [size1]->w) / 2; for (i = 0; i < 3; i ++) { draw_trans_rle_sprite(display[w], green_ring [size1], x - xb + xpart(angle + ANGLE_3 * i, xa), y - xb + ypart(angle + ANGLE_3 * i, xa)); } break; } // circlefill(display [w], x, y, 7, col1); } } drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); } void draw_clouds(void) { int c ,w; for (w = 0; w < 2; w ++) { for (c = 0; c < NO_CLOUDS; c ++) { if (cloud[w][c].type == CLOUD_NONE) continue; draw_a_cloud(w, c); } } } void draw_a_cloud(int w, int c) { int x = cloud[w][c].x / GRAIN; int y = cloud[w][c].y / GRAIN; int xa, xb, col1, col2, ya; switch(cloud[w][c].type) { case CLOUD_EXPLODE2: drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); switch(cloud[w][c].type2) { case 0: circlefill(display[w], x, y, cloud[w][c].timeout, TRANS_LRED); circle(display[w], x, y, cloud[w][c].timeout, TRANS_YELLOW); break; case 1: circlefill(display[w], x, y, cloud[w][c].timeout, TRANS_LGREEN); circle(display[w], x, y, cloud[w][c].timeout, TRANS_YELLOW); break; case 2: circlefill(display[w], x, y, cloud[w][c].timeout, TRANS_LBLUE); circle(display[w], x, y, cloud[w][c].timeout, TRANS_WHITE); break; } drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_SHOCKWAVE2: xa = cloud[w][c].timeout; if (xa < 0) xa = 0; if (xa > 19) xa = 19; xb = cloud[w][c].type2; ya = shock2_rle [xb] [19 - xa].x; draw_trans_rle_sprite(display[w], shock2_rle [xb] [19 - xa].sprite, x - ya, y - ya); break; case CLOUD_LARGE_SHOCKWAVE2: xa = cloud[w][c].timeout; if (xa < 0) xa = 0; if (xa > 49) xa = 49; xb = cloud[w][c].type2; ya = large_shock2_rle [xb] [49 - xa].x; draw_trans_rle_sprite(display[w], large_shock2_rle [xb] [49 - xa].sprite, x - ya, y - ya); break; case CLOUD_SHOCKWAVE: xa = cloud[w][c].timeout; if (xa < 0) xa = 0; if (xa > 19) xa = 19; xb = cloud[w][c].type2; ya = (shock_rle [xb] [19 - xa]->w) / 2; draw_trans_rle_sprite(display[w], shock_rle [xb] [19 - xa], x - ya, y - ya); break; case CLOUD_LARGE_SHOCKWAVE: xa = cloud[w][c].timeout; if (xa < 0) xa = 0; if (xa > 49) xa = 49; xb = cloud[w][c].type2; ya = (large_shock_rle [xb] [49 - xa]->w) / 2; draw_trans_rle_sprite(display[w], large_shock_rle [xb] [49 - xa], x - ya, y - ya); break; case CLOUD_SPRAY: case CLOUD_EXPLODE: case CLOUD_DELAY_EXPLODE: xa = cloud[w][c].timeout - 1; if (xa < 0) xa = 0; if (xa > 39) xa = 39; xb = cloud[w][c].type2; ya = explode_rle [xb] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [xb] [xa].sprite, x - ya, y - ya); break; case CLOUD_SLOW_EXPLODE: case CLOUD_DRAG_EXPLODE: xa = cloud[w][c].timeout / 5; if (xa < 0) xa = 0; if (xa > 39) xa = 39; xb = cloud[w][c].type2; // if (xa < 2) xa = 2; ya = explode_rle [xb] [xa].x; draw_trans_rle_sprite(display[w], explode_rle [xb] [xa].sprite, x - ya, y - ya); break; case CLOUD_SEEKER_TRAIL: xa = cloud[w][c].timeout / 2; if (xa > 6) xa = 6; ya = xa - 2; switch(xa) { default: case 6: case 5: col1 = TRANS_YELLOW; break; case 4: case 3: col1 = TRANS_LRED; break; case 2: case 1: col1 = TRANS_DRED; break; case 0: col1 = TRANS_DDRED; break; } drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); pline(display[w], x, y, cloud[w][c].x2 / GRAIN, cloud[w][c].y2 / GRAIN, col1); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_ZAP: xa = cloud[w][c].timeout / 2; if (xa > 6) xa = 6; ya = xa - 2; switch(cloud[w][c].type2) { case 1: switch(xa) { default: case 6: case 5: col1 = TRANS_YELLOW; break; case 4: case 3: col1 = TRANS_LRED; break; case 2: case 1: col1 = TRANS_DRED; break; case 0: col1 = TRANS_DDRED; break; } break; case 2: switch(xa) { default: case 6: case 5: col1 = TRANS_WHITE; break; case 4: case 3: col1 = TRANS_YELLOW; break; case 2: col1 = TRANS_LRED; break; case 1: col1 = TRANS_DRED; break; case 0: col1 = TRANS_DDRED; break; } break; case 3: switch(xa) { default: case 6: case 5: col1 = TRANS_YELLOW; break; case 4: case 3: col1 = TRANS_LGREEN; break; case 2: case 1: col1 = TRANS_DGREEN; break; case 0: col1 = TRANS_DDGREEN; break; } break; case 4: switch(xa) { default: case 6: case 5: col1 = TRANS_WHITE; break; case 4: case 3: col1 = TRANS_LBLUE; break; case 2: case 1: col1 = TRANS_DBLUE; break; case 0: col1 = TRANS_DDBLUE; break; } break; case 5: switch(xa) { default: case 6: case 5: col1 = TRANS_WHITE; break; case 4: case 3: col1 = TRANS_LPURPLE; break; case 2: case 1: col1 = TRANS_DPURPLE; break; case 0: col1 = TRANS_DDBLUE; break; } break; } drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); pline(display[w], x, y, cloud[w][c].x2 / GRAIN, cloud[w][c].y2 / GRAIN, col1); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_BLUE_WAVE: col1 = TRANS_LBLUE; // col1 = TRANS_LPURPLE; // if (cloud[w][c].type2 < 8) col1 = TRANS_DBLUE; // if (cloud[w][c].type2 < 4) col1 = TRANS_DBLUE; // if (cloud[w][c].type2 < 4) col1 = TRANS_DPURPLE; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); rectfill(display[w], x - cloud[w][c].type2, y - 5, x + cloud[w][c].type2, y + 4, col1); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_PURPLE_WAVE: col1 = TRANS_LPURPLE; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); rectfill(display[w], x - cloud[w][c].type2, y - 5, x + cloud[w][c].type2, y + 4, col1); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_GREEN_WAVE: col1 = TRANS_YELLOW; if (cloud[w][c].type2 < 22) col1 = TRANS_LGREEN; if (cloud[w][c].type2 < 9) col1 = TRANS_DGREEN; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); rectfill(display[w], x - cloud[w][c].type2, y - 5, x + cloud[w][c].type2, y + 4, col1); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_RED_WAVE: col1 = TRANS_LRED; // if (cloud[w][c].type2 < 42) col1 = TRANS_LRED; if (cloud[w][c].type2 < 20) col1 = TRANS_DRED; if (cloud[w][c].type2 < 10) col1 = TRANS_DDRED; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); rectfill(display[w], x - cloud[w][c].type2, y - 5, x + cloud[w][c].type2, y + 4, col1); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_GREEN_RING: /* col1 = TRANS_YELLOW; col2 = TRANS_LGREEN; if (cloud[w][c].timeout < 7) { col1 = TRANS_LGREEN; col2 = TRANS_DGREEN; } if (cloud[w][c].timeout < 5) col1 = TRANS_DGREEN; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); if (cloud[w][c].timeout >= 7) { circle(display[w], x, y, cloud[w][c].type2 / GRAIN + 2, TRANS_DGREEN); circle(display[w], x, y, cloud[w][c].type2 / GRAIN - 2, TRANS_DGREEN); } if (cloud[w][c].timeout >= 5) { circle(display[w], x, y, cloud[w][c].type2 / GRAIN + 1, col2); circle(display[w], x, y, cloud[w][c].type2 / GRAIN - 1, col2); } circle(display[w], x, y, cloud[w][c].type2 / GRAIN, col1); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0);*/ col1 = TRANS_YELLOW; col2 = TRANS_LGREEN; if (cloud[w][c].timeout < 11) { col1 = TRANS_LGREEN; col2 = TRANS_DGREEN; } if (cloud[w][c].timeout < 7) col1 = TRANS_DGREEN; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); if (cloud[w][c].timeout >= 11) { circle(display[w], x, y, cloud[w][c].type2 / GRAIN + 2, TRANS_DGREEN); circle(display[w], x, y, cloud[w][c].type2 / GRAIN - 2, TRANS_DGREEN); } if (cloud[w][c].timeout >= 7) { circle(display[w], x, y, cloud[w][c].type2 / GRAIN + 1, col2); circle(display[w], x, y, cloud[w][c].type2 / GRAIN - 1, col2); } circle(display[w], x, y, cloud[w][c].type2 / GRAIN, col1); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); break; case CLOUD_GREEN2_RING: xa = cloud[w][c].timeout; if (xa > 39) xa = 39; xb = (green_ring [xa]->w) / 2; draw_trans_rle_sprite(display[w], green_ring [xa], x - xb, y - xb); break; /* case CLOUD_SEEKER_TRAIL: xa = cloud[w][c].timeout / 2; if (xa > 6) xa = 6; ya = xa - 2; col1 = TRANS_YELLOW; col2 = TRANS_LRED; // col1 += xa * 12; // col2 += ya * 12; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); if (cloud[w][c].timeout <= 2) triangle(display[w], x + xpart(cloud[w][c].angle + ANGLE_4, 2), y + ypart(cloud[w][c].angle + ANGLE_4, 2), x - xpart(cloud[w][c].angle + ANGLE_4, 2), y - ypart(cloud[w][c].angle + ANGLE_4, 2), (cloud[w][c].x2 / GRAIN), (cloud[w][c].y2 / GRAIN), col1); else { poly4(w, x + xpart(cloud[w][c].angle + ANGLE_4, 2), y + ypart(cloud[w][c].angle + ANGLE_4, 2), x - xpart(cloud[w][c].angle + ANGLE_4, 2), y - ypart(cloud[w][c].angle + ANGLE_4, 2), (cloud[w][c].x2 / GRAIN) - xpart(cloud[w][c].angle + ANGLE_4, 2), (cloud[w][c].y2 / GRAIN) - ypart(cloud[w][c].angle + ANGLE_4, 2), (cloud[w][c].x2 / GRAIN) + xpart(cloud[w][c].angle + ANGLE_4, 2), (cloud[w][c].y2 / GRAIN) + ypart(cloud[w][c].angle + ANGLE_4, 2), col1); if (ya > 0) poly4(w, x + xpart(cloud[w][c].angle + ANGLE_4, 4), y + ypart(cloud[w][c].angle + ANGLE_4, 4), x - xpart(cloud[w][c].angle + ANGLE_4, 4), y - ypart(cloud[w][c].angle + ANGLE_4, 4), (cloud[w][c].x2 / GRAIN) - xpart(cloud[w][c].angle + ANGLE_4, 4), (cloud[w][c].y2 / GRAIN) - ypart(cloud[w][c].angle + ANGLE_4, 4), (cloud[w][c].x2 / GRAIN) + xpart(cloud[w][c].angle + ANGLE_4, 4), (cloud[w][c].y2 / GRAIN) + ypart(cloud[w][c].angle + ANGLE_4, 4), col2); } drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); */ break; } } void poly4(int w, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int col) { points [0] = x1; points [1] = y1; points [2] = x2; points [3] = y2; points [4] = x3; points [5] = y3; points [6] = x4; points [7] = y4; polygon(display[w], 4, points, col); } void draw_underlay(void) { switch(arena.level) { case 1: blit(underlay, display [0], 0, arena.underlay_position, 0, 0, 320, 480); blit(underlay2, display [1], 0, arena.underlay_position, 0, 0, 320, 480); break; case 2: clear_to_color(display [0], COL_LOWER_BG1); clear_to_color(display [1], COL_UPPER_BG1); int i; for (i = 0; i < 13; i ++) { vline(display[0], i * 25 + 1 + 15 + arena.underlay2_position2, 0, 480, COL_OUTLINE); vline(display[0], i * 25 - 1 + 15 + arena.underlay2_position2, 0, 480, COL_OUTLINE); vline(display[1], i * 25 + 1 + 15 + arena.underlay2_position2, 0, 480, COL_OUTLINE); vline(display[1], i * 25 - 1 + 15 + arena.underlay2_position2, 0, 480, COL_OUTLINE); } for (i = 0; i < 20; i ++) { hline(display[0], 0, i * 25 - 1 + arena.underlay2_position, 320, COL_OUTLINE); hline(display[0], 0, i * 25 + 1 + arena.underlay2_position, 320, COL_OUTLINE); hline(display[1], 0, i * 25 - 1 + arena.underlay2_position, 320, COL_OUTLINE); hline(display[1], 0, i * 25 + 1 + arena.underlay2_position, 320, COL_OUTLINE); } for (i = 0; i < 13; i ++) {\ vline(display[0], i * 25 + 15 + arena.underlay2_position2, 0, 480, COL_LOWER_BG2); vline(display[1], i * 25 + 15 + arena.underlay2_position2, 0, 480, COL_UPPER_BG2); } for (i = 0; i < 20; i ++) { hline(display[0], 0, i * 25 + arena.underlay2_position, 320, COL_LOWER_BG2); hline(display[1], 0, i * 25 + arena.underlay2_position, 320, COL_UPPER_BG2); } for (i = 0; i < 5; i ++) { vline(display[0], i * 60 + 1 + 35 + arena.underlay_position2, 0, 480, COL_OUTLINE); vline(display[0], i * 60 - 1 + 35 + arena.underlay_position2, 0, 480, COL_OUTLINE); vline(display[1], i * 60 + 1 + 35 + arena.underlay_position2, 0, 480, COL_OUTLINE); vline(display[1], i * 60 - 1 + 35 + arena.underlay_position2, 0, 480, COL_OUTLINE); } for (i = 0; i < 8; i ++) { hline(display[0], 0, i * 60 - 1 + arena.underlay_position, 320, COL_OUTLINE); hline(display[0], 0, i * 60 + 1 + arena.underlay_position, 320, COL_OUTLINE); hline(display[1], 0, i * 60 - 1 + arena.underlay_position, 320, COL_OUTLINE); hline(display[1], 0, i * 60 + 1 + arena.underlay_position, 320, COL_OUTLINE); } for (i = 0; i < 5; i ++) { vline(display[0], i * 60 + 35 + arena.underlay_position2, 0, 480, COL_LOWER_BG3); vline(display[1], i * 60 + 35 + arena.underlay_position2, 0, 480, COL_UPPER_BG3); } for (i = 0; i < 8; i ++) { hline(display[0], 0, i * 60 + arena.underlay_position, 320, COL_LOWER_BG3); hline(display[1], 0, i * 60 + arena.underlay_position, 320, COL_UPPER_BG3); } break; } } void run_underlay(void) { switch(arena.level) { case 1: if (arena.counter % 2 == 0) arena.underlay_position -= 1; if (arena.underlay_position <= 0) arena.underlay_position += 480; break; case 2: arena.underlay_position += 3; if (arena.underlay_position >= 60) arena.underlay_position -= 60; arena.underlay2_position += 1; if (arena.underlay2_position >= 25) arena.underlay2_position -= 25; arena.underlay_position2 = xpart(arena.counter * 8, 5); arena.underlay2_position2 = xpart(arena.counter * 4, 3); break; } } void draw_platform(void) { if (arena.level == 2) return; int i, j; int start = platform_step; int across = 0; int w; for (w = 0; w < 2; w ++) { for (j = 0; j < 10; j ++) { across = start - j; if (across < 0) across += PLAT_Y; if (across >= PLAT_Y) across -= PLAT_Y; for (i = 0; i < 9; i ++) { if (platform_tile [i] [across] != PLATFORM_EMPTY) draw_rle_sprite(display [w], platform_RLE [w] [platform_tile [i] [across]], i * 55 - 82, j * 55 - 75 + platform_position); // if ( i % 2 == 0) // textprintf_ex(display [0], font, i * 56, j * 56 + platform_position, COL_WHITE, -1, "(%i.%i.%i)", i, across, platform_tile [i] [across]); // draw_rle_sprite(display [0], platform_RLE [1], i * 55 - 27, j * 55 - 27 + platform_position); } } } } int detect_player_collision(void) { int x = player.x / GRAIN; int y = player.y / GRAIN; if (check_pixel(player.sides, x, y) || check_pixel(player.sides, x + 1, y + 1) || check_pixel(player.sides, x + 1, y - 1)) return player.sides; int w = 0; if (player.sides == 0) w = 1; // centre is at 15, 20 of large sprite if (check_pixel(w, x, y) || check_pixel(w, x - 2, y - 2) || check_pixel(w, x + 2, y - 2) || check_pixel(w, x - 2, y + 2) || check_pixel(w, x + 2, y + 2) || check_pixel(w, x + 2, y + 2) || check_pixel(w, x, y + 2) || check_pixel(w, x, y - 3) || check_pixel(w, x - 1, y - 3) || check_pixel(w, x + 1, y - 3)) return w; return -1; } int check_pixel(int w, int x, int y) { int pix = getpixel(display [w], x, y); if (pix >= TRANS_WHITE && pix < TRANS_LBLUE) return 1; return 0; } void pline(BITMAP *bmp, int x1, int y1, int x2, int y2, int colour) { if (x1 < -500 || x1 > 900 || x2 < -500 || x2 > 900 || y2 < -500 || y2 > 900 || y2 < -500 || y2 > 900) return; line(bmp, x1, y1, x2, y2, colour); } excellent-bifurcation-0.0.20071015/src/level.c0000666000175000017500000007637510704763302020145 0ustar miriammiriam#include "config.h" #include "allegro.h" #include "globvars.h" #include "stuff.h" #include "enemy.h" #include "pbullet.h" #include "ebullet.h" #include "display.h" #include "palette.h" #include #include "sound.h" #define NO_TRACKS 3 #define TRACK_SIZE 10 enum { TRACK_WANDER, TRACK_SIDES, TRACK_DIVER, TRACK_GLIDER, TRACK_MARCHER, TRACK_ATTACKER, TRACK_BEAMER, TRACK_BOSS1, TRACK_MB2, TRACK_BOSS2, TRACK_MB1 }; enum { DIST_RANDOM, DIST_ALL_W, DIST_ALL_B, DIST_ALTERNATE_WB, DIST_ALTERNATE_BW, DIST_PART_WB, DIST_PART_BW }; struct trackstruct { int type; int multiple; int count; int count2; int next_track; int delay; int total; int x [TRACK_SIZE + 1]; int y [TRACK_SIZE + 1]; int w [TRACK_SIZE + 1]; int mw; int reverse; int style; int pole_distribution; int pole_switch; // for DIST_PARTS int x_target [MAX_TARGETS]; int y_target [MAX_TARGETS]; int target_time; }; struct trackstruct track [NO_TRACKS]; int track_flip_w; /* struct overtrackstruct { int subtrack [NO_TRACKS]; int position; }; struct overtrackstruct overtrack [OVERTRACK_SIZE]; */ enum { T_EMPTY, T_OVERTRACK_END, T_GLIDER1, T_BASIC1, EMPTY_TRACK4, EMPTY_TRACK5, T_SHOTTER1, T_ZAPPER1, T_DIPPER1, T_DIPPER2, T_BASIC2, T_CARRIER, T_BURSTER, T_BASIC3, T_BEAMER1, T_BOSS1, T2_CROSS, T2_FLOWER1, T2_FLOWER2, T2_FLOWER3, T2_FLOWER4, T2_FLOWER5, T2_CROSS2, T2_WINGS, T2_MB2, T2_CARRIER2, T2_BOSS2, T_MB1 }; int overtrack_pos; int overtrack_pos2; int overtrack [2] [51] [8] = { { {T_BASIC1, 2, T_EMPTY, 0, T_EMPTY, 0, 10, 5}, // doesn't appear //{T_BOSS1, 0, T_BOSS1, 1, T_EMPTY, 2, 150, 100}, //{T_DIPPER2, 2, T_EMPTY, 0, T_EMPTY, 0, 200, 80}, //{T_MB1, 2, T_EMPTY, 0, T_EMPTY, 0, 160, 80}, //{T_SHOTTER1, 2, T_EMPTY, 0, T_EMPTY, 0, 160, 80}, //{T_BURSTER, 2, T_EMPTY, 0, T_EMPTY, 0, 160, 80}, //{T_MB1, 2, T_EMPTY, 0, T_EMPTY, 0, 160, 80}, //{T_CARRIER, 2, T_EMPTY, 0, T_EMPTY, 0, 160, 80}, {T_BASIC1, 2, T_EMPTY, 0, T_EMPTY, 0, 160, 80}, {T_DIPPER1, 0, T_BASIC1, 1, T_EMPTY, 0, 200, 100}, {T_DIPPER1, 0, T_CARRIER, 1, T_BASIC1, 2, 250, 200}, {T_BASIC1, 0, T_BASIC2, 1, T_EMPTY, 0, 200, 100}, {T_GLIDER1, 0, T_BASIC1, 1, T_EMPTY, 0, 200, 100}, {T_GLIDER1, 0, T_BASIC3, 1, T_BASIC1, 1, 200, 100}, {T_SHOTTER1, 0, T_CARRIER, 1, T_ZAPPER1, 2, 250, 200}, {T_BASIC3, 0, T_BASIC2, 1, T_EMPTY, 1, 200, 100}, {T_DIPPER1, 2, T_BASIC3, 1, T_EMPTY, 1, 200, 100}, {T_SHOTTER1, 0, T_BASIC3, 1, T_EMPTY, 1, 200, 100}, {T_BASIC1, 0, T_BASIC2, 1, T_EMPTY, 1, 150, 70}, {T_BASIC1, 0, T_BASIC2, 1, T_EMPTY, 1, 150, 70}, {T_ZAPPER1, 2, T_BASIC2, 0, T_BASIC2, 1, 250, 100}, {T_GLIDER1, 0, T_CARRIER, 1, T_ZAPPER1, 2, 250, 200}, {T_DIPPER2, 0, T_BASIC2, 2, T_EMPTY, 1, 200, 100}, {T_DIPPER2, 1, T_BASIC3, 0, T_EMPTY, 1, 200, 100}, {T_BURSTER, 0, T_EMPTY, 1, T_EMPTY, 1, 200, 100}, {T_BASIC1, 0, T_BASIC2, 1, T_EMPTY, 1, 200, 100}, {T_BURSTER, 0, T_GLIDER1, 1, T_BASIC3, 1, 200, 100}, {T_GLIDER1, 0, T_CARRIER, 1, T_ZAPPER1, 2, 400, 100}, {T_MB1, 2, T_EMPTY, 0, T_EMPTY, 0, 160, 80}, {T_DIPPER2, 0, T_BASIC2, 1, T_EMPTY, 1, 300, 100}, {T_BEAMER1, 0, T_CARRIER, 1, T_EMPTY, 1, 200, 100}, {T_BEAMER1, 0, T_BEAMER1, 1, T_EMPTY, 2, 200, 100}, {T_BURSTER, 0, T_BASIC1, 1, T_EMPTY, 1, 200, 100}, {T_GLIDER1, 0, T_EMPTY, 1, T_EMPTY, 1, 200, 100}, {T_BURSTER, 0, T_BASIC3, 1, T_BASIC3, 0, 200, 100}, {T_DIPPER2, 0, T_BASIC2, 2, T_EMPTY, 1, 200, 100}, {T_SHOTTER1, 0, T_GLIDER1, 2, T_EMPTY, 1, 200, 100}, {T_BURSTER, 0, T_BURSTER, 1, T_EMPTY, 1, 200, 100}, {T_BASIC2, 0, T_CARRIER, 1, T_EMPTY, 1, 200, 100}, {T_BEAMER1, 0, T_BASIC3, 1, T_EMPTY, 1, 200, 100}, {T_BEAMER1, 1, T_BASIC2, 1, T_BASIC2, 1, 200, 100}, {T_BEAMER1, 0, T_DIPPER2, 1, T_BASIC2, 1, 200, 100}, {T_BEAMER1, 0, T_DIPPER2, 1, T_EMPTY, 1, 200, 100}, {T_BASIC3, 0, T_BASIC3, 1, T_EMPTY, 1, 300, 100}, {T_CARRIER, 0, T_EMPTY, 1, T_EMPTY, 1, 200, 100}, {T_BOSS1, 0, T_EMPTY, 1, T_EMPTY, 2, 150, 100}, {T_OVERTRACK_END, 0, T_EMPTY, 0, T_EMPTY, 0, 400} /*{T_, 0, T_, 1, T_, 1, 200, 100}, {T_, 0, T_, 1, T_, 1, 200, 100}, {T_, 0, T_, 1, T_, 1, 200, 100}, {T_, 0, T_, 1, T_, 1, 200, 100}, {T_, 0, T_, 1, T_, 1, 200, 100}, {T_, 0, T_, 1, T_, 1, 200, 100}, {T_, 0, T_, 1, T_, 1, 200, 100},*/ }, { {T_BASIC1, 2, T_EMPTY, 0, T_EMPTY, 0, 10, 5}, // doesn't appear //{T2_MB2, 0, T2_CROSS, 1, T_EMPTY, 2, 170, 150}, //{T2_BOSS2, 2, T_EMPTY, 0, T_EMPTY, 0, 170, 150}, {T2_CROSS, 2, T_EMPTY, 0, T_EMPTY, 0, 170, 150}, {T2_CROSS, 1, T2_CROSS, 0, T_EMPTY, 1, 170, 150}, {T2_FLOWER1, 0, T2_CROSS, 1, T_EMPTY, 2, 170, 150}, {T2_FLOWER2, 0, T2_FLOWER1, 2, T_EMPTY, 2, 170, 150}, {T2_CROSS, 2, T2_FLOWER1, 0, T2_FLOWER3, 1, 170, 150}, {T2_CROSS, 2, T2_CROSS, 0, T2_FLOWER2, 1, 170, 150}, {T2_CARRIER2, 2, T_EMPTY, 0, T_EMPTY, 0, 170, 150}, {T2_FLOWER1, 2, T2_FLOWER2, 0, T2_FLOWER3, 1, 170, 150}, {T2_CROSS, 2, T2_CROSS, 0, T_EMPTY, 1, 170, 150}, {T2_CROSS2, 2, T2_FLOWER1, 0, T_EMPTY, 1, 170, 150}, {T2_WINGS, 0, T2_WINGS, 1, T_EMPTY, 1, 170, 150}, {T2_CROSS2, 2, T2_FLOWER1, 0, T2_WINGS, 1, 170, 150}, {T2_CARRIER2, 2, T_EMPTY, 0, T_EMPTY, 0, 170, 150}, {T2_WINGS, 0, T2_CROSS2, 1, T_EMPTY, 1, 170, 150}, {T2_CROSS, 0, T2_CROSS2, 1, T_EMPTY, 1, 170, 150}, {T2_WINGS, 0, T2_FLOWER3, 1, T_EMPTY, 1, 170, 150}, {T2_WINGS, 0, T2_FLOWER3, 1, T2_CROSS2, 2, 170, 150}, {T2_CROSS, 0, T2_CROSS2, 1, T_EMPTY, 1, 170, 150}, {T2_FLOWER1, 0, T2_CROSS, 1, T_EMPTY, 2, 170, 150}, {T2_CARRIER2, 2, T_EMPTY, 0, T_EMPTY, 0, 350, 150}, {T2_MB2, 2, T_EMPTY, 0, T_EMPTY, 1, 170, 150}, {T2_CROSS, 2, T2_CROSS2, 0, T_EMPTY, 1, 170, 150}, {T2_FLOWER1, 0, T2_CROSS, 1, T_EMPTY, 2, 170, 150}, {T2_FLOWER2, 0, T2_FLOWER1, 2, T_EMPTY, 2, 170, 150}, {T2_CROSS, 2, T2_FLOWER4, 0, T2_FLOWER3, 1, 150, 150}, {T2_CROSS2, 2, T2_FLOWER5, 0, T2_FLOWER3, 1, 150, 150}, {T2_CARRIER2, 2, T_EMPTY, 0, T_EMPTY, 0, 250, 150}, {T2_WINGS, 0, T2_CROSS2, 1, T_EMPTY, 1, 170, 150}, {T2_CROSS, 0, T2_CROSS2, 1, T2_FLOWER2, 1, 170, 150}, {T2_WINGS, 0, T2_FLOWER4, 1, T_EMPTY, 1, 170, 150}, {T2_WINGS, 0, T2_FLOWER5, 1, T2_CROSS2, 2, 170, 150}, {T2_CROSS, 2, T2_FLOWER4, 0, T2_FLOWER3, 1, 150, 150}, {T2_CROSS2, 2, T2_FLOWER5, 0, T2_FLOWER3, 1, 150, 150}, {T2_CARRIER2, 2, T_EMPTY, 0, T_EMPTY, 0, 350, 150}, {T2_BOSS2, 2, T_EMPTY, 0, T_EMPTY, 1, 170, 150}, //{T_BOSS1, 0, T_BOSS1, 1, T_EMPTY, 2, 150, 100}, {T_OVERTRACK_END, 0, T_EMPTY, 0, T_EMPTY, 0, 400} } /* {T_, 0, T_, 1, T_, 1, 200, 100}, */ //{T_, , T_, , T_, }; //{T_, , T_, , T_, }; //{T_, , T_, , T_, }; }; void spawn_enemy(int w, int type, int pole); void make_track(int t); void run_tracks(void); void make_dancer_track(int t, int type); void set_dancer(int w, int e, int t); void set_diver(int w, int e, int t); void set_glider(int w, int e, int t); void set_attacker(int w, int e, int t); void set_beamer(int w, int e, int t); void set_pauser(int w, int e, int t); void place_marchers(int t); void make_boss1_track(int type); void make_mb2_track(int type); void make_boss2_track(int type); void make_mb1_track(void); void init_level(void) { init_pbullets(); init_ebullets(); init_enemies(); int i; for (i = 0; i < NO_TRACKS; i ++) { track[i].type = ENEMY_NONE; } overtrack_pos = 0; overtrack_pos2 = 0; boss.fight = 0; track_flip_w = grand(2); arena.new_level_sign = 100; arena.beam = 0; arena.old_beam = 0; arena.underlay_position = 0; init_mtracks(); level_display_init(); } void run_level(void) { run_tracks(); /* arena.track ++; if (arena.track % 50 == 0) { spawn_enemy(ENEMY_DIVER, POLE_RANDOM); }*/ } /* void spawn_enemy(int type, int pole) { int x = grand(X_MAX - X_MIN * 2) + X_MIN; // x = 100000; int y = -50000; if (pole == POLE_RANDOM) pole = POLE_WHITE + grand(2); create_enemy(type, pole, x, y, 0, 0, 2500, ATT3, ATT4, ATT5, ATT6, ATT7); } */ void run_tracks(void) { int t; int e, w; // int pole = POLE_WHITE; // for (t = 0; t < NO_TRACKS; t ++) if (boss.fight || arena.level_finished > 0) return; for (t = 0; t < 3; t ++) { track[t].next_track --; if (track[t].next_track <= 0) { track[t].type = ENEMY_NONE; make_track(t); track[t].next_track = overtrack [arena.level - 1] [overtrack_pos] [6]; // see also above // if (arena.difficulty == 1) //track[t].next_track += 10; if (arena.difficulty == 0) track[t].next_track += 50; } if (track[t].type == ENEMY_NONE || track[t].multiple == 0) { continue; } if (track[t].count <= 0) { if (track[t].multiple == 0) { track[t].delay --; /* if (track[t].delay <= 0) { track[t].type = ENEMY_NONE; }*/ continue; } if (track[t].style == TRACK_MARCHER) { place_marchers(t); track[t].multiple = 0; track[t].count = 0; // track[t].delay = 0; track[t].type = ENEMY_NONE; //track[t].delay = grand(overtrack [overtrack_pos] [7]); continue; } if (track[t].style == TRACK_BOSS1 || track[t].style == TRACK_MB2 || track[t].style == TRACK_MB1 || track[t].style == TRACK_BOSS2) continue; /* switch(track[t].pole_distribution) { case DIST_RANDOM: pole = POLE_WHITE + grand(2); break; case DIST_ALL_W: pole = POLE_WHITE; break; case DIST_ALL_B: pole = POLE_BLACK; break; case DIST_ALTERNATE_WB: if (track[t].multiple % 2 == 1) pole = POLE_BLACK; break; case DIST_ALTERNATE_BW: if (track[t].multiple % 2 == 0) pole = POLE_BLACK; break; case DIST_PART_WB: if (track[t].multiple <= track[t].pole_switch) pole = POLE_BLACK; break; case DIST_PART_BW: if (track[t].multiple > track[t].pole_switch) pole = POLE_BLACK; break; }*/ w = track[t].w [track[t].multiple]; e = create_enemy(w, track[t].type, 0, track[t].x [track[t].multiple], track[t].y [track[t].multiple], ANGLE_4, 0, 2500, ATT3, ATT4, ATT5, ATT6, ATT7); if (e != -1) { switch(eclass[enemy[w][e].type].ai) { default: case AI_DANCER: set_dancer(w, e, t); break; case AI_DIVER: set_diver(w, e, t); break; case AI_GLIDER: set_glider(w, e, t); break; case AI_PAUSER: set_pauser(w, e, t); break; case AI_ATTACKER: set_attacker(w, e, t); break; case AI_BEAMER: set_beamer(w, e, t); break; } } track[t].count = track[t].count2; track[t].multiple --; } // count > 0. so -- it track[t].count --; } } void make_track(int t) { int etype; track[t].total = 0; track[t].reverse = -1; track[t].pole_distribution = DIST_RANDOM; int track_number = grand(3); if (t == 0 && grand(2) == 0) track_number = 3; int s_etype = 3; /* switch(grand(13)) { case 0: s_etype = 3; break;// 3 case 1: s_etype = 2; break; case 2: s_etype = 6; break;// 6 case 3: s_etype = 7; break; case 4: s_etype = 8; break; case 5: s_etype = 9; break; case 6: s_etype = 10; break; case 7: s_etype = 11; break; case 8: s_etype = 12; break; case 9: s_etype = 13; break; default: s_etype = 13; break; }*/ overtrack_pos2 ++; if (overtrack_pos2 > 2) { overtrack_pos2 = 0; overtrack_pos ++; if (overtrack [arena.level - 1] [overtrack_pos] [0] == T_OVERTRACK_END) overtrack_pos = 0; track_flip_w = grand(2); } if (overtrack [arena.level - 1] [overtrack_pos] [overtrack_pos2 * 2] == T_EMPTY) { track[t].multiple = 0; return; } s_etype = overtrack [arena.level - 1] [overtrack_pos] [overtrack_pos2 * 2]; track[t].mw = overtrack [arena.level - 1] [overtrack_pos] [overtrack_pos2 * 2 + 1]; if (track_flip_w) { if (track[t].mw == 0) track[t].mw = 1; else { if (track[t].mw == 1) track[t].mw = 0; } } switch(s_etype) { /* case 0: etype = ENEMY_TWISTER; track[t].type = etype; track[t].multiple = 6; track[t].pole_switch = track[t].multiple / 2; track[t].count = 10; track[t].count2 = track[t].count; track[t].delay = 100; track[t].style = TRACK_WANDER; if (grand(2) == 0) track[t].style = TRACK_SIDES; make_dancer_track(t, etype); break; case 1: etype = ENEMY_DIVER; track[t].type = etype; track[t].multiple = 3; track[t].pole_switch = track[t].multiple / 2; track[t].pole_distribution = DIST_ALL_W + grand(2); track[t].count = 40; track[t].count2 = track[t].count; track[t].delay = 150; track[t].style = TRACK_DIVER; make_dancer_track(t, etype); track[t].style = TRACK_DIVER; break;*/ case 2: etype = ENEMY_GLIDER1; track[t].type = etype; track[t].multiple = 1; // track[t].pole_switch = track[t].multiple / 2; track[t].count = 150; track[t].count2 = track[t].count; track[t].delay = 50; track[t].style = TRACK_GLIDER; make_dancer_track(t, etype); break; case 3: etype = ENEMY_BASIC1; track[t].type = etype; track[t].multiple = 4; // track[t].pole_switch = track[t].multiple / 2; track[t].count = 20; track[t].count2 = track[t].count; track[t].delay = 80; track[t].style = TRACK_WANDER; make_dancer_track(t, etype); break; /* case 4: etype = ENEMY_ATTACKER1 + grand(3); track[t].type = etype; track[t].multiple = 4; track[t].pole_switch = track[t].multiple / 2; track[t].pole_distribution = DIST_ALL_W + grand(2); track[t].count = 60; track[t].count2 = track[t].count; track[t].delay = 100; track[t].style = TRACK_ATTACKER; make_dancer_track(t, etype); break;*/ case 6: etype = ENEMY_SHOTTER1; track[t].type = etype; track[t].multiple = 1; // track[t].pole_switch = track[t].multiple / 2; track[t].count = 150; track[t].count2 = track[t].count; track[t].delay = 50; track[t].style = TRACK_GLIDER; make_dancer_track(t, etype); break; case 7: etype = ENEMY_ZAPPER1; track[t].type = etype; track[t].multiple = 1; track[t].count = 150; track[t].count2 = track[t].count; track[t].delay = 50; track[t].style = TRACK_GLIDER; make_dancer_track(t, etype); break; case 8: etype = ENEMY_DIPPER1; track[t].type = etype; track[t].multiple = 3; track[t].count = 30; track[t].count2 = track[t].count; track[t].delay = 150; track[t].style = TRACK_ATTACKER; make_dancer_track(t, etype); break; case 9: etype = ENEMY_DIPPER2; track[t].type = etype; track[t].multiple = 3; track[t].count = 30; track[t].count2 = track[t].count; track[t].delay = 150; track[t].style = TRACK_ATTACKER; make_dancer_track(t, etype); break; case 10: etype = ENEMY_BASIC2; track[t].type = etype; track[t].multiple = 4; // track[t].pole_switch = track[t].multiple / 2; track[t].count = 20; track[t].count2 = track[t].count; track[t].delay = 80; track[t].style = TRACK_SIDES; make_dancer_track(t, etype); break; case 11: etype = ENEMY_CARRIER; track[t].type = etype; track[t].multiple = 1; // track[t].pole_switch = track[t].multiple / 2; track[t].count = 150; track[t].count2 = track[t].count; track[t].delay = 50; track[t].style = TRACK_GLIDER; make_dancer_track(t, etype); break; case 12: etype = ENEMY_BURSTER; track[t].type = etype; track[t].multiple = 1; // track[t].pole_switch = track[t].multiple / 2; track[t].count = 150; track[t].count2 = track[t].count; track[t].delay = 50; track[t].style = TRACK_GLIDER; make_dancer_track(t, etype); break; case 13: etype = ENEMY_BASIC3; track[t].type = etype; track[t].multiple = 6; track[t].count = 20; track[t].count2 = track[t].count; track[t].delay = 80; track[t].style = TRACK_MARCHER; make_dancer_track(t, etype); break; case T_BEAMER1: etype = ENEMY_BEAMER1; track[t].type = etype; track[t].multiple = 1; track[t].count = 20; track[t].count2 = track[t].count; track[t].delay = 200; track[t].style = TRACK_BEAMER; make_dancer_track(t, etype); break; case T_BOSS1: etype = ENEMY_BOSS1; track[t].type = etype; track[t].multiple = 0; // track[t].pole_switch = track[t].multiple / 2; track[t].count = 150; track[t].count2 = track[t].count; track[t].delay = 50; track[t].style = TRACK_BOSS1; make_boss1_track(etype); // make_dancer_track(t, etype); break; case T2_BOSS2: etype = ENEMY_BOSS2; track[t].type = etype; track[t].multiple = 0; track[t].count = 150; track[t].count2 = track[t].count; track[t].delay = 50; track[t].style = TRACK_BOSS1; make_boss2_track(etype); break; case T2_MB2: etype = ENEMY_MB2; track[t].type = etype; track[t].multiple = 0; // track[t].pole_switch = track[t].multiple / 2; track[t].count = 150; track[t].count2 = track[t].count; track[t].delay = 50; track[t].style = TRACK_MB2; make_mb2_track(etype); // make_dancer_track(t, etype); break; case T2_CROSS: etype = ENEMY_CROSS; track[t].type = etype; track[t].multiple = 5; // track[t].pole_switch = track[t].multiple / 2; track[t].count = 30; track[t].count2 = track[t].count; track[t].delay = 80; track[t].style = TRACK_WANDER; make_dancer_track(t, etype); break; case T2_FLOWER1: etype = ENEMY_FLOWER1; track[t].type = etype; track[t].multiple = 1; // track[t].pole_switch = track[t].multiple / 2; track[t].count = 150; track[t].count2 = track[t].count; track[t].delay = 50; track[t].style = TRACK_GLIDER; make_dancer_track(t, etype); break; case T2_FLOWER2: etype = ENEMY_FLOWER2; track[t].type = etype; track[t].multiple = 1; // track[t].pole_switch = track[t].multiple / 2; track[t].count = 150; track[t].count2 = track[t].count; track[t].delay = 50; track[t].style = TRACK_GLIDER; make_dancer_track(t, etype); break; case T2_FLOWER3: etype = ENEMY_FLOWER3; track[t].type = etype; track[t].multiple = 1; // track[t].pole_switch = track[t].multiple / 2; track[t].count = 150; track[t].count2 = track[t].count; track[t].delay = 50; track[t].style = TRACK_GLIDER; make_dancer_track(t, etype); break; case T2_FLOWER4: etype = ENEMY_FLOWER4; track[t].type = etype; track[t].multiple = 1; // track[t].pole_switch = track[t].multiple / 2; track[t].count = 150; track[t].count2 = track[t].count; track[t].delay = 50; track[t].style = TRACK_GLIDER; make_dancer_track(t, etype); break; case T2_FLOWER5: etype = ENEMY_FLOWER5; track[t].type = etype; track[t].multiple = 1; // track[t].pole_switch = track[t].multiple / 2; track[t].count = 150; track[t].count2 = track[t].count; track[t].delay = 50; track[t].style = TRACK_GLIDER; make_dancer_track(t, etype); break; case T2_CROSS2: etype = ENEMY_CROSS2; track[t].type = etype; track[t].multiple = 5; // track[t].pole_switch = track[t].multiple / 2; track[t].count = 15; track[t].count2 = track[t].count; track[t].delay = 80; track[t].style = TRACK_WANDER; make_dancer_track(t, etype); break; case T2_WINGS: etype = ENEMY_WINGS; track[t].type = etype; track[t].multiple = 1; // track[t].pole_switch = track[t].multiple / 2; track[t].count = 15; track[t].count2 = track[t].count; track[t].delay = 80; track[t].style = TRACK_WANDER; make_dancer_track(t, etype); break; case T2_CARRIER2: etype = ENEMY_CARRIER2; track[t].type = etype; track[t].multiple = 1; // track[t].pole_switch = track[t].multiple / 2; track[t].count = 150; track[t].count2 = track[t].count; track[t].delay = 50; track[t].style = TRACK_GLIDER; make_dancer_track(t, etype); break; case T_MB1: etype = ENEMY_MB1; track[t].type = etype; track[t].multiple = 0; track[t].count = 150; track[t].count2 = track[t].count; track[t].delay = 50; track[t].style = TRACK_MB1; make_mb1_track(); // make_dancer_track(t, etype); break; } track[t].count = grand(overtrack [arena.level - 1] [overtrack_pos] [7]); } void make_dancer_track(int t, int type) { // REMEMBER - MARCHERS don't use this!!! int a;//, b; int i; int tw = track[t].mw; switch(track[t].style) { default: case TRACK_WANDER: track[t].x [0] = RAND_X; track[t].y [0] = -30000; // int tw = grand(2); if (tw == 2) tw = grand(2); for (i = 1; i < TRACK_SIZE; i ++) { track[t].x [i] = track[t].x [0]; track[t].y [i] = track[t].y [0]; track[t].w [i] = tw; } track[t].x_target [0] = RAND_X; track[t].y_target [0] = RAND_Y / 3; track[t].x_target [1] = RAND_X; track[t].y_target [1] = (RAND_Y / 3) * 2; track[t].x_target [2] = -1; track[t].y_target [2] = -1; track[t].target_time = grand(80) + 80; break; case TRACK_SIDES: track[t].reverse = grand(2); a = grand(2); track[t].x [0] = X_MIN + 40000 + grand(30000); // track[t].x [0] = 100000; if (a == 1) track[t].x [0] = X_MAX - 40000 - grand(30000); track[t].y [0] = -30000; for (i = 1; i < track[t].multiple + 1; i ++) { if (i % 2 == 1) track[t].x [i] = X_MAX - track[t].x [0]; else track[t].x [i] = track[t].x [0]; track[t].y [i] = track[t].y [0]; if (tw == 2) tw = grand(2); track[t].w [i] = tw; } track[t].x_target [0] = X_MIN + RAND_X / 4; if (a == 1) track[t].x_target [0] = X_MAX - RAND_X / 4; track[t].y_target [0] = Y_MIN + RAND_Y / 3; track[t].x_target [1] = X_MIDDLE; track[t].y_target [1] = Y_MIDDLE; // rand? track[t].x_target [2] = X_MAX - RAND_X / 4; if (a == 1) track[t].x_target [2] = X_MIN + RAND_X / 4; track[t].y_target [2] = 500000; track[t].x_target [3] = -1; track[t].y_target [3] = -1; track[t].target_time = grand(20) + 80; track[t].w [0] = grand(2); track[t].w [1] = grand(2); track[t].w [2] = grand(2); break; case TRACK_DIVER: // exit(1); track[t].reverse = grand(2); a = 0; track[t].x [0] = X_MIN + 40000 + grand(30000); if (a == 1) track[t].x [0] = X_MAX - 50000; track[t].y [0] = -30000; for (i = 1; i < track[t].multiple + 1; i ++) { track[t].x [i] = track[t].x [0] + i * 75000; if (a == 1) track[t].x [i] = track[t].x [0] - i * 75000; track[t].y [i] = track[t].y [0]; track[t].w [i] = grand(2); } track[t].target_time = grand(30) + 20; break; case TRACK_GLIDER: track[t].x [0] = RAND_X; track[t].y [0] = -70000 + grand(23000); track[t].x_target [0] = track[t].x [0]; track[t].y_target [0] = 500000; if (tw == 2) tw = grand(2); for (i = 1; i < track[t].multiple + 1; i ++) { track[t].x [i] = track[t].x [0]; track[t].y [i] = track[t].y [0]; track[t].x_target [0] = track[t].x [0]; track[t].y_target [0] = 500000; track[t].w [i] = tw; } break; case TRACK_ATTACKER: // note i = 0 t = t; int str_x; int str_y = -20000 - grand(55000); int w = grand(2); if (grand(2) == 0) { // str_x = 30000 + grand(50000); str_x = -30000 + grand(75000); for (i = 0; i < track[t].multiple + 1; i ++) { track[t].x [i] = str_x + i * 90000; track[t].y [i] = str_y; track[t].w [i] = w;//grand(2); } } else { // str_x = X_MAX - (30000 + grand(50000)); str_x = X_MAX - (-40000 + grand(45000)); for (i = 0; i < track[t].multiple + 1; i ++) { track[t].x [i] = str_x - (i * 90000); track[t].y [i] = str_y; if (tw == 2) tw = grand(2); track[t].w [i] = tw;//grand(2); } } // track[t].target_time = grand(30) + 30; break; case TRACK_BEAMER: if (tw == 2) tw = grand(2); for (i = 0; i < track[t].multiple + 1; i ++) { track[t].x [i] = RAND_X; track[t].y [i] = -70000; track[t].w [i] = tw; } break; } } void set_dancer(int w, int e, int t) { int i; if (track[t].reverse != -1 && track[t].multiple % 2 == track[t].reverse) { for (i = 0; i < MAX_TARGETS; i ++) { enemy[w] [e].x_target [i] = X_MAX - track[t].x_target [i]; if (track[t].x_target [i] == -1) enemy[w] [e].x_target [i] = -1; enemy[w] [e].y_target [i] = Y_MIN + track[t].y_target [i]; } } else { for (i = 0; i < MAX_TARGETS; i ++) { enemy[w] [e].x_target [i] = X_MIN + track[t].x_target [i]; if (track[t].x_target [i] == -1) enemy[w] [e].x_target [i] = -1; enemy[w] [e].y_target [i] = Y_MIN + track[t].y_target [i]; } } enemy[w] [e].target_time = track[t].target_time; enemy[w] [e].max_target_time = track[t].target_time; enemy[w] [e].target = 0; } void set_diver(int w, int e, int t) { // int i; enemy[w] [e].target_time = track[t].target_time; enemy[w] [e].target = 0; enemy[w] [e].x_speed = 0; enemy[w] [e].angle1 = ANGLE_4; } void set_glider(int w, int e, int t) { // int i; enemy[w][e].target = 0; enemy[w][e].x_target [0] = track[t].x_target [0]; enemy[w][e].y_target [0] = track[t].y_target [0]; enemy[w][e].angle1 = radians_to_angle(atan2(enemy[w] [e].y_target [0] - enemy[w] [e].y, enemy[w] [e].x_target [0] - enemy[w] [e].x)); int speed = eclass[enemy[w] [e].type].speed1; if (enemy[w][e].type >= ENEMY_FLOWER1 && enemy[w][e].type <= ENEMY_FLOWER5) speed += grand(1000); enemy[w][e].x_speed = xpart(enemy[w] [e].angle1, speed); enemy[w][e].y_speed = ypart(enemy[w] [e].angle1, speed); } void set_attacker(int w, int e, int t) { // int i; enemy[w] [e].angle1 = ANGLE_4; enemy[w] [e].x_speed = 0; enemy[w] [e].y_speed = 3000; enemy[w] [e].target_time = grand(30) + 10; // track[t].target_time = grand(30) + 30; } // note that Dippers use the attacker track but have AI_PAUSER void set_pauser(int w, int e, int t) { enemy[w] [e].angle1 = ANGLE_4; enemy[w] [e].x_speed = 0; enemy[w] [e].y_speed = 3000; enemy[w] [e].target_time = 30;//grand(30) + 10; } void set_beamer(int w, int e, int t) { enemy[w] [e].angle1 = ANGLE_4; enemy[w] [e].x_speed = 0; enemy[w] [e].y_speed = 2000; enemy[w] [e].target_time = grand(30) + 50; enemy[w] [e].target = 0; } void place_marchers(int t) { // int pole = POLE_WHITE + grand(2); int i, e; int x = X_MIN + grand(40000); int y = -30000; if (track[t].mw == 2) track[t].mw = grand(2); for (i = 0; i < track[t].multiple; i ++) // for (i = 0; i < 2; i ++) { e = create_enemy(track[t].mw, track[t].type, 0, x + i * 40000, y, ANGLE_4, 0, 2200 + grand(500), ATT3, ATT4, ATT5, ATT6, ATT7); } } void make_boss2_track(int type) { boss.side1 = grand(2); if (boss.side1 == 0) boss.side2 = 1; else boss.side2 = 0; int e1 = create_enemy(boss.side1, ENEMY_BOSS2, 0, 160000, 10000, ANGLE_4, 0, 0, ATT3, ATT4, ATT5, ATT6, ATT7); // I guess I should check these values, but I don't think it's actually possible for these functions to fail here. boss.e1 = e1; boss.hp = 150000 + arena.difficulty * 12000; boss.max_hp = boss.hp; boss.moving = 0; boss.phase = 0; boss.size = 10; boss.size_inc = 0; boss.colour = 0; boss.bflower_recycle = 100; boss.fight = 1; enemy[boss.side1][e1].y_speed = 0; enemy[boss.side1][e1].x_speed = 0; enemy[boss.side1][e1].x = 160000; enemy[boss.side1][e1].y = 120000; enemy[boss.side1][e1].a1 = 0; enemy[boss.side1][e1].b1 = 0; enemy[boss.side1][e1].c1 = 0; } void make_boss1_track(int type) { // int a;//, b; // int i; // switch stage int e1 = create_enemy(0, ENEMY_BOSS1, 0, 160000, -80000, ANGLE_4, 0, 0, ATT3, ATT4, ATT5, ATT6, ATT7); boss.e1 = e1; int e2 = create_enemy(1, ENEMY_BOSS1, 0, 160000, -80000, ANGLE_4, 0, 0, ATT3, ATT4, ATT5, ATT6, ATT7); // I guess I should check these values, but I don't think it's actually possible for these functions to fail here. boss.e2 = e2; boss.side1 = 0; boss.side2 = 1; boss.hp = 150000 + arena.difficulty * 12000; boss.max_hp = boss.hp; boss.moving = BOSS1_APPROACH; boss.arm1 = 0; boss.arm1_change = 0; boss.arm2 = 0; boss.arm2_change = 0; boss.e1 = e1; boss.e2 = e2; boss.moving = 0; boss.pulse = 0; boss.arm_colour = -1; boss.arm_recycle = 100; boss.arm_change = 140; // track[t].multiple = 0; boss.fight = 1; boss.bpattern = BOSS1_FIRE_NONE; enemy[0][e1].y_speed = 2000; enemy[0][e1].x_speed = 0; } void make_mb2_track(int type) { boss.side1 = grand(2); if (boss.side1 == 0) boss.side2 = 1; else boss.side2 = 0; int e1 = create_enemy(boss.side1, ENEMY_MB2, 0, 160000, -80000, ANGLE_4, 0, 0, ATT3, ATT4, ATT5, ATT6, ATT7); // int e2 = create_enemy(1, ENEMY_BOSS1, 0, 160000, -80000, ANGLE_4, 0, 0, ATT3, ATT4, ATT5, ATT6, ATT7); // I guess I should check these values, but I don't think it's actually possible for these functions to fail here. boss.e1 = e1; boss.hp = 80000 + arena.difficulty * 10000; boss.max_hp = boss.hp; boss.moving = 0; /* boss.arm1 = 0; boss.arm1_change = 0; boss.arm2 = 0; boss.arm2_change = 0; boss.e1 = e1; boss.e2 = e2; boss.moving = 0; boss.pulse = 0; boss.arm_colour = -1; boss.arm_recycle = 100; boss.arm_change = 140;*/ // track[t].multiple = 0; boss.fight = 1; // boss.bpattern = BOSS1_FIRE_NONE; enemy[boss.side1][e1].y_speed = 2000; enemy[boss.side1][e1].x_speed = 0; enemy[boss.side1][e1].a1 = 0; enemy[boss.side1][e1].b1 = 0; enemy[boss.side1][e1].c1 = 0; int i; for (i = 0; i < 10; i ++) { boss.old_angle [i] = 0; } boss.spot_angle = 0; boss.spot_angle_inc = 0; boss.spot_angle_inc_inc = 1; boss.move_time = 0; } void make_mb1_track(void) { boss.side1 = grand(2); if (boss.side1 == 0) boss.side2 = 1; else boss.side2 = 0; int e1 = create_enemy(boss.side1, ENEMY_MB1, 0, 160000, -80000, ANGLE_4, 0, 0, ATT3, ATT4, ATT5, ATT6, ATT7); // I guess I should check these values, but I don't think it's actually possible for these functions to fail here. boss.e1 = e1; boss.hp = 60000 + arena.difficulty * 6000; boss.max_hp = boss.hp; boss.moving = 0; boss.angle_1 = 0; boss.angle_2 = 0; boss.angle_3 = 0; boss.bflower_recycle = 100; boss.trecycle = 250; boss.bpattern = 0; boss.bpattern2 = 450; boss.btime = 200; boss.brecycle = 150; boss.fight = 1; enemy[boss.side1][e1].y_speed = 2000; enemy[boss.side1][e1].x_speed = 0; } excellent-bifurcation-0.0.20071015/src/display_init.c0000666000175000017500000027657610557724300021534 0ustar miriammiriam/* Angry Moth Copyright (C) 2006 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, 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 Licence for more details. You should have received a copy of the GNU General Public Licence along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The GPL version 2 is included in this distribution in a file called LICENCE.TXT. Use any text editor or the TYPE command to read it. You should be able to reach me by sending an email to l_henzell@yahoo.com.au. File: display_init.c History: This file contains: - functions which put stuff onto the screen */ #include "config.h" #include "allegro.h" #include #include #include "globvars.h" #include "palette.h" #include "stuff.h" #include "display.h" #include "menu.h" extern BITMAP *display [3]; extern RLE_SPRITE *aura_rle [2] [13]; extern RLE_SPRITE *player_rle [2] [21]; extern RLE_SPRITE *normal_player_rle [2] [7]; extern RLE_SPRITE *shock_rle [3] [20]; extern RLE_SPRITE *large_shock_rle [3] [50]; extern BITMAP *underlay; extern BITMAP *underlay2; extern struct RLE_STRUCT explode_rle [3] [40]; extern struct RLE_STRUCT triangle_bullet [3] [SMALL_ROTATIONS]; extern struct RLE_STRUCT diamond_bullet [3] [SMALL_ROTATIONS]; extern struct RLE_STRUCT star_bullet [3] [SMALL_ROTATIONS]; extern RLE_SPRITE *straight_bullet [2] [SMALL_ROTATIONS]; extern RLE_SPRITE *spin_bullet [2] [SMALL_ROTATIONS]; extern RLE_SPRITE *green_ring [40]; extern struct RLE_STRUCT eRLE_flower [5] [50]; extern struct RLE_STRUCT eRLE_twister [2] [MEDIUM_ROTATIONS]; extern struct RLE_STRUCT eRLE_attacker [3] [2] [2] [MEDIUM_ROTATIONS]; extern struct RLE_STRUCT eRLE_diver [2] [2] [MEDIUM_ROTATIONS]; // that's attacker#, tail or head, pole, number of rotations extern struct RLE_STRUCT eRLE_large [2] [LARGE_ERLES]; extern struct RLE_STRUCT shock2_rle [3] [20]; extern struct RLE_STRUCT large_shock2_rle [3] [50]; extern RLE_SPRITE *eRLE_basic1 [S_ENEMY_RLES]; extern RLE_SPRITE *basic_bullet [29]; extern RLE_SPRITE *eRLE_big [L_ENEMY_RLES]; extern RLE_SPRITE *platform_RLE [2] [PLATFORM_RLES]; extern RLE_SPRITE *exhaust [10]; extern RLE_SPRITE *multi_bullet [2] [5]; BITMAP *check_pattern; BITMAP *check_pattern2; //void new_bitmap(BITMAP *bmp, int x, int y, const char errtxt []); BITMAP *new_bitmap(int x, int y, const char errtxt []); RLE_SPRITE *new_rle_sprite(BITMAP *source, const char errtxt []); void new_rle_struct(BITMAP *source, const char errtxt [], struct RLE_STRUCT *str, int bl); void prepare_auras(void); void prepare_player_rles(void); void draw_ring(BITMAP *bmp, BITMAP *temp, int rad1, int rad2, int col, int pole, int fuzzy, int anchor); void prepare_shockwaves(void); void prepare_large_shockwaves(void); void prepare_shockwaves2(void); void prepare_large_shockwaves2(void); void prepare_explodes(void); void draw_fuzzy_circle(BITMAP *bmp, BITMAP *temp, int rad, int col, int fuzzy, int anchor); void prepare_underlay(void); void process_trans_bitmap(BITMAP *bmp, int x, int y); void convert_trans_bitmap(BITMAP *bmp, int x, int y); void prepare_large_enemy_rles(void); void prepare_s_enemy_rles(void); void prepare_glass_bullets(void); void convert_pole(BITMAP *bitmap, int pole); void convert_trans(BITMAP *source, int target); void prepare_twister(void); void prepare_attacker(void); void prepare_diver(void); void prepare_l_enemy_rles(void); void prepare_little_rles(void); void prepare_platform_rles(void); void prepare_green_rings(void); void prepare_flowers(void); void fix_trans(BITMAP *source); void extract_rle_struct(BITMAP *source, int x1, int y1, int x2, int y2, const char errtxt [], struct RLE_STRUCT *str, int bl); void prepare_small_sprites(void); BITMAP *load_up_bitmap(const char fname []); //void bordered_poly4(BITMAP *target, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int col); void bordered_poly4(BITMAP *target, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int col, int border_col, int fillx, int filly); void bordered_triangle(BITMAP *target, int x1, int y1, int x2, int y2, int x3, int y3, int col, int border_col, int fillx, int filly); RLE_SPRITE *sized_rle_sprite(BITMAP *source, int x, int y, const char errtxt []); RLE_SPRITE *extract_rle_sprite(BITMAP *source, int x_source, int y_source, int x, int y); RLE_SPRITE *extract_flip_rle_sprite(BITMAP *source, int x_source, int y_source, int x, int y, int flip_type); void fix_outline(BITMAP *source); void fix_underlay(BITMAP *source); extern RGB palet [256]; void prepare_display(void) { init_palette(); /* BITMAP *palt = new_bitmap(16, 16, "Palette"); int i, j; for (i = 0; i < 16; i ++) { for (j = 0; j < 16; j ++) { putpixel(palt, i, j, i + j * 16); } } save_bitmap("palt.bmp", palt, palet);*/ // save_bitmap(sfile, scrshot_bmp, palet); //display [0] = new_bitmap(320, 480, "Display 1"); // clear_bitmap(display [0]); // display [1] = new_bitmap(320, 480, "Display 2"); // clear_bitmap(display [1]); display [0] = new_bitmap(640, 480, "Display 1"); // left screen clear_bitmap(display [0]); display [1] = create_sub_bitmap(display [0], 320, 0, 320, 480); // right screen display [2] = create_sub_bitmap(display [0], 0, 0, 640, 480); // both screens - for score etc set_clip_rect(display[0], 0, 0, 320, 480); set_clip_rect(display[1], 0, 0, 320, 480); DATAFILE *datf = load_datafile("gfx//ebdata.dat"); if (datf == NULL) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Error: Couldn't find data.dat! \n"); allegro_message("\n\r"); exit(1); } //progress_update("Data.dat loaded"); font = (FONT *)datf[0].dat; loading_screen(); /* Annoying process of using font: I needed to create a new bitmap file in which colour 255 is the only one that's 0xffffff. Then paste the bmp into that. It's a pain. */ //prepare_auras(); prepare_s_enemy_rles(); prepare_l_enemy_rles(); prepare_platform_rles(); prepare_little_rles(); prepare_player_rles(); prepare_shockwaves(); prepare_large_shockwaves(); prepare_shockwaves2(); prepare_large_shockwaves2(); prepare_explodes(); prepare_underlay(); prepare_small_sprites(); prepare_twister(); //prepare_attacker(); // prepare_diver(); // prepare_large_enemy_rles(); prepare_green_rings(); prepare_flowers(); prepare_glass_bullets(); } void prepare_flowers(void) { BITMAP *tmp = new_bitmap(200, 200, "prepare_flowers"); clear_bitmap(tmp); int i, j, angle = 0; // Flower1 for (j = 0; j < 16; j ++) { angle = j * 8; for (i = 0; i < 8; i ++) { bordered_triangle(tmp, 50, 50, 50 + xpart(angle + (ANGLE_8 * i) - 42, 32), 50 + ypart(angle + (ANGLE_8 * i) - 42, 32), 50 + xpart(angle + (ANGLE_8 * i) + 42, 32), 50 + ypart(angle + (ANGLE_8 * i) + 42, 32), COL_LRED,COL_OUTLINE, 50 + xpart(angle + (ANGLE_8 * i), 10), 50 + ypart(angle + (ANGLE_8 * i), 10)); } circlefill(tmp, 50, 50, 9, COL_YELLOW); circle(tmp, 50, 50, 9, COL_OUTLINE); extract_rle_struct(tmp, 0, 0, 100, 100, "flower RLE", &eRLE_flower [0] [j], -1); clear_bitmap(tmp); } // Flower2: for (j = 0; j < 20; j ++) { angle = j * (ANGLE_5 / 20); for (i = 0; i < 5; i ++) { bordered_poly4(tmp, 50, 50, 50 + xpart(angle + (ANGLE_5 * i) - 46, 16), 50 + ypart(angle + (ANGLE_5 * i) - 46, 16), 50 + xpart(angle + (ANGLE_5 * i), 35), 50 + ypart(angle + (ANGLE_5 * i), 35), 50 + xpart(angle + (ANGLE_5 * i) + 46, 16), 50 + ypart(angle + (ANGLE_5 * i) + 46, 16), COL_DGREEN,COL_OUTLINE, 50 + xpart(angle + (ANGLE_5 * i), 10), 50 + ypart(angle + (ANGLE_5 * i), 10)); } angle = ANGLE_1 - angle; for (i = 0; i < 5; i ++) { bordered_poly4(tmp, 50, 50, 50 + xpart(angle + (ANGLE_5 * i) - 56, 16), 50 + ypart(angle + (ANGLE_5 * i) - 56, 16), 50 + xpart(angle + (ANGLE_5 * i), 45), 50 + ypart(angle + (ANGLE_5 * i), 45), 50 + xpart(angle + (ANGLE_5 * i) + 56, 16), 50 + ypart(angle + (ANGLE_5 * i) + 56, 16), COL_LBLUE,COL_OUTLINE, 50 + xpart(angle + (ANGLE_5 * i), 10), 50 + ypart(angle + (ANGLE_5 * i), 10)); } circlefill(tmp, 50, 50, 8, COL_LRED); circle(tmp, 50, 50, 8, COL_OUTLINE); extract_rle_struct(tmp, 0, 0, 100, 100, "flower RLE", &eRLE_flower [1] [j], -1); clear_bitmap(tmp); } // Flower 3 for (j = 0; j < 20; j ++) { angle = j * (ANGLE_5 / 20); for (i = 0; i < 5; i ++) { bordered_poly4(tmp, 50, 50, 50 + xpart(angle + (ANGLE_5 * i) - 46, 23), 50 + ypart(angle + (ANGLE_5 * i) - 46, 23), 50 + xpart(angle + (ANGLE_5 * i), 30), 50 + ypart(angle + (ANGLE_5 * i), 30), 50 + xpart(angle + (ANGLE_5 * i) + 46, 23), 50 + ypart(angle + (ANGLE_5 * i) + 46, 23), COL_WHITE,COL_OUTLINE, 50 + xpart(angle + (ANGLE_5 * i), 10), 50 + ypart(angle + (ANGLE_5 * i), 10)); } angle = ANGLE_1 - angle; for (i = 0; i < 5; i ++) { bordered_triangle(tmp, 50, 50, 50 + xpart(angle + (ANGLE_5 * i) - 56, 36), 50 + ypart(angle + (ANGLE_5 * i) - 56, 36), 50 + xpart(angle + (ANGLE_5 * i) + 56, 36), 50 + ypart(angle + (ANGLE_5 * i) + 56, 36), COL_LRED,COL_OUTLINE, 50 + xpart(angle + (ANGLE_5 * i), 10), 50 + ypart(angle + (ANGLE_5 * i), 10)); } circlefill(tmp, 50, 50, 8, COL_LBLUE); circle(tmp, 50, 50, 8, COL_OUTLINE); extract_rle_struct(tmp, 0, 0, 100, 100, "flower RLE", &eRLE_flower [2] [j], -1); clear_bitmap(tmp); } // Flower 4 int x = 50; int y = 50; for (j = 0; j < 20; j ++) { angle = j * (ANGLE_8 / 20); for (i = 0; i < 8; i ++) { circlefill(tmp, x + xpart(angle + ANGLE_8 * i, 27), y + ypart(angle + ANGLE_8 * i, 27), 7, COL_YELLOW); circle(tmp, x + xpart(angle + ANGLE_8 * i, 27), y + ypart(angle + ANGLE_8 * i, 27), 7, COL_OUTLINE); } angle = ANGLE_1 - angle; for (i = 0; i < 16; i ++) { circlefill(tmp, x + xpart(angle + ANGLE_16 * i, 19), y + ypart(angle + ANGLE_16 * i, 19), 3, COL_DRED); circle(tmp, x + xpart(angle + ANGLE_16 * i, 19), y + ypart(angle + ANGLE_16 * i, 19), 3, COL_OUTLINE); } circlefill(tmp, 50, 50, 8, COL_YELLOW); circle(tmp, 50, 50, 8, COL_OUTLINE); extract_rle_struct(tmp, 0, 0, 100, 100, "flower RLE", &eRLE_flower [3] [j], -1); clear_bitmap(tmp); } // Flower5 for (j = 0; j < 32; j ++) { angle = j * 8; for (i = 0; i < 4; i ++) { bordered_triangle(tmp, 50, 50, 50 + xpart(angle + (ANGLE_4 * i) - 42, 32), 50 + ypart(angle + (ANGLE_4 * i) - 42, 32), 50 + xpart(angle + (ANGLE_4 * i) + 42, 32), 50 + ypart(angle + (ANGLE_4 * i) + 42, 32), COL_DBLUE,COL_OUTLINE, 50 + xpart(angle + (ANGLE_4 * i), 10), 50 + ypart(angle + (ANGLE_4 * i), 10)); } angle = ANGLE_1 - angle; for (i = 0; i < 4; i ++) { bordered_triangle(tmp, 50, 50, 50 + xpart(angle + (ANGLE_4 * i) - 36, 36), 50 + ypart(angle + (ANGLE_4 * i) - 36, 36), 50 + xpart(angle + (ANGLE_4 * i) + 36, 36), 50 + ypart(angle + (ANGLE_4 * i) + 36, 36), COL_LBLUE,COL_OUTLINE, 50 + xpart(angle + (ANGLE_4 * i), 10), 50 + ypart(angle + (ANGLE_4 * i), 10)); } circlefill(tmp, 50, 50, 9, COL_LBLUE); circle(tmp, 50, 50, 9, COL_OUTLINE); extract_rle_struct(tmp, 0, 0, 100, 100, "flower RLE", &eRLE_flower [4] [j], -1); clear_bitmap(tmp); } destroy_bitmap(tmp); } void prepare_auras(void) { /* int i, j; BITMAP *temp_bmp1 = new_bitmap(51, 51, "aura temp1"); BITMAP *temp_bmp2 = new_bitmap(51, 51, "aura temp2"); check_pattern = new_bitmap(2, 2, "aura check pattern"); clear_bitmap(check_pattern); putpixel(check_pattern, 0, 0, 0); putpixel(check_pattern, 1, 1, 0); putpixel(check_pattern, 1, 0, 1); putpixel(check_pattern, 0, 1, 1); check_pattern2 = new_bitmap(4, 4, "aura check pattern2"); clear_bitmap(check_pattern2); putpixel(check_pattern2, 0, 0, 1); putpixel(check_pattern2, 2, 2, 1); putpixel(check_pattern2, 3, 0, 1); putpixel(check_pattern2, 0, 3, 1); // clear_bitmap(check_pattern2); int col1 = TRANS_WHITE1; int col2 = TRANS_WHITE2; int col3 = TRANS_WHITE3; for (i = 0; i < 2; i ++) { if (i == 1) { col1 = TRANS_BLACK1; col2 = TRANS_BLACK2; col3 = TRANS_BLACK3; } for (j = 0; j < 10; j ++) { clear_bitmap(temp_bmp1); clear_bitmap(temp_bmp2); // if (i == 0) circlefill(temp_bmp2, 25, 25, 14, col1); // else // circlefill(temp_bmp2, 25, 25, 14, TRANS_BLACK1); if (j >= 8) draw_ring(temp_bmp2, temp_bmp1, 23 - (j * 1.5), 14 - j, col1, i, 8, j % 4); else draw_ring(temp_bmp2, temp_bmp1, 25 - (j * 1.5), 12 - j, col1, i, 8, j % 4); if (j < 8) draw_ring(temp_bmp2, temp_bmp1, 24 - (j * 1.5), 16 - j, col2, i, 8, j % 4); if (j < 6) draw_ring(temp_bmp2, temp_bmp1, 23 - (j * 1.5), 19 - j, col3, i, 8, j % 4); // if (j < 3) // draw_ring(temp_bmp2, temp_bmp1, 22 - (j * 1.5), 21 - j, TRANS_WHITE4, i, j % 4); // draw_ring(temp_bmp2, temp_bmp1, 22, 19, TRANS_WHITE5, i); // draw_ring(temp_bmp2, temp_bmp1, 23, 21, TRANS_WHITE6, i); aura_rle [i] [j] = get_rle_sprite(temp_bmp2); } clear_bitmap(temp_bmp1); clear_bitmap(temp_bmp2); circlefill(temp_bmp2, 25, 25, 14, col1); draw_ring(temp_bmp2, temp_bmp1, 23, 14, col1, i, 8, 1); draw_ring(temp_bmp2, temp_bmp1, 25, 17, col2, i, 8, 1); draw_ring(temp_bmp2, temp_bmp1, 24, 20, col3, i, 8, 1); // draw_ring(temp_bmp2, temp_bmp1, 23, 22, TRANS_WHITE4, i, 1); aura_rle [i] [10] = get_rle_sprite(temp_bmp2); clear_bitmap(temp_bmp1); clear_bitmap(temp_bmp2); if (i == 0) circlefill(temp_bmp2, 25, 25, 14, col1); else circlefill(temp_bmp2, 25, 25, 14, col1); draw_ring(temp_bmp2, temp_bmp1, 24, 11, col1, i, 8, 2); draw_ring(temp_bmp2, temp_bmp1, 23, 15, col2, i, 8, 2); draw_ring(temp_bmp2, temp_bmp1, 22, 18, col3, i, 8, 2); // draw_ring(temp_bmp2, temp_bmp1, 23, 22, TRANS_WHITE4, i, 2); aura_rle [i] [11] = get_rle_sprite(temp_bmp2); clear_bitmap(temp_bmp1); clear_bitmap(temp_bmp2); if (i == 0) circlefill(temp_bmp2, 25, 25, 14, col1); else circlefill(temp_bmp2, 25, 25, 14, col1); draw_ring(temp_bmp2, temp_bmp1, 25, 12, col1, i, 8, 3); draw_ring(temp_bmp2, temp_bmp1, 24, 16, col2, i, 8, 3); draw_ring(temp_bmp2, temp_bmp1, 23, 19, col3, i, 8, 3); // draw_ring(temp_bmp2, temp_bmp1, 23, 22, TRANS_WHITE4, i, 3); aura_rle [i] [12] = get_rle_sprite(temp_bmp2); } destroy_bitmap(temp_bmp1); destroy_bitmap(temp_bmp2); destroy_bitmap(check_pattern); destroy_bitmap(check_pattern2);*/ } void prepare_shockwaves(void) { int i, j, size; BITMAP *temp_bmp1; BITMAP *temp_bmp2; check_pattern = new_bitmap(2, 2, "shock check pattern"); clear_bitmap(check_pattern); putpixel(check_pattern, 0, 0, 0); putpixel(check_pattern, 1, 1, 0); putpixel(check_pattern, 1, 0, 1); putpixel(check_pattern, 0, 1, 1); check_pattern2 = new_bitmap(4, 4, "shock check pattern2"); clear_bitmap(check_pattern2); putpixel(check_pattern2, 0, 0, 1); putpixel(check_pattern2, 2, 2, 1); putpixel(check_pattern2, 3, 0, 1); putpixel(check_pattern2, 0, 3, 1); int col1 = TRANS_DDRED; int col2 = TRANS_DRED; int col3 = TRANS_LRED; int col4 = TRANS_YELLOW; int rad1, rad2, fuzzy; i = 0; for (i = 0; i < 3; i ++) { switch(i) { case 1: // 0 is set above col1 = TRANS_DDGREEN; col2 = TRANS_DGREEN; col3 = TRANS_LGREEN; col4 = TRANS_YELLOW; break; case 2: // 0 is set above col1 = TRANS_DDBLUE; col2 = TRANS_DBLUE; col3 = TRANS_LBLUE; col4 = TRANS_WHITE; break; } for (j = 0; j < 20; j ++) { size = (20 + j) * 2 + 1; temp_bmp1 = new_bitmap(size, size, "shock temp1"); temp_bmp2 = new_bitmap(size, size, "shock temp2"); clear_bitmap(temp_bmp1); clear_bitmap(temp_bmp2); rad1 = 20 + j; rad2 = j * 2; fuzzy = rad1 - rad2; if (fuzzy > 12) fuzzy = 12; if (rad1 > rad2) draw_ring(temp_bmp2, temp_bmp1, rad1, rad2, col1, i, fuzzy, j % 4); rad1 = 20 + j; rad2 = j * 2 + 3; fuzzy = rad1 - rad2; if (fuzzy > 12) fuzzy = 12; if (rad1 > rad2) draw_ring(temp_bmp2, temp_bmp1, rad1, rad2, col2, i, fuzzy, j % 4); rad1 = 20 + j; rad2 = j * 2 + 6; fuzzy = rad1 - rad2; if (fuzzy > 12) fuzzy = 12; if (rad1 > rad2) draw_ring(temp_bmp2, temp_bmp1, rad1, rad2, col3, i, fuzzy, j % 4); rad1 = 19 + j; rad2 = j * 2 + 9; fuzzy = rad1 - rad2; if (fuzzy > 12) fuzzy = 12; if (rad1 > rad2) draw_ring(temp_bmp2, temp_bmp1, rad1, rad2, col4, i, fuzzy, j % 4); /* rad1 = 18 + j; rad2 = j * 2 + 12; fuzzy = rad1 - rad2; if (fuzzy > 12) fuzzy = 12; if (rad1 > rad2) draw_ring(temp_bmp2, temp_bmp1, rad1, rad2, col1 + 48, i, fuzzy, j % 4); rad1 = 17 + j; rad2 = j * 2 + 15; fuzzy = rad1 - rad2; if (fuzzy > 12) fuzzy = 12; if (rad1 > rad2) draw_ring(temp_bmp2, temp_bmp1, rad1, rad2, col1 + 60, i, fuzzy, j % 4);*/ // draw_ring(temp_bmp2, temp_bmp1, 20 + j, j * 2, col1 + 60, i, 8 - j / 3, j % 4); shock_rle [i] [j] = get_rle_sprite(temp_bmp2); destroy_bitmap(temp_bmp1); destroy_bitmap(temp_bmp2); } } destroy_bitmap(check_pattern); destroy_bitmap(check_pattern2); } void prepare_large_shockwaves(void) { int i, j, size; BITMAP *temp_bmp1; BITMAP *temp_bmp2; check_pattern = new_bitmap(2, 2, "L shock check pattern"); clear_bitmap(check_pattern); putpixel(check_pattern, 0, 0, 0); putpixel(check_pattern, 1, 1, 0); putpixel(check_pattern, 1, 0, 1); putpixel(check_pattern, 0, 1, 1); check_pattern2 = new_bitmap(4, 4, "L shock check pattern2"); clear_bitmap(check_pattern2); putpixel(check_pattern2, 0, 0, 1); putpixel(check_pattern2, 2, 2, 1); putpixel(check_pattern2, 3, 0, 1); putpixel(check_pattern2, 0, 3, 1); int col1 = TRANS_DDRED; int col2 = TRANS_DRED; int col3 = TRANS_LRED; int col4 = TRANS_YELLOW; int rad1, rad2, fuzzy; i = 0; for (i = 0; i < 3; i ++) { switch(i) { case 1: // 0 is set above col1 = TRANS_DDGREEN; col2 = TRANS_DGREEN; col3 = TRANS_LGREEN; col4 = TRANS_YELLOW; break; case 2: // 0 is set above col1 = TRANS_DDBLUE; col2 = TRANS_DDBLUE; col3 = TRANS_DBLUE; col4 = TRANS_LBLUE; break; } for (j = 0; j < 50; j ++) { size = (50 + j) * 2 + 1; temp_bmp1 = new_bitmap(size, size, "L shock temp1"); temp_bmp2 = new_bitmap(size, size, "L shock temp2"); clear_bitmap(temp_bmp1); clear_bitmap(temp_bmp2); rad1 = 50 + j; rad2 = j * 2 + 20; fuzzy = rad1 - rad2; if (fuzzy > 12) fuzzy = 12; if (rad1 > rad2) draw_ring(temp_bmp2, temp_bmp1, rad1, rad2, col1, i, fuzzy, j % 4); rad1 = 50 + j; rad2 = j * 2 + 23; fuzzy = rad1 - rad2; if (fuzzy > 12) fuzzy = 12; if (rad1 > rad2) draw_ring(temp_bmp2, temp_bmp1, rad1, rad2, col2, i, fuzzy, j % 4); rad1 = 50 + j; rad2 = j * 2 + 26; fuzzy = rad1 - rad2; if (fuzzy > 12) fuzzy = 12; if (rad1 > rad2) draw_ring(temp_bmp2, temp_bmp1, rad1, rad2, col3, i, fuzzy, j % 4); rad1 = 49 + j; rad2 = j * 2 + 29; fuzzy = rad1 - rad2; if (fuzzy > 12) fuzzy = 12; if (rad1 > rad2) draw_ring(temp_bmp2, temp_bmp1, rad1, rad2, col4, i, fuzzy, j % 4); /* rad1 = 48 + j; rad2 = j * 2 + 32; fuzzy = rad1 - rad2; if (fuzzy > 12) fuzzy = 12; if (rad1 > rad2) draw_ring(temp_bmp2, temp_bmp1, rad1, rad2, col1 + 48, i, fuzzy, j % 4); rad1 = 47 + j; rad2 = j * 2 + 35; fuzzy = rad1 - rad2; if (fuzzy > 12) fuzzy = 12; if (rad1 > rad2) draw_ring(temp_bmp2, temp_bmp1, rad1, rad2, col1 + 60, i, fuzzy, j % 4);*/ // draw_ring(temp_bmp2, temp_bmp1, 20 + j, j * 2, col1 + 60, i, 8 - j / 3, j % 4); large_shock_rle [i] [j] = get_rle_sprite(temp_bmp2); destroy_bitmap(temp_bmp1); destroy_bitmap(temp_bmp2); } } destroy_bitmap(check_pattern); destroy_bitmap(check_pattern2); } void prepare_shockwaves2(void) { int i, j; BITMAP *tmp = new_bitmap(90, 90, "prepare_shockwaves2 tmp bitmap"); int col [4] = {TRANS_YELLOW, TRANS_LRED, TRANS_DRED, TRANS_DDRED}; int rad1, rad2, c1, c2; i = 0; for (i = 0; i < 3; i ++) { switch(i) { case 1: // 0 is set above col [3] = TRANS_DDGREEN; col [2] = TRANS_DGREEN; col [1] = TRANS_LGREEN; col [0] = TRANS_YELLOW; break; case 2: // 0 is set above col [3] = TRANS_DDBLUE; col [2] = TRANS_DBLUE; col [1] = TRANS_LBLUE; col [0] = TRANS_WHITE; break; } rad1 = 30; rad2 = 1; c1 = col [0]; c2 = col [1]; for (j = 0; j < 20; j ++) { clear_bitmap(tmp); rad2 += 2; if (j % 2 == 0) rad1 ++; /* if (j > 8) c2 = col[1]; if (j > 13) c2 = col[2]; if (j > 17) c2 = col[3]; if (j > 13) c1 = col[1]; if (j > 15) c1 = col[2]; if (j > 17) c1 = col[3];*/ circlefill(tmp, 45, 45, rad1, c2); circle(tmp, 45, 45, rad1, c1); circlefill(tmp, 45, 45, rad2, 0); circle(tmp, 45, 45, rad2, c1); new_rle_struct(tmp, "shockwaves2 rle", &shock2_rle [i] [j], -1); } } destroy_bitmap(tmp); } void prepare_large_shockwaves2(void) { int i, j; BITMAP *tmp = new_bitmap(200, 200, "prepare_large_shockwaves2 tmp bitmap"); int col [4] = {TRANS_YELLOW, TRANS_LRED, TRANS_DRED, TRANS_DDRED}; int rad1, rad2, c1, c2; i = 0; for (i = 0; i < 3; i ++) { switch(i) { case 1: // 0 is set above col [3] = TRANS_DDGREEN; col [2] = TRANS_DGREEN; col [1] = TRANS_LGREEN; col [0] = TRANS_YELLOW; break; case 2: // 0 is set above col [3] = TRANS_DDBLUE; col [2] = TRANS_DBLUE; col [1] = TRANS_LBLUE; col [0] = TRANS_WHITE; break; } rad1 = 30; rad2 = 1; c1 = col [0]; c2 = col [1]; for (j = 0; j < 50; j ++) { clear_bitmap(tmp); if (j > 10) rad2 += 2; // if (j % 2 == 0) rad1 ++; /* if (j > 10) c2 = col[1]; if (j > 34) c2 = col[2]; if (j > 45) c2 = col[3]; if (j > 40) c1 = col[1]; if (j > 44) c1 = col[2]; if (j > 47) c1 = col[3];*/ circlefill(tmp, 100, 100, rad1, c2); circle(tmp, 100, 100, rad1, c1); circlefill(tmp, 100, 100, rad2, 0); circle(tmp, 100, 100, rad2, c1); new_rle_struct(tmp, "large_shockwaves2 rle", &large_shock2_rle [i] [j], -1); } } destroy_bitmap(tmp); } /* void prepare_shockwaves(void) { int i, j; BITMAP *temp_bmp1 = new_bitmap(81, 81, "shock temp1"); BITMAP *temp_bmp2 = new_bitmap(81, 81, "shock temp2"); check_pattern = new_bitmap(2, 2, "shock check pattern"); clear_bitmap(check_pattern); putpixel(check_pattern, 0, 0, 0); putpixel(check_pattern, 1, 1, 0); putpixel(check_pattern, 1, 0, 1); putpixel(check_pattern, 0, 1, 1); check_pattern2 = new_bitmap(4, 4, "shock check pattern2"); clear_bitmap(check_pattern2); putpixel(check_pattern2, 0, 0, 1); putpixel(check_pattern2, 2, 2, 1); putpixel(check_pattern2, 3, 0, 1); putpixel(check_pattern2, 0, 3, 1); int col1 = TRANS_WHITE1; int rad1, rad2, fuzzy; for (i = 0; i < 3; i ++) { switch(i) { case 0: col1 = TRANS_WHITE1; break; case 1: col1 = TRANS_BLACK1; break; case 2: col1 = TRANS_YELLOW1; break; } for (j = 0; j < 20; j ++) { clear_bitmap(temp_bmp1); clear_bitmap(temp_bmp2); rad1 = 20 + j; rad2 = j * 2; fuzzy = rad1 - rad2; if (fuzzy > 12) fuzzy = 12; if (rad1 > rad2) draw_ring(temp_bmp2, temp_bmp1, rad1, rad2, col1, i, fuzzy, j % 4); rad1 = 20 + j; rad2 = j * 2 + 3; fuzzy = rad1 - rad2; if (fuzzy > 12) fuzzy = 12; if (rad1 > rad2) draw_ring(temp_bmp2, temp_bmp1, rad1, rad2, col1 + 12, i, fuzzy, j % 4); rad1 = 20 + j; rad2 = j * 2 + 6; fuzzy = rad1 - rad2; if (fuzzy > 12) fuzzy = 12; if (rad1 > rad2) draw_ring(temp_bmp2, temp_bmp1, rad1, rad2, col1 + 24, i, fuzzy, j % 4); rad1 = 19 + j; rad2 = j * 2 + 9; fuzzy = rad1 - rad2; if (fuzzy > 12) fuzzy = 12; if (rad1 > rad2) draw_ring(temp_bmp2, temp_bmp1, rad1, rad2, col1 + 36, i, fuzzy, j % 4); rad1 = 18 + j; rad2 = j * 2 + 12; fuzzy = rad1 - rad2; if (fuzzy > 12) fuzzy = 12; if (rad1 > rad2) draw_ring(temp_bmp2, temp_bmp1, rad1, rad2, col1 + 48, i, fuzzy, j % 4); rad1 = 17 + j; rad2 = j * 2 + 15; fuzzy = rad1 - rad2; if (fuzzy > 12) fuzzy = 12; if (rad1 > rad2) draw_ring(temp_bmp2, temp_bmp1, rad1, rad2, col1 + 60, i, fuzzy, j % 4); // draw_ring(temp_bmp2, temp_bmp1, 20 + j, j * 2, col1 + 60, i, 8 - j / 3, j % 4); shock_rle [i] [j] = get_rle_sprite(temp_bmp2); } } destroy_bitmap(temp_bmp1); destroy_bitmap(temp_bmp2); destroy_bitmap(check_pattern); destroy_bitmap(check_pattern2); } */ void prepare_explodes(void) { int i, j, size; BITMAP *temp_bmp1; BITMAP *temp_bmp2; check_pattern = new_bitmap(2, 2, "explode check pattern"); putpixel(check_pattern, 0, 0, 0); putpixel(check_pattern, 1, 1, 0); putpixel(check_pattern, 1, 0, 1); putpixel(check_pattern, 0, 1, 1); check_pattern2 = new_bitmap(4, 4, "explode check pattern2"); clear_bitmap(check_pattern2); putpixel(check_pattern2, 0, 0, 1); putpixel(check_pattern2, 2, 2, 1); putpixel(check_pattern2, 3, 0, 1); putpixel(check_pattern2, 0, 3, 1); int col1 = TRANS_DDRED; int col2 = TRANS_DRED; int col3 = TRANS_LRED; int col4 = TRANS_YELLOW; int rad, fuzzy; i = 0; for (i = 0; i < 3; i ++) { switch(i) { // case 0: col1 = TRANS_WHITE1; break; case 1: col1 = TRANS_DDGREEN; col2 = TRANS_DGREEN; col3 = TRANS_LGREEN; col4 = TRANS_YELLOW; break; // case 2: col1 = TRANS_YELLOW1; break; case 2: col1 = TRANS_DDBLUE; col2 = TRANS_DBLUE; col3 = TRANS_LBLUE; col4 = TRANS_WHITE; break; } for (j = 3; j < 38; j ++) { size = ((j * 160) / 100) * 2 + 4; temp_bmp1 = new_bitmap(size, size, "explode temp1"); temp_bmp2 = new_bitmap(size, size, "explode temp2"); clear_bitmap(temp_bmp1); clear_bitmap(temp_bmp2); rad = (j * 160) / 100 + 0; fuzzy = 2; if (rad <= 7) fuzzy = 1; if (rad <= 1) fuzzy = 0; rad = (j * 160) / 100 + 0; draw_fuzzy_circle(temp_bmp2, temp_bmp1, rad, col1, fuzzy, (j + 1) % 4); rad = (j * 140) / 100 + 0; draw_fuzzy_circle(temp_bmp2, temp_bmp1, rad, col2, fuzzy, j % 4); rad = (j * 110) / 100 + 2; if (j > 1) draw_fuzzy_circle(temp_bmp2, temp_bmp1, rad, col3, fuzzy, (j + 3) % 4); // rad = (j * 100) / 100 + 1; //if (j > 2) draw_fuzzy_circle(temp_bmp2, temp_bmp1, rad, col4, fuzzy, (j + 2) % 4); rad = (j * 100) / 100 - 1; if (rad > 0) draw_fuzzy_circle(temp_bmp2, temp_bmp1, rad, col4, fuzzy, (j + 2) % 4); // explode_rle [i] [j + 2] = get_rle_sprite(temp_bmp2); new_rle_struct(temp_bmp2, "explode_rle", &explode_rle [i] [j + 2], -1); destroy_bitmap(temp_bmp1); destroy_bitmap(temp_bmp2); } /* temp_bmp1 = new_bitmap(5, 5, "explode 5x5 temp2"); clear_bitmap(temp_bmp1); putpixel(temp_bmp1, temp_bmp1->w / 2, temp_bmp1->w / 2, col1); putpixel(temp_bmp1, temp_bmp1->w / 2 + 1, temp_bmp1->w / 2, col2); putpixel(temp_bmp1, temp_bmp1->w / 2 - 1, temp_bmp1->w / 2, col2); putpixel(temp_bmp1, temp_bmp1->w / 2, temp_bmp1->w / 2 + 1, col2); putpixel(temp_bmp1, temp_bmp1->w / 2, temp_bmp1->w / 2 - 1, col2); explode_rle [i] [1] = get_rle_sprite(temp_bmp1); clear_bitmap(temp_bmp1); putpixel(temp_bmp1, temp_bmp1->w / 2, temp_bmp1->w / 2, col1); explode_rle [i] [0] = get_rle_sprite(temp_bmp1); destroy_bitmap(temp_bmp1);*/ } destroy_bitmap(check_pattern); destroy_bitmap(check_pattern2); BITMAP *file_bitmap = load_up_bitmap("gfx//explodes.bmp"); fix_trans(file_bitmap); // new_rle_struct(, "explode_rle", explode_rle [i] [j + 2], -1); extract_rle_struct(file_bitmap, 1, 1, 3, 3, "small explodes", &explode_rle [0] [0], -1); extract_rle_struct(file_bitmap, 21, 1, 5, 5, "small explodes", &explode_rle [0] [1], -1); extract_rle_struct(file_bitmap, 41, 1, 8, 8, "small explodes", &explode_rle [0] [2], -1); extract_rle_struct(file_bitmap, 61, 1, 10, 10, "small explodes", &explode_rle [0] [3], -1); extract_rle_struct(file_bitmap, 81, 1, 11, 11, "small explodes", &explode_rle [0] [4], -1); /* explode_rle [0] [0] = extract_rle_sprite(file_bitmap, 1, 1, 3, 3); explode_rle [0] [1] = extract_rle_sprite(file_bitmap, 21, 1, 5, 5); explode_rle [0] [2] = extract_rle_sprite(file_bitmap, 41, 1, 8, 8); explode_rle [0] [3] = extract_rle_sprite(file_bitmap, 61, 1, 10, 10); explode_rle [0] [4] = extract_rle_sprite(file_bitmap, 81, 1, 11, 11);*/ BITMAP *green_ex = new_bitmap(106, 21, "green_ex"); blit(file_bitmap, green_ex, 0, 0, 0, 0, 106, 21); convert_trans(green_ex, TRANS_LGREEN); extract_rle_struct(green_ex, 1, 1, 3, 3, "small explodes", &explode_rle [1] [0], -1); extract_rle_struct(green_ex, 21, 1, 5, 5, "small explodes", &explode_rle [1] [1], -1); extract_rle_struct(green_ex, 41, 1, 8, 8, "small explodes", &explode_rle [1] [2], -1); extract_rle_struct(green_ex, 61, 1, 10, 10, "small explodes", &explode_rle [1] [3], -1); extract_rle_struct(green_ex, 81, 1, 11, 11, "small explodes", &explode_rle [1] [4], -1); /* explode_rle [1] [0] = extract_rle_sprite(green_ex, 1, 1, 3, 3); explode_rle [1] [1] = extract_rle_sprite(green_ex, 21, 1, 5, 5); explode_rle [1] [2] = extract_rle_sprite(green_ex, 41, 1, 8, 8); explode_rle [1] [3] = extract_rle_sprite(green_ex, 61, 1, 10, 10); explode_rle [1] [4] = extract_rle_sprite(green_ex, 81, 1, 11, 11);*/ BITMAP *blue_ex = new_bitmap(106, 21, "blue_ex"); blit(file_bitmap, blue_ex, 0, 0, 0, 0, 106, 21); convert_trans(blue_ex, TRANS_LBLUE); extract_rle_struct(blue_ex, 1, 1, 3, 3, "small explodes", &explode_rle [2] [0], -1); extract_rle_struct(blue_ex, 21, 1, 5, 5, "small explodes", &explode_rle [2] [1], -1); extract_rle_struct(blue_ex, 41, 1, 8, 8, "small explodes", &explode_rle [2] [2], -1); extract_rle_struct(blue_ex, 61, 1, 10, 10, "small explodes", &explode_rle [2] [3], -1); extract_rle_struct(blue_ex, 81, 1, 11, 11, "small explodes", &explode_rle [2] [4], -1); /* explode_rle [2] [0] = extract_rle_sprite(blue_ex, 1, 1, 3, 3); explode_rle [2] [1] = extract_rle_sprite(blue_ex, 21, 1, 5, 5); explode_rle [2] [2] = extract_rle_sprite(blue_ex, 41, 1, 8, 8); explode_rle [2] [3] = extract_rle_sprite(blue_ex, 61, 1, 10, 10); explode_rle [2] [4] = extract_rle_sprite(blue_ex, 81, 1, 11, 11);*/ destroy_bitmap(file_bitmap); destroy_bitmap(green_ex); destroy_bitmap(blue_ex); /* BITMAP *saving = new_bitmap(200, 20, "saving"); clear_bitmap(saving); hline(saving, 0, 0, 200, COL_WHITE); for (i = 0; i < 10; i ++) { vline(saving, i * 20, 0, 20, COL_WHITE); draw_rle_sprite(saving, explode_rle [0] [i], i * 20 + 1, 1); } save_bitmap("explode.bmp", saving, palet); */ } void prepare_glass_bullets(void) { int i, j, k; BITMAP *temp_bitmap; temp_bitmap = new_bitmap(25, 25, "prepare_glass_bullets"); int col [4] = {TRANS_YELLOW, TRANS_LRED, TRANS_DRED, TRANS_DDRED}; // int col [4] = {TRANS_WHITE, TRANS_YELLOW, TRANS_LRED, TRANS_DRED}; int inc = ANGLE_1 / SMALL_ROTATIONS; int angle; int o; for (o = 0; o < 3; o ++) { switch (o) { case 1: col [0] = TRANS_YELLOW; col [1] = TRANS_LGREEN; col [2] = TRANS_DGREEN; col [3] = TRANS_DDGREEN; break; case 2: col [0] = TRANS_WHITE; col [1] = TRANS_LBLUE; col [2] = TRANS_DBLUE; col [3] = TRANS_DDBLUE; break; } for (i = 0; i < SMALL_ROTATIONS; i ++) { clear_bitmap(temp_bitmap); angle = i * inc; bordered_triangle(temp_bitmap, 10 + xpart(angle, 7), 10 + ypart(angle, 7), 10 + xpart(angle + ANGLE_4 + ANGLE_8, 7), 10 + ypart(angle + ANGLE_4 + ANGLE_8, 7), 10 + xpart(angle - ANGLE_4 - ANGLE_8, 7), 10 + ypart(angle - ANGLE_4 - ANGLE_8, 7), col [2], col [0], 10, 10); for (j = 0; j < 20; j ++) { for (k = 0; k < 20; k ++) { if (getpixel(temp_bitmap, j, k) != col [0] && (getpixel(temp_bitmap, j + 1, k) == col [0] || getpixel(temp_bitmap, j - 1, k) == col [0] || getpixel(temp_bitmap, j, k + 1) == col [0] || getpixel(temp_bitmap, j, k - 1) == col [0])) putpixel(temp_bitmap, j, k, col [1]); } } new_rle_struct(temp_bitmap, "prepare_glass_bullets", &triangle_bullet [o] [i], -1); // Now let's make diamond bullets: clear_bitmap(temp_bitmap); angle = i * inc; bordered_poly4(temp_bitmap, 10 + xpart(angle, 7), 10 + ypart(angle, 7), 10 + xpart(angle + ANGLE_4, 4), 10 + ypart(angle + ANGLE_4, 4), 10 - xpart(angle, 7), 10 - ypart(angle, 7), 10 + xpart(angle - ANGLE_4, 4), 10 - ypart(angle + ANGLE_4, 4), col [2], col [0], 10, 10); for (j = 0; j < 20; j ++) { for (k = 0; k < 20; k ++) { if (getpixel(temp_bitmap, j, k) != col [0] && (getpixel(temp_bitmap, j + 1, k) == col [0] || getpixel(temp_bitmap, j - 1, k) == col [0] || getpixel(temp_bitmap, j, k + 1) == col [0] || getpixel(temp_bitmap, j, k - 1) == col [0])) putpixel(temp_bitmap, j, k, col [1]); } } new_rle_struct(temp_bitmap, "prepare_glass_bullets", &diamond_bullet [o] [i], -1); // Star bullets! clear_bitmap(temp_bitmap); angle = i * inc; line(temp_bitmap, 12 + xpart(angle, 9), 12 + ypart(angle, 9), 12 + xpart(angle + ANGLE_8, 4), 12 + ypart(angle + ANGLE_8, 4), col [0]); line(temp_bitmap, 12 + xpart(angle + ANGLE_8, 4), 12 + ypart(angle + ANGLE_8, 4), 12 + xpart(angle + ANGLE_4, 9), 12 + ypart(angle + ANGLE_4, 9), col [0]); line(temp_bitmap, 12 + xpart(angle + ANGLE_4, 9), 12 + ypart(angle + ANGLE_4, 9), 12 + xpart(angle + ANGLE_4 + ANGLE_8, 4), 12 + ypart(angle + ANGLE_4 + ANGLE_8, 4), col [0]); line(temp_bitmap, 12 + xpart(angle + ANGLE_4 + ANGLE_8, 4), 12 + ypart(angle + ANGLE_4 + ANGLE_8, 4), 12 + xpart(angle + ANGLE_2, 9), 12 + ypart(angle + ANGLE_2, 9), col [0]); line(temp_bitmap, 12 + xpart(angle + ANGLE_2, 9), 12 + ypart(angle + ANGLE_2, 9), 12 + xpart(angle + ANGLE_2 + ANGLE_8, 4), 12 + ypart(angle + ANGLE_2 + ANGLE_8, 4), col [0]); line(temp_bitmap, 12 + xpart(angle + ANGLE_2 + ANGLE_8, 4), 12 + ypart(angle + ANGLE_2 + ANGLE_8, 4), 12 + xpart(angle + ANGLE_2 + ANGLE_4, 9), 12 + ypart(angle + ANGLE_2 + ANGLE_4, 9), col [0]); line(temp_bitmap, 12 + xpart(angle + ANGLE_2 + ANGLE_4, 9), 12 + ypart(angle + ANGLE_2 + ANGLE_4, 9), 12 + xpart(angle + ANGLE_2 + ANGLE_4 + ANGLE_8, 4), 12 + ypart(angle + ANGLE_2 + ANGLE_4 + ANGLE_8, 4), col [0]); line(temp_bitmap, 12 + xpart(angle + ANGLE_2 + ANGLE_4 + ANGLE_8, 4), 12 + ypart(angle + ANGLE_2 + ANGLE_4 + ANGLE_8, 4), 12 + xpart(angle, 9), 12 + ypart(angle, 9), col [0]); floodfill(temp_bitmap, 12, 12, col [2]); for (j = 0; j < 20; j ++) { for (k = 0; k < 20; k ++) { if (getpixel(temp_bitmap, j, k) != col [0] && (getpixel(temp_bitmap, j + 1, k) == col [0] || getpixel(temp_bitmap, j - 1, k) == col [0] || getpixel(temp_bitmap, j, k + 1) == col [0] || getpixel(temp_bitmap, j, k - 1) == col [0])) putpixel(temp_bitmap, j, k, col [1]); } } new_rle_struct(temp_bitmap, "prepare_glass_bullets", &star_bullet [o] [i], -1); } } destroy_bitmap(temp_bitmap); } void prepare_green_rings(void) { int i, rad; BITMAP *temp_bitmap; for (i = 0; i < 40; i ++) { rad = (i + 2) * 2; temp_bitmap = new_bitmap(rad, rad, "prepare_green_rings"); clear_bitmap(temp_bitmap); circlefill(temp_bitmap, i + 2, i + 2, i + 1, TRANS_DGREEN); circlefill(temp_bitmap, i + 2, i + 2, i, TRANS_LGREEN); if (i > 0) circlefill(temp_bitmap, i + 2, i + 2, i - 1, TRANS_YELLOW); if (i > 1) circlefill(temp_bitmap, i + 2, i + 2, i - 2, TRANS_LGREEN); if (i > 2) circlefill(temp_bitmap, i + 2, i + 2, i - 3, TRANS_DGREEN); if (i > 3) circlefill(temp_bitmap, i + 2, i + 2, i - 4, 0); green_ring [i] = get_rle_sprite(temp_bitmap); destroy_bitmap(temp_bitmap); } } /* void prepare_explodes(void) { int i, j; BITMAP *temp_bmp1 = new_bitmap(81, 81, "explode temp1"); BITMAP *temp_bmp2 = new_bitmap(81, 81, "explode temp2"); check_pattern = new_bitmap(2, 2, "explode check pattern"); putpixel(check_pattern, 0, 0, 0); putpixel(check_pattern, 1, 1, 0); putpixel(check_pattern, 1, 0, 1); putpixel(check_pattern, 0, 1, 1); check_pattern2 = new_bitmap(4, 4, "explode check pattern2"); clear_bitmap(check_pattern2); putpixel(check_pattern2, 0, 0, 1); putpixel(check_pattern2, 2, 2, 1); putpixel(check_pattern2, 3, 0, 1); putpixel(check_pattern2, 0, 3, 1); int col1 = TRANS_WHITE1; int rad, fuzzy; for (i = 0; i < 3; i ++) { switch(i) { case 0: col1 = TRANS_WHITE1; break; case 1: col1 = TRANS_BLACK1; break; case 2: col1 = TRANS_YELLOW1; break; } for (j = 0; j < 18; j ++) { // j = k + 2; clear_bitmap(temp_bmp1); clear_bitmap(temp_bmp2); rad = (j * 160) / 100 + 0; fuzzy = 2; if (rad <= 7) fuzzy = 1; if (rad <= 1) fuzzy = 0; rad = (j * 160) / 100 + 0; draw_fuzzy_circle(temp_bmp2, temp_bmp1, rad, col1, fuzzy, (j + 1) % 4); rad = (j * 140) / 100 + 0; draw_fuzzy_circle(temp_bmp2, temp_bmp1, rad, col1 + 12, fuzzy, j % 4); rad = (j * 110) / 100 + 2; if (j > 1) draw_fuzzy_circle(temp_bmp2, temp_bmp1, rad, col1 + 24, fuzzy, (j + 3) % 4); rad = (j * 100) / 100 + 1; draw_fuzzy_circle(temp_bmp2, temp_bmp1, rad, col1 + 36, fuzzy, (j + 2) % 4); rad = (j * 110) / 100 + 0; draw_fuzzy_circle(temp_bmp2, temp_bmp1, rad, col1 + 48, fuzzy, (j + 1) % 4); rad = j + 0; if (j > 1) draw_fuzzy_circle(temp_bmp2, temp_bmp1, rad, col1 + 60, fuzzy, (j) % 4); explode_rle [i] [j + 2] = get_rle_sprite(temp_bmp2); } clear_bitmap(temp_bmp2); putpixel(temp_bmp1, 40, 40, col1 + 60); putpixel(temp_bmp1, 41, 40, col1 + 48); putpixel(temp_bmp1, 39, 40, col1 + 48); putpixel(temp_bmp1, 40, 41, col1 + 48); putpixel(temp_bmp1, 40, 39, col1 + 48); putpixel(temp_bmp1, 41, 39, col1 + 24); putpixel(temp_bmp1, 41, 41, col1 + 24); putpixel(temp_bmp1, 39, 41, col1 + 24); putpixel(temp_bmp1, 39, 39, col1 + 24); explode_rle [i] [1] = get_rle_sprite(temp_bmp2); clear_bitmap(temp_bmp2); putpixel(temp_bmp1, 40, 40, col1 + 36); putpixel(temp_bmp1, 41, 40, col1 + 12); putpixel(temp_bmp1, 39, 40, col1 + 12); putpixel(temp_bmp1, 40, 41, col1 + 12); putpixel(temp_bmp1, 40, 39, col1 + 12); putpixel(temp_bmp1, 41, 39, col1); putpixel(temp_bmp1, 41, 41, col1); putpixel(temp_bmp1, 39, 41, col1); putpixel(temp_bmp1, 39, 39, col1); explode_rle [i] [0] = get_rle_sprite(temp_bmp2); } destroy_bitmap(temp_bmp1); destroy_bitmap(temp_bmp2); destroy_bitmap(check_pattern); destroy_bitmap(check_pattern2); } */ void draw_fuzzy_circle(BITMAP *bmp, BITMAP *temp, int rad, int col, int fuzzy, int anchor) { clear_bitmap(temp); int middle = temp->w / 2; circlefill(temp, middle, middle, rad, col); drawing_mode(DRAW_MODE_MASKED_PATTERN, check_pattern, anchor % 2, 0); circlefill(temp, middle, middle, rad + fuzzy, col); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); draw_sprite(bmp, temp, 0, 0); } void draw_ring(BITMAP *bmp, BITMAP *temp, int rad1, int rad2, int col, int pole, int fuzzy, int anchor) { clear_bitmap(temp); // if (pole == 1) // col += 72; int middle = temp->w / 2; circlefill(temp, middle, middle, rad1, col); circlefill(temp, middle, middle, rad2, 0); drawing_mode(DRAW_MODE_MASKED_PATTERN, check_pattern, anchor % 2, 0); circlefill(temp, middle, middle, rad2, col); circlefill(temp, middle, middle, rad2 - fuzzy, 0); drawing_mode(DRAW_MODE_MASKED_PATTERN, check_pattern2, anchor, 0); // circlefill(temp, 25, 25, rad2 - 4, col); // circlefill(temp, 25, 25, rad2 - 8, 0); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); draw_sprite(bmp, temp, 0, 0); } /* void draw_hollow_circle(BITMAP *bmp, int x, int y, int rad1, int rad2, int col) { BITMAP *temp_bmp = new_bitmap(rad1 * 2 + 1, rad1 * 2 + 1, "hollow circle"); clear_bitmap(temp_bitmap); circlefill(temp_bitmap, x, y, destroy_bitmap(temp_bmp); } */ void prepare_player_rles(void) { BITMAP *file_bitmap = load_up_bitmap("gfx//player.bmp"); BITMAP *temp_bitmap1 = new_bitmap(37, 30, "Prepare player_rles temp_bitmap1"); // BITMAP *temp_bitmap2 = new_bitmap(14, 14, "Prepare player_res temp_bitmap2"); // int i, j; fix_outline(file_bitmap); clear_bitmap(temp_bitmap1); blit(file_bitmap, temp_bitmap1, 1, 1, 0, 0, 21, 13); // player_rle [0] [0] = get_rle_sprite(temp_bitmap1); // clear_bitmap(temp_bitmap1); // blit(file_bitmap, temp_bitmap1, 32, 1, 0, 0, 29, 25); // player_rle [1] [0] = get_rle_sprite(temp_bitmap1); player_rle [0] [0] = extract_rle_sprite(file_bitmap, 1, 1, 21, 13); player_rle [0] [1] = extract_rle_sprite(file_bitmap, 32, 1, 21, 13); player_rle [0] [2] = extract_rle_sprite(file_bitmap, 63, 1, 21, 13); player_rle [0] [3] = extract_rle_sprite(file_bitmap, 94, 1, 21, 13); player_rle [0] [4] = extract_rle_sprite(file_bitmap, 125, 1, 21, 13); player_rle [0] [5] = extract_rle_sprite(file_bitmap, 156, 1, 21, 13); player_rle [0] [6] = extract_flip_rle_sprite(file_bitmap, 32, 1, 21, 13, 0); player_rle [0] [7] = extract_flip_rle_sprite(file_bitmap, 63, 1, 21, 13, 0); player_rle [0] [8] = extract_flip_rle_sprite(file_bitmap, 94, 1, 21, 13, 0); player_rle [0] [9] = extract_flip_rle_sprite(file_bitmap, 125, 1, 21, 13, 0); player_rle [0] [10] = extract_flip_rle_sprite(file_bitmap, 156, 1, 21, 13, 0); player_rle [1] [0] = extract_rle_sprite(file_bitmap, 1, 32, 29, 25); player_rle [1] [1] = extract_rle_sprite(file_bitmap, 32, 32, 29, 25); player_rle [1] [2] = extract_rle_sprite(file_bitmap, 63, 32, 29, 25); player_rle [1] [3] = extract_rle_sprite(file_bitmap, 94, 32, 29, 25); player_rle [1] [4] = extract_rle_sprite(file_bitmap, 125, 32, 29, 25); player_rle [1] [5] = extract_rle_sprite(file_bitmap, 156, 32, 29, 25); player_rle [1] [6] = extract_flip_rle_sprite(file_bitmap, 32, 32, 29, 25, 0); player_rle [1] [7] = extract_flip_rle_sprite(file_bitmap, 63, 32, 29, 25, 0); player_rle [1] [8] = extract_flip_rle_sprite(file_bitmap, 94, 32, 29, 25, 0); player_rle [1] [9] = extract_flip_rle_sprite(file_bitmap, 125, 32, 29, 25, 0); player_rle [1] [10] = extract_flip_rle_sprite(file_bitmap, 156, 32, 29, 25, 0); /* for (i = 0; i < 2; i ++) { for (j = 0; j < 20; j ++) { clear_bitmap(temp_bitmap1); blit(file_bitmap, temp_bitmap1, j * 37 + 1, i * 30 + 1, 0, 0, 36, 29); player_rle [i] [j] = get_rle_sprite(temp_bitmap1); } }*/ /* for (i = 0; i < 2; i ++) { for (j = 0; j < 7; j ++) { clear_bitmap(temp_bitmap1); blit(file_bitmap, temp_bitmap1, j * 37 + 1, i * 30 + 1 + 62, 0, 0, 36, 29); normal_player_rle [i] [j] = get_rle_sprite(temp_bitmap1); } } */ destroy_bitmap(file_bitmap); destroy_bitmap(temp_bitmap1); /* int xc; int xc2; int size_adjust = 0; int i; int j; int x = 18, y = 9; int col1 = COLOUR_11, col2 = COLOUR_10, col3 = COLOUR_9; BITMAP *temp = new_bitmap(37, 30, "player temp"); for (i = 0; i < 2; i ++) { if (i == 1) { col1 = COLOUR_1; col2 = COLOUR_2; col3 = COLOUR_3; } for (j = 0; j < 20; j ++) { col1 = COLOUR_11 - j / 3; col2 = COLOUR_10 - j / 3; col3 = COLOUR_9 - j / 3; if (i == 1) { col1 = COLOUR_11 - j / 3; col2 = COLOUR_10 - j / 3; col3 = COLOUR_9 - j / 3; } clear_bitmap(temp); xc = xpart(j * 26, 15) + 15; size_adjust = xpart(j * 17 + ANGLE_4, 2); rectfill(temp, x - 16 + xc, y - 2 - size_adjust, x - 13 + xc, y + 9 + size_adjust, col3); rect(temp, x - 16 + xc, y - 2 - size_adjust, x - 13 + xc, y + 9 + size_adjust, COLOUR_8); xc = xpart(j * 26, 11) + 10; rectfill(temp, x - 13 + xc + size_adjust, y - 5 - size_adjust, x - 7 + xc - size_adjust, y + 18 + size_adjust, col2); rect(temp, x - 13 + xc + size_adjust, y - 5 - size_adjust, x - 7 + xc - size_adjust, y + 18 + size_adjust, COLOUR_8); xc = xpart(j * 26, 8) + 7; rectfill(temp, x - 7 + xc, y - 1, x - 3, y + 4, col3); rect(temp, x - 7 + xc, y - 1, x - 3, y + 4, COLOUR_8); hline(temp, x - 3, y - 1, x + 3, col3); rectfill(temp, x - 3, y - 0, x + 3, y + 7, col1); rect(temp, x - 3, y - 0, x + 3, y + 7, COLOUR_8); xc = xpart(j * 26, 7) + 7; xc2 = xpart(j * 26, 4) + 3; rectfill(temp, x + 3 - xc2, y - 1, x + 7 - xc, y + 4, col3); rect(temp, x + 3 - xc2, y - 1, x + 7 - xc, y + 4, COLOUR_8); xc = xpart(j * 26, 11) + 10; rectfill(temp, x + 13 - xc - size_adjust, y - 5 + size_adjust, x + 7 - xc + size_adjust, y + 18 - size_adjust, col2); rect(temp, x + 13 - xc - size_adjust, y - 5 + size_adjust, x + 7 - xc + size_adjust, y + 18 - size_adjust, COLOUR_8); xc = xpart(j * 26, 15) + 15; rectfill(temp, x + 16 - xc - size_adjust, y - 2 + size_adjust, x + 13 - xc + size_adjust, y + 9 - size_adjust, col3); rect(temp, x + 16 - xc - size_adjust, y - 2 + size_adjust, x + 13 - xc + size_adjust, y + 9 - size_adjust, COLOUR_8); // textprintf_ex(temp, font, 10, 10, COLOUR_1, -1, "%i", j); player_rle [i] [j] = get_rle_sprite(temp); } } int halved = 0; for (i = 0; i < 2; i ++) { if (i == 1) { col1 = COLOUR_1; col2 = COLOUR_2; col3 = COLOUR_3; } else { col1 = COLOUR_11; col2 = COLOUR_10; col3 = COLOUR_9; } for (j = -3; j < 4; j ++) { if (j < 0) halved = ANGLE_2; else halved = 0; clear_bitmap(temp); xc = xpart(j * 26 + halved, 15) + 15; size_adjust = xpart(j * 17 + ANGLE_4 + halved, 2); rectfill(temp, x - 16 + xc, y - 2 - size_adjust, x - 13 + xc, y + 9 + size_adjust, col3); rect(temp, x - 16 + xc, y - 2 - size_adjust, x - 13 + xc, y + 9 + size_adjust, COLOUR_8); xc = xpart(j * 26 + halved, 11) + 10; rectfill(temp, x - 13 + xc + size_adjust, y - 5 - size_adjust, x - 7 + xc - size_adjust, y + 18 + size_adjust, col2); rect(temp, x - 13 + xc + size_adjust, y - 5 - size_adjust, x - 7 + xc - size_adjust, y + 18 + size_adjust, COLOUR_8); xc = xpart(j * 26 + halved, 8) + 7; // rectfill(temp, x - 7 + xc, y - 1, x - 3, y + 4, col3); // rect(temp, x - 7 + xc, y - 1, x - 3, y + 4, COLOUR_8); rectfill(temp, x - 8 + xc, y - 1, x - 3, y + 4, col3); rect(temp, x - 8 + xc, y - 1, x - 3, y + 4, COLOUR_8); hline(temp, x - 3, y - 1, x + 3, col3); hline(temp, x - 3, y - 2, x + 3, COLOUR_8); rectfill(temp, x - 3, y - 0, x + 3, y + 7, col1); rect(temp, x - 3, y - 0, x + 3, y + 7, COLOUR_8); xc = xpart(j * 26 + halved, 7) + 7; xc2 = xpart(j * 26 + halved, 4) + 3; rectfill(temp, x + 3 - xc2, y - 1, x + 7 - xc, y + 4, col3); rect(temp, x + 3 - xc2, y - 1, x + 7 - xc, y + 4, COLOUR_8); xc = xpart(j * 26 + halved, 11) + 10; rectfill(temp, x + 13 - xc - size_adjust, y - 5 + size_adjust, x + 7 - xc + size_adjust, y + 18 - size_adjust, col2); rect(temp, x + 13 - xc - size_adjust, y - 5 + size_adjust, x + 7 - xc + size_adjust, y + 18 - size_adjust, COLOUR_8); xc = xpart(j * 26 + halved, 15) + 15; rectfill(temp, x + 16 - xc - size_adjust, y - 2 + size_adjust, x + 13 - xc + size_adjust, y + 9 - size_adjust, col3); rect(temp, x + 16 - xc - size_adjust, y - 2 + size_adjust, x + 13 - xc + size_adjust, y + 9 - size_adjust, COLOUR_8); // textprintf_ex(temp, font, 10, 10, COLOUR_1, -1, "%i", j); normal_player_rle [i] [j + 3] = get_rle_sprite(temp); } } destroy_bitmap(temp); */ /* BITMAP *tmp = new_bitmap(750, 150, "big"); clear_bitmap(tmp); for (i = 0; i < 2; i ++) { for (j = 0; j < 20; j ++) { draw_rle_sprite(tmp, player_rle [i] [j], j * 37, i * 30); rect(tmp, j * 37, i * 30, j * 37 + 37, i * 30 + 30, TRANS_PURPLE2); } } for (i = 0; i < 2; i ++) { for (j = 0; j < 7; j ++) { draw_rle_sprite(tmp, normal_player_rle [i] [j], j * 37, i * 30 + 62); rect(tmp, j * 37, i * 30 + 62, j * 37 + 37, i * 30 + 30 + 62, TRANS_PURPLE2); } } save_bitmap("player.bmp", tmp, palet); */ } void prepare_platform_rles(void) { BITMAP *file_bitmap = load_up_bitmap("gfx//platform.bmp"); fix_outline(file_bitmap); int i; for (i = 0; i < 2; i ++) { platform_RLE [i] [PLATFORM_LR] = extract_rle_sprite(file_bitmap, 1 + FILE_PLATFORM_LR * 56, 1 + i * 56, 55, 55); platform_RLE [i] [PLATFORM_UD] = extract_rle_sprite(file_bitmap, 1 + FILE_PLATFORM_UD * 56, 1 + i * 56, 55, 55); platform_RLE [i] [PLATFORM_LR_TLR] = extract_rle_sprite(file_bitmap, 1 + FILE_PLATFORM_LR_TLR * 56, 1 + i * 56, 55, 55); platform_RLE [i] [PLATFORM_LR_TL] = extract_rle_sprite(file_bitmap, 1 + FILE_PLATFORM_LR_TL * 56, 1 + i * 56, 55, 55); platform_RLE [i] [PLATFORM_LR_TR] = extract_flip_rle_sprite(file_bitmap, 1 + FILE_PLATFORM_LR_TL * 56, 1 + i * 56, 55, 55, 0); platform_RLE [i] [PLATFORM_UD_TUD] = extract_rle_sprite(file_bitmap, 1 + FILE_PLATFORM_UD_TUD * 56, 1 + i * 56, 55, 55); platform_RLE [i] [PLATFORM_UD_TU] = extract_rle_sprite(file_bitmap, 1 + FILE_PLATFORM_UD_TU * 56, 1 + i * 56, 55, 55); platform_RLE [i] [PLATFORM_UD_TD] = extract_flip_rle_sprite(file_bitmap, 1 + FILE_PLATFORM_UD_TU * 56, 1 + i * 56, 55, 55, 1); platform_RLE [i] [PLATFORM_UL] = extract_rle_sprite(file_bitmap, 1 + FILE_PLATFORM_UL * 56, 1 + i * 56, 55, 55); platform_RLE [i] [PLATFORM_DL] = extract_flip_rle_sprite(file_bitmap, 1 + FILE_PLATFORM_UL * 56, 1 + i * 56, 55, 55, 1); platform_RLE [i] [PLATFORM_UR] = extract_flip_rle_sprite(file_bitmap, 1 + FILE_PLATFORM_UL * 56, 1 + i * 56, 55, 55, 0); platform_RLE [i] [PLATFORM_DR] = extract_flip_rle_sprite(file_bitmap, 1 + FILE_PLATFORM_UL * 56, 1 + i * 56, 55, 55, 2); platform_RLE [i] [PLATFORM_UDL] = extract_rle_sprite(file_bitmap, 1 + FILE_PLATFORM_UDL * 56, 1 + i * 56, 55, 55); platform_RLE [i] [PLATFORM_UDR] = extract_flip_rle_sprite(file_bitmap, 1 + FILE_PLATFORM_UDL * 56, 1 + i * 56, 55, 55, 0); platform_RLE [i] [PLATFORM_ULR] = extract_rle_sprite(file_bitmap, 1 + FILE_PLATFORM_ULR * 56, 1 + i * 56, 55, 55); platform_RLE [i] [PLATFORM_DLR] = extract_flip_rle_sprite(file_bitmap, 1 + FILE_PLATFORM_ULR * 56, 1 + i * 56, 55, 55, 1); platform_RLE [i] [PLATFORM_L] = extract_rle_sprite(file_bitmap, 1 + FILE_PLATFORM_L * 56, 1 + i * 56, 55, 55); platform_RLE [i] [PLATFORM_R] = extract_flip_rle_sprite(file_bitmap, 1 + FILE_PLATFORM_L * 56, 1 + i * 56, 55, 55, 0); platform_RLE [i] [PLATFORM_U] = extract_rle_sprite(file_bitmap, 1 + FILE_PLATFORM_U * 56, 1 + i * 56, 55, 55); platform_RLE [i] [PLATFORM_D] = extract_flip_rle_sprite(file_bitmap, 1 + FILE_PLATFORM_U * 56, 1 + i * 56, 55, 55, 1); platform_RLE [i] [PLATFORM_UR] = extract_flip_rle_sprite(file_bitmap, 1 + FILE_PLATFORM_UL * 56, 1 + i * 56, 55, 55, 0); platform_RLE [i] [PLATFORM_DR] = extract_flip_rle_sprite(file_bitmap, 1 + FILE_PLATFORM_UL * 56, 1 + i * 56, 55, 55, 2); platform_RLE [i] [PLATFORM_NODE] = extract_rle_sprite(file_bitmap, 1 + FILE_PLATFORM_NODE * 56, 1 + i * 56, 55, 55); } destroy_bitmap(file_bitmap); } void prepare_s_enemy_rles(void) { BITMAP *file_bitmap = load_up_bitmap("gfx//s_enemy.bmp"); fix_outline(file_bitmap); // BITMAP *temp_bitmap1 = new_bitmap(30, 30, "Prepare s_enemy_rles temp_bitmap1"); //int i, j; // clear_bitmap(temp_bitmap1); // blit(file_bitmap, temp_bitmap1, i * 30 + 1, 1, 0, 0, 36, 29); //RLE_SPRITE [0] = sized_rle_sprite(BITMAP *source, int x, int y, const char errtxt []) eRLE_basic1 [S_ENEMY_BASIC1_CENTRE] = extract_rle_sprite(file_bitmap, 1, 1, 17, 17); eRLE_basic1 [S_ENEMY_BASIC1_LWING] = extract_rle_sprite(file_bitmap, 32, 1, 13, 22); eRLE_basic1 [S_ENEMY_BASIC1_RWING] = extract_flip_rle_sprite(file_bitmap, 32, 1, 13, 22, 0); eRLE_basic1 [S_ENEMY_GLIDER1_LFOOT] = extract_rle_sprite(file_bitmap, 63, 1, 29, 26); eRLE_basic1 [S_ENEMY_GLIDER1_RFOOT] = extract_flip_rle_sprite(file_bitmap, 63, 1, 29, 26, 0); eRLE_basic1 [S_ENEMY_BASIC2_1] = extract_flip_rle_sprite(file_bitmap, 94, 1, 30, 21, 1); eRLE_basic1 [S_ENEMY_BASIC2_2] = extract_flip_rle_sprite(file_bitmap, 125, 1, 30, 21, 1); eRLE_basic1 [S_ENEMY_BASIC2_3] = extract_flip_rle_sprite(file_bitmap, 156, 1, 30, 21, 1); eRLE_basic1 [S_ENEMY_BASIC2_4] = extract_flip_rle_sprite(file_bitmap, 125, 1, 30, 21, 2); eRLE_basic1 [S_ENEMY_BASIC2_5] = extract_flip_rle_sprite(file_bitmap, 156, 1, 30, 21, 2); eRLE_basic1 [S_ENEMY_CARRIER_LWING1] = extract_rle_sprite(file_bitmap, 187, 1, 11, 15); eRLE_basic1 [S_ENEMY_CARRIER_RWING1] = extract_flip_rle_sprite(file_bitmap, 187, 1, 11, 15, 0); eRLE_basic1 [S_ENEMY_CARRIER_LWING2] = extract_rle_sprite(file_bitmap, 199, 1, 16, 23); eRLE_basic1 [S_ENEMY_CARRIER_RWING2] = extract_flip_rle_sprite(file_bitmap, 199, 1, 16, 23, 0); eRLE_basic1 [S_ENEMY_BASIC3] = extract_rle_sprite(file_bitmap, 187, 1, 27, 15); eRLE_basic1 [S_ENEMY_BASIC3_LFOOT] = extract_rle_sprite(file_bitmap, 189, 16, 12, 15); eRLE_basic1 [S_ENEMY_BASIC3_RFOOT] = extract_rle_sprite(file_bitmap, 200, 16, 12, 15); eRLE_basic1 [S_ENEMY_CROSS_L] = extract_rle_sprite(file_bitmap, 218, 1, 10, 22); eRLE_basic1 [S_ENEMY_CROSS_R] = extract_flip_rle_sprite(file_bitmap, 218, 1, 10, 22, 0); eRLE_basic1 [S_ENEMY_CROSS2_1] = extract_rle_sprite(file_bitmap, 249, 10, 8, 12); eRLE_basic1 [S_ENEMY_CROSS2_2] = extract_flip_rle_sprite(file_bitmap, 249, 10, 8, 21, 0); eRLE_basic1 [S_ENEMY_CROSS2_3] = extract_rle_sprite(file_bitmap, 249, 1, 15, 9); eRLE_basic1 [S_ENEMY_BFIGHTER_1] = extract_flip_rle_sprite(file_bitmap, 280, 1, 19, 20, 1); eRLE_basic1 [S_ENEMY_BFIGHTER_2] = extract_flip_rle_sprite(file_bitmap, 311, 1, 19, 20, 1); eRLE_basic1 [S_ENEMY_BFIGHTER_3] = extract_flip_rle_sprite(file_bitmap, 342, 1, 19, 20, 1); eRLE_basic1 [S_ENEMY_BFIGHTER_4] = extract_flip_rle_sprite(file_bitmap, 311, 1, 19, 20, 2); eRLE_basic1 [S_ENEMY_BFIGHTER_5] = extract_flip_rle_sprite(file_bitmap, 342, 1, 19, 20, 2); /* eRLE_basic1 [S_ENEMY_CROSS2_1] = extract_rle_sprite(file_bitmap, 249, 1, 15, 21); eRLE_basic1 [S_ENEMY_CROSS2_2] = extract_rle_sprite(file_bitmap, 280, 1, 15, 24); eRLE_basic1 [S_ENEMY_CROSS2_3] = extract_rle_sprite(file_bitmap, 311, 1, 15, 28);*/ /* eRLE_basic1 [2] = extract_flip_rle_sprite(file_bitmap, 32, 1, 13, 22, 0); eRLE_basic1 [3] = extract_rle_sprite(file_bitmap, 63, 1, 18, 16); eRLE_basic1 [4] = extract_rle_sprite(file_bitmap, 94, 1, 15, 23); eRLE_basic1 [5] = extract_flip_rle_sprite(file_bitmap, 94, 1, 15, 23, 2); eRLE_basic1 [6] = extract_rle_sprite(file_bitmap, 125, 1, 17, 17); eRLE_basic1 [7] = extract_rle_sprite(file_bitmap, 156, 1, 14, 24); eRLE_basic1 [8] = extract_flip_rle_sprite(file_bitmap, 156, 1, 14, 24, 2); eRLE_basic1 [9] = extract_flip_rle_sprite(file_bitmap, 63, 1, 18, 16, 0); eRLE_basic1 [10] = extract_flip_rle_sprite(file_bitmap, 94, 1, 15, 23, 0); eRLE_basic1 [11] = extract_flip_rle_sprite(file_bitmap, 94, 1, 15, 23, 1); eRLE_basic1 [12] = extract_flip_rle_sprite(file_bitmap, 125, 1, 18, 16, 0); eRLE_basic1 [13] = extract_flip_rle_sprite(file_bitmap, 156, 1, 15, 23, 0); eRLE_basic1 [14] = extract_flip_rle_sprite(file_bitmap, 156, 1, 15, 23, 1);*/ destroy_bitmap(file_bitmap); // destroy_bitmap(temp_bitmap1); } void prepare_l_enemy_rles(void) { BITMAP *file_bitmap = load_up_bitmap("gfx//l_enemy.bmp"); fix_outline(file_bitmap); // eRLE_big [0] = extract_rle_sprite(file_bitmap, 1, 1, 82, 99); eRLE_big [L_ENEMY_GLIDER1] = extract_rle_sprite(file_bitmap, 1, 1, 87, 64); eRLE_big [L_ENEMY_SHOTTER1] = extract_rle_sprite(file_bitmap, 102, 1, 109, 74); eRLE_big [L_ENEMY_ZAPPER1] = extract_rle_sprite(file_bitmap, 212, 1, 89, 69); eRLE_big [L_ENEMY_DIPPER1_1] = extract_rle_sprite(file_bitmap, 313, 1, 47, 42); eRLE_big [L_ENEMY_DIPPER1_2] = extract_rle_sprite(file_bitmap, 362, 1, 47, 42); eRLE_big [L_ENEMY_DIPPER1_3] = extract_rle_sprite(file_bitmap, 411, 1, 47, 42); eRLE_big [L_ENEMY_DIPPER2_1] = extract_rle_sprite(file_bitmap, 313, 44, 47, 44); eRLE_big [L_ENEMY_DIPPER2_2] = extract_rle_sprite(file_bitmap, 362, 44, 47, 44); eRLE_big [L_ENEMY_DIPPER2_3] = extract_rle_sprite(file_bitmap, 411, 44, 47, 44); // eRLE_big [L_ENEMY_CARRIER] = extract_rle_sprite(file_bitmap, 460, 1, 37, 45); eRLE_big [L_ENEMY_CARRIER] = extract_rle_sprite(file_bitmap, 498, 1, 45, 45); eRLE_big [L_ENEMY_CARRIER_LWING1] = extract_rle_sprite(file_bitmap, 498, 65, 35, 32); eRLE_big [L_ENEMY_CARRIER_RWING1] = extract_flip_rle_sprite(file_bitmap, 498, 65, 35, 32, 0); eRLE_big [L_ENEMY_CARRIER_LWING2] = extract_flip_rle_sprite(file_bitmap, 498, 65, 35, 32, 1); eRLE_big [L_ENEMY_CARRIER_RWING2] = extract_flip_rle_sprite(file_bitmap, 498, 65, 35, 32, 2); eRLE_big [L_ENEMY_BURSTER] = extract_rle_sprite(file_bitmap, 546, 1, 27, 27); eRLE_big [L_ENEMY_BURSTER_LWING1] = extract_rle_sprite(file_bitmap, 546, 29, 30, 30); eRLE_big [L_ENEMY_BURSTER_RWING1] = extract_flip_rle_sprite(file_bitmap, 546, 29, 30, 30, 0); eRLE_big [L_ENEMY_BURSTER_LWING2] = extract_rle_sprite(file_bitmap, 546, 60, 27, 27); eRLE_big [L_ENEMY_BURSTER_RWING2] = extract_flip_rle_sprite(file_bitmap, 546, 60, 27, 27, 0); eRLE_big [L_ENEMY_BEAMER1] = extract_rle_sprite(file_bitmap, 577, 1, 69, 67); eRLE_big [L_ENEMY_BEAMER1_LFIN] = extract_rle_sprite(file_bitmap, 647, 1, 22, 53); eRLE_big [L_ENEMY_BEAMER1_RFIN] = extract_flip_rle_sprite(file_bitmap, 647, 1, 22, 53, 0); eRLE_big [L_ENEMY_BEAMER1_LFIN2] = extract_flip_rle_sprite(file_bitmap, 647, 1, 22, 53, 1); eRLE_big [L_ENEMY_BEAMER1_RFIN2] = extract_flip_rle_sprite(file_bitmap, 647, 1, 22, 53, 2); eRLE_big [L_ENEMY_BOSS1] = extract_rle_sprite(file_bitmap, 670, 1, 95, 93); eRLE_big [L_ENEMY_BOSS1_L1] = extract_rle_sprite(file_bitmap, 767, 1, 22, 71); eRLE_big [L_ENEMY_BOSS1_L2] = extract_flip_rle_sprite(file_bitmap, 790, 1, 22, 71, 2); eRLE_big [L_ENEMY_BOSS1_R1] = extract_flip_rle_sprite(file_bitmap, 790, 1, 22, 71, 1); eRLE_big [L_ENEMY_BOSS1_R2] = extract_flip_rle_sprite(file_bitmap, 767, 1, 22, 71, 0); eRLE_big [L_ENEMY_WINGS_L] = extract_rle_sprite(file_bitmap, 816, 3, 20, 45); eRLE_big [L_ENEMY_WINGS_R] = extract_flip_rle_sprite(file_bitmap, 816, 3, 20, 45, 0); eRLE_big [L_ENEMY_MB2_L] = extract_rle_sprite(file_bitmap, 859, 9, 31, 71); eRLE_big [L_ENEMY_MB2_R] = extract_flip_rle_sprite(file_bitmap, 859, 9, 31, 71, 0); eRLE_big [L_ENEMY_MB1] = extract_rle_sprite(file_bitmap, 915, 8, 149, 62); /* eRLE_basic1 [1] = extract_rle_sprite(file_bitmap, 32, 1, 13, 22); eRLE_basic1 [2] = extract_flip_rle_sprite(file_bitmap, 32, 1, 13, 22, 0); eRLE_basic1 [3] = extract_rle_sprite(file_bitmap, 63, 1, 18, 16); eRLE_basic1 [4] = extract_rle_sprite(file_bitmap, 94, 1, 15, 23); eRLE_basic1 [5] = extract_flip_rle_sprite(file_bitmap, 94, 1, 15, 23, 2); eRLE_basic1 [6] = extract_rle_sprite(file_bitmap, 125, 1, 17, 17); eRLE_basic1 [7] = extract_rle_sprite(file_bitmap, 156, 1, 14, 24); eRLE_basic1 [8] = extract_flip_rle_sprite(file_bitmap, 156, 1, 14, 24, 2); eRLE_basic1 [9] = extract_flip_rle_sprite(file_bitmap, 63, 1, 18, 16, 0); eRLE_basic1 [10] = extract_flip_rle_sprite(file_bitmap, 94, 1, 15, 23, 0); eRLE_basic1 [11] = extract_flip_rle_sprite(file_bitmap, 94, 1, 15, 23, 1); eRLE_basic1 [12] = extract_flip_rle_sprite(file_bitmap, 125, 1, 18, 16, 0); eRLE_basic1 [13] = extract_flip_rle_sprite(file_bitmap, 156, 1, 15, 23, 0); eRLE_basic1 [14] = extract_flip_rle_sprite(file_bitmap, 156, 1, 15, 23, 1); */ destroy_bitmap(file_bitmap); // destroy_bitmap(temp_bitmap1); } void fix_outline(BITMAP *source) { int i, j, px; for (i = 0; i < source->w; i ++) { for (j = 0; j < source->h; j ++) { px = getpixel(source, i, j); switch(px) { case 17: putpixel(source, i, j, COL_OUTLINE); break; } } } } void fix_underlay(BITMAP *source) { int i, j, px; for (i = 0; i < source->w; i ++) { for (j = 0; j < source->h; j ++) { px = getpixel(source, i, j); if (px == COL_LOWER_BG1 || px == COL_OUTLINE) continue; if (getpixel(source, i + 1, j) == COL_LOWER_BG1) putpixel(source, i + 1, j, COL_OUTLINE); if (getpixel(source, i - 1, j) == COL_LOWER_BG1) putpixel(source, i - 1, j, COL_OUTLINE); if (getpixel(source, i, j + 1) == COL_LOWER_BG1) putpixel(source, i, j + 1, COL_OUTLINE); if (getpixel(source, i, j - 1) == COL_LOWER_BG1) putpixel(source, i, j - 1, COL_OUTLINE); } } } void prepare_little_rles(void) { BITMAP *file_bitmap = load_up_bitmap("gfx//little.bmp"); fix_trans(file_bitmap); basic_bullet [0] = extract_rle_sprite(file_bitmap, 1, 1, 7, 38); basic_bullet [1] = extract_rle_sprite(file_bitmap, 32, 1, 7, 38); basic_bullet [2] = extract_rle_sprite(file_bitmap, 63, 1, 11, 47); basic_bullet [3] = extract_rle_sprite(file_bitmap, 126, 1, 11, 47); basic_bullet [4] = extract_rle_sprite(file_bitmap, 138, 1, 11, 47); basic_bullet [5] = extract_rle_sprite(file_bitmap, 150, 1, 11, 47); BITMAP *temp_shot_bitmap = new_bitmap(161, 63, "temp_shot_bitmap"); blit(file_bitmap, temp_shot_bitmap, 0, 0, 0, 0, 161, 63); convert_trans(temp_shot_bitmap, TRANS_WHITE); basic_bullet [6] = extract_rle_sprite(temp_shot_bitmap, 63, 1, 11, 47); basic_bullet [7] = extract_rle_sprite(temp_shot_bitmap, 126, 1, 11, 47); basic_bullet [8] = extract_rle_sprite(temp_shot_bitmap, 138, 1, 11, 47); basic_bullet [9] = extract_rle_sprite(temp_shot_bitmap, 150, 1, 11, 47); blit(file_bitmap, temp_shot_bitmap, 0, 0, 0, 0, 161, 63); convert_trans(temp_shot_bitmap, TRANS_LGREEN); basic_bullet [10] = extract_rle_sprite(temp_shot_bitmap, 63, 1, 11, 47); basic_bullet [11] = extract_rle_sprite(temp_shot_bitmap, 126, 1, 11, 47); basic_bullet [12] = extract_rle_sprite(temp_shot_bitmap, 138, 1, 11, 47); basic_bullet [13] = extract_rle_sprite(temp_shot_bitmap, 150, 1, 11, 47); blit(file_bitmap, temp_shot_bitmap, 0, 0, 0, 0, 161, 63); convert_trans(temp_shot_bitmap, TRANS_DDGREEN); basic_bullet [14] = extract_rle_sprite(temp_shot_bitmap, 63, 1, 11, 47); basic_bullet [15] = extract_rle_sprite(temp_shot_bitmap, 126, 1, 11, 47); basic_bullet [16] = extract_rle_sprite(temp_shot_bitmap, 138, 1, 11, 47); basic_bullet [17] = extract_rle_sprite(temp_shot_bitmap, 150, 1, 11, 47); blit(file_bitmap, temp_shot_bitmap, 0, 0, 0, 0, 161, 63); convert_trans(temp_shot_bitmap, TRANS_LBLUE); basic_bullet [18] = extract_rle_sprite(temp_shot_bitmap, 63, 1, 11, 47); basic_bullet [19] = extract_rle_sprite(temp_shot_bitmap, 126, 1, 11, 47); basic_bullet [20] = extract_rle_sprite(temp_shot_bitmap, 138, 1, 11, 47); basic_bullet [21] = extract_rle_sprite(temp_shot_bitmap, 150, 1, 11, 47); blit(file_bitmap, temp_shot_bitmap, 0, 0, 0, 0, 161, 63); convert_trans(temp_shot_bitmap, TRANS_LPURPLE); basic_bullet [22] = extract_rle_sprite(temp_shot_bitmap, 63, 1, 11, 47); basic_bullet [23] = extract_rle_sprite(temp_shot_bitmap, 126, 1, 11, 47); basic_bullet [24] = extract_rle_sprite(temp_shot_bitmap, 138, 1, 11, 47); basic_bullet [25] = extract_rle_sprite(temp_shot_bitmap, 150, 1, 11, 47); /* blit(file_bitmap, temp_shot_bitmap, 63, 1, 0, 0, 11, 47); convert_trans(temp_shot_bitmap, TRANS_WHITE); basic_bullet [6] = extract_rle_sprite(temp_shot_bitmap, 0, 0, 11, 47); blit(file_bitmap, temp_shot_bitmap, 126, 1, 0, 0, 11, 47); convert_trans(temp_shot_bitmap, TRANS_WHITE); basic_bullet [3] = extract_rle_sprite(temp_shot_bitmap, 0, 0, 11, 47); blit(file_bitmap, temp_shot_bitmap, 137, 1, 0, 0, 11, 47); convert_trans(temp_shot_bitmap, TRANS_LGREEN); basic_bullet [4] = extract_rle_sprite(temp_shot_bitmap, 0, 0, 11, 47); blit(file_bitmap, temp_shot_bitmap, 149, 1, 0, 0, 11, 47); convert_trans(temp_shot_bitmap, TRANS_DDGREEN); basic_bullet [5] = extract_rle_sprite(temp_shot_bitmap, 0, 0, 11, 47); blit(file_bitmap, temp_shot_bitmap, 162, 1, 0, 0, 11, 47); convert_trans(temp_shot_bitmap, TRANS_LBLUE); basic_bullet [6] = extract_rle_sprite(temp_shot_bitmap, 0, 0, 11, 47); blit(file_bitmap, temp_shot_bitmap, 63, 1, 0, 0, 11, 47); convert_trans(temp_shot_bitmap, TRANS_LPURPLE); basic_bullet [7] = extract_rle_sprite(temp_shot_bitmap, 0, 0, 11, 47); destroy_bitmap(temp_shot_bitmap); */ convert_trans(file_bitmap, TRANS_YELLOW); exhaust [0] = extract_rle_sprite(file_bitmap, 94, 1, 5, 15); exhaust [1] = extract_rle_sprite(file_bitmap, 100, 1, 5, 15); exhaust [2] = extract_rle_sprite(file_bitmap, 106, 1, 5, 15); exhaust [3] = extract_rle_sprite(file_bitmap, 112, 1, 5, 15); BITMAP *temp_bitmap1 = new_bitmap(40, 40, "multi pbullet1"); BITMAP *temp_bitmap2 = new_bitmap(40, 40, "multi pbullet2"); clear_bitmap(temp_bitmap1); clear_bitmap(temp_bitmap2); blit(file_bitmap, temp_bitmap1, 118, 1, 15, 0, 7, 28); // draw_rle_sprite(temp_bitmap1, basic_bullet [0], 15, 0); int i; for (i = 0; i < 5; i ++) { clear_bitmap(temp_bitmap2); rotate_sprite(temp_bitmap2, temp_bitmap1, 0, 0, itofix(i * 8)); multi_bullet [0] [i] = extract_rle_sprite(temp_bitmap2, 0, 0, 40, 40); multi_bullet [1] [i] = extract_flip_rle_sprite(temp_bitmap2, 0, 0, 40, 40, 0); } destroy_bitmap(file_bitmap); destroy_bitmap(temp_bitmap1); destroy_bitmap(temp_bitmap2); // destroy_bitmap(temp_bitmap1); } void fix_trans(BITMAP *source) { int i, j, px; for (i = 0; i < source->w; i ++) { for (j = 0; j < source->h; j ++) { px = getpixel(source, i, j); switch(px) { case 12: putpixel(source, i, j, TRANS_YELLOW); break; case 13: putpixel(source, i, j, TRANS_LRED); break; case 14: putpixel(source, i, j, TRANS_DRED); break; case 15: putpixel(source, i, j, TRANS_DDRED); break; } } } } void convert_trans(BITMAP *source, int target) { int i, j, px; int col1 = TRANS_YELLOW; int col2 = TRANS_LGREEN; int col3 = TRANS_DGREEN; int col4 = TRANS_DDGREEN; if (target == TRANS_DDGREEN) { col1 = TRANS_WHITE; col2 = TRANS_YELLOW; col3 = TRANS_LGREEN; col4 = TRANS_DGREEN; } if (target == TRANS_YELLOW) { col1 = TRANS_YELLOW; col2 = TRANS_LRED; col3 = TRANS_DRED; col4 = TRANS_DDRED; } if (target == TRANS_LBLUE) { col1 = TRANS_WHITE; col2 = TRANS_LBLUE; col3 = TRANS_DBLUE; col4 = TRANS_DDBLUE; } if (target == TRANS_WHITE) { col1 = TRANS_WHITE; col2 = TRANS_YELLOW; col3 = TRANS_LRED; col4 = TRANS_DDRED; } if (target == TRANS_DBLUE) { col1 = TRANS_LBLUE; col2 = TRANS_DBLUE; col3 = TRANS_DBLUE; col4 = TRANS_DDBLUE; } if (target == TRANS_LPURPLE) { col1 = TRANS_WHITE; col2 = TRANS_LPURPLE; col3 = TRANS_DPURPLE; col4 = TRANS_DDBLUE; } for (i = 0; i < source->w; i ++) { for (j = 0; j < source->h; j ++) { px = getpixel(source, i, j); switch(px) { case TRANS_YELLOW: putpixel(source, i, j, col1); break; case TRANS_LRED: putpixel(source, i, j, col2); break; case TRANS_DRED: putpixel(source, i, j, col3); break; case TRANS_DDRED: putpixel(source, i, j, col4); break; } } } } /* void prepare_large_enemy_rles(void) { BITMAP *file_bitmap = load_up_bitmap("gfx//elarge.bmp"); BITMAP *temp_bitmap1 = new_bitmap(100, 100, "Prepare enemy_rles temp_bitmap1"); BITMAP *temp_bitmap2 = new_bitmap(100, 100, "Prepare enemy_rles temp_bitmap2"); int i; #ifdef XFALSE int k, l, x = 50, y = 50; extern volatile unsigned char ticked; extern int slacktime; BITMAP *tmp = create_bitmap(640,480); clear_bitmap(tmp); do { clear_bitmap(tmp); blit(file_bitmap, tmp, 0, 0, 0, 0, file_bitmap->w, file_bitmap->h); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); if (key [KEY_UP]) y --; if (key [KEY_DOWN]) y ++; if (key [KEY_LEFT]) x --; if (key [KEY_RIGHT]) x ++; textprintf_ex(tmp, font, 600, 460, COLOUR_11, 1, "%i", getpixel(tmp, x, y)); putpixel(tmp, x, y, grand(200)); blit(tmp, screen, 0, 0, 0, 0, 640, 480); do { slacktime ++; } while(ticked == 0); ticked --; } while (key [KEY_SPACE] == 0); #endif #ifdef TEST_COLOURS BITMAP *tmp = create_bitmap(640,480); do { clear_to_color(tmp, COL_LOWER_BG1); rectfill(tmp, 10, 80, 300, 90, COL_LGREY); rectfill(tmp, 10, 90, 300, 100, COL_LOWER_BG2); drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); rectfill(tmp, 10, 10, 50, 300, TRANS_WHITE); rectfill(tmp, 20, 20, 60, 300, TRANS_YELLOW); rectfill(tmp, 30, 30, 70, 300, TRANS_LBLUE); rectfill(tmp, 40, 40, 80, 300, TRANS_DRED); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); vsync(); blit(tmp, screen, 0, 0, 0, 0, 640, 480); } while (key [KEY_SPACE] == 0); int k, l; do { for (k = 0; k < 16; k ++) { for (l = 0; l < 16; l ++) { // clear_to_color(tmp, COL_LOWER_BG1); //if (l + k > 0) if (l == 0) { rectfill(tmp, k * 20, l * 20, k * 20 + 20, l * 20 + 20, k + (l * 16) + 1); textprintf_ex(tmp, font, k * 20, l * 20 + 5, COL_WHITE, -1, "%i", k + (l * 16) + 1); } else { rectfill(tmp, k * 20, l * 20, k * 20 + 20, l * 20 + 20, k + (l * 16) + 1); textprintf_ex(tmp, font, k * 20, l * 20 + 5, COL_WHITE, -1, "%i", k + (l * 16) + 1); } } } blit(tmp, screen, 0, 0, 0, 0, 640, 480); } while (key [KEY_A] == 0); destroy_bitmap(tmp); #endif drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); // rectfill(file_bitmap, 0, 0, file_bitmap->w, file_bitmap->h, FIX_BITMAP); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); for (i = 0; i < LARGE_ERLES; i ++) { if (i == LARGE_BEAMER1_RWING) continue; clear_bitmap(temp_bitmap1); blit(file_bitmap, temp_bitmap1, i * 101 + 1, 1, 0, 0, 100, 100); new_rle_struct(temp_bitmap1, "elarge", &eRLE_large [1] [i], -1); if (i == LARGE_BEAMER1_LWING) { clear_bitmap(temp_bitmap2); draw_sprite_h_flip(temp_bitmap2, temp_bitmap1, 0, 0); new_rle_struct(temp_bitmap2, "elarge", &eRLE_large [1] [i + 1], -1); } // convert_pole(temp_bitmap1, POLE_BLACK); new_rle_struct(temp_bitmap1, "elarge", &eRLE_large [0] [i], -1); if (i == LARGE_BEAMER1_LWING) { clear_bitmap(temp_bitmap2); draw_sprite_h_flip(temp_bitmap2, temp_bitmap1, 0, 0); new_rle_struct(temp_bitmap2, "elarge", &eRLE_large [0] [i + 1], -1); } } destroy_bitmap(file_bitmap); destroy_bitmap(temp_bitmap1); destroy_bitmap(temp_bitmap2); } void convert_pole(BITMAP *bitmap, int pole) { drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); rectfill(bitmap, 0, 0, bitmap->w, bitmap->h, CONVERT_POLE); drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); } */ void prepare_underlay(void) { underlay = new_bitmap(320, 1000, "underlay"); clear_to_color(underlay, COL_LOWER_BG1); BITMAP *temp_bitmap = load_up_bitmap("gfx//underlay.bmp"); blit(temp_bitmap, underlay, 0, 0, 0, 0, 320, 480); blit(temp_bitmap, underlay, 0, 0, 0, 480, 320, 480); fix_underlay(underlay); destroy_bitmap(temp_bitmap); underlay2 = new_bitmap(320, 1000, "underlay"); clear_to_color(underlay2, COL_LOWER_BG1); temp_bitmap = load_up_bitmap("gfx//underlay2.bmp"); blit(temp_bitmap, underlay2, 0, 0, 0, 0, 320, 480); blit(temp_bitmap, underlay2, 0, 0, 0, 480, 320, 480); fix_underlay(underlay2); destroy_bitmap(temp_bitmap); } void prepare_small_sprites(void) { #ifdef COLOUR_DISPLAY int k, l, x = 50, y = 50; extern volatile unsigned char ticked; extern int slacktime; BITMAP *tmp = create_bitmap(640,480); clear_bitmap(tmp); do { clear_bitmap(tmp); for (k = 0; k < 13; k ++) { rectfill(tmp, 50, 50 + k * 20, 500, 70 + k * 20, k); } /*for (k = 0; k < 12; k ++) { rectfill(screen, 50, 50 + k * 20, 500, 70 + k * 20, k * 12 + 1); }*/ drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); for (l = 1; l < 8; l ++) { rectfill(tmp, 70 + l * 20, 50, 90 + l * 20, 450, l * 12 + 1); } for (l = 8; l < 16; l ++) { rectfill(tmp, 70 + l * 20, 50, 90 + l * 20, 450, l * 12 + 1); } drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); if (key [KEY_UP]) y --; if (key [KEY_DOWN]) y ++; if (key [KEY_LEFT]) x --; if (key [KEY_RIGHT]) x ++; textprintf_ex(tmp, font, 600, 460, COLOUR_11, 1, "%i", getpixel(tmp, x, y)); putpixel(tmp, x, y, grand(200)); blit(tmp, screen, 0, 0, 0, 0, 640, 480); do { slacktime ++; } while(ticked == 0); ticked --; } while (key [KEY_SPACE] == 0); #endif /* palet [7].r = 1; set_palette(palet);*/ BITMAP *file_bitmap = load_up_bitmap("gfx//small.bmp"); /* palet [7].r = 0x8d; set_palette(palet);*/ BITMAP *temp_bitmap1 = new_bitmap(14, 14, "Prepare small sprites temp_bitmap1"); BITMAP *temp_bitmap2 = new_bitmap(14, 14, "Prepare small sprites temp_bitmap2"); int i; clear_bitmap(temp_bitmap1); blit(file_bitmap, temp_bitmap1, 31, 1, 0, 0, 14, 14); process_trans_bitmap(temp_bitmap1, 14, 14); /* int ya = 7; int getp = getpixel(temp_bitmap1, 1, ya); int getp1 = getpixel(temp_bitmap1, 2, ya); int getp2 = getpixel(temp_bitmap1, 3, ya); int getp3 = getpixel(temp_bitmap1, 4, ya); int getp4 = getpixel(temp_bitmap1, 5, ya); int getp5 = getpixel(temp_bitmap1, 6, ya); int getp6 = getpixel(temp_bitmap1, 7, ya); int getp7 = getpixel(temp_bitmap1, 8, ya); int getp8 = getpixel(temp_bitmap1, 9, ya); int getp9 = getpixel(temp_bitmap1, 10, ya); set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("%i %i %i %i %i %i %i %i %i %i", getp, getp1, getp2, getp3, getp4, getp5, getp6, getp7, getp8, getp9); exit(1); */ for (i = 0; i < SMALL_ROTATIONS; i ++) { clear_bitmap(temp_bitmap2); rotate_sprite(temp_bitmap2, temp_bitmap1, 0, 0, itofix(i * 4 + 64)); // rectfill(temp_bitmap2, 5, 5, 8, 8, TRANS_WHITE5); // rectfill(temp_bitmap2, 6, 6, 7, 7, TRANS_WHITE6); circlefill(temp_bitmap2, 7, 7, 2, TRANS_DRED); circlefill(temp_bitmap2, 7, 7, 1, TRANS_DDRED); spin_bullet [0] [i] = get_rle_sprite(temp_bitmap2); convert_trans_bitmap(temp_bitmap2, 14, 14); spin_bullet [1] [i] = get_rle_sprite(temp_bitmap2); } destroy_bitmap(file_bitmap); destroy_bitmap(temp_bitmap1); destroy_bitmap(temp_bitmap2); } //void small_sprite_rotation(BITMAP *file_bitmap, BITMAP *temp_bitmap1, BITMAP *temp_bitmap2, int acrorss void prepare_twister(void) { /* BITMAP *temp_bitmap1 = new_bitmap(25, 25, "Prepare twister temp_bitmap1"); int i, j, angle, x, y; x = 12; y = 12; int col [4] = {COLOUR_2, COLOUR_3, COLOUR_4, COLOUR_OUTLINE}; for (i = 0; i < 2; i ++) { if (i == 1) { col [0] = COLOUR_12; col [1] = COLOUR_11; col [2] = COLOUR_10; col [3] = COLOUR_OUTLINE; } for (j = 0; j < MEDIUM_ROTATIONS; j ++) { angle = j * (ANGLE_1 / MEDIUM_ROTATIONS); x = 12; y = 12; clear_bitmap(temp_bitmap1); circlefill(temp_bitmap1, x, y, 4, col [1]); circle(temp_bitmap1, x, y, 4, COLOUR_OUTLINE); bordered_triangle(temp_bitmap1, x + xpart(angle - ANGLE_8, 2), y + ypart(angle - ANGLE_8, 2), x + xpart(angle - ANGLE_64, 13), y + ypart(angle - ANGLE_64, 13), x + xpart(angle - ANGLE_4 - ANGLE_32, 8), y + ypart(angle - ANGLE_4 - ANGLE_32, 8), col [0], COLOUR_OUTLINE, x + xpart(angle - ANGLE_8, 4), y + ypart(angle - ANGLE_8, 4)); bordered_triangle(temp_bitmap1, x + xpart(angle + ANGLE_8, 2), y + ypart(angle + ANGLE_8, 2), x + xpart(angle + ANGLE_64, 13), y + ypart(angle + ANGLE_64, 13), x + xpart(angle + ANGLE_4 + ANGLE_32, 8), y + ypart(angle + ANGLE_4 + ANGLE_32, 8), col [0], COLOUR_OUTLINE, x + xpart(angle + ANGLE_8, 4), y + ypart(angle + ANGLE_8, 4)); x -= xpart(angle, 3); y -= ypart(angle, 3); bordered_poly4(temp_bitmap1, x + xpart(angle + ANGLE_8, 3), y + ypart(angle + ANGLE_8, 3), x + xpart(angle + ANGLE_4 + ANGLE_32, 8), y + ypart(angle + ANGLE_4 + ANGLE_32, 8), x + xpart(angle + ANGLE_4 + ANGLE_8, 11), y + ypart(angle + ANGLE_4 + ANGLE_8, 11), x + xpart(angle + ANGLE_4 + ANGLE_8 + ANGLE_16, 6), y + ypart(angle + ANGLE_4 + ANGLE_8 + ANGLE_16, 6), col [0], COLOUR_OUTLINE, x + xpart(angle + ANGLE_4 + ANGLE_16 + ANGLE_64, 7), y + ypart(angle + ANGLE_4 + ANGLE_16 + ANGLE_64, 7)); bordered_poly4(temp_bitmap1, x + xpart(angle - ANGLE_8, 3), y + ypart(angle - ANGLE_8, 3), x + xpart(angle - ANGLE_4 - ANGLE_32, 8), y + ypart(angle - ANGLE_4 - ANGLE_32, 8), x + xpart(angle - ANGLE_4 - ANGLE_8, 11), y + ypart(angle - ANGLE_4 - ANGLE_8, 11), x + xpart(angle - ANGLE_4 - ANGLE_8 - ANGLE_16, 6), y + ypart(angle - ANGLE_4 - ANGLE_8 - ANGLE_16, 6), col [0], COLOUR_OUTLINE, x + xpart(angle - ANGLE_4 - ANGLE_16 - ANGLE_64, 7), y + ypart(angle - ANGLE_4 - ANGLE_16 - ANGLE_64, 7)); new_rle_struct(temp_bitmap1, "twister", eRLE_twister [i], j); // eRLE_twister [i] [j] = new_rle_sprite(temp_bitmap1, "twister"); } } destroy_bitmap(temp_bitmap1); */ } void prepare_attacker(void) { /* BITMAP *temp_bitmap1 = new_bitmap(91, 91, "Prepare attacker temp_bitmap1"); int i, j, angle, x, y, which_attacker = 0; x = 45; y = 45; int col [4];// = {COLOUR_2, COLOUR_3, COLOUR_4, COLOUR_OUTLINE}; for (which_attacker = 0; which_attacker < 3; which_attacker ++) { for (i = 0; i < 2; i ++) { if (i == 1) { col [0] = COLOUR_12; col [1] = COLOUR_11; col [2] = COLOUR_10; col [3] = COLOUR_OUTLINE; } else { col [0] = COLOUR_2; col [1] = COLOUR_3; col [2] = COLOUR_4; col [3] = COLOUR_OUTLINE; } for (j = 0; j < MEDIUM_ROTATIONS; j ++) { angle = j * (ANGLE_1 / MEDIUM_ROTATIONS); clear_bitmap(temp_bitmap1); switch(which_attacker) { case 0: // enemy_attacker1 bordered_poly4(temp_bitmap1, x + xpart(angle, 3), y + ypart(angle, 3), x + xpart(angle - ANGLE_4, 8), y + ypart(angle - ANGLE_4, 8), x - xpart(angle, 9), y - ypart(angle, 9), x + xpart(angle + ANGLE_4, 8), y + ypart(angle + ANGLE_4, 8), col [2], COLOUR_OUTLINE, x, y); bordered_poly4(temp_bitmap1, x - xpart(angle, 3), y - ypart(angle, 3), x + xpart(angle - ANGLE_4 - ANGLE_8 - ANGLE_32, 13), y + ypart(angle - ANGLE_4 - ANGLE_8 - ANGLE_32, 13), x - xpart(angle, 28), y - ypart(angle, 28), x + xpart(angle + ANGLE_4 + ANGLE_8 + ANGLE_32, 13), y + ypart(angle + ANGLE_4 + ANGLE_8 + ANGLE_32, 13), col [1], COLOUR_OUTLINE, x - xpart(angle, 6), y - ypart(angle, 6)); bordered_poly4(temp_bitmap1, x - xpart(angle, 9), y - ypart(angle, 9), x + xpart(angle - ANGLE_4 - ANGLE_8 - 42, 18), y + ypart(angle - ANGLE_4 - ANGLE_8 - 42, 18), x - xpart(angle, 28), y - ypart(angle, 28), x + xpart(angle + ANGLE_4 + ANGLE_8 + 42, 18), y + ypart(angle + ANGLE_4 + ANGLE_8 + 42, 18), col [0], COLOUR_OUTLINE, x - xpart(angle, 12), y - ypart(angle, 12)); new_rle_struct(temp_bitmap1, "attacker1_2 0", eRLE_attacker [which_attacker] [0] [i], j); // fall through case 0! case 1: // enemy_attacker2 case 2: // enemy_attacker3 clear_bitmap(temp_bitmap1); if (which_attacker == 0) { bordered_poly4(temp_bitmap1, x + xpart(angle + ANGLE_32, 2), y + ypart(angle + ANGLE_32, 2), x + xpart(angle + ANGLE_4 + ANGLE_8, 11), y + ypart(angle + ANGLE_4 + ANGLE_8, 11), x + xpart(angle + ANGLE_4, 21), y + ypart(angle + ANGLE_4, 21), x + xpart(angle + ANGLE_16, 9), y + ypart(angle + ANGLE_16, 9), col [0], COLOUR_OUTLINE, x + xpart(angle + ANGLE_4, 15), y + ypart(angle + ANGLE_4, 15)); bordered_poly4(temp_bitmap1, x + xpart(angle - ANGLE_32, 2), y + ypart(angle - ANGLE_32, 2), x + xpart(angle - ANGLE_4 - ANGLE_8, 11), y + ypart(angle - ANGLE_4 - ANGLE_8, 11), x + xpart(angle - ANGLE_4, 21), y + ypart(angle - ANGLE_4, 21), x + xpart(angle - ANGLE_16, 9), y + ypart(angle - ANGLE_16, 9), col [0], COLOUR_OUTLINE, x + xpart(angle - ANGLE_4, 15), y + ypart(angle - ANGLE_4, 15)); new_rle_struct(temp_bitmap1, "attacker1 1", eRLE_attacker [which_attacker] [1] [i], j); } if (which_attacker == 1) { bordered_poly4(temp_bitmap1, x + xpart(angle + ANGLE_4 + ANGLE_32, 4), y + ypart(angle + ANGLE_4 + ANGLE_32, 4), x + xpart(angle + ANGLE_4 + ANGLE_8, 14), y + ypart(angle + ANGLE_4 + ANGLE_8, 14), x + xpart(angle + ANGLE_4, 24), y + ypart(angle + ANGLE_4, 24), x + xpart(angle + ANGLE_8, 11), y + ypart(angle + ANGLE_8, 11), col [0], COLOUR_OUTLINE, x + xpart(angle + ANGLE_4, 15), y + ypart(angle + ANGLE_4, 15)); bordered_poly4(temp_bitmap1, x + xpart(angle - ANGLE_4 - ANGLE_32, 4), y + ypart(angle - ANGLE_4 - ANGLE_32, 4), x + xpart(angle - ANGLE_4 - ANGLE_8, 14), y + ypart(angle - ANGLE_4 - ANGLE_8, 14), x + xpart(angle - ANGLE_4, 24), y + ypart(angle - ANGLE_4, 24), x + xpart(angle - ANGLE_8, 11), y + ypart(angle - ANGLE_8, 11), col [0], COLOUR_OUTLINE, x + xpart(angle - ANGLE_4, 15), y + ypart(angle - ANGLE_4, 15)); bordered_poly4(temp_bitmap1, x - xpart(angle, 4), y - ypart(angle, 4), x + xpart(angle + ANGLE_4 - ANGLE_8, 8), y + ypart(angle + ANGLE_4 - ANGLE_8, 8), x + xpart(angle, 11), y + ypart(angle, 11), x + xpart(angle - ANGLE_4 + ANGLE_8, 8), y + ypart(angle - ANGLE_4 + ANGLE_8, 8), col [0], COLOUR_OUTLINE, x + xpart(angle, 5), y + ypart(angle, 5)); new_rle_struct(temp_bitmap1, "attacker2 1", eRLE_attacker [which_attacker] [1] [i], j); } if (which_attacker == 2) { bordered_poly4(temp_bitmap1, x + xpart(angle + ANGLE_32, 2), y + ypart(angle + ANGLE_32, 2), x + xpart(angle + ANGLE_4 + ANGLE_8, 11), y + ypart(angle + ANGLE_4 + ANGLE_8, 11), x + xpart(angle + ANGLE_4, 21), y + ypart(angle + ANGLE_4, 21), x + xpart(angle + ANGLE_16, 9), y + ypart(angle + ANGLE_16, 9), col [1], COLOUR_OUTLINE, x + xpart(angle + ANGLE_4, 10), y + ypart(angle + ANGLE_4, 10)); bordered_poly4(temp_bitmap1, x + xpart(angle - ANGLE_32, 2), y + ypart(angle - ANGLE_32, 2), x + xpart(angle - ANGLE_4 - ANGLE_8, 11), y + ypart(angle - ANGLE_4 - ANGLE_8, 11), x + xpart(angle - ANGLE_4, 21), y + ypart(angle - ANGLE_4, 21), x + xpart(angle - ANGLE_16, 9), y + ypart(angle - ANGLE_16, 9), col [1], COLOUR_OUTLINE, x + xpart(angle - ANGLE_4, 10), y + ypart(angle - ANGLE_4, 10)); bordered_poly4(temp_bitmap1, x + xpart(angle + ANGLE_32, 6), y + ypart(angle + ANGLE_32, 6), x + xpart(angle + ANGLE_4 + ANGLE_16 + ANGLE_32, 14), y + ypart(angle + ANGLE_4 + ANGLE_16 + ANGLE_32, 14), x + xpart(angle + ANGLE_4, 25), y + ypart(angle + ANGLE_4, 25), x + xpart(angle + ANGLE_16, 14), y + ypart(angle + ANGLE_16, 14), col [0], COLOUR_OUTLINE, x + xpart(angle + ANGLE_4 - ANGLE_32, 13), y + ypart(angle + ANGLE_4 - ANGLE_32, 13)); bordered_poly4(temp_bitmap1, x + xpart(angle - ANGLE_32, 6), y + ypart(angle - ANGLE_32, 6), x + xpart(angle - ANGLE_4 - ANGLE_16 - ANGLE_32, 14), y + ypart(angle - ANGLE_4 - ANGLE_16 - ANGLE_32, 14), x + xpart(angle - ANGLE_4, 25), y + ypart(angle - ANGLE_4, 25), x + xpart(angle - ANGLE_16, 14), y + ypart(angle - ANGLE_16, 14), col [0], COLOUR_OUTLINE, x + xpart(angle - ANGLE_4 + ANGLE_32, 13), y + ypart(angle - ANGLE_4 + ANGLE_32, 13)); new_rle_struct(temp_bitmap1, "attacker3 1", eRLE_attacker [which_attacker] [1] [i], j); } break; } } } } destroy_bitmap(temp_bitmap1); */ } void prepare_diver(void) { /* BITMAP *temp_bitmap1 = new_bitmap(91, 91, "Prepare diver temp_bitmap1"); int i, j, angle, x, y, xa, ya; x = 45; y = 45; int col [4];// = {COLOUR_2, COLOUR_3, COLOUR_4, COLOUR_OUTLINE}; for (i = 0; i < 2; i ++) { if (i == 1) { col [0] = COLOUR_12; col [1] = COLOUR_11; col [2] = COLOUR_10; col [3] = COLOUR_OUTLINE; } else { col [0] = COLOUR_2; col [1] = COLOUR_3; col [2] = COLOUR_4; col [3] = COLOUR_OUTLINE; } for (j = 0; j < MEDIUM_ROTATIONS; j ++) { angle = j * (ANGLE_1 / MEDIUM_ROTATIONS); clear_bitmap(temp_bitmap1); xa = x - xpart(angle, 4); ya = y - ypart(angle, 4); bordered_poly4(temp_bitmap1, xa + xpart(angle + ANGLE_8, 7), ya + ypart(angle + ANGLE_8, 7), xa + xpart(angle - ANGLE_8, 7), ya + ypart(angle - ANGLE_8, 7), xa - xpart(angle + ANGLE_8, 7), ya - ypart(angle + ANGLE_8, 7), xa - xpart(angle - ANGLE_8, 7), ya - ypart(angle - ANGLE_8, 7), col [1], COLOUR_OUTLINE, xa, ya); xa = x + xpart(angle + ANGLE_4, 9); ya = y + ypart(angle + ANGLE_4, 9); bordered_poly4(temp_bitmap1, xa + xpart(angle + ANGLE_16, 10), ya + ypart(angle + ANGLE_16, 10), xa + xpart(angle - ANGLE_16 + 21, 17), ya + ypart(angle - ANGLE_16 + 21, 17), xa - xpart(angle + ANGLE_16, 12), ya - ypart(angle + ANGLE_16, 12), xa - xpart(angle - ANGLE_16, 12), ya - ypart(angle - ANGLE_16, 12), col [0], COLOUR_OUTLINE, xa, ya); xa = x - xpart(angle + ANGLE_4, 9); ya = y - ypart(angle + ANGLE_4, 9); bordered_poly4(temp_bitmap1, xa + xpart(angle + ANGLE_16 - 21, 17), ya + ypart(angle + ANGLE_16 - 21, 17), xa + xpart(angle - ANGLE_16, 10), ya + ypart(angle - ANGLE_16, 10), xa - xpart(angle + ANGLE_16, 12), ya - ypart(angle + ANGLE_16, 12), xa - xpart(angle - ANGLE_16, 12), ya - ypart(angle - ANGLE_16, 12), col [0], COLOUR_OUTLINE, xa, ya); new_rle_struct(temp_bitmap1, "diver 1", eRLE_diver [0] [i], j); clear_bitmap(temp_bitmap1); xa = x + xpart(angle + ANGLE_4, 15); ya = y + ypart(angle + ANGLE_4, 15); bordered_poly4(temp_bitmap1, xa + xpart(angle + ANGLE_16, 8), ya + ypart(angle + ANGLE_16, 8), xa + xpart(angle - ANGLE_16, 8), ya + ypart(angle - ANGLE_16, 8), xa - xpart(angle + ANGLE_16, 8), ya - ypart(angle + ANGLE_16, 8), xa - xpart(angle - ANGLE_16, 8), ya - ypart(angle - ANGLE_16, 8), col [2], COLOUR_OUTLINE, xa, ya); xa = x - xpart(angle + ANGLE_4, 15); ya = y - ypart(angle + ANGLE_4, 15); bordered_poly4(temp_bitmap1, xa + xpart(angle + ANGLE_16, 8), ya + ypart(angle + ANGLE_16, 8), xa + xpart(angle - ANGLE_16, 8), ya + ypart(angle - ANGLE_16, 8), xa - xpart(angle + ANGLE_16, 8), ya - ypart(angle + ANGLE_16, 8), xa - xpart(angle - ANGLE_16, 8), ya - ypart(angle - ANGLE_16, 8), col [2], COLOUR_OUTLINE, xa, ya); new_rle_struct(temp_bitmap1, "diver 2", eRLE_diver [1] [i], j); } }*/ } void bordered_poly4(BITMAP *target, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int col, int border_col, int fillx, int filly) { BITMAP *temp_bitmap = new_bitmap(target->w, target->h, "Bordered poly4 temp_bitmap"); clear_bitmap(temp_bitmap); line(temp_bitmap, x1, y1, x2, y2, border_col); line(temp_bitmap, x2, y2, x3, y3, border_col); line(temp_bitmap, x3, y3, x4, y4, border_col); line(temp_bitmap, x4, y4, x1, y1, border_col); floodfill(temp_bitmap, fillx, filly, col); draw_sprite(target, temp_bitmap, 0, 0); destroy_bitmap(temp_bitmap); } void bordered_triangle(BITMAP *target, int x1, int y1, int x2, int y2, int x3, int y3, int col, int border_col, int fillx, int filly) { BITMAP *temp_bitmap = new_bitmap(target->w, target->h, "Bordered triangle temp_bitmap"); clear_bitmap(temp_bitmap); line(temp_bitmap, x1, y1, x2, y2, border_col); line(temp_bitmap, x2, y2, x3, y3, border_col); line(temp_bitmap, x3, y3, x1, y1, border_col); floodfill(temp_bitmap, fillx, filly, col); draw_sprite(target, temp_bitmap, 0, 0); destroy_bitmap(temp_bitmap); } // because either the GIMP or Allegro mangles indexed palettes somewhere: it replaces // colours with any earlier identical colours. void process_trans_bitmap(BITMAP *bmp, int x, int y) { int i, j, px; for (i = 0; i < x; i ++) { for (j = 0; j < y; j ++) { px = getpixel(bmp, i, j); if (px == 7) putpixel(bmp, i, j, 72); if (px == 25) putpixel(bmp, i, j, 36); } } } void convert_trans_bitmap(BITMAP *bmp, int x, int y) { int i, j, px; for (i = 0; i < x; i ++) { for (j = 0; j < y; j ++) { px = getpixel(bmp, i, j); if (px == 0) continue; putpixel(bmp, i, j, px + 72); } } } BITMAP *load_up_bitmap(const char fname []) { RGB temp_palette [256]; BITMAP *temp_bitmap = load_bitmap(fname, temp_palette); if (temp_bitmap == NULL) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Failed to load in bitmap! (File not found?) \n%s", fname); exit(1); } return temp_bitmap; } BITMAP *new_bitmap(int x, int y, const char errtxt []) { BITMAP *bmp = create_bitmap(x, y); if (bmp == NULL) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Bitmap creation failed! \n%s\n\n\r%s", allegro_error, errtxt); exit(1); } return bmp; } RLE_SPRITE *extract_rle_sprite(BITMAP *source, int x_source, int y_source, int x, int y) { BITMAP *tmp = new_bitmap(x, y, "extract_rle_sprite"); blit(source, tmp, x_source, y_source, 0, 0, x, y); RLE_SPRITE *retval = get_rle_sprite(tmp); if (retval == NULL) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Rle_sprite extraction failed! \n%s\n\n\r%s", allegro_error, "extract_rle_sprite"); exit(1); } destroy_bitmap(tmp); return retval; } RLE_SPRITE *extract_flip_rle_sprite(BITMAP *source, int x_source, int y_source, int x, int y, int flip_type) { BITMAP *tmp = new_bitmap(x, y, "extract_hflip_rle_sprite"); BITMAP *tmp2 = new_bitmap(x, y, "extract_hflip_rle_sprite"); clear_bitmap(tmp2); blit(source, tmp, x_source, y_source, 0, 0, x, y); switch(flip_type) { case 0: draw_sprite_h_flip(tmp2, tmp, 0, 0); break; case 1: draw_sprite_v_flip(tmp2, tmp, 0, 0); break; case 2: draw_sprite_vh_flip(tmp2, tmp, 0, 0); break; } RLE_SPRITE *retval = get_rle_sprite(tmp2); if (retval == NULL) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Rle_sprite extraction failed! \n%s\n\n\r%s", allegro_error, "extract_rle_sprite"); exit(1); } destroy_bitmap(tmp); destroy_bitmap(tmp2); return retval; } RLE_SPRITE *sized_rle_sprite(BITMAP *source, int x, int y, const char errtxt []) { BITMAP *tmp = new_bitmap(x, y, errtxt); blit(source, tmp, 0, 0, 0, 0, x, y); RLE_SPRITE *retval = get_rle_sprite(tmp); if (retval == NULL) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Rle_sprite sized creation failed! \n%s\n\n\r%s", allegro_error, errtxt); exit(1); } destroy_bitmap(tmp); return retval; } RLE_SPRITE *new_rle_sprite(BITMAP *source, const char errtxt []) { RLE_SPRITE *retval = get_rle_sprite(source); if (retval == NULL) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Rle_sprite creation failed! \n%s\n\n\r%s", allegro_error, errtxt); exit(1); } return retval; } void extract_rle_struct(BITMAP *source, int x1, int y1, int x2, int y2, const char errtxt [], struct RLE_STRUCT *str, int bl) { BITMAP *tmp = new_bitmap(x2, y2, "extract_rle_struct temp bitmap"); blit(source, tmp, x1, y1, 0, 0, x2, y2); new_rle_struct(tmp, errtxt, str, bl); destroy_bitmap(tmp); } void new_rle_struct(BITMAP *source, const char errtxt [], struct RLE_STRUCT *str, int bl) { int x1 = -1, y1 = -1, x2 = -1, y2 = -1; int i, j; for (i = 0; i < source->w; i ++) { for (j = 0; j < source->h; j ++) { if (getpixel(source, i, j) != 0) { x1 = i; break; } } if (x1 != -1) break; } for (j = 0; j < source->h; j ++) { for (i = 0; i < source->w; i ++) { if (getpixel(source, i, j) != 0) { y1 = j; break; } } if (y1 != -1) break; } for (i = source->w - 1; i >= 0; i --) { for (j = 0; j < source->h; j ++) { if (getpixel(source, i, j) != 0) { x2 = i; break; } } if (x2 != -1) break; } for (j = source->h - 1; j >= 0; j --) { for (i = 0; i < source->w; i ++) { if (getpixel(source, i, j) != 0) { y2 = j; break; } } if (y2 != -1) break; } BITMAP *tmp = new_bitmap(x2 - x1 + 1, y2 - y1 + 1, "new_rle_struct temp bitmap"); blit(source, tmp, x1, y1, 0, 0, x2 - x1 + 1, y2 - y1 + 1); // rect(tmp, 0, 0, tmp->w - 1, tmp->h - 1, COLOUR_1); // floodfill(tmp, 1, 1, COLOUR_8); if (bl == -1) { str->sprite = get_rle_sprite(tmp); str->x = source->w / 2 - x1; str->y = source->h / 2 - y1; } else { str [bl].sprite = get_rle_sprite(tmp); str [bl].x = source->w / 2 - x1; str [bl].y = source->h / 2 - y1; } destroy_bitmap(tmp); } // str->sprite = new_rle_sprite(tmp, "new_rle_struct creation"); // str->x = source->w / 2 - x1; // str->y = source->h / 2 - y1; excellent-bifurcation-0.0.20071015/src/menu.h0000666000175000017500000000013110554457472017773 0ustar miriammiriam void startup_menu(void); void loading_screen(void); void loading_screen_wait(void); excellent-bifurcation-0.0.20071015/src/game.h0000666000175000017500000000012110545733174017733 0ustar miriammiriam void game_loop(void); void new_game(void); void player_hit(int side_hit); excellent-bifurcation-0.0.20071015/src/level.h0000666000175000017500000000005710434157100020123 0ustar miriammiriamvoid init_level(void); void run_level(void); excellent-bifurcation-0.0.20071015/src/eclass.c0000666000175000017500000001033510557455530020277 0ustar miriammiriam#include "config.h" // note: NO_ENEMY_TYPES is in the ENEMY_ enum struct eclassstruct eclass [NO_ENEMY_TYPES] = { { 0, // int max_hp 0, // int size 0, // ai 0, // speed1 0, // speed2 0, // speed3 0 }, // NONE { 2, // int max_hp 12000, // int size AI_DANCER, 4000, // speed1 8, // speed2 0, // speed3 0 }, // TWISTER { 4, // int max_hp 18000, AI_DIVER, 280, // speed1 2, // speed2 3000, // speed3 0 }, // DIVER { 8000, // int max_hp 44000, AI_GLIDER, 1100, // speed1 1, // speed2 0, // speed3 40 // score }, // GLIDER1 { 2, // int max_hp 20000, AI_MARCH, 3000, // speed1 1, // speed2 0, // speed3 0 }, // MARCHER1 { 4, // int max_hp 20000, AI_ATTACKER, 220, // speed1 2, // speed2 0, // speed3 0 }, // ATTACKER1 { 4, // int max_hp 20000, AI_ATTACKER, 220, // speed1 2, // speed2 0, // speed3 0 }, // ATTACKER2 { 4, // int max_hp 20000, AI_ATTACKER, 160, // speed1 1, // speed2 0, // speed3 0 }, // ATTACKER3 { 8000, // int max_hp 38000, AI_BEAMER, 2000, // speed1 4, // speed2 250, // speed3 50 }, // BEAMER1 { 200, // int max_hp 20000, // int size AI_DANCER, 3000, // speed1 8, // speed2 0, // speed3 5 }, // BASIC1 { 5000, // int max_hp 38000, AI_PAUSER, 120, // speed1 1, // speed2 0, // speed3 25 }, // SHOTTER1 { 5000, // int max_hp 38000, AI_PAUSER, 120, // speed1 8, // speed2 0, // speed3 25 }, // ZAPPER1 { 1000, // int max_hp 24000, AI_PAUSER, 120, // speed1 5, // speed2 0, // speed3 10 }, // DIPPER1 { 1500, // int max_hp 24000, AI_PAUSER, 140, // speed1 8, // speed2 0, // speed3 15 }, // DIPPER2 { 200, // int max_hp 19000, // int size AI_DANCER, 3000, // speed1 8, // speed2 0, // speed3 5 }, // BASIC2 { 200, // int max_hp 16000, // int size AI_MARCH, 3000, // speed1 8, // speed2 0, // speed3 5 }, // BASIC3 { 5000, // int max_hp 44000, AI_GLIDER, 800, // speed1 1, // speed2 0, // speed3 30 }, // CARRIER { 5000, // int max_hp 38000, AI_PAUSER, 120, // speed1 1, // speed2 0, // speed3 40 }, // BURSTER { 50000, // int max_hp 55000, AI_BOSS1, 120, // speed1 1, // speed2 0, // speed3 250 }, // BOSS1 // Stage 2 { 300, // int max_hp 20000, // int size AI_DANCER, 4000, // speed1 12, // speed2 0, // speed3 5 }, // CROSS { 5000, // int max_hp 37000, AI_GLIDER, 900, // speed1 1, // speed2 0, // speed3 20 // score }, // Flower1 { 6000, // int max_hp 37000, AI_GLIDER, 900, // speed1 1, // speed2 0, // speed3 20 // score }, // Flower2 { 6000, // int max_hp 44000, AI_GLIDER, 900, // speed1 1, // speed2 0, // speed3 20 // score }, // Flower3 { 7000, // int max_hp 44000, AI_GLIDER, 900, // speed1 1, // speed2 0, // speed3 20 // score }, // Flower4 { 5000, // int max_hp 44000, AI_GLIDER, 900, // speed1 1, // speed2 0, // speed3 20 // score }, // Flower5 { 300, // int max_hp 20000, // int size AI_DANCER, 3000, // speed1 24, // speed2 0, // speed3 5 }, // CROSS2 { 4000, // int max_hp 42000, // int size AI_DANCER, 2200, // speed1 12, // speed2 0, // speed3 25 }, // WINGS { 50000, // int max_hp 35000, AI_MB2, 120, // speed1 1, // speed2 0, // speed3 200 }, // MB2 { 5000, // int max_hp 24000, AI_GLIDER, 900, // speed1 1, // speed2 0, // speed3 30 }, // CARRIER2 { 50000, // int max_hp 30000, AI_BOSS2, 0, // speed1 0, // speed2 0, // speed3 350 }, // BOSS2 { 200, // int max_hp 13000, AI_BFLOWER, 0, // speed1 0, // speed2 0, // speed3 0 // to stop people milking them for points, as they are infinite }, // BFLOWER { 50000, // int max_hp 60000, AI_MB1, 120, // speed1 1, // speed2 0, // speed3 200 }, // MB2 { 200, // int max_hp 13000, AI_BFIGHTER, 0, // speed1 0, // speed2 0, // speed3 0 // to stop people milking them for points, as they are infinite }, // BFIGHTER /*{ 200, // int max_hp 20000, // int size AI_MARCHER, 3000, // speed1 8, // speed2 0, // speed3 0 } // BASIC3*/ }; /* NEED fields for: rotation speed accel speed drag? recycle various bullet data (speed etc) */ /* AI_DANCER speed1 = speed speed2 = rotation AI_DIVER speed1 = acceleration speed2 = rotation AI_ATTACKER speed1 = speed speed2 = rotation */ excellent-bifurcation-0.0.20071015/src/menu.c0000666000175000017500000002406010704764326017771 0ustar miriammiriam #include "config.h" #include "allegro.h" #include "globvars.h" #include "palette.h" #include "game.h" RGB splash_palette [256]; BITMAP *splash_bitmap; void key_box(const char ktext [], int command); int acceptable_char(int scode); void define_keys(void); extern volatile unsigned char ticked; extern BITMAP *display [3]; extern struct optionstruct options; int menu_select; int key_wait; int thing; void startup_menu(void) { int counter = 0; menu_select = 0; key_wait = 30; int y1 = 170; int y2 = 190 + menu_select * 30; int y3 = 218 + menu_select * 30; int y4 = 218 + menu_select * 30; int anykey = 0; int i; while (TRUE) { clear_bitmap(display[2]); counter += 4; if (counter >= 40) counter = 0; vline(display [2], 320, 0, 480, COL_WHITE); vline(display [2], 319, 0, 480, COL_LRED); vline(display [2], 321, 0, 480, COL_LBLUE); vline(display [2], 318 - counter / 8, 0, 480, TRANS_LRED + 0); vline(display [2], 313 - counter / 8, 0, 480, TRANS_LRED + 0); vline(display [2], 308 - counter / 8, 0, 480, TRANS_DRED + 0); if (counter < 20) vline(display [2], 303 - counter / 8, 0, 480, TRANS_DRED + 0); else vline(display [2], 303 - counter / 8, 0, 480, TRANS_DDRED + 0); vline(display [2], 322 + counter / 8, 0, 480, TRANS_LBLUE + 0); vline(display [2], 327 + counter / 8, 0, 480, TRANS_LBLUE + 0); vline(display [2], 332 + counter / 8, 0, 480, TRANS_DBLUE + 0); if (counter < 20) vline(display [2], 337 + counter / 8, 0, 480, TRANS_DBLUE + 0); else vline(display [2], 337 + counter / 8, 0, 480, TRANS_DDBLUE + 0); textprintf_right_ex(display [2], font, 320, 100, -1, -1, "E X C E L L E N T "); textprintf_ex(display [2], font, 320, 100, -1, -1, " B I F U R C A T I O N"); y1 = 177; y2 = 190 + menu_select * 30; y3 = 219 + menu_select * 30; y4 = 350; rectfill(display [2], 370, y1, 600, y2, TRANS_DGREEN); rectfill(display [2], 370, y2 + 5, 600, y3 - 5, TRANS_LGREEN); rectfill(display [2], 370, y3, 600, y4, TRANS_DGREEN); textprintf_ex(display [2], font, 400, 200, -1, -1, "START GAME"); switch(arena.difficulty) { case 0: textprintf_ex(display [2], font, 400, 230, -1, -1, "DIFFICULTY - EASY"); break; case 1: textprintf_ex(display [2], font, 400, 230, -1, -1, "DIFFICULTY - NORMAL"); break; case 2: textprintf_ex(display [2], font, 400, 230, -1, -1, "DIFFICULTY - HARD"); break; } textprintf_ex(display [2], font, 400, 260, -1, -1, "STAGE - %i", arena.starting_level); textprintf_ex(display [2], font, 400, 290, -1, -1, "SET CONTROLS"); textprintf_ex(display [2], font, 400, 320, -1, -1, "EXIT"); // arena.just_got_highscore = 1; y1 = 197; y2 = 235 + arena.just_got_highscore * 30; y3 = 264 + arena.just_got_highscore * 30; y4 = 341; rectfill(display [2], 50, 197, 250, 227, TRANS_LRED); if (arena.just_got_highscore == -1) { rectfill(display [2], 50, 227 + 5, 250, y4, TRANS_DRED); } else { rectfill(display [2], 50, 227 + 5, 250, y2, TRANS_DRED); rectfill(display [2], 50, y2 + 5, 250, y3, TRANS_YELLOW); rectfill(display [2], 50, y3 + 5, 250, y4, TRANS_DRED); } textprintf_right_ex(display [2], font, 137, 207, -1, -1, "HIGH"); textprintf_ex(display [2], font, 157, 207, -1, -1, "SCORES"); textprintf_right_ex(display [2], font, 137, 247, -1, -1, "EASY"); textprintf_ex(display [2], font, 157, 247, -1, -1, "%i", options.highscore [0]); textprintf_right_ex(display [2], font, 137, 277, -1, -1, "NORMAL"); textprintf_ex(display [2], font, 157, 277, -1, -1, "%i", options.highscore [1]); textprintf_right_ex(display [2], font, 137, 307, -1, -1, "HARD"); textprintf_ex(display [2], font, 157, 307, -1, -1, "%i", options.highscore [2]); rectfill(display [2], 144, 232, 149, 341, 0); /*if (keypressed()) { key_wait = 0; circle(display [2], 100, 100, 5, 10); }*/ anykey = 0; for (i = KEY_A; i < KEY_CAPSLOCK + 1; i ++) { if (key [i]) { anykey = 1; } } if (anykey == 0) key_wait = 0; if (key_wait == 0) { if (key [KEY_UP] || key [KEY_8_PAD]) { menu_select --; if (menu_select < 0) menu_select = 4; key_wait = 7; } if (key [KEY_DOWN] || key [KEY_2_PAD]) { menu_select ++; if (menu_select > 4) menu_select = 0; key_wait = 7; } if (key [KEY_LEFT] || key [KEY_4_PAD]) { if (menu_select == 2) arena.starting_level = 1; if (menu_select == 1) { arena.difficulty --; if (arena.difficulty < 0) arena.difficulty = 0; } key_wait = 7; } if (key [KEY_RIGHT] || key [KEY_6_PAD]) { if (menu_select == 2) arena.starting_level = 2; if (menu_select == 1) { arena.difficulty ++; if (arena.difficulty > 2) arena.difficulty = 2; } key_wait = 7; } // if (key [KEY_ESC]) // exit(0); if (key [KEY_ENTER] || key [KEY_SPACE] || key [KEY_Z]) { if (menu_select == 4) exit(0); if (menu_select == 3) { key_wait = 10; define_keys(); key_wait = 10; } if (menu_select == 0) { arena.level = arena.starting_level; ticked = 0; new_game(); game_loop(); } key_wait = 20; } } else key_wait --; /* textprintf_centre_ex(screen, font, 320, 210, -1, -1, "SEE README FOR INSTRUCTIONS"); textprintf_centre_ex(screen, font, 320, 240, -1, -1, "PRESS 1 FOR EASY"); textprintf_centre_ex(screen, font, 320, 255, -1, -1, "PRESS 2 FOR NORMAL"); textprintf_centre_ex(screen, font, 320, 270, -1, -1, "PRESS 3 FOR HARD"); textprintf_centre_ex(screen, font, 320, 300, -1, -1, "PRESS ESCAPE TO EXIT"); */ // textprintf_centre_ex(screen, font, 320, 330, 10, 15, "HAVE YOU REMOVED THE DEBUG KEYS???"); rectfill(display [2], 360, 430, 635, 461, TRANS_DBLUE); textprintf_right_ex(display [2], font, 625, 440, -1, -1, "COPYRIGHT 2007 LINLEY HENZELL"); do { thing ++; } while (ticked == 0); ticked = 0; vsync(); blit(display [2], screen, 0, 0, 0, 0, 640, 480); }; } void define_keys(void) { key_box("PRESS KEY FOR UP", CKEY_UP); key_box("PRESS KEY FOR LEFT", CKEY_LEFT); key_box("PRESS KEY FOR RIGHT", CKEY_RIGHT); key_box("PRESS KEY FOR DOWN", CKEY_DOWN); key_box("PRESS KEY FOR FIRE", CKEY_FIRE); key_box("PRESS KEY FOR CHARGE", CKEY_CHARGE); key_box("PRESS KEY FOR SWAP SIDES", CKEY_SWITCH); key_box("PRESS KEY FOR AUTOFIRE", CKEY_AUTOFIRE); set_config_int("Misc", "key_up", player.key [CKEY_UP]); set_config_int("Misc", "key_left", player.key [CKEY_LEFT]); set_config_int("Misc", "key_right", player.key [CKEY_RIGHT]); set_config_int("Misc", "key_down", player.key [CKEY_DOWN]); set_config_int("Misc", "key_fire", player.key [CKEY_FIRE]); set_config_int("Misc", "key_charge", player.key [CKEY_CHARGE]); set_config_int("Misc", "key_switch", player.key [CKEY_SWITCH]); set_config_int("Misc", "key_autofire", player.key [CKEY_AUTOFIRE]); } void key_box(const char ktext [], int command) { rectfill(display [2], 210, 200, 430, 250, COL_OUTLINE); rect(display [2], 211, 201, 429, 249, COL_LBLUE); textprintf_centre_ex(display [2], font, 320, 222, -1, -1, ktext); vsync(); blit(display [2], screen, 0, 0, 0, 0, 640, 480); int inputted = KEY_ESC; int i; int anykey = 0; do { do { thing ++; } while (ticked == 0); ticked = 0; key_wait --; anykey = 0; for (i = KEY_A; i < KEY_CAPSLOCK + 1; i ++) { if (key [i]) { anykey = 1; } } if (anykey == 0) key_wait = 0; if (key_wait > 0) continue; if (key_wait <= 0) { for (i = KEY_A; i < KEY_CAPSLOCK + 1; i ++) { if (key [i]) { inputted = i; } } } // while(acceptable_char(inputted) == 0); if (acceptable_char(inputted) != 0) break; } while (TRUE); player.key [command] = inputted; key_wait = 10; } int acceptable_char(int scode) { switch(scode) { case KEY_ESC: key_wait = 7; return 0; case KEY_ENTER: case KEY_ENTER_PAD: key_wait = 7; return 0; } return 1; } void loading_screen(void) { /* splash_bitmap = load_bitmap("gfx//splash.bmp", splash_palette); if (splash_bitmap == NULL) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Failed to load in bitmap! (File not found?) \n%s", "splash.bmp"); exit(1); } */ vsync(); clear_bitmap(screen); BITMAP *wait_bitmap = load_bitmap("gfx//wait.bmp", splash_palette); if (wait_bitmap == NULL) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Failed to load in bitmap! (File not found?) \n%s", "wait.bmp"); exit(1); } set_palette(splash_palette); vsync(); //blit(splash_bitmap, screen, 0, 0, 0, 0, 640, 480); // blit(wait_bitmap, screen, 0, 0, 0, 0, 440, 300); draw_sprite(screen, wait_bitmap, 320 - (wait_bitmap->w / 2), 200); destroy_bitmap(wait_bitmap); // textprintf_centre_ex(screen, font, 500, 300, -1, -1, "LOADING"); //textprintf_centre_ex(screen, font, 500, 320, -1, -1, "WAIT A SECOND"); /* BITMAP *temp_bmp = create_bitmap(640, 480); blit(screen, temp_bmp, 0, 0, 0, 0, 640, 480); save_bitmap("wait.bmp", temp_bmp, splash_palette); destroy_bitmap(temp_bmp); */ } void loading_screen_wait(void) { /* BITMAP *press_bitmap = load_bitmap("gfx//press.bmp", splash_palette); if (press_bitmap == NULL) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Failed to load in bitmap! (File not found?) \n%s", "press.bmp"); exit(1); } vsync(); // blit(splash_bitmap, screen, 0, 0, 0, 0, 640, 480); // blit(press_bitmap, screen, 0, 0, 0, 0, 440, 300); draw_sprite(screen, press_bitmap, 320 - press_bitmap->w / 2, 400); // textprintf_centre_ex(screen, font, 500, 300, -1, -1, "PRESS SPACE TO CONTINUE"); do { if (key [KEY_ESC]) exit(0); } while (key [KEY_SPACE] == 0); // destroy_bitmap(splash_bitmap); destroy_bitmap(press_bitmap); */ vsync(); clear_bitmap(screen); init_palette(); } excellent-bifurcation-0.0.20071015/src/palette.h0000666000175000017500000000205210556341112020452 0ustar miriammiriam void init_palette(void); void level_start_palette(void); void reset_palette(void); // now, the colour zero doesn't form /* 0 base 1 White 2 Yellow 3 LBlue 4 LRed 5 LGreen 6 LPurple 7 DBlue 8 Dred 9 Dgreen 10 DPurple 11 DDred 12 Black 13 Light 1 14 Light 2 15 Light 3 */ enum { TRANS_WHITE = 17, TRANS_YELLOW = 33, TRANS_LBLUE = 49, TRANS_LPURPLE = 65, TRANS_LGREEN = 81, TRANS_LRED = 97, TRANS_DBLUE = 113, TRANS_DPURPLE = 129, TRANS_DGREEN = 145, TRANS_DRED = 161, TRANS_DDRED = 177, TRANS_BLACK = 193, TRANS_DDBLUE = 209, //TRANS_DDPURPLE = 225, TRANS_DDGREEN = 225 // must be the last trans + 1 }; #define TRANS_REVERSE 225 #define TRANS_DARKEN 226 #define CONVERT_POLE 243 #define FIX_BITMAP 244 int colour_to_trans(int y); enum { COL_OUTLINE = 1, COL_LOWER_BG1, COL_LOWER_BG2, COL_LOWER_BG3, COL_UPPER_BG1, COL_UPPER_BG2, COL_UPPER_BG3, COL_LRED, COL_DRED, COL_LBLUE, COL_DBLUE, COL_YELLOW, COL_WHITE, COL_LGREY, COL_DGREY, COL_DGREEN }; #define COLOUR_OUTLINE 9 excellent-bifurcation-0.0.20071015/license0000644000175000017500000000167510707332670017436 0ustar miriammiriamCopyright (C) 2006-2007 Linley Henzell This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. This copyright and license applies to the whole contents of this tarball, including the source code of the program as well as all the game data, graphics and sounds. excellent-bifurcation-0.0.20071015/gpl-2.0.txt0000644000175000017500000004310310641012126017665 0ustar miriammiriam GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) 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 this service 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 make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. 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. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the 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 a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 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. 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 convey 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 2 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision 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, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This 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. excellent-bifurcation-0.0.20071015/init.txt0000644000175000017500000000224010560227542017560 0ustar miriammiriam# Excellent Bifurcation init file - edit with a text editor to change settings [Misc] # Turning vsync on eliminates a graphic shearing effect which some people might find annoying, # but can slow things down on older systems (but you'd need a pretty old system not to be able # to run this game). Set to 0 or 1. vsync = 1 # Set Windowed to 1 for windowed mode, or 0 to play fullscreen # Fullscreen is recommended! Windowed = 1 # set from 0 to 100. If it's 0 the game won't bother to play the sounds/music at all. MusicVolume = 100 EffectVolume = 100 # 2 is normal stereo # 3 is reverse stereo # ...although I got these around the wrong way in Overgod so you might need to check. # I don't think 0 (sound off) or 1 (mono) are implemented. You can turn the sound off through # the volume controls. StereoMode = 2 # hm, not really sure what this does. Best to leave it here. SoundInit = 1 # These are scancodes so you can't really edit them. key_up = 84 key_left = 82 key_right = 83 key_down = 85 key_fire = 26 key_charge = 24 key_switch = 3 key_autofire = 1 # Easy, Medium and Hard. Hscore0 = 200 Hscore1 = 200 Hscore2 = 200 excellent-bifurcation-0.0.20071015/gfx/0000755000175000017500000000000010560223004016627 5ustar miriammiriamexcellent-bifurcation-0.0.20071015/gfx/small.bmp0000644000175000017500000000606610443133354020457 0ustar miriammiriamBM6 6( (((<<<<  @@@((ePP0e0(L(PP<< PP<<0eeeyuuuuƑuii(U<(D<eP4Dy@@(ePPe0L(P< PP<<eeyee@yyeeP0y(ePqqPލ<eY@@(eP00((PP< P<0ee<@i(Py0(uP<PTSPqvqv{ln,*/2>3K`N2n4RW3j5gQQlPTrhwTRkRRlnn3U Sch-(POzlSTmk_:nd&IsXoMuRu1ʗHϑoʍ]sJХnֳGsOpMpKkEmLuVq\rEiĝʪ⻛Д˹繥͒ΐЮǷǗĚǵήˆżώͮ><<>811#>>?>><8<11#1 #1##1##1181 <881188<<>>< 15<15<5<5< >~>>~>~<>>ڞ ڬڬ\ \>1##<\?<8<881<11#1##11## 1#1#1<#1##1#<>><5<551<5<<>><<7<7<>~<> ܬܞ~\\>>11 >?1<<8<><#~<11#> 1#1><>1<><1 <~><11~1#1<3?>7<<~51>~><~~>>~><~~~><~<>~1>~ܞڬ\488<15<<1?8<8#5#55##1<>75#<#1R<57>>11><~~<~15ݜ#17~7<<>5~<~7>>~~>>~ܾ ڞܞ\\8#>##18#8<\~#1|""~""7#5571"1<#1#15"~##1#55>><5>71515~15>~~<<577>~<~57>>  ܬڬܞ\s?><81~51<#><<1<#>#~5##<"1"1117##"#1"~77~1#<1>ܘ>511<555<>15>>1~<57>757>ڞ\t1#<>#<##5>1#11117###~#11<~"###~~"<<8#<1<ݜ<<>551#51<5>5~5#~5#5>~57<<>ڞܞڞڞ\#5#1#$1>1#>>>#~><11#1<15#~##1L<"5ݘ#1<<>5>171<#~7~55"~<75~1<77>~ܬڞܞ\ ##5#<,>11##~#1##~11#11>?<##11#1<<####ܜ1#18><<1"1>##1<~<<1#5><>1><5 ~<5>5>~~~ڞڞܬ\#>#>"#<#"<\<#1##5>#####1"<1#1#11<<1# 1#1151511<11575<51<><~ ܜڬڬܞڂ\<##"55##1#1 <<111##11#<<11# 1######18155115~ 151<55>7~~  ڬ\ ><11~>><8<<881<81111#1>>1#1#11>~<#1818<>>8<51855<1<1 5<55155<5<155<>~ܬ\ #"##18<18<68811##1*11*11*1#18#*11#11#11#111##188<>><8<<118858<8<5<81<1<><<><5<<>~~~~~~ܞڞܞڄ\ #1##1<8<88<1181*1#11#1##1181181##1#88<>??<58<8<><5<81<1< > ~><<><1>\####188?8<88<81 <><>?~ܜڞڞڞ\##8<><><8188*188 1811#11##1><818<:<:<><:>>??>~>\???~~ܾܬ\>8##88<:8<881881 118#1#<>5<<1881818<8<<8<<8<8<8<>< >~~ݾ~ܜܞڞ\?<###*8<<==< 8181111*1118#1#<588<1811<18<1<<8<8<8<88<>~~ܪ\ <<1##118<818181811* 111581 8181818181<.<8<<11<>?~\ <>811##1<1<518181#11#1#1##11#1~~5#'5#5ݜ15515158<15<518 1515<155<<>7<> ~>ܜܾܜڞ\ 88<<1##15 1155151551881<7<7<1#111#11#11#0'1'51#11ܜ15181551 515<8<5<15<>755<7<> ~ڞڪ\<1 118<1> ܜ>#1##15ݜ<#5 511ݜ181 >1<11<> ~~~ڬڞ\81 115<1~#1#ܬ#5 <15ݜ#81#~11~<> ~~ڞܞ\?51<1~܃~~ 1#~#5 "1ܜ7151>11ܘ~5<>>~> ܞڜ\<1=>11ܘ#55#057>7<1111~5#1100ܜ#5ܾ515#18811>117151105~ 75<>>~ ڞ\1#<<7<7<755<5#~~~>~~1111##1#ܜ05751#811<5>.1 ~~~<>~<>~~~ܞ\8115<>><<8<<~5#&81#511#11ܜ#5ܜ7151851>81 1<><~><>~ ڜ\ 81518<8<ܘ71ܬ 1115~51#11#ܜ0555<5#1#5>|.1 5><><>~ڜ\ 1#1518181<1~5'~#1#'1~7#0#11ܜ#5515~<11볜~"'55'<<><7>~~~ܞڞ\ 1#188<8"1ܗ<1~77~~ܜ11#1>055151<1~>7>~1<~><>~ \1#1<18<87ܬܘ5<87<5ܘ<81ܜܞ#5<15ܜ~1<87܃7<><>~~  \1"511<8<88<1~<<11~1 <81<~ ݜ715<11"~ܜ7518<#1ݜ>5<><<7>~>~  ڬܞ\80>58511881811ܘ8181511<1#5#'10 1<5 1<8<858115<11515<>><>~>~  ܞܞ\<#1181<118185<88<11881818 15~<118181 8<18<8815<5151<51<>>7>~>~ ܞ\8"58 1<818<<8<8<811851<1818 118<<1<~1 88188181181 8<8<88<<5<><><> ~~  \81<<8<<8<<8<818188181<>11188<88<8 <>~ ڞܞ\11><*<881<8<88< 8<88~858 1<1<11<18<8<>1818181<8<8<<>:<>< > ܬ\8<15 155<<>1.<:<>5578<8<8<<8<8<<1<51<1##1885 <>><<>== >>> ڬܬܬ\818181<=<<=><><><:><><><<>< ><<811811588<><>?>~>>>~~~~ܜ\ 8118818*1818*88<><<>>=><>??>>??>??>>=>=>:>:>?><>><>= <8<88<<1< ><>>?~?>>>>~~ ~ܾڬܬ\881818188188118<=>>?>>?=>==>><<>>???>=>??>>??>=>=>><8<1<>?~>~? ~~~  ܞܬ\J; 81881818>\?>?>>==><<=> ?>?>?=??>?>=<><>?>~??? ~ܞ\gffg' f181 1888  9;=fJ\:1 11=7;J?1=\\8118??\  119J88\,??ݼ      \==?988;;88? ?>,1??1U? \ f? 88; 988\D??8?188S \ J8 1?89g1\?84\\88  +j\ f 8% 889=;K;fF1????<?&=      \JϿ 8\\1988?)J88??H?1?1886\ f1 \??\*9989#99fF8:?1\&\*?88.5g\/J8??\1 8989)8889;J=8?? ?88?1(\/J8\伽?=?1<\\?18>;f89;JF?;99Jg8???B8?88 \ f==8 =\?=11<\\?\\89;Jf J=;3JJ==?8m?88?&\1J81J?1?=?=88?=*?889;JfJfgfJfJ g??/\?1\8\,    \(fȿ\\88=>>\\???9;;Jfgf»gffKJfg;\@?8?=?(5\1JȺ8=?=889891?\?\899;Jf»Ļgfq׽??=8\<?$)\f 1\?\8ȍ8?\?\??9;?Jfgg» gg?\1\ \\8  &\HJ?ֿ?J?9<:9??\?\\9;Jffg »gf»???8\  \"fK8?ƺ佽\> 8899\?%9;JffĽ»g)=1=18?#81\88*881\#fK1?KK?KK8%\;?>91?\??89;gfj ?F J\MJHKJKK?KK=;9;;=88???\\89;J½)»=$ \#f=g8DKKJ=>H9?J ?\?;88?99;ff½ĽĻ?  \ufDKȺ??;F99;8J?;8\??\;fĽ\1<8= \ JD ff???89;f \ 88\(fE  ?8???8=\8;fĽĻY?8=$   \J5Ϻf\:*=\\?=9J k\8?8-g\J @  J88?\8=JĽfg&+\ J @ <8\ ?gĽgJ?\f &ݻJ=?\8;ff?=888 \Œ @*881;9fnҽfJ\?\8 - \ J  8?8JFfĽ;;\\?@\1# \f\<;&89J½Ȼf928=88,? 5j\Œ @8  \? Ȼ;; @81   \fFDD \?;Jf Ƚf= -?188W\J\?;;?899>;Jfºf?;f\F8889999;Jf6f;8 g\*?$:;?89<;Jf¿fJ;9J9fǽȽ\&\ +\  \ \(Q  \   \      \  \   \     \     \      \   \  '  \  &  \   #  \    " \        \    \    \ 7 1~7:>~~>~>?~~ 7 \>~>~~>>~>>~~<~>7~>>7 >~>~>~7~>~~>>~>>~>>~>~>ݬ> ~>7\ 07{7{"677{7{{ { 7 򫩖64\ {0{7ϗ:4 {777 7 5 7ܫ7 {?\{{{4{{~{6{{61{{ { \{{{6{{{{ { 4{{{?{ 𸸖{{6{#{{{5{7 \ {60{{6~{{6>{{{{0{64 {{{5{ 6{{{{{{>{{{6{{{{{6{7 ︲{{{4 {{ 6﫨{47\ { 0#\\\\7{6{6?{0{ 44{0~{6{4{5{6<{{{68{ 5 𹨨{6{41>>?>?>>6{{6{68>>?? {{664\ {6464646464 0{64644"4641664" {66440"4464 "6464401 664"464"4{6440{40 {40"6466466 4 64 0>\ ~7577557~~~~755075>757#\755750>57550757550?>757751~755750775575 ~7550775랗751~~575~ 7508\?ֻ?ֺ\?\Ͽ\Ϻ \\? Ϻ\ \Ͻ8Ͽf\? \\? \ȿ\Ͽ Ϻ\ȼ?\ \J9fȼ;ff\Jf f\f Ƚ ? Ƚ?Ƚ\Ƚ? \һ9ҽ;fJĽĽ;F;ĽJҽ;ҽf ȽĽĽfĽgĽfȻĽȽĽ; ;ҽFf; \;8f; Ľ?;?J ?F?ĽF׽Ľf=? J?J?Ľ????  Ļ?fɽĽĽJȽĽf;f?\gĽgf ;\׽Jf \igFif iiiJiiiiiFFJiigbgiiijijijJ i;ifg;ijfF;Jcgi FJiijjif ig;ggJ ٽi;J\jgigjfcigiciF igjccgjiG;fiijgif fһ ֽ iggcgcggccgccg icccgcg cgG\cGGcgc; cgg\ ic;   ccF  j cgcj ifi\c`c`GGcGc`G;ic`c`AccG`F9;c9f;AA\`GG`G`GFc``G`gGG`GAFffGAGA`ҍ\ `GAG`AGG`GbjM``cAcMc`M;gA`AA`gA`AJ\+َ\&\&\&\!!'! #0.!#|v,#^h^W #[[R 8 ;QCCB@B@ CC@C@@ll @BB) ) )B@BCB"++=+*.},t%* (*/|ޔuu,+ B+HBCBCB -B)-)|//+/ BCCB@)\   118  DKOCB@B@C C@C@L BBB)@)@BB)B0+B)+.(%nxyy%t}/}}v}⒒CCB)B).|/(()BB CBBCBCBB@)\1 1*  +INOC@CC@CC@MDBB))@))@BCB-+)+ !%yzzywއv,BBCCBB)H(.-)-BBCBCBBCB)\ 11 1 1   +EIOC@CB@@CCCC@C@C@LMl@BB)B))@@))@B)B) !!%yڔߔ-CBD9+(/,)-BBBBBCBBCB\  1#8 81)11 )BECBCC@@CC@ C@C@ELQc@B0 )@)-))B)-B)( .zv|B畓畕Q|/-))-BBBCBBCBCCB\*##*8\?>\8\8?\1?1==\8?<=\=\\:*= )BINCB@CC@CC@C@ LPlGB @) / )/)-)(!! (/(zڰ|w ؼ*-)-)BBBCB\\.1??1?\8\8?888= +EBC@@ C @;BECOMABCCB @B@ + )B-(-(=((vxw|v撒=)-)B-BBBCBCB\ *8 ?8G8?98=DKNNOC@@ CO @B@ECOQ@@CBBB)) )@ )()-w.* ,zw}|}/- c))B-B CCBCBBB\ 88\ 8?88 ?888?*bddgKPOC@CC@@CB@C @ BEOOQQE@@B.)) ) @ ( (--~  uz܁-߉GBBBB-BBBBCBB\8?88:>??^1 \=\\<1\8\8\';<\8\\8\8:\1*888889llPC@CBC @BB@BLOCCB@@B)) % ) ))(|!|*-!(-yڐ܃*蓓GBB-B BBB-B\"?*?*=#W<8?<?\==  OC @BCBC@LBB@ @ @BDMcQQNCCB@ @) +) )) )(w) /},)w,*>=PBBBCB\ !.|!     (   +OCBCBLCEL@ @ @@ElMCBB@ ) )(  ) -w-(/.)-,.7|/ۏ NB-BBBB)@B-B\}!( !.v!! 0  *+-) +   ))+ ))B QOCBBCBCCLBE@@ @GjLB@ ! )+ (uz/ <~.}}=Q NCCBBBCBB@BCB\ }!!!!.,vޔz!!!!5   (%   () /   + ))-BH QCBBEELLBLNIIED @ ) MlML@    */  (,(.< *vܐ=//Q CCBBBBB@BB\.! !%'}z!!! 4 !((!   ))    BB)DOCBCNQQPLINPPKD@))/+ M MB  +( +*~5(%u|7|/)ڇz./BBIQQ镉CBCBBBBBCBB@B@CIg\!! !.w.! !!!"6 .. ! k  ))BQLCBBQPPcA@@B)+|=cKB  ( * *(,!-u*.((wڃw(*?/INQQPQQ镓CBB@B\,,!!%! !wz%! !!!2 !!  Y9 ))+i LCCBCBNje`@)+:YS`KD  ++ ) 9 +*(. (t, !(.|w/)v%%tzڔ~HNPgQQQ镉CCCCBB)@/)BBBBK\! '??=   8HHB+)BBIHBD @ BLcl"l++ ++.=^~9H-)B@@BB)-))   (*/((,yyᐏہ-/-l ɍKPPCCBNc/B)-@BB@BHE\ !!.}<#  * *=HBB-) BHBB+@))B@@QPl a`G`9 (}/} [:<}./) )$@B)) ((+/( (,%uz/wځw--=PQ铉CBKB-))B@B\  '.*#    *++/B ))B)BB/D@@)B LM aelle)/>+-#}/ +7w  !5?/))(\ CBBKB-BB\11*88#*88*8#18**8**1*1 81181*1 118?:888*8*8***8*88*18*# )-)BB@@)BDPOCBC@D*:#v3|.5# .:W=='XW[>#7~ ?..)(*\h CBB B\   8   * 8 8 *( ( ))B)@El ÉCIBCB+D)\8!><.~}|h/1YUУ:!| >.(-.(*:^OCCBIK-BC\=?݌1?88 8  ( ))+@ @@MPCB@FhF(#0<'*<<[^|wv>< >}5 ?+-+((8=\BCBIiD/BBB\ 88  8*188 *88* BBNCBF J;*..}.'.*^RT~.<#<>[ И|~2[>((-<|?hے牉BB--jcB)-BC\8< **8 81:8 RURR  )BCcCBCBCBC))E;8<}/(.<~*#ۚ35ѣ28+(.|7>>=>\苉BBBHiDBB-B)B@@B\ =  䌺\: 888*18<8 ? Y___+ BBCPICCBCB)BE alih8!.'*)+.5.<3|#33||~.~_T||'1..*<;?ۑ⏕K=/-lfD-B@C\ <      ZW+ ) BBICBCBaCBB@BBgb# #*!1.#5~RRT[]8,8R3V.ڗ5'1<}BBBߊ./HH B@\ 8}#        SgEEBIIBCCB@)@B KDB (*."''<.3~50]U_|#[W}<!-.**5}ww}B=-//ڈH.w}-B)B)B)@CC@\8###!*\?8?\ <\ \8= SԻIB @BCPB@)BPKPPDD *..~(*.'[~|#2]_T]|! 1~.'#()('!w-/./=BH<:\( ( XNCBBCCÍIBP) ()BBIIH+S_a_U]RSkk155- *.#v.''2V7#'.#1'..(!7((+(7~B/71 .=?}}JX)B))B)@)@)BB@\ .'!#. ! !!%!#:??;  ## ()) :ֻCBCNNPNB  BHIDd%̙[kZ##(*(##1'..*#''*'01<!{77* |ژfˡ3!*< :.w/FX8)-)B))@ B@\ '.!!.'!  !,%''! X[: !# (( kPNNBIB) (+B IHH9Xk_>_#%.}1!##|!8.!*#1'*'.!##>[[:7!~#7!..˧["'5>.//Dfhk:)-)  )@@B\ ** #'v%}}v !%yv. !SR!**"Xdd9))((ZƍCCBBBB)B)  +HBIBB+;h=TS/.YY1><|}*#...('<(}_1! 5{"!73551 1!--+88*!( )+)/)+))B\!(8838::".yvz !zy'' '!'  " Xd( ZiPINIBHBBB ) +HIH+?h1TT+SR<5%'#>.**>ʃ|()**'<](!( 5 ('0& 63!, (!.)( ! (( )()B\/**}8\[1|zv!%v%  !'8{o0. X+  !(+Hlb+B+HIB)B) +KH/+*?^k]?BB+>}1}}p'#-)(!25##0#!<5{5V#}w~.! ! ! ( )) ))()-)B\!*!v>]5|v%! .v.%!!  !*8{6  h;* -H?HH/IIB)B)B)) 9ff9*;X$__~wB+*}2<!#(( V##{!(27400Χ["'!.|<'!(! !(( )( (-BB\#.!.\[>.!!,( yv'!#!  !'4{{.H8SR J*! ()/ b=HHH-):B)) :i;++9?_ZhkX+-B*./w3R. ( !TY(*'1#RRY R076{77^:W1#.)(.!!() (()B\!!y!!(- !tv%%'# *#!!&{{{)wv ++;\__ ό** ((9"hfh9 ))B) Zk*9Xk_UY8!W2T+@B/}/(1W~3R<# RT3W'5175*8:^̣kV6{7<1[0#(.}/(.!!! () ())B\z!\hΜz!,( u,p'#!!{s*ww++9?h_ =*( (++ k9 )?( _k(RTR12U8-B/}|*."|72!%v/-.!!!! ()-)()\AGD   \ BDAD   \KMAC   \SEgAAGC   \HOAAC  AAg \KLAB  Ͽ A \ 9 <cAAc 쟤   \N >A   \     jA    \I<A  \   GAA  \ cAAg  \   A 򿼺 \   AGg A\GAAAAc\   cAVAG俺AGgAc\+99f A VAV AAA\jj9 GAAj A AA A\ 9;fj jA+jA AAAGA\%fĽ  A+A俺Aj AAGAAG\  jjAAG A AAcA\j#JfgjGAA A)AgAc\i -fjj gAAcA.g \   jjjjjGAA jAGgAjAGjGAAAAA  \  j j  jj  cAAj A AAAAGAG \jj   jj jAAc AAAAAAAAA Ϻ  \i iiij i jijiiAAG AAAAAAAAA  \jjjjjjA AAAAAAAAA  \ j jA AA AAAAA, \jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjGAA AAAAAA A \jjjjjjjjjjjjjjj jjjjjjjjjjjjjjjjjjjjjjGAA AAAAAA A  \jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjgAAc AAAAAAAAA  \jjj jjjAAG AAG AG A \jjj j jjA AA AA\jjjj  jjAjAGgcAGAGA cAAcAAAj\jjjj jjAjJ\ jjgjgjjgjjgjjgjjgjgjgjgj gjgjgjgjgjjgjgjgjjgj gjgjgjgjgj jgjjgjgjgjjg j gjgjgjgjgjAcK\jgjgjgjgjjjgjgjgjgjgjgjjgjgjgjgjgjgjgjgjj gjgjgjgjjgjjgjgjjgjgjjgjgjjgjGAN Ͽ\jgjgjgjjjgjgjgjgj  jg jjgGAP \ jgjjgjgjgjgjgjgjjgjjgjgjgjgjgjgjgjgj jg jgjgjgjgjgjj jgjgjjggjgjggjgjGAP\jggjgjgjgjjgjgjg jgj "jgjgjjgjgjjgjgjjgjgjjgjgjjgjgjjgjgj jjggjjgjgjgjgjgjgjggAP(\jgjgjgjgjgjggjjgjgjgjggjgjggjjgjgjgjgjgjgjgjgjggjgjjjgjjgjjgjgjjgjgjgjjgAQ(\jggjgjggjjgjgjjgjg gjjgjgjjgjjgjjgjgjj !gjjgjgjjgjgjjgjgjjgjgjjgjgjjgjgjgj ggjgjj jgjggjggjggjggjgjgAQ(\     \ JFJ fJGJJfJGffJJfggfgffKfgjgjgjg   jjjgjjgjgjggjgf \ JJFGJJGJJGJ bKJJbKJF;FJcffggfgJJcgfgfggffJgj g½  ( fffJjfgjgj g \ FFG JGJKJKbF;99FGKfKffgffFFffggfgggggfJFgg½gifgf /ӻ \f f fg»jgjgjgcggcg \FJJGJFJJGJGJGJFFJFG;99FFJJfcfJJ9;JKfJ f ;FffgffggggfgjgJ ff4Ȼf Jffffg jgjgcgKgg\JGFJFGJJGJGJfF99;;99;;Fff99;99;9;;9;FFf;9;JgfF;J ;JfgJ;FJJfJFfJJɽgJJfggfgJffggfgfggffgҽĻi?fgffiifgif »gg;J fffjjggjgjgcgcgg\JJFJGJ;999;999;JJ9999;F;FjgJ9;;F;J9$;FJ;fJfֻfF;FffgJFJffŽJJfgffgffJffgJffFfgfggffgfgfٽĽfJfgf FJffFf »gff??gj ffjjgjjggjgc\ FFGJFGGJJFGJ*GF;F;9f99;F9f9ff9JJ;;9;Fg;9J;;f9;F?fJFJfJfJֽJȽJJgFȻȽFfȻgfȻJJfgfֽfgȻffJJȻfȻ;fFf»gffJFJ9=Jffggjfijiggjgjggjggj g\JFFJFGJ/GJGGJfDFJ99;fF;99J~g;J;;J;;FffgJffJfjgggŽffgifgĽĻfJ;;9:998989=;?F\Jfgfggggjjjjggjjggjg\JFGFJJGJFJ;9F999Ff;JJFJ9;fJfJFJFfffȽgֽJfffJffֻj %ɽĻfJ981989;FJfgjffgjjgjgjjggjg\FGFGJFJFJFJGFFg9?fFJ;;JȻFJGgJJFF?gfgcffJggֽjĽg׻#gfg,Žjg9889;JJggŻ fjjjjjjjjjgjg\JGFJJFJD;fFFJffgcȻgggffgֻjgjȽĽŽ\8* ;;Jfggfgj jjgjjgjjgg\ FGFJFJFffgJJFFGFJJGJcKbbfJfKfKfgffgfKgffcffg gjg i»ĻĻĻĽĽ \\=8181 89;FJg  jgjjggjj\F;JFJFfFJFJJFJGJ GJKfggJfJffcf JJbfKJfKfgfgfgfgg½»gg» Ӻ ?81;FfgŻjjjj\ FGFGFF;99F;F;;F;F;F;FJ GFFJJbJJFGJJGJbJGbJfJf cffgffKffKg gjggfg Ľ Ľ½Ľ Ľ\ \?=*#89;Jgfg jjj\FGF ;F;D;9;;99;F;FF;F99;FJF JcJKJJFJFJGJGJKJJffJfGfJKfJbJfffgfgfgĽĽĽĻjj»j»g½½»ij jjj\<:<=?=899Jgg\FD F;;999;9;;99 ;;F;F;F;9;;F;F;FF;;FGFJFJFJfJJFJffJJFfgg½Ļffffggffgfgfgfgggfgfgijg fgggfggfj=>=>=8\\?1 9;ff»\JFDFDFF;F;FF;99999999999;FF;9;F;;99 ;F;F;FF;FJ;F;;F;;FJFJJ;;FJfgj»gfJfffJffggfffJJKJfgfJfgffgfJKfgjggffgfĿĽ::==??:==:?=:<88?8 8;JfgĽ \F;F;FJݺF;9=99J?9 f99?99;99;9;;99Ff;;;=F;;=99\ϺJFJfJ\ֺJ;?\JFFJF?;JfJJF;FfJJFJJffJg=>??\\?=<8 :?<=89FfgŽŽ\;F;FJ;f99\9?\9\9;999(;9F\;;9\;;Jf9;F;;9;;fJfJݼݺF;=󿺌ϿFF;JJ\F;?ּffJFF;JffJFJJfJJfJ1ɺ>?;?\=9<888<:=89FggŽ ӽ \;;F;JFF;;J \99;99(999999;9F9\;9;J99\9;998fcfgfg;fgffKFJFJJF;9;;J;J;;f9;fJJF;;fϺJJfJJ;FJffӌf??\\俺?:<818 9Jggɽ \;;F;FJF;9J9\889?9?"999J;99989\9?F99;9;9;JGfKJF;ffFF;FJFJ;J?;$F;=J?J;;9;9;FϺJJFF;ffJϺF;JFJFJffŌ\J??\\=818 8Fgɽ\F;FJ;FFf;f;?9\999?9;J99;9f;98;;;99;99\FFKggffFF;ffJJ;9;f;J;Jf;;99;JJfJ;F\FJc;FJfɺ\??=:81#8 1Jgj׽\;;F;F6;F;?989999;99\9999999;\;99999FJ;;*9FFfccJfFF;fffJff9;;JJffF;;;9;FffJ fgfJfJffgɌ;?Ϻ=:<8811881½׽ \;;FF;F;fF;;8 99:9;99J;9?9;99*;999;99;;;9;;fFF;fF;F;9;FfKfJGF;;fJFJJJFfJJFfJfFFJ9;;Fffggfggfgg f??\?=98# 1FȽ\J;;F;;Fff;;999;=;J;;999999;9;;99;FJFFJF ;;99FfcJF;;JJFfJgJFJffJfJfJF;;Ff fKfgfggggg g??\Ϻ?=8*11fĽ\;D;;FDJ;F;;?9? 9;999; ;FF;;FF F;FJFfJF;FJKfJF;;fF;fffffJFϽȿ?==8<888#ҽ\;D;F;J99;9F;F;FFfF;FFJJFF;;FJfcfGJJF;J;Fffgfggg ffFFĻĿ%\???:8981#911*ȿ \;;FF=;;F;9;9=989 ;F;F;F;F;FF;F;F JGJGJJGJFF;FJfFF;F;F JJfKffgfgfffggfgfgfJJfJff½½ĽĽ ?-?:=:881;f#8*9Ƚ\ F;;F?;J;;99;;9=9;;99;F;F;F;FF;FD;FF;FF;;;F;JJFFJFffJJfGJfJfJJfJJFF; FJffggffKffgffggfgggfJcfgg½Ƚ>? \\?=:8#JJ1***׽\ ;=F;Jf ;9;;9;=;9;FF;FDF;;FF;J;F;FF;;F;F;FFJFF;FJFJFJFJbJ fJJfJFJFJJFJ cKbffgcfggffgfgggggfgcgfgfgj½ =?\?==89881Ff88Ƚ \F; ff;9;F;9 ; F;JJFJ?F;FF;F;F;F;FJ FJFJGJJGJJfJJfJFFJffJFJfGfKfgffgfgfg ggggj?=;>?==9<8 188*1#\F;F;9 ;F;FJJF;F;;FF; FJFJFJFJFJGJFJffFJfJfJfKcfJ cfGffcfggKgfggfgfgfg g jj½ĽJ??=??::=9:98 1*** \;=9;D9;F;F?F;;F;FF;FF;F?F;FF;F;F;FJFJGJFJFJJGJJcJ f KfbJGfcJJGfKfcffgffcfgf ggijj½jĽ\;>:?=>==<8 11*1;  \;F;F=F ;FF;;?;F;F;JFDF JFJJFJJFFJFJfJfJfKffcJGfJfcfcffKcfggfgfgfggfgggj½»½½ Ȼ??=:<=<8<88*Ľ\;F;J;?F ;F;J;JFF?JFF;FF;;FF;FFJFFJJFF;F;F;F; F JFJFJFJJFJJFJcJJGJfgfK fcffcfKfcggffcffgfgfgffggjijjjĽ <=:8=9818f   \f;9;?FJ;?J;9F ;?;?FFJ;;F; F;JFFJ;;?;JJF;;F;F; FJf JFFJJFJJFJfJfJfJfJKfJJffKcf gKgfgfggffg gjgjijj» Ľ Ƚ=9:81=ȽĻɽ \;9 ;=;=J;F;F;F;FF;F;F;FJ;;?FF;JFF?FF;F;F;FJ;F;FF;FJF JFFJffJfJfJf JfJJfJfGJ f fgffcgfgfgfgffgf gjjj»ijiĻĽ #ֽ\;=;F?FF?;JFJF?=??JFF;;F;; FJJF;F JJFFJFJJfJfJfJFF JfJfJffJJGJJffKJfKfKffKfgfgfgfgfgfggf gj½Ľ  ɽ \  ;F?FFJF ;9; F;;??F;?JJF;F;F JF?JFJFJJJfJF JFJfJfJfJJfGffGJfffgfJfJfgffgffg Kfgffgfgffgf g jj½½»½½Ľ½º fɽ  \ J;?;F??;?;9;;9 ; F;FJJF?;JF;;F;F;J;J?FJ?J?F;FJff\fJfJGJfJGJJfJfGKfgfffgfggffgfgfggfggȽĽjjj ½ f½ \ f;F;JF;;D9 ;F;?FFJ;F;F;F;FF JFFJFJJ?FJFF;JJffJfJFJfJJFJJbJJGbJJfJfJJKJJfJf fffffgfgfcfKfgffgfgfgfgĽgjggiig g \  !!!!" '0045{{{ {s4 550#0#  ܬ 771#1oss {s^      !!!""#0'554{{{{ {{4 55''#"007~ܞ75711osss{{^       !""0'1474{4{os445'0""157777#007ά~51os{^    !*"5<~544{4{{{{ {{6&445''"0  ##### 57{{{06"400~άܝܳܳ715115ss{ss ss^     ! #0755{6{{ss450'0#""0" ####0{6 1~0#177111sssss{^ 9 9J 9 9J9*+=  " "0#57{os4N505#""00ssqo##04"04607"{{"11$oss^8+9 ? 99/  "0#55{7{{{𹹱oo4&455'#""(" >꩗#44040&00 qsss{^Z9f99999+ /=  ""0"5567{{ os4674750#0""ܘ"4' 000  &s ^ 9 9 9 =/  ""154{7{{44&&45'100"51&  " s ^  99+9 9/= F "150576{ 44&445505# 5 #0o^)99+F99 = =/=9+9=/ #  ""85 7{{{{{465#""#00#'^99999J `*#!#'054556{66{{{44&{{7''0" ##0004  0"#^99 F!!#!#''554{4&{s45050" "0" '50  "0^         !#*##'050{4&4{{{{ *644{511 77$q$$! {4000##511#1#^            8#*1#'54{4 {{{!&445517 ~51$qq$ &00000 #1~0p#^         ##\8#075{{{{{oss4 55'05"5 qq$ 4000 11~>5 ^ 0"4&0  &&"&"444 &00" :88*##*87545{{{{{ss{45'"05"  !mq0"{6{0"0# ^{s{&s{s 4{{&{ 0 0"4{4{s{{o4{s {4"{19:F#*?#754{{{{{{ss{40''{1    ^4{4{o{{4{4o{{44{{{o{4{?4{44{4&44{4{40{{6{{440&s{###51<5{6{{{!{o{{s{57'" m$05#7^  44 0&5064"0477#5{{5##4{5~7~{ {{7-~077445#"51"770{~'{{7#0757{ ####7#5154{ss{{o64{p{07'##### m {s^ N40#015~5"7"{"{'4o#~~7"&"454&751{ 411550##&{505~"~"4{5#4"{{##!##5015755{4&{444{op4o{$'5q$ ""$00"& {sss^ B4#"0557~55{#04"{0&">757 ~~7{{557 17~5R#44115"855~~147055474{ ###5#117{{777{4{o{4754ooqs40 {s$q$$  q 0 4{# {o"ssp^# )4"5{57"550{054"{50607{7"{75{{57{"7545$440#4"55~~ "715{574577 "#'15777{55{{4o75{s rq " ssq" 6  #oqoss s&#"sp{^   500505~15457s"{#&4{47 ;755{7557 75150~15{751{#5577"75{6{{"0&~4{#05{7554{4&4"545{s$q&6 s$"0#"{#1$qsos$5sso{o^  {7{{o00~#1554&04"{15{{s#~{~4{{757~5557{55{775&"{576{{#~-!5##77~{0"15ꩆq qo&05&&$#4{01# $qqspssss<s{p{s^  {{{{40#50  ""5{{;775{ 4{554 {78~57'5{455544"47  5~5{ 7157{"055nq#&qq$6  s'ss"o$osos^  {5&1~>7{~{{"{5{{0~7{J475~ {<<755{7~{">7540~7~447" 5#5#{{<4qs os$qq{'0  q s s$sp{p4^ {55{>7~{7{4{7{{4{6{ 66{{{ {6{${7{{"{76{6"~ 4~{{43'751~msqq 04#16 &qsss {s{opo4oo^ ` {57~'"{7{4{~{~~{4{{7{{7{6"{{0{%{{00{7{4F# 8곷5 oqq ##664##77&qqsssppo{o^   {!~5|~{{{&{""44{{{{{{7{04&'4{{0{{{{4 {{{5"044 *!#17ܷ1$o4{sqq{{5####~7&qqs{{{sso{o46` N%{{{&q" 0{0 {0#####"#1## {6{0 {75o{ss4{ ?<?ݺ>1극??귷88?ݺ8?<>*\극8% 6 0 3  0 &0" &# !11*0011#m64{ss$4###6{o{4{$017*## {{o{&&p 8 88?극 \88 ?888 88\ݹ8%6004!64 400!(!7117077&q$$"4'& #11&1#5{4'71715'0''75###5s{{s&&$"  :깹 <\ >ݷݾ ݹ\깹ݹ8 <?8극?>빹<깹8깹8깹8\깺\% 04;""45{{`!57  ;77~50~6~#4~5777751#𷷶{{o&$ !>:ݹϹ깹ܹ8ݹ?ܹ<\?1  ?8\888=1 181$  { 4 { """4" #!5#757곷5~"# ?5/775{7~~4###754571#{oso4&&$ "ݹ<:188> 8< <ݹ 8?? 88깞\>8:8%  46{ 4"6"" 6{'!!770ܛ%(=85!!(#!#*7{1.((=887#7#77## $o 4oo&&4po&&$ "88 \깿\18ݹ 88?8<8ݹ ι 8깞\\8ݹ8ܹ%6640"{""!(\'76~50%%/?=%!%!!%(!%,##1188( 57~77# ꬗" 051###$&$&$$o&{&$ "\1= 8깹88깹8 깹 888ݹ 8$ "466"{""466"4666#"""464464!!#8!0!''#'p%!%,(%!%%!% (!t!(,(,,(*=~?117777570"{71#  $$&$$&$7o$ !"?=?\?깹8\ 88 8< 1 깹\<8\88?\깹88%` 6    !!! (!!,!!%(%(%(,)(((+( (51~15 7s|1## $! ! !#깹888\ 8= < 88\8 % 6  A6  ! !!=!!%!%!!% (%(%,( !!,(,)(!!!(50~5=#!~#&qq$7##$ !?# #깷8\ ?8 \? \ \\ 888 \8\ %  7  `{{  (!     !!!!!!!!%t%%,(,,((+(!7 ~7! !!!(! !6## $ !# ݹ8깹 8 <ι 81=ܹ 888  8%   6  66{66 { 666  F!!!!!%,% y%-((!(-()(+(9#57$#5~5#,*%!!!! !!!!5075##$$ !! !! #8깹\ 18 ? 깷8\888 \ \ܹ%`         !# !!!!!$!%*%,%ty,%,(,(++((!(!!(!+~##/75(%!!%(!%!!#!ܞ{601# ! !$ !!#8\\깺8 81ݹ8 깷\\?88\8  :%          !!!!!!=%!%(,!( ,,(++((!( (!(!((!! ! (! !%!((!!#9!(!!+606~1#  ! ! #*#=8깹\88 8ݷ=깹 18\\888 \깷>$;#  # ''#oqsq&&  #7{## $${~7## $$ooqo# #" "# #   W ?<8\\깹ܹ88 \8깹 깹>\88\8 깹%:# # ## ##! 'qossqqoqqqmmq###{##'$77 $qsoso& '# # # W ݹ88깹88 8깹 깹>888 깷%*88"   # # ##"#"'oqooqsqssqmqqqm##10#00#$ #00qqmm$mosqoosqso&'' ## ## ! !W<깷8\8ݹ8ݷ8  ݹݹ88\8 ݹ$81! !##!## "!'ooqpooqoo&mm mqqm"0#"&&mmm mm soqoqo' '  # #! R*88깹88 >κ 깹ݹϷ\888 깹% 8888    ### #"## ooso qoqo$&&mmm q '$"###mm$mm$ soqqo'"'' ## # !" %8\깹8 <<8 <>8  깹ݹ:\88\8  깹% 888<8% #####!"# &o smom&$m$mmqqm""q$&$&$$00"0mm&m&$&omo $ $ '' ## # #! )깹ݹ8 <=8 8ݷ8  ?888 8$8=8=+!!  # ##"!" 'o pqomqmm&$$mqmqqmq''"' ' mmqmm$m$$&mqooqmommo'' # # #     &깷8깷깹 ?88 8깹  깹8\888 \깹%8 8 !## # # 'qoqoomomoo$&mm$$m$m qmqmq'& ''$'& $" "$" mmm$'mo mom$'' #$ ## #! ! U=8깹깳 \8888<ι  ?\\\\Ϙ88\8 \ \ܹ>%8 88 # # ## #' omoomm$mm$m qmqq$'$ " &'$'$'$"mm $'moomomomom& '   !I%18\깷 \ 8?\?88ܹ1 = ?=888 \= %88 =    ###! #'oopoqmoomoom&& m qmq'$$'$'$ " $$mmqm$ommomomo '##  p?8깳 \8\1888 1 \8<\\\\88\8 \1 \8%88 9= ## # # #'&o&mo &&$m$$mm$m  $ '&'$"$&' m mm&$mom om&mm&!"'' $# $$$ $$$ $%88\깳\ \\8 \8ι8\8?? 1\\깿\\\\8 8\8\ 18\% =\)#!# 'om&mmo&$&&$m$&$$&&$" $" &$' &' m$$&mmom&mo" " '$$$ $$ $ $ $$$ $$$$$%<:8\깹\ 1\8 \깳\ 888>8 ?8\\\\\888\\8 ?\%8 # ##"# #'#omomm&&mm&$n$$m$$m "$$'$' ' $$ $$'" $$ " $&m&$$m$$m$$'mo&omm&om&& #$$$$$ $$$$$(ι\8\8\깳깹깳\ 88\?\8깳\ :ݹ\\888\8? 8%8 ? ## #!# op&m&mm&&m&o&mp$$&$m$$m #$$ |p. '5| $$# "m$$&$ o&o&mmo&&mm # !"$$$$$ $$$'>\\\8?\8 81>\?\888?깹깞\\888\81?깹$8 8  # # # #&oo&m&&oo&omo&m'$$m$$m$mm$$ | | ' $" $ "$$ m$m$$m&$$&$'$mm&m&m&mm&& ##"#$$$$$ $$$&8?\\8?8\? 8 \\8\881?ܹ깞\ܹ\888\88?8$ 8<8  # # #!&o&m&oom$m$m$$mm $ $ | | "$ $ $ mm$n$&$m&&m&oom&mm& #" # $$ $$$$&ܹ*\8\\8\\8*88 8<C?깞\1\?8<1:1<$ < =#####!"#!#&p&m&mmo ''$$'m$&$mm $ $ " $   " " mm$ &&$''$mom&mop&&m&&## # # $$ $$$$(근*?>\8>??8\:1 =8\\>$8\>88 88 = >?\$  !\ # # # '&m&oop$&n$m$& " $$    $$ $ $" &&$'$!$&oo& # !# $ $$ $$$' ܹ<:8 \=1 8 <?>ܹ1\1깷깹1<깹< 8깹<1>#8 ? =# '&&mpmm&m&oop&$! $n& '" " &m$&$! &m&m&o&m' !#$$$ $$$ $$$$'8 ? 귷\1 18깹 11\8\8?귷<? <81?# 8 =8988=\ # # &p&o&$&'$''$$&$     "$ &$'$'$$&'&p&&m& ##"#!$$$$$$ $$$$'ܳ< \>>8=\?0888\<#9p8=8# # &$$&pp$&$oo& ' $'$ qqm "  "mm& &$$'$'' &o&' ## #$$$$$$ $$$$'?   \1>  <$8<?<88 ##'##$$&''&$$p&&$$&$ #$ $$ mo&"  mmo &'$'& $$&$&$&' # #"!$$$$$$$ $$$$^*8\898#''&p&'$! $' mpm "    " opm $$ '$'&&$$&'&$o&$##$$$$ $$$$$^8 8===:=?< &'&'$ $$ mp&"   " mmp $$ ' &$&'$&'$&s$$'s$$sqs$s$s$ s$s$sqqs$s$$sq$$^< 82?&p&''&'&&'&$' #$' m&m " mm& "'$&$'&'&$'&&'&s q $#s$$sqsq$ss$ss$ssss$ss$sssqs$ss$$ss$$^n8 <& '&$&$&&$'$#$ &pp "" ppm $$ $ &$$&$&$$&&'p$$s$$ss$ss$ $ss$ssssss$ ss $$sss$s$$ss$$^88#8="# "###"# ##&'&&'&m&m&'' & mm&  &'& '&m &p'  &$$&$'&m&'&' $$$$ $ $$  $$ $$     ^8n 8?==##!# # '&''&mom&$'$ m m'' " " " &'& &&$ $$'&&$&$&m&$'&&#$$$  $$$ $$$$$ $$^ 8?  #8&'&&'&&mom&$  m &'' " " " " '&p 'n$  $$m&'&m&$&'#  $ $ $   $$ $ $$    $^*< #8\#'&mmssm& $&msm&$''$' " " ''&&'&'$m&mom&&'#$$$ $ $$$$ $  $$  $ $^ 8** "'&#&'&&msm&'mmsso$$&&'' " " ''&&' &$&msssmm&osm&'  $    $  $ ^8 <8??''"'&mssm&$&$$msso&'&$''   '$'$'msm& mssmm&'"      $  $   ^=n 8?8  ' &oo&o&&'$''m&$$' '$'!&$'&$$mssm&mms m&$ ##        ^88$\9888\#' '"'&&m&m&&' $$&m$$&' '' ' $ $ '$ms&&$& sso&&# #           ^88<?"'$'$&$! ' $'$'$ '#&' $ $  '#'#$&m&&$''$mmoom&&!"##         ^88 88= 8  88\'##'# ''! ' "# # # # '$ $m$$ $$m$$ '&# '# $$& $'&$ "# ^ 8 =88 =  %8'" # #" '# # ## ##"' $m$m$ &' #' #$'$'$$ '' $$&'# ###^888=:  ## '##'#''##'#'"#'' $mm$mm$ '"''"#"'!" '' ## !&$'' ## #X#88=8C#### ## #"# # # '& $mm$mm$ &# ## ## #  #  # # #!#;\88*:A########'#'## # # '#"& $mm$ $mm$ '#'#'#"'##'"#'######R\_###### '#'# # # '' $$m$ $m$$ $'#'#'"#"'#'## ## ########### #I?\8l ## # #!#  $ $ #"#"# #'#"# #!## ### #L<:%?<88 -?ݿ=;< *JJ?==J=9  '?<\?=J?3Ⱦݿ =?J? >??>?>\>\?8??>8\? \818>?\??>>\\<S% 8R人?==?==????=<=?ݿ<9J俌??fJ99:f9ff;;J9 BJ\;  ^??8><8?>?8>:: 818 ? ?>>S%8= ݿ??<?=8??=J>?????^俺Jf????*999fJf9Ƚf9f;fffJ f;*J\f f*fW8?>??88??? 8>  [88> <8?>?>?S%-8=????=<俺??==?=???87JJ899+JffJ9;fff99J:;ff \9fff9* \ff;  \f\_<83888<<>>?\8 ?\1\1-<~<><>T%/??ݿ???<8??=>?7<::>>??\??8?8,?\>818\:U%6889??=J??=8 ?????==<<ȿ J?**9ffu9=f;Ƚff99Ƚf =f;f;f;=\ff;  ;\f;;V<\3<\?8:>>\1\8>\\\\?\U%#<俺?==J:JJ?==?????=?8<JF+=99;JfJ;9fJ9; Af;9 *\;;;_  \\?:\>\?\>>?\\U$<ݿ=J? ?=<=????=\K==ƻJf*99=J;J=;99 99f9\*;9 *1 T 81 81>>>\?1>818811?*\U$?<8<=? =8=????=8<>??88JJJJ==9 *49?J+*9*99;999*=Jf\ 9;f1#U \\ \\> > 8>?+?1*11*?\>1*U%8=ݿ俾J=88??]=*>11?1?U#8=\ ?<<8<=?=<<?<<=???< J=佻J?J=8J=9* f * \* V ?8< ?< ?8?8???*11\?>18U\!=8=>\?89=???=<=??18=?+81fJ!=9J=9++9* *  Y < ? 8= >? >???818=?88?극1?188U<\ ?8>8??=??=>>8===**J?J?JJ99=9     V 88?? 88ξ ??8<\8\88?\88?!1\88U>? =?5=*?ܜ<=?==888>8 888>11\888<888 깾1!8\88U ?8?ݺ??<8>?==???8=8<==8=?9ݿ?ƻ8*=87 ??\?==8==1=\ =?\=<>==8==?=?88Ȼ>=8<=Jf?J==99=99+   X-<ι=<ι??ܹ&깹\깹8\!?>ι8깳U> /U>7> ??= <<8==1깷>1ݷ? ι=깹 8?8ݹݹιU 1\俺~>~>=ݿ?=R<8==<근ݹ> ݷ깹  8=Ϻݹ\\ ???:U f18>ݞ>~~>~<=便??=?俿==??=?9ȿ<=J9=?JJ=99=99+9J;;*99Jf*;=; ;Q8 \  뷷ݷ??뷹ݹ? 8뷹8빹빹U\\8><>>~>> ??= ?俿?==?8?<=?f<9;JJ=?99=899+99ff;9;;f  9ff;f;;;(*99*ff1ffֽV08???8Ϙ= 888< <乹8 ?8?==?? ??=?\?'ݿ;<=8;=?J==99=9D*9J; ;JJf9ff2*;f;fJ*;;#f;;ffS8=\ >1\81??\ ????=俺JJ???=*??=9=9*+99J999fff99 9ff9!99 9?J+*=ff ;\ ;?<>ݿ?J ??I???ݿ<88** J?=9J=999++99J9 999f&f9**\;;<~??>>\ֿ侺??ݿ?#ݿ??俺+=<11*$=?J==9=99*+*99fffXJ=f9;9;9~>~~\J<!俺??k<ȿ*11****#JJ==J=99999ffff 99*9ffff*****;:>~5>~1<?$俾???J158* *9J 9=999 f;J;;  f 9;=;=9\ ﹹ::4>>1~>=?Ⱥ??  <<=f58## 99J?J9 **+ J9;f9JJ9=f; >8:>> >~8%????=9==Ȼ*188199JJ?99=89+*99**** :=\ ݗ '>>>~>*ݿ ? ==?=511*=J9 *+  :\=; ~>>7>>\ ??!?<18=??8*1<***=;9=8 <=?\ >>7>\\==?=?8ݿ <81* =9=* `                 I  ^            y ^      ^   $o&$   W  & ^    "&4o  #              ^      "   o|#    " ! '            ^#  8 $os$ o&oo$" |o$2 &s{s$&ss& oo{7&"so$  ooo ""          ^ |&$$ &4 oss>&oso{s""m$so ss{~*s 1 os~*1?p ss& os{~{ &       ^*7&&$  &o' ssps{s os$ o&s{"oso  os{5"sso  &s#&           ^#|o&$ &&oo&&os# {ss&ss&s s #'$sss os*  so ossp &3         HHH^X1|oo$ osoo"#so# $&o&s ss" &s&  1o'op   ? F   +⏏w(^*|so&&sop&*܆  s&s<&spp#  s"AA  soss   $U  /+^#ss& os{o&o"&""&os&so"'.$"ss  sssp    F   " ⑏/w-^ *sso s@&  "#&#oso 'qA " s'    :  * *//^ 1sso"osso' * "sp#s|1 ~soAA  s   ? 3 (Hw^ 1s osss5 ) sp#o'sp "o     t /(Hw^1ss ossp # " "o!{ s&o A !ss //*^ 1sossp #o ##ss&$o   sps +/}*=ۍ^1so#s|s'& s   o4 q  ^'$&"s {<""&s  ss"& q +=^'s"'&o #{1୆"~4'" 8  &"'su ++ ^'ss&o#{s<& &0   ﯨ  b  D <||^'&{0"{#{{s44{o   ਆ `  +⏑w(*yp!^po& 1o"'"4 {!ਆ4o4ܨ' s& i /(|p$^|{o"#ﰨo&" 15{{451'5415"s5 {# a (/- .|||'$^< &?暴s4{'{{{񶨯{ {'4 !&i *w/|'|''|p^0s& < 5# "#77#7 h /(Hw||'||p|^ <"{5# 7=>ݾ1#1 #><11~ a //* |.|}5||^#' '<~# 17 >>~2#| 7>>18<7~ b //*|v'v#|#|^p"ﭨo\=> ?   _  /=.ھۃ^|"୨4 ???1??8 \98= ?=8 `  |^ 50 4 ??8:8   ` += 8=^|&s"  f   N [^\[^:[ DJJHK9D FfFF |}}|=^ &#      O :^^^[DEINKEDD eeieb  .||^41 #  9?      J  ^]VV3]DPPEKDE@ eiieeb` |v$^ 7##   H     M [W[[3VPNEEED ileebb`pv'vp'$%^715   =H    L ^[^33PPEKKE ilee '|||'$^1   *     L ^^^3[[W[K I K+Dieib Xb.'|!|vp^ 1#    M (^^\:\3[[KKEDH9DDiieXbFb||#||p|^ ?        N (^[\::[KEDDJ9EKibbX;bbi|.||.||^8?          M :\#:9DKK=K;Fffhf"<|<<^          J * :\ϼϚKƺ;b˺h.?݃^        K [\9Kb g|^excellent-bifurcation-0.0.20071015/gfx/underlay.bmp0000644000175000017500000045606610544356002021202 0ustar miriammiriamBM6\6(@X  @@@((ePP0e0(L(PP<< PP<<0eeeyuuuuƑuii(U<(D<eP4Dy@@(ePPe0L(P< PP<<eeyee@yyeeP0y(ePqqPލ<eY@@(eP00((PP< P<0ee<@i(Py0(uP<