Scrolling fog/cloud image for moving background - Dav - 05-22-2022
Here's something I made to use for several things, thought I'd share it here. It's a scrolling fog or cloud background you can easily add to programs. The image is seamless so it looks like the fog/cloud just keeps rolling. I threw in a flying witch to show how you can use it as a background with other things.
This uses a real image converted to bas code - I'm trying to figure out how to make a good looking seamless fog image using just QB64 drawing commands instead, so I can eliminate using a real image (and a lot of BAS code). Anyway, here's an example of scrolling an image as a background.
- Dav
Code: (Select All) '=============
'FOGSCROLL.BAS
'=============
'Scrolls a seamless fog image on screen.
'Coded by Dav, MAY/2022
'I made a seamless fog image in a paint program and
'converted it into BAS code using the BASIMAGE program.
'This demo puts two images side by side so it scrolls them.
'The result is an effect of a constant moving fog or cloud.
'You may freely use this in your programs.
'I threw in a flying witch to show how easy it is to use.
'Press SPACE to raise the witch up.
SCREEN _NEWIMAGE(1000, 600, 32)
fog& = BASIMAGE1&
witch& = BASIMAGE2&
DO
'===================================================
'This way scrolls fog images left...
_PUTIMAGE (spos, 0)-(spos + _WIDTH, _HEIGHT), fog&
_PUTIMAGE (spos + _WIDTH, 0)-(spos + (_WIDTH * 2), _HEIGHT), fog&
spos = spos - 6: IF spos <= -_WIDTH THEN spos = 0
'Use this one to scroll right...
'_PUTIMAGE (spos, 0)-(spos + _WIDTH, _HEIGHT), fog&
'_PUTIMAGE (spos - _WIDTH, 0)-(spos, _HEIGHT), fog&
'spos = spos + 6: IF spos >= _WIDTH THEN spos = 0
'===================================================
'Here's the witch code....
'if pressed space, move witch up& forward
IF INP(&H60) = 57 THEN
witchflyy = witchflyy - 4
witchflyx = witchflyx + 3
spos = spos - 2 '<-- scroll fog faster too (remove it wanted)
ELSE
' else wich drifts down
witchflyy = witchflyy + 2
witchflyx = witchflyx - 1
END IF
'keep witch in screen bounds
IF witchflyx < 5 THEN witchflyx = 5
IF witchflyx > _WIDTH - 100 THEN witchflyx = _WIDTH - 100
IF witchflyy < 5 THEN witchflyy = 5
IF witchflyy > _HEIGHT - 100 THEN witchflyy = _HEIGHT - 100
_PUTIMAGE (witchflyx, witchflyy), witch&
LOCATE 1, 1: PRINT "Press SPACE to fly...";
'===========================================================
_DISPLAY
_LIMIT 60
LOOP
FUNCTION BASIMAGE1& 'fog.png
v& = _NEWIMAGE(262, 198, 32)
DIM m AS _MEM: m = _MEMIMAGE(v&)
A$ = ""
A$ = A$ + "haIcMN]\\DT\4mkk>J=`XH6DSF;nmiJma\2;`7G5IEKP7B3>k^kBVa:m`SXj"
A$ = A$ + "nkomonOn?h7l3nO6o`Oh?loIlSnAoX_dh7oSoafa?iWlCnO6Zgc?kWmcTSOj"
A$ = A$ + "?mWJ7_N?_gkmN_Kln_okoiO`7l1eSG_oiPmj^?o?oWocoRa_hGl;Nc6_fn=7"
A$ = A$ + "3\SSOi_lGJ7Zm7Kk=oLoZOe_j;=neojOmocO3gGh[Omi`Qjcnjen`?l3olOc"
A$ = A$ + "_igliofOk_mcoX?jSNghSoh?n;6ObWl9OYaeOojmR_OleEKW?mCod_dhcn\?"
A$ = A$ + "k;=^nkZmi[a[SiGSG7oGSiilll>M]LN_kJnaL^l[h1Gld<NlEll<Fok;h2<f"
A$ = A$ + "0b5L\16CPa5^N_GagKI2<^P:FVmJ9^#:6l9i2^He_Ya5Hag=cSE<2T9POnik"
A$ = A$ + "Kb5H\16G0S?Af0k_oFa4HL1fe]V[U\i7Wb5V\QGLQ[a9J6D\Q6N0b5Vai=l0"
A$ = A$ + "7GhTaGW<17GhJOLZVU]<17GhJkaH0\i`=W[Ye6I\S=\Qkb5#VPJdb4VLQGW7"
A$ = A$ + "]\DljWJMS9G`a6HLQ;f`T;<I3<VPR?TbWXIP\1L<I<>^`Cc6`o^S=Pa#gQOP"
A$ = A$ + "O^=<;W^oCH3ZHjfeaLG7D\1Fn38GhR=XbY`5WZh2ZlABl0LOQL05C#UcDcm7"
A$ = A$ + "ej68GPa6#^0b6JmF#a6Vae^hNV>3lcWh1h#a5N:fPj_WH3W<D<Q=NUTRk>9O"
A$ = A$ + "RkXoHciLCn6:f#b_15GhjmYn<9o5fb4Vi>LMLghM#cJ7\i\:^0;?2<>mDV`T"
A$ = A$ + ";hbI#a3#f06[kh1=LQ6fPcW1gWY9>oTHIgfX=_W_>I3KelL2KPU?A3K#a5BN"
A$ = A$ + "AZbY0i1cmaT1hH2XFQfLjLcEJe:<SaH[Sch1X74calmZh2Gk;77PYG`=HNGT"
A$ = A$ + "h2=l1F<GJKhRW?aCcCH2^]kMh2gUGdXkQYmRa7Di^hh38KHkXQ=hZc1b5`1b"
A$ = A$ + "4^h2=iBVFcYA[PR;PaJ>_3DLQ;f#;GPi71j;aMh2gU=hh1Kh2KeOXRWMg_gX"
A$ = A$ + "Kh[C^#ceVFOCMlQkb6Vjlg`=BK_97PiW`eXQ5hH09V#3GP=fTg0Z]h^j5JI2"
A$ = A$ + "ZnN0i2GSCi3Kh2hli6^]kh`U[1KkeV?aC`6NBV#R;dh7a6fP:^WY_giE8SKT"
A$ = A$ + "lFLVSSCS#KnW]ijfj]06O=og\hF6;Pi1aT;Pk;WN1FM<>Q;XH3^hK5K8mIBm"
A$ = A$ + "6Q;o^]<Zf]IKn9YeNKFcjYH2KbUJniO:fPZ^0ceeE3U7R\m3b5HN9Tl885cg"
A$ = A$ + "^nFR;`R[D[Y[h2X62Go:`h<Ki2ZJM`lP\Ec0N=]96NniJhh:=LKc]YI>aVh]"
A$ = A$ + "Cm4XMKL2C`U3ES?49fP:^MZ]7m`T=BLS[m3jS0CW`6O3g^^bG5LQ]eZL^OHK"
A$ = A$ + "WF=3hO7o_^JCdb6>Ihb[;a4`S[Ch2=j;f^VLK>]:^`6_aB7GYL=Bn=Xjo9F]"
A$ = A$ + "1Va]<fPSchH5Wb4^>_IckJVoXVc^YN4]iATh4\j:hh2>M3^jVTb_HSVQk`<f"
A$ = A$ + "\V^S9TfFKI7KR3ClRkbDDi0dlJ<N[JK\]F5\lmaHGfcZQKk`h1<V`<7RT_;Y"
A$ = A$ + "eE^V7]AW#3G8i?XJ]m=mmH;?Y]W9Ki2=\1geKGLl6^`MgFKFCXQ?L:;i4N`M"
A$ = A$ + "6:m2]\Q4S#=B?[7]iJTH2:^`6V0Cg0KM_ioEe_SYhZTG0]\S=iRl4LQD^4c["
A$ = A$ + "Q^[aY?K;GXE[`F]PKeaTH2=lQ_:i1Gj[MLQDN==m4UREdlLPMRn3E]MDJSBJ"
A$ = A$ + "oMcWJd9Wh2Gk7FO9f4cW6]NC`b5iDfPZ^U:>0nOEOFF\W;6]Ekafhm]i2MgL"
A$ = A$ + "#N2_8`HgkXG8]OBeM1I5ZHHGn9ZLDBK;VW<:VPS;\Y^K^iV<^`LkoF`5fdC4"
A$ = A$ + "?5G#mLFVd7Th2ZhCE<?bM>ASBkmfCeTlTNCLgL#V_?Ug2:M?=kWF>1[O2H_O"
A$ = A$ + "7SPa4L\AV?SYiZ]\Q4_Aa5^NMG^4_U<Q=KcCi2W>JI2gMohb1RM?^U=`V_lF"
A$ = A$ + "b3LK?FlYCWQcKUF^fFn`fnf#UKBZo4#NX;VMkLDge\Cd;Pn?NWhgWV7\Q=LB"
A$ = A$ + "lhV[iCV0;^NcaUkmj^OkV3]U=LWho=aY<?4Dj3Jc7J;[k4O?Ci3Qj7BN8Xd5"
A$ = A$ + "QgCMcAJVS^U;XjQhVj:f`3DlQkhAQR=Tj9JeJa=a]9OMBaf^NbTmN`gG:NVM"
A$ = A$ + "\dTgdefMC<D3C8aMDL15C8i]cflTJbaIK^A^lAJd4i>_C[gdXGHSo2ZH9\fR"
A$ = A$ + "KG__=nWE?dWR;`HMK6=L1Lmi4C#Y_1_>`jo2eLO5SJ3O`57YRIJH2H<ZK=gV"
A$ = A$ + "HSiiRKNNkJU?InC9O>K_nih2^njea5B3L>\Jn:S;TnnNL3G8iUH:7TWbo1ll"
A$ = A$ + "]Ec0coWV]OK_RLMlWh2WV7JKNYGa>]L1lhi]T;dL=YUKeXahD?<Ln8T>fJd;"
A$ = A$ + "dNMIcJKZebH[o[h2<f`C`5^S_4G_F3K`]N>cgQ=l0LO`>gEGc#^#:>#iE]Rc"
A$ = A$ + "]a3U9KP=W^I>HS6TWV;PkGfaGJk\UCL2GXUekH3^cYD^T8k9]N=>WMSNQkXo"
A$ = A$ + "_U;hl`0I3]JDH[W[hc]iT`^VZd5ih2=[5dVCJkJ>H\l6V#JKUlad=Wn^<16C"
A$ = A$ + "LSfk=J9Je6]E3XJ=[]LQTFQ4GhY[YPcO1Lkglm:Wkin^mLEa]fj?1C[#ciYc"
A$ = A$ + "S1E<AKn=YlCMLQVeMCa_=ic[b9I;CH^o`]E[FZdiD;K`EOSWP;TVSPc;BcED"
A$ = A$ + "a:YeQObJ=^U9XH3Kmnh^JJJi6WVK4^]M[9X^?k^GWh2ZioKH2\HH7KHSG0]J"
A$ = A$ + "lC<Q=JYJiV=jRHLQif^ImMT]enIL3G>f:o2^;KHSo0]NJ\imMbaNS635K0I2"
A$ = A$ + "G7C\OK>LL1dc3eL0gmiT?:Z][CKbVeFEaA^L8^;CPU;RS;ThmKH3]<QCH]Zc"
A$ = A$ + "Sfi5:=BY[9OCS;hRSVo=g_7>]\RCh2:f0S;PofLPonL`fVcoM[?RYik>f#:F"
A$ = A$ + "_EgMCLm9LQdjccoFJMFee8eme6=E]i:ehSB;KHclQCc3nD^`lcaRa>Q;XRQD"
A$ = A$ + "lPVgoVOo\^SW4cg;NLnmnNO_8G8aOJ^_OWLPHakZeYfb5#f#BoOR;XdWkFcD"
A$ = A$ + "MMRM=OKnFOEb5N;h1c[;HLIR;Lb_MUYhYin\E7`ELfLd`9LoVJUlGPMMBa4V"
A$ = A$ + "<>ea9S=dhm`C>^kL8U63V>idJoZ?CCnlHlfF=E:^PCGE;KX9GWkh?`Ca3#]2"
A$ = A$ + "]LQ=[1_U;XbS#5KSaJ=lQFml9V#[f7gaY;?9WNV=ig\Ag3nifb6Dj7JRSBLQ"
A$ = A$ + "=n=fToP;726GHnI#]BW`5JmFH;CH;o_INbF^#k_a]]j7fhM`ElfgmknMol_c"
A$ = A$ + "gikl^a[ooG3GLXj_[dc[^6i>gH<Q[S=lHLc_C`K^FjdT]mc]97ld`UKP:FYU"
A$ = A$ + "UP<QVe4MWKY?cD[DSo9^JBfb4J?OLg;g`4Jh2YLk?eS?gnB]mAV`LPaP:Nal"
A$ = A$ + "_oJkg4gi>?#_AD<1faC[o8ZSaCSoE\^=J=f`6JlPH3G`EgQ]iAiFKMNnchQh"
A$ = A$ + "ai6?EKh2KHL]LnVi?^hHUOO>]kWDc`=i\PLQ_mgnKo537WP5[Vd<Td:<?NIl"
A$ = A$ + "P6VUB7a9efL;KX=W57G4eGoFb5HN9PJ4>A_3;g8V?LKH3=eIAMnORFQFmOKV"
A$ = A$ + "K`RQClPdJOK[GH3C0cQh5;hKm]nF_K<i38S857N7>F3CXU?TH3^hg]J5BLQF"
A$ = A$ + "mB\l^EN<`ReEa6:miHm8Ej4LWg:^P:_m4Ghe#YGX]6=>fPSIeL__97Q]L17C"
A$ = A$ + "XI^mVj6jNMVNQ9G8a7BaOW`6#FER9d`:J?fN:>`F^0;n#a4LeZHC<36_QeMX"
A$ = A$ + "=>AMlkb5J[V17G0oK>?9EJ6N:^#[NQiL?Woo^inKd4ObH63N5gSL1TAP7OKZ"
A$ = A$ + "[IbGU9cTMMaUSc6fPRGmTlP=KCELa6^P:oQ6_6Mi?\A_CSoY=N<`d;Tn>GXi"
A$ = A$ + "l[YV[>O1JWGTh2\e\?ESLK^5]j9#m2=LQYn1TKeF3C7CHNM1_Fhb[Aa9^KN>"
A$ = A$ + "]<1UfSV][;Fj4^`F_6W[WRiJ_Q5fXkaiU9NnSj5Jn^HICmFKh2gE3XkjG3Gh"
A$ = A$ + ":>h^nXM2GhefHV71b6nonononR1CgPR;TdAXZ1:b:W\0E^==NQXj1Zk<>a_7"
A$ = A$ + "<6B]fjYJ5LN:db5#]2Ke7=i2:oAVk75C`YG`MNUZGKZ_5LJo?EWHJnScK1gO"
A$ = A$ + "[YGNLn;X>^HN?>S1WL16KPa5Bm6U[?ZLLQfA;Gh>NSZ^^gX1E5;\Idj9OKL3"
A$ = A$ + "C_`Y\Q[c?fa:S?`^>hh2KlMdEoBeab\VA=a#=nEe`5Ba6]S=ma3NlZh2]\Qg"
A$ = A$ + ":^`MI3KH2\[G=i?NbW5e<gZ=`iI`MH2X>KFmkLN<db5JZSX;gWigo29f`9<1"
A$ = A$ + "U>V6FHkj3GK;fe>GneHlcG5L1T=XlhCU?agdi2>O5J_Gfjg6;f_9oikZ9h4O"
A$ = A$ + "hLL1E]mElQDN4KhHhimeagV__GCLQdnFYIH;G`]fPS=TlXC5GMG^PbSD6G#a"
A$ = A$ + "7HN?VRm?U;P\Q6o5fXEXmnIK<_ZWNfd;B]an=?WQKRQHiMgd;P>^0boLWKG7"
A$ = A$ + "3<]2GOW#_il4SkKHBKmHYIN4[f;>=X9n0;VJ[o2]L1dO1EmADaOOEc5L\Qg2"
A$ = A$ + "^P;nOC^0KSEM<QdgiQ?1GXQ=Th2\[=Zc?l_ojlQmk?IkcOMb;RTW7=i#iV7e"
A$ = A$ + "d[XY]WbGBUNQCh2\l8^f^^hn[h;F_8g4koe=G8a6Jd:hj]PfelKn>8J>oFmj"
A$ = A$ + "ZO7j>Q=XR=Bm=lFfPbGaii9SmenK]gMh3hi]R3Vb3`YGXYoYMjAJmGh9lF7c"
A$ = A$ + "QP5SQ[iV>NN2^PcSQCi2Yl^Lg;E<Q=ij[R]Co^]Qo=g_o:KH3YHS4G#iK?b5"
A$ = A$ + "L\Qie5fi9nkMIc_aM>6ASFQ6fPckQfl?KmbJ;G0WWkhG=L1U?2_N=63J6S?O"
A$ = A$ + "mCi2\GK[oS^WI26;=a4Li;LR7P]LQVQkgTYdgE1]a6Zn6ViK?K=cDoJQi4in"
A$ = A$ + "=bfmKFkFm3ZJEL2Kh4oX`?OBGbfjH^Q;Xd\`h2cnDhELf[meLkah3:VA3G`m"
A$ = A$ + "jYN2]Q9TH3]<QI?gLJm1N[H3_EOGZcF[O6g\U;`j?QYf0f_SegA_0;_<7K`i"
A$ = A$ + "e`fQcKVdW1eT\Q=XVOcdeidY<mGHFCBT;TlKY]V;>]m\gKkc#US9TN>9DN<b"
A$ = A$ + "R;^Km4N:^#k_=C>f063hd8Pa==iBXlPLb5#V`_nGo[Yo6gWhOK6=N>TZO;;V"
A$ = A$ + "gmnLlQfldJbY`a5LilldL16CZU9PaW>M7YhNFoQN:KHC>4Ki2ZJ:hd4lTl1F"
A$ = A$ + "M8BeJMN^?SIJlN4_6jd:lR9L=JH3>OIgj=9;O[D>6W>JI9<M39f`6^P;gU[h"
A$ = A$ + "7VgNGLQTGnXO<8K`iKJb7f=N^hl`\U=hd<Xh2YJ^M2G8mKj\;V#miAf#R;X>"
A$ = A$ + "_A=3ZiK9^0b4n`?l3OgPa6J^>LGm4W`8L<S=<4Wo6ZL:BJ`Kd;`lCMb5DeT8"
A$ = A$ + "a5Hi6=?nM<1<VTa7^;K8UC1bVBc[EeP_MmX6?6#ogLe`W]=MNg=eAg<?7?OW"
A$ = A$ + "a9ci]YNn0i2C]2CV`Y\Q6mB]J;N2n`6fQkmid<hFgMCN49^0[?6HN3RL1VnW"
A$ = A$ + "if?YE`eW7?=G#Mm[a[1Gmg_cJE:^P:^fi[f<N37c]1>7?eKFHLbT;XlGo9h2"
A$ = A$ + "G\QTG39=Fhe^FnQS=TZY1jE;6ccN_^N\Ri]gF^PcgALmLF=1Cm^4S;PNEgLL"
A$ = A$ + "kZGb9J6Ln<\Q?ijQQYFHVnmkb7Hae:=3<V#3GH6OcbC#a4HiPdha^S;PiAPL"
A$ = A$ + "15KHN]VEkfClVYEk#3GXQKXHb]\1EL1;nGi;HR;hjYAElddS9DoC:O2F]2I\"
A$ = A$ + "1V7T9]1:?IDl]D=XEL1gjEYN<#a6LL1efAU32KKP[3jd=kR;Li?k^fYlL\Ec"
A$ = A$ + "0kJ2N>O7?KgTG1[f>=ak9=JKcWXQ;Pe=BUo^[O1JR_De[NNNdb5DNSb>FMOg"
A$ = A$ + "DlF`4Jh29V#;K8U7PK]#enTaE`ik<Mc>ojKZU1kJW[F48GHb7Hme0NNUhX]i"
A$ = A$ + "CTbY`YOZ=^?=`]5j1PS=<ceGUSNR;XH3][kjZ=1CKRS[hZKBC]KC\0EOGhh1"
A$ = A$ + "Ki2\hIE?j\9?2gf;=D<UFOiCa1]n]O7^PS=T^^TRggjIIRE^Q;`b;9i1Y:O2"
A$ = A$ + "fLME>jZQcCC7C#a5DjFDNXf4GVf6>O7LNUVZUkK9G8eG_KH2Zn3\UQhR3Vj8"
A$ = A$ + "DL1gLhWT;PJ6J>OO:^#:_?geTFV#;G`U?a<nHn_g`5LaHZn?ZQ;`RmH_^Z60"
A$ = A$ + "9f#RARJADk_Dm7N:^`LNLZNK=\5LKaj38fn[ASaFOiKW7o==^#[g<]\Q6o8E"
A$ = A$ + "\0G=>LL1EoTaRcDeMH;CXU;`>6Di`gh3ZBgPjLYIOVbW2iA:OcLL1EM0La^>"
A$ = A$ + "moW`4HngWdMORo7Yjem=9^`6fPbKV=J6BLQD_afb5`iV:]iYjAf6?eFC`FV#"
A$ = A$ + "Km0aSCF_FhH3KI2\QZWDCeJSYIH67cREEN[gV_0S9TlaGES_]a2][=RcU_ng"
A$ = A$ + "YNPn4^#RCdX1`iIkfL9DGGJjKn=LfTGL>^`ekEEg?F<N:WminDa5JZOQjhdY"
A$ = A$ + "I`iM:S9X^Vd`4D[gUh2cijcHHeLlDN0KI2>_jfFc4FLdYmh3;o[WT;d`6LiA"
A$ = A$ + "h^FhH2:f0N=ZQ;hj;25G#5G`j10F_YRe6PiIX[>5H]5Cik[h2>fPbc?7GPMn"
A$ = A$ + "\Mkg`4Vc]MmkXR=hVc[Vkkh2GOVOc_iglo<H\QfLG`H8L=cF^PJmbWR;hlCQ"
A$ = A$ + "a:Be1ZQ;`jUmfjHVjo167Aa6JR=HNZch9<M6:=gZJ2nj_=SiLNRbbU`]VNZN"
A$ = A$ + "0^jL`>GfZ;#e;J\el`kc>o[Dck_RQo]ofOkk6Gac]\1ffhJkP\QDN4<mhZhS"
A$ = A$ + "]n\YH2_6>V0bifZ[:ie[kNF[NQ]mi#C_Aid#Pe\T]n_R;\974F^gKh2Km3<e"
A$ = A$ + "g3ZljCN\dT3aC`4`kKWb6VacOd7mA_Kdb6Vj5#V`T;PK;7G#E3Sk`5`if<OJ"
A$ = A$ + "EGGDJPJZoR:o<V^Q4C8a6fd_3<Va6o8HJ7D[Kf<__aKOGn6hJn9O3MN2Zd?X"
A$ = A$ + "hJ\nW<iEbF^#3CPYGPa7BiDPacG<16K0S3H3T=XbU8U7QR;P[cNZ7KKH28W3"
A$ = A$ + "eCe`7BeU1I3ZlZLN?NJo>XlRXeSB7K`USLboBV?OZl=H[aWlhdYM`ecA\LQD"
A$ = A$ + "7oWb5HKGE?XdXG#YK#Egb[iY>^P:nFa:BiTgj_`YL16K#a<ajf`HU^1NmPa6"
A$ = A$ + "BnlfFGVTVQD_#QL2TIdhc0NMLNmVUCAR9hjk\93#U3OC^k]ighb[#m\BXFO7"
A$ = A$ + "I3KIG:^`F_cBLQG36GH67`h2Cf0b7fXSHKM:Cnj_Q=hdBYh2CV0kJ2b<E\15"
A$ = A$ + "[TEOHF=:BL1f8mj>m4KH3<=J=mQNJ=?Gn58K`a5Ll4G>5YJQfTGQRO]Q;`hX"
A$ = A$ + "\id>_cL3VNI6G#YI0I3^l3fh5W[N3\NTPa6Hc[CN\k^^PL15CPYUB5kkd>Qn"
A$ = A$ + "#jRc_;G0o\ZLBLnAZnkYn5AE3=6C9egD:Mj:M2=eAmDf`<n^UOYZCYkH?UOP"
A$ = A$ + "Kn]jnjC`5JR5H<Q=m0HR;hbW`=_6W7gb5BG?DJXDLRT?;KH2Ke3\=WT]e_HK"
A$ = A$ + "?S<_?XlaDE7d6_9Kbmga6Hmk#jIMR]oMJKDn;P7o=GkLN:VZO5cgAEm4B\Q6"
A$ = A$ + "^`Y<QCi2^cOU>ZFo5>Q;<_nXZUaMh2]\1W7>\LbLe_XQ;LZ6Glcil[#iE0VO"
A$ = A$ + "NjiiXEgPS;TnNJ8EcFd?eFV#:gP[kmKVSTh2Yh1W^IF=jKW;Wh2YlaM<2W6Z"
A$ = A$ + "FO7g`4`[A=mhU;F>a4Ic5L\0E>I>n#:G]W#W;b6Lm6Qcc^VW1d6O6LiATn>L"
A$ = A$ + "YU9`lWmDV0C7`9LQVN#8a4DccIjlCeLWU[c9LQ4W0_N\]N4Zl5f<LeWISN[V"
A$ = A$ + "AcfZiJWJ]nTOh^ee`]?S;hh0ZJNTj?CV75<o5LOW9dd3f\QkhWicXRWfTO`V"
A$ = A$ + "eSI\1VVgDNccig\eoJmnPa5Be[LC>f=G;fFSbVjffFoFF^G]NgVh4gQaPa^Z"
A$ = A$ + "e[Hi<dTo6C[RR=TZoIC=?f`5B?KF=?cF<M89?6OJV#SVM5K0e<d`3H<15GX9"
A$ = A$ + "O86G`]fFSnS=WoC=o9^#:O:7G8eoT^NSJ3W`=LNfd`6HiDXh2>]J9f#C]?al"
A$ = A$ + "6LNPRJ6LiAXRmKnNISmLNYZUJZNTZl5DcoM[9L:K#U?lG5LQVegVKgF>3KmC"
A$ = A$ + "EO7YH2GiBmaOl7Gk1KR9XlXXUeXj=4F<?Sc\AgQR3[lJhJnlVec#f0j1Ikc6"
A$ = A$ + "#Zn8CfPcga6^PjkIBgcc9ZG#e?S:O5>U9XH3^h#GOh\U9PjlKbSXAkkllYYn"
A$ = A$ + "S^]K3G0mLm5CH>LmgTS5dZ5i4o;JdELMnfDoX4GH^fN;GPi3J:ORCje_4K0c"
A$ = A$ + "U#ekb=<1lk\nCi2=?kC=aA=i<R[_Zf>:f`MjQAlnLCnVYLSD[Ce`6Ji2\Ja`"
A$ = A$ + "h2>f#BkAC_RdDgSVN9AMnVdIdb5Hg;LJ5JdgReWhTNo]Q;`ZM#jI]4I3h_W5"
A$ = A$ + "G?kFW`5LmaTS=dT;>NMNN_Sa6#ogfZKEY1]Q;`l58iEbFf`6_ELLQ?iCnTg="
A$ = A$ + "L\1UfP6N`9m9Q[oCI<1T;XH8>]O9O8CgKMi8bd<LjXeoAEO8eb6f`5Hn;dn<"
A$ = A$ + "CWZm[;WL7C0iihm:fLXFOaCNF]MnCcHkf=i]b6m2<fPR;L2C#]Mg`5Vgo#^#"
A$ = A$ + "cmhTVQ4G`a4Lk77o7g?Ki2YWmR;fPZfU\jHRiB`jci6O7KNV8f`7Ba<^LoHi"
A$ = A$ + "CLR?gWb5DNYX>_`mAB;bVL:BmlYS=lF`5^K^4:^#;gg5_^aCIW^DLoXl5c=o"
A$ = A$ + "i4^`T=hNF8MmS0b6^6_nkZlCDiBTZgJ[6YDLEb[h6]7K7gQ=hRWCjSDNXhZ?"
A$ = A$ + "a9J6D\1Fm9DNHfjmXR9dh3lfJG\U;dhW\bG16SjeO;=g9i_QJ^^S;XN6_IeZ"
A$ = A$ + "#e3S_RcWiDljobj7j[gKkccA;G`igB3;UiaICmSDS=LRfeIBJAahI6K`Yg`E"
A$ = A$ + "O2V?3^jEZh2=N?N2Ch^\PTg#<]m>O1I\1W^?T;PNOf\^2NOe=OR5kdf?4\JE"
A$ = A$ + "`N^7HedlbKQIl>^mDKgCbSh>L1gWI[^M5K8E?ldmBWF8U?8cmGb;Rdi`6f0b"
A$ = A$ + "5fDCRF_2NbNKPa5>E7XR=X6cgkMh2YLVCJUg`6H?C6^WYcY7UcWmjiflKRLQ"
A$ = A$ + "TNQTG5]<QTWTKl0Ai3RR;hV3eZmQU?ABc0;7RifH^ML[moDLQd[[d2Td0f`5"
A$ = A$ + "^^Oilg1_>OMLYb5]iNZR?UH3^W_ZTgT\WoZdgG;8K0i=Wjkh9LQT_SW`4HiW"
A$ = A$ + "_YN5W`6DL1gJ=WTGd[]G;G#m<UQj>Baf>fPb?QVaVN=YQ?\aW1eL<W73:^PR"
A$ = A$ + "_\97W=\Q=OgAYj3Rk`5fjkhYLQie5G^3W67M7fPkn7N<kh2gU=Xd<TZ]0;72"
A$ = A$ + "L]K7?8a5HOfFNQS;`^GL2KHC]VVadWb5H7KKH3<^0[77>AoPjIjBm\McbAAY"
A$ = A$ + "I#a6>=?2em96k]Yn2Kh2YeXHgoHnQ<e<Tl8KciPjLW]FO3GHV71CGoYLQ97P"
A$ = A$ + "mggD_BgmQdmGUOAKVcQiBhh2Ze]L7G=[kTjObTfQT_4:]2<_<CN<dl\OL7VP"
A$ = A$ + "Zf3Kl7H3GHkLb4Ghe0iH]\1fiPkmbd<Xd=Xl>`ik7SCL7o8CmfDSg2Z[=?1G"
A$ = A$ + "H>okjcScCBe5==_cY[Qig`6^`Vl=Jl`<mm9QZ78C?_H\j9\aGhfekEaF]i#d"
A$ = A$ + ">WDa5DmKaYiad<V7k^Hgdcj4S;bH3HLmM[OAR;TH3^[[:MkgAc0Sk\U9h>>?"
A$ = A$ + "AgP[OTEmEMS6RknM>US=\Y6S:?K>U;XF7YQ;XZ?fea3coHeiJSFWCh5ha]:7"
A$ = A$ + "0F<\:^DMm8aIL\Qdk=YGaY1O[naTgSYkOGk?F\\:Gg=gKM<\Cm`[Y^WKjiJT"
A$ = A$ + ";\Q9PLQ6V#;KHkX=^3[C]S=ljhRiAZbk:L>\JNOkl77C#]>O[NQ[S95GHK?>"
A$ = A$ + "YZA2FcDlHfa6Dla=\Q]J6DN8jh2WL_eUg:cKnVLeML1FN6KlZ<i5:C?3ZY^U"
A$ = A$ + "9XH3]3emU=iA[RIO]MIg[Di0Q7?Ye4gb5Dn4^Q;dha#:>W]m?YO:DW;<^0kN"
A$ = A$ + "[RQ<WOdXIXQ=lF`5H7c\h4U6Ria=ZI#a5>9?35GXa[aCe:L7f#JNSS9PinZR"
A$ = A$ + "IA=YZSc6_0HciKegh>fE<QDL8SAd`5HnJNWnbfYK#alKSeLLM6KXU;TV3fb4"
A$ = A$ + "Dj7DNLM7^`F?8Vl17G`e33Ki2gEcP;?RVl`KbmmjNFcL2elG6GHKn?9?1EJn"
A$ = A$ + "Ml3E^5hk9YI`E_d]L1VVQk\6\R=Tji9D;0K]ldLAfmfVGca6f`5`Ho=i0hlV"
A$ = A$ + "#ek2ZLOLj[oZbSQFV`F^0NoZeOS6m2Wb5L[Q_YV1HlHjJEji_dmLN^9GRCbi"
A$ = A$ + ":Y?O^6T;O2F\?K^[Jm:WOYKh28K;iaUS=`F[Gi90S=XN_:O>LL16gc=BN6hV"
A$ = A$ + "?PaQ^H1UGi\iXYiM9^#Z^L\g_R=\Q;T>gKd<hdHe`4BOO^\U;`^6gLOI3KP="
A$ = A$ + "7^Eo[CKkVib\eNLi3e`6LenDEcCD_A3KX9?2UVX]<QVe#`LSEn_]=7ldjFYL"
A$ = A$ + "IL3739a5^>?flmURS7fh?k9\QfLKJi2c[a]lJU_o<nP;GhDoghVC[Vcj>GV_"
A$ = A$ + "VbW;Fn6:nP[fWZG[U=\agaWP;d4Cah2=eH;57]U=hRcMcoI_Win\=oOeaoFm"
A$ = A$ + "29oJgL]EMmUa4`SUk`5LNCYH3^hM6C`=Vc[KW?kba#E?4Fn68O8i10[?8VnG"
A$ = A$ + "blS\]O7O;h2][eRLQWHN;F[RVS1lN_K^OJ\9>=adL__]\QWVinF`5LnD[V7V"
A$ = A$ + "d0\U;`Z]1SaghU2;^Gie5SmYbk`Egf4KX]_VJi29?LJh2=iAl4<Q4G`U?`LN"
A$ = A$ + "NSoOH\b9kW[m5KK`Rofb6^N?^[SgQ9hdXeVc0S;dVKAbG<ElOC_#`d=PG_Kh"
A$ = A$ + "2=WK>?EJHM9o;KI2gU;`>?_;G`iS#J^Z:FYM=mFNPcSSFMVKbEYU=`f6hW9M"
A$ = A$ + "MMKn3<FL3C0Omfh67WXUOd`5DcaKm=KV7a6^PCKD;KXiIij^n;Tbi3?7KmSc"
A$ = A$ + "i;g9[CObh^<Q4K`5KTd?Th2^Se]_o6^0KkROV9GP=?GU3nMh2KdOPaE=nFb>"
A$ = A$ + "^L\P]J5Jn\gQ=hN6=ffGCgiNCce<W^jgB>#Jd6gTH3?1GHcaKK=3^3c[icmj"
A$ = A$ + "o7?_CaE>V`9iRdb6HL1WFidi#cnFa6Ki:KI3Zn`^Yg5DLQT^?eiAjeLj:N[S"
A$ = A$ + "YObA3K8MMI3GdMnVZ[1niBlUFOMD_N3K`5od6g]InFbg1EM2>mhk><QTVSfl"
A$ = A$ + ";JOfBD_G7GHcJoY[;^[AgQ?Lgeh_Sfj[]Ujk[eWB[d9lZT6;LO??GBofd<7h"
A$ = A$ + "[QLaVL4Ba>WX?]U=hF?\Iof<Wo>aC\]WS=LJMHD<SWR;dLL[f?YJ8XZ1G:V]"
A$ = A$ + "M>N[?mhj\=O7\=c_#a4LaM=m6IbkS4G8mKQ5kg<?f_]VW`6>I>gMGc:UkLB_"
A$ = A$ + ";Nneh;ofSkCh2K78KhYi2Kl91gO?5K0SWBo>#^]fX]J`Cl1efXigU:DO26Gc"
A$ = A$ + "jQiTV[[?oLoLmK[kWnYOjG<`O_MM?SE:f0>oj]T9dZQ8=_?a5VcaMlV_:i2K"
A$ = A$ + "n\]mje9i3eh?R;gUC^GS\16ChJ^lL>m6m3^eNKbiF]>MS6ndi`lcfnkP[R]a"
A$ = A$ + "fOCV`WmIO6UAPo^L[H3hlZVjm]INPKXRcI<Qfj\[h2ZnPHKLUCSC;CHS?5:V"
A$ = A$ + "P;?[=W39]:\[OWVg8b6#^06?YH3]n]iFkU5SkbgGa4`hkiam<V4ecglkT]b3"
A$ = A$ + "A67Jb3`QB31c[5V^Pfh^CH2ZlVHk?5[JcW_Q;LZf1<^FiKZS9Tl0IS^37K8M"
A$ = A$ + "=R]_BJDJHZYSYCI3Wh7YR=`Ra^ng\eZCim`FgV]N]BK?KmLlLFY?1i2o^Og_"
A$ = A$ + "k;68S#a6VJ6JFO_=>A]mHJQDah=j?Mi3N2Gh^\QD\46?adfdb6LNYfZcRU;Y"
A$ = A$ + "S=`>6fhaSREiH3H<5b5^;CHb5HaUG\QFo#L<QTNNWo08S0i2c?7S9XH3\[[<"
A$ = A$ + "f#S_A9]R9^#jn6Ko`b9EU39>W?=on^N>db5D<Q=\Q6N0b6BJ]B\Q=G_VGg#m"
A$ = A$ + "#>^0b6HL1eLhk`5HkcinmjgUFWGS9V#SNN<_3fWAY_XA[PSATH3:MnhjaGgC"
A$ = A$ + "Ic[MJ?#^#K\=CcIbO9UVQk<??a5DJCJH2>MgKI1Kh2Z[EgaoDfi#cJ6=LQI\"
A$ = A$ + "D;K#a3HngQaGCf`6V0;oN5OPi5Q:>VEOQF]2>nPSiZ^^Yh38K0__gFO:fa`9"
A$ = A$ + "L1ffHclmVie^lXE[gjF[dM]l]P=X^gn4\Q]N?`VKhRAI[Ofhoh9L1LOad`_Q"
A$ = A$ + "9hF[njLIniW_gOo_ogo^aeoFaC`meeWK>HK_iacfLeJI3]L1G\=KOhh2GON5"
A$ = A$ + "O1m1`5oNGf0;6^Q9X^Fn4\17GPU;i9iDTH\^i7>=m>]a:f0cGBU>h6^0KmDE"
A$ = A$ + "N7:>P:FDUc1kc>olhWEa4n3oQo`GJ`H5GKGeiYRm^a70emL7CPYIH;GHSf3<"
A$ = A$ + ">K[?N=iGhlPO[o=]\1V63lH0I3^[A>O>JI39V#3G#=W7I3^NT<UCaenE]?Ei"
A$ = A$ + "hWH2Zh`I\HBKAJ=NW>1T;`6:fPZ_ABJ9`eTEi<Vh1hn#a4>U;hHIKF7>YK8Y"
A$ = A$ + "Q:a3BL\k>Bn?jf_?5KXinZS;`R]Lm[SJ>L;GhJoRiDPLQ6=lZHbFO0JN_^mi"
A$ = A$ + "Ol?n7oRQkhPE[RDOUYh3=i<XHj:?#?AcQknOR?hH4<>`FM0=<1U^n]idhd]X"
A$ = A$ + "^fZhl:=FKi2=g;MeNC]fYBc?^NWKMS[SSG_o4GhJkV>nJG_>Y__9ng=#V0S="
A$ = A$ + "`d<`h]]mL:S=db4Dm#BR9Xf^=nT`>NKm7`5oM23Pa4D7OYm?kHQMNaHI8C:Y"
A$ = A$ + "O8Y[BigZBKPJNA[Gk9?oCmf7b5DN<`fV>^#;CXQA\U5`HCWXG8Y5[ao16o]i"
A$ = A$ + "No\oADL1Voa]iDfb6Jm=\e?U]3E>JWVGR:G9T=Pkk6_ID3ee]inQY=XITjGX"
A$ = A$ + "6nP[g7#^PKkZfoGa_Wb4Bj7fhUXR=Xn\ZJU`Z=Z[?[BaP<^PZ7bWm?belAUN"
A$ = A$ + "cdlYFn`gTi2:?Ng>DLQD=:JIC^LG#f3S;XRoM\1g85;[H3X_6=mW4[V0]LQC"
A$ = A$ + "beXag#U7U=j=>Q;PaL=aO^hHFORSn<PcSf\]BePU=WgYC^=7RfhLLo[n<ZSg"
A$ = A$ + "]L1\n4haO;KXMOjHUXV?gJ59fPjeHabZNVTM\`H3H><\hWVl8JGK_ac`T?4\"
A$ = A$ + "jEXZiAjLCaRg^flMh2W\=H\=UVagJ^#C><HlF;K`aGLiBT>7NBf#BoTR=<_G"
A$ = A$ + "f<oS]NUJmNFOCZb_ea5Va`<=3Yj?Xl<eiIYS;d4C[dld`6Dn#j6KH3]L1Lhb"
A$ = A$ + "KPa5D[;le5G`E[4FLDjc]UETlUTYeoYH3^S?Do>cc_]ih^a;2L>RS9`h2_R;"
A$ = A$ + "AOjDeCUYI7SkBNGfXE#MMkDn#bCU6M4>oL>AkO:?ddmaiJ2:oAMJ^KmG`a5L"
A$ = A$ + "eaaa5BmXQccg6M49=o9oHNJ=3Gg;aj>XF_BikE3G#ii#Jnd<VM6ONe35hkiT"
A$ = A$ + "lhK[[Q;o1E<Kb[Tk`6D\27K#EGj6^PC[#SfAdCCF<TCgMKm1CL1FmLHaJKi2"
A$ = A$ + "9f`G7L1F]Bfb5LJSMJ<Wc7JdAScCDJ#IJ5LJiM\17_SMnWh;\[EYhf=LQCI4"
A$ = A$ + "?1GP]=Bmk0C?1jcPjh:53ejm^cS]6=3ch=FlBJP<V=<1F^49O6N2m2:MTZh2"
A$ = A$ + "fjQ]L1G];M\1L]6F]6Vik_aooD>kXV9ff\9n]E_D3;JS76<=3hLEfm;WVOUn"
A$ = A$ + "#El#C^6:o?DjKMaEWFCR=[c_Q;`ZQcF]2]\QCh2:m7^i5>^`eLD6K`iC1;>c"
A$ = A$ + "E7C5[jR;Pn0fFK#Uf7U7jW\fn9jnIi_TdX`b1ZU=db4LiUd`5>ImEfPYc_A;"
A$ = A$ + "QK=bVjB`h2>=CheWClH0cG:a6fb5JI2]J5`iW\hHFN0]jTAfPC_`;N`Oj?mW"
A$ = A$ + "Ng#a6fV3AR?P<27SkD^#ZNY>oAJh2hLIgi:KkPg_KI3>NQK=KFLXR=dXI8a6"
A$ = A$ + "LjDD7?>m#<FGSf7U7::^#Rchh::mM\lhKdTS[IUR_L[9bH3>^`5CPa6NB^PR"
A$ = A$ + "CdTOdMh2YnXJC^4=<Q=\A6O#UK`MH3ZLAfb6N2^PJME<>Ba6JbC1?7DN[fb6"
A$ = A$ + "Lm3alcWd?R[3jjg7Won\i=GkW6OlHjSMj5f`6DaC=a7^[IKh2ZLEJd;PjRJh"
A$ = A$ + "K9^`MZeXcSb6n#C>683K6_iR[BN]ibS`=D[]^QGZhA]N[RaeZ]AC^8=n2bRW"
A$ = A$ + "fd?`GcEEiG\Q=P7GXWS_H1oiolOn;6_ngKh2]J6JRGL[KgZoXQ7O:G#Eo#gl"
A$ = A$ + "HVNbd`aRJRoK^FO]mInjMBNeWb4Dj^JmIUiIRJ]NfcT]cg5gWCa5#VP;WQ6N"
A$ = A$ + "`\OOJlN#]nHb[o4G0I3=LWVhgCF;M[g5Yk5>]J=jkIg3N:^#C]UDa8]iePkC"
A$ = A$ + "Enk>o1H<QVLMJb3_InR:_25KP]^?nLEQiR=g6ZLAJh2=\0ggK0\o>b6HG[HN"
A$ = A$ + "6XRWagSS;lJPn#^Q=XRW?U=\U;hd^a>WHNb\9_Pf?C3CXA3Fjh:YY2mV^YF6"
A$ = A$ + "W`2JmkHciHR;db6`HKUW\]ek4cS#UC;kk#T6^0S=XF3IbVBn_S_nen2i2oUo"
A$ = A$ + "bOiMS9K`]m>Y?0f6ghH3=NDTZMYb[f]LQD>CKh2\SWdfo4f3V_B3Oh4o=H_O"
A$ = A$ + "7;k>LQ6oDEae:=3ZNi`i_0^NDR9Th28K`=oUU?AC>;<^`;N`Om_nGOgHb6L?"
A$ = A$ + "3T<o6>eW0EL^kcScmEa3>fPK=j][;gb5BL]]JADJ2`]][Vf<n#:?PC7Y[SKi"
A$ = A$ + "2:>T;g8UO7:=7>_FLL1W7oKh2^?3C3a6f0KkNa5^H28KPMlhl`KC]5f\f_:V"
A$ = A$ + ":=Ha4>m>WZIOCN4]\#F<;j_hFMC\JFQW7YJQLRgW]\eii[R;<?f`mKRAXb32"
A$ = A$ + "OogU;LYSWa5^R[DaF<VPKPl1fLO6K`YMAa5#f0NNXH3Zn]ZA?1KNLcWK;GPM"
A$ = A$ + "\YRKKVGg47Td>Y>nCLQ4C`MNkddaRa>]F8=j\JHPZS9WfRC6=LQI^4:^`[[c"
A$ = A$ + "8GPicO:oRiWMV[?^=HmVCb3N7GHV31S;`>GBj8DNlije`fHh=<Rdf=igGR;d"
A$ = A$ + "\n8b6JcS2e<hfVY[M^ci6_7^[>Pg:^#keodXQ;XlNLF?27G0macY9WU_olcY"
A$ = A$ + "f6HO6XZ;9ck3DCc5Gh_mgnKOaHb6H77X>26[`eg0Zl>DW3^?cVASVQCh2][M"
A$ = A$ + "j6ZL:>iceb5#MV:_7DkcFM?^A:?2gejWT=L]]EiBXh2XW9>^0^6<CC>KPL1G"
A$ = A$ + ">o\NRba7H\15GPa6fb:LeIYQ;hZijMh4^e>ghI#JM<fLgCh2^l?>Q=P_>FWK"
A$ = A$ + "U7g=noXdZeXeSMMWYYh>ieh^?TH3_ULQ4KPEOP[HFWOP^H>dKDFn>>=3=3EN"
A$ = A$ + "?Xg8YSC5?X]o]N[h2^iKCmWKV[N2GhYH3\i4^JTghocYSdifYNOLgLNNmnV\"
A$ = A$ + "Qg:^P:Om[H8\G2V<QI\Zb?#V_38GXAc`Oo_ogOgHb6#]49]5:o8JlYda2Jlj"
A$ = A$ + "LK^4Zl8Dj1>U;POfWD_PJKdb4L\QVLaBGgKmfQYA1O=U6=FmBf`5Dk;UO3Co"
A$ = A$ + "5BLQ6O2Hj_I3eJh>MkZL:He\Ta5^H2Cf#kh4f06OWd8dh[ifiW:f0;n?iGeY"
A$ = A$ + "<1WFmD^hc]ISV1FmcfT_g6_;f`BLN7[HfWb5LLIljm[]3fC3\jDbh2<MjgU="
A$ = A$ + "PJ6BiTPiDXjW1WNQ;N`ohOl?Ng`a7`o^COTKnGkX]N7]L16oT=7<iiP;nWi_"
A$ = A$ + "Pc3^iaiF^PR=`H^hl0fm4ElKR;X>O`S1fm:W75]jiLg7BNnhd<Pm9EjiS0Wg"
A$ = A$ + "ZjW`=e3dmnO=DNEdD7DWO68GHb6^h0:=5>?7f`5^nk\okVjP^a33gLkTgH9O"
A$ = A$ + "bHJ<IcgIaMZHRF=3ZcGL^jVJ;gb4B77Wh?a6N]:G?W^2T=<mc#eWhZNG0WcZ"
A$ = A$ + "h2:o2DNlkh2=eg#m\?hlc0i2ocoiolM3T?Xbeh>L1<VGa3DlTdjH=NHhdLhb"
A$ = A$ + "a#]V3ngEam>V`6f#;GXQcV^Vb^VUh2CMJKI2gQGS<1ec\1N=4miTa6N2^P;_"
A$ = A$ + "l]no[RaMejTYaOnn^d3<I2Cf0C31;?35G#ecTZaVi`]c[EjCJF7;a5Li8lJX"
A$ = A$ + "RYJbA_ImB6o1_6f`JEiCh^>gb5#M#?9G`U[WZWXCLQ;?6BKSVl8HmS0jg_C3"
A$ = A$ + ">FSbDnk>N`d?PIM6D_GT;l_nGo;9O`i1a6O6f>fh;AJ^mMi2]<1LnBB_nC`5"
A$ = A$ + "DLeC_>[N=5G#a4Ln8lEQN1egA<:^#3K9YIH3GXacOFM3MiNPk_ifH6;SK?lm"
A$ = A$ + "Ma4VS6m3YJDP\QCeB\U?LBN4<__DN7Pl1E>4WT3CK^4YiUheFeekfk3Ki2>="
A$ = A$ + "5\QbWU6_FBn;XH2=N<`H;Zlh^^7hlL<a5Di`[H3YaLkZFWW=DL17O8i7Y[g8"
A$ = A$ + "KNFBVcIO2M3<O`Dc3CaU83PmgBikg`6La4hnB]FEjid9mL_hh2\[I^[[8C8i"
A$ = A$ + "ADjN0SEkZ9AR9TH3Z_C9>Q;d4okRSCm?0cOCefDa9HLQomonOo^aMh3\lOHe"
A$ = A$ + "]]I>\B?K3C8=74GK[E7[Jm<FLBCnlKR9Bc7_VCfD3[fWiU[Sk6ODCJQB<CV^"
A$ = A$ + "T4O^EK1nID\hfJNbd7ZjOQ4G0[10;GnFOoLJ#VK7gnJb5^H2hPa7He`hjHai"
A$ = A$ + "iIS^RDoimTL1flhT72>^P:Ok6^`<N`53PaG\eYL?cKZJKUh2^Sk4?XU9TbII"
A$ = A$ + "k#Y?HSgB9fbllRa5DiakH2^AKn0=lWI\]jeNa0n?oWocG<H\QT62VOW<oAMm"
A$ = A$ + "e1Kn:>gLCN4ckKco[KnlMW?ZH3]j5L<QF^#jjZZGEC\Q]nUdb5NB6dfA3G^U"
A$ = A$ + "A_Q;XR5M[5WdCT6]k[[onT9\U?hH3\LNB\1U62eLYkj5aYcWf`5JVSWdQhdR"
A$ = A$ + "`RgMGCE_fMlMX9fCa\CjCJh5Z]]khdaWEiXdZMCE;#6G#icGKM1Li8`RiMi6"
A$ = A$ + "Xd:Xh2]N?Tl2Ae_G=lQ=e_8mjW^6TJnCBWJ[N47G0W;[lHHSNQFoNL?kE9mC"
A$ = A$ + "ha=NnXH3Ke5Zh=:f0C33knKC>S:f`Cb5JdBXd4`lBL6kcH58?honOo_[I3C?"
A$ = A$ + "7fn<HmT\QD=iN[i2:f#SGJ9M[Zie8KXIdh_SS=LM=\9gN7K4??fXek4^0SG]"
A$ = A$ + "aoC7_ca6De8X9>N3KXicRan_RgWalHLoC`5JH3>^PK^lCa5f`4Dal9MVZhUd"
A$ = A$ + "cRESWG\H:L=GGMPgDgBekY=Wl6O1O]MDihib=#Y1XQ;`^nah2^c76GPiePBg"
A$ = A$ + "\cgaCI3KH;>^`<nGmgC7;\jY<I0YWaR9GXY^JKlD`UGlfehEaiYWU2FMfEmN"
A$ = A$ + "Ccc\UC[nChoBb3P;^PR9hHJ\gO:G3U75>=M9=0Z[Mc]=N_[9o^ie:6KPeS1:"
A$ = A$ + "o1>EkPkm`Z5Yb71Wo2Kh1H];KN>#fb5`jDXF;Aig];WH6GP]N1;>Gm\mbH7^"
A$ = A$ + "Wm_f_G7D7o\HRk`4L[ojReEG;H_>N]?i?1V;7^=f`5H[kO7^#;K`eGR\hKG_"
A$ = A$ + "4hd=XRGAO8_3CXYG;JO^#Ji2H>aCf`Vibce<A]09^#ZoKgVG#ji2Nkgi;=NR"
A$ = A$ + "M2?P]FH:>Ca2CL1g#YWPUko6o4CL7fmo=e9bi3YjiCX]gRHL1U^3do_4o1mJ"
A$ = A$ + "4mE`a4BmNeFV#R;`lRTYIXAo[J>5KM;5GXmInOnMmTjccH1^l<fhCIR?X^fi"
A$ = A$ + "dWkN?>fPkHO;KH3GXe;Y]J6LL15K`mMc`9\Q[HdILY[_6Klm4mJlR;XH2]mP"
A$ = A$ + "IccfQZF4Kh29=3Yl8Bc;Ei;XN>MLo^Yenm3I;_Ya?RF]3=i\g67mJhh2]iJi"
A$ = A$ + "he\mSS=\iLkD=3Z[cC_KE\1F]:LmJPS9`NN7HaaZNO`ikPKO^mIkZQ;TNVZL"
A$ = A$ + "eV`=?7mH8UG\B?L;C0SUM?g_^L5L?o>Wb6Li3XRKBn_XdId`5^>nfheJB;Wb"
A$ = A$ + "7CllI3k3W;`V[\Q=`NnZ`L:Jd;<caWm<9PK;VFOl_QkGWo2HO9Tb5#mj^WAR"
A$ = A$ + "VN[AeCN^lUEoMemJeJH:F#jg4Je[aH2hn=a6Hi[XfV:_eDnhe>LJkMN[dhES"
A$ = A$ + "CkPKO`H8=an>?VBJ;Mlb4K#ekC_RiJI2^J0fj9hLhH3>^#ZGTBOgAhNf8D<0"
A$ = A$ + "E?gMRGkZiE<^PCSPkg<nVO;iEL17KXIPKg=Nkcd<YdBQKgTg2>mAKmKEaKDj"
A$ = A$ + ";>U;P\QdkUa8LiDXN^;_h2C=mZJ1Xlk7i<9NP;G66KHb5LlP]lQDojjN6;_C"
A$ = A$ + "=iEcOMJ5`HDlgHm[omlobN?Y_SaJIB=\QfldE[;f>BeR`a6Dn\VH3>Vb6M3>"
A$ = A$ + "M#YGOSW5<f0cW1GLIbg_fWiJG=4IiPP739^#COfbH58c`m\nl4<1FNd=iojl"
A$ = A$ + "D0SiK7^l:DkOW>UTgW=i4O2CXMMldedTg\W\mH\f]i6UdCdDo6lmjd<hh2Ga"
A$ = A$ + "UZn6XikUQ]LQiWSi1jea1V7QjiRfE7Q]J8L?3`Wb5`hPCI2Wb5Jh39=2g97U"
A$ = A$ + "DLa6V`fA[o]]\QV]aYlQ4k`iE3SCTj[1G?>Yj]aVN8Ba6LJ=HmT9[?:_>6#o"
A$ = A$ + "5B?c=<f`F_7BL1E]9ML1WNQVi^>^0nKF4ke`O[cD[kgb5Je;\9^Xe;fT_0^["
A$ = A$ + "_]nT\A;eFf#:?[6oFO;d;XZeX[73Kb[Pa5LmH`lchjE:lk>1gJj<f0[n4^JE"
A$ = A$ + "Xfn^Nb1i4<oeBcaKR;KRkI_6nkS:ZO85g_E_PR=hh5:VPkJER=LZO9hf\Mkh"
A$ = A$ + "^6hl9i4=3Zl;DeUH6C`jQ1fJkZJ:\iiAP]OBmM4jgPjIXNb5L[YWZGkenDa5"
A$ = A$ + "BiAd`5HllGgGKbG`53>i2H<oEL?SKLmj\OoTMiKThB=\Qfh3WFZ]a`W`6Jd1"
A$ = A$ + "elIDJVN2f#[OS\n[cmLH?SIMm>X:_0Gm9Jn^BRmNO=Hm89Zi#]^^[g3Dmh5>"
A$ = A$ + "DJ5JbQXU9La5BccLN2PoFWRalHl>kmL2K8i[A[WV=<P6=D9ODMiKd`QgVKeG"
A$ = A$ + "ELQ4K0cM8mlBTH0\elMn9bH2Ho4affZnAbY;Q]_LO7ZPiAdLMPaJD?c`Ki2<"
A$ = A$ + "VPJ>Vb_05Gh:6oGn;oU_KPJ6LLQ9O#a:Ll8TYhlcLK^oWfO69NPc?g6fPB35"
A$ = A$ + "S=hh2<NiMmTDic8^>Y:FGa4Dm0UBOQ:gLE^lZnDL;oYYo3fb6Wi#TZ3a9J5V"
A$ = A$ + "i9ScaJRmHi#<S]_h2CfPBCAJTlY#a6L[Mbh3>FPCcDC>??=GH3KJb5D\1lJ`"
A$ = A$ + "MI3GceD<QIO;XlGcUO]:Fea3HaZ8K#E30Wg7cmGK?9i>6f`5LOoR\E[PR9Tl"
A$ = A$ + "=0GkOb=`HIT;`d2\U;`6\G7SAKl1`iIafAb3dFV0KkihA\gkK9G8E[RGckLO"
A$ = A$ + "OGe4GVdfO7VPZfP\oN:VeE[Pk`4`c?5G8e[B_U<1UGR>]2<f`C`5B_7gJgYL"
A$ = A$ + "cMJBD\PfmK[W2Yhm=<:Vo:]iBXH3=ml4[NTcooDOoVZWoD_#K^39fPKogT_A"
A$ = A$ + "R9hZ;9b3HNX>i2gU9PeLKb5JH2>^PbGQGSOa_hGl^A3KXa?BfnJ3K#Ye>Ugd"
A$ = A$ + "faMHB^Hn6^UbS5FNC9fPc;B5GPi[0kI1Fe[_^HWTnnk`5JH6<6PR[YNF6HWo"
A$ = A$ + "\JWZlf\U;`j]IV7S<mR>OmC[=ch2<V0b6DiFd<DjAJlS8U;^jL7ggWb6LlQ6"
A$ = A$ + "^\knCca#K=I^VSLBM:BmdXR;hRUfb6HiCd`6f\OCL4GO>Zh29V`5G#E;RTN1"
A$ = A$ + "67W]F#;Ch4^`5;hWocoiB^`<N^Q5TbCAaJJeKg`4Jd`\Eg`6ndF^`eWI^oKZ"
A$ = A$ + "7CZNVYNLRECBfg5Q=NegfW`X7T]j6Lkg4?#ml?efkc:o<MmW5b5JI3=L1UFQ"
A$ = A$ + "VHCgkIb5Na4^6>]3?1GP]=C\1UVmfSQFo#L\QD^3]an]L1d7b4OhYh2\jCZd"
A$ = A$ + "IkNMW>oDn4:?8Ki2]eFXmLBa5LJ5NmNLLQDm8fb5NRiOche9CPa5VlQ=N;jl"
A$ = A$ + "`PiSQC7n9jT`mM3K0IA>O>O;h2=\1fPe73=iBXh2\JBd\^ZR?`dkWjOAE>1Z"
A$ = A$ + "hhCZ_#b_A5G8YEhjlAY7I[V16GH>_\I]Jl_eXEh3nP?h;6>^`9mg0CGBJK^="
A$ = A$ + "g1fa#:g5W_9H\ICM5JHaKHCYNL`e7D]L1\W5B\1fJN\L?JNF4AokJZO0b6Hm"
A$ = A$ + "VlGELQVWm;63[]^4\J7YZ3AcL<fkaa5N=VLQ6=3gQ9PkSF=3KSeDi]dhM2;f"
A$ = A$ + "TMllD<QinWUoDJTjAb=n>Nj8a=DJ6Ji19m0=N6\e[46K`YGh4^#C]9A^0ZO5"
A$ = A$ + "WSMJ?7PJj_;G`5cQ<1LodjYiVH\fj\db6>9OQdaFKn<=LRVNQREcBec?iY3E"
A$ = A$ + "ole`6DnC^U;TbgYYn6WXI0kYYG__6]2=?34HmWHn:dXAN3G#5_VlH`aIVSYg"
A$ = A$ + "59^PS?\Q7h>NBnZZR?_;?PMO[il^Q?PL1gc?AjI[>=JI3\o>S;\Id67kNF8_"
A$ = A$ + ";KPiaPZ?[MJXJlD`e;C=<Q=L1Fm9Ki2<o2a]UJL]mOogomSLQILb9i7THDYc"
A$ = A$ + "YF];gQ9\AW4S9<og9^`T=`d;dl<Ffb6Li?[j90\62gQ;PaQ]LQ6>1S;hZeJ:"
A$ = A$ + "g[;^#cg[>C^0cCQW#[0;FN;G8]MBS9GHciQZ^6<NPSCUd<XRICom]<QF6Tcc"
A$ = A$ + "C6KHfofhc#QR1hN]Cci0Of]MjiM\Q=J5fFge=j7fdgVW`5DN4ch2KbAm]V;<"
A$ = A$ + "SS>U9Xh2=WG]i8hH2Ynd#a7D<S43XeCSCI3HO#aNV>H?OE=?g4>n#3?0OoHm"
A$ = A$ + ";JI3Ke9\]O<>Yf4>oBOmnJH2:?6MeQ0mJlJ^dY<QWR;`Ro`HNU_2=L1GlIK^"
A$ = A$ + "2=S=\QCd4\ilJK>;9^0fg5:f`Y<26K8mM6`YJ7Bn9Zlece3WWb4Dii`>NM<1"
A$ = A$ + "7GPe[k\nHR=gc=_ZInZbC`I<C3SP5ggb5JR=InILJ^3g9WRVJ<L7^0Kdb6`n"
A$ = A$ + "OBegfH_CfZM8EWc6O:#n#R=\a?AWGWKe;hjI;U>6eam9J5#F`TcS??>=iXZH"
A$ = A$ + "3Ki2HLm9LQif8U;Acna5O]U9XHGZn]jYbIH;G8i[iT=`ji9EOGhd>hl3ga6J"
A$ = A$ + "h8^nV#5_fdCE>O>gZGXQ9djCIjH=eCS^_[A^[WSKH2Ge9P5cdb4VK3fhe[O="
A$ = A$ + "N:n`6^#3SBa5N:M2WZG`mj8K`mLXkH3^WGWVNUbmNVo=T=Pn>TH0=elK;G8e"
A$ = A$ + "OgKh2GONllRYE0_FS<Qdc^k9\1E<4[fQHlZR=XRcDalh[a6KHA?QF1lhbika"
A$ = A$ + "K1CXU?TldPU?1[?hVk;T=Xd<XReCSV__JM\QT60Gm#_3G0I3]l0Wo7Zc9gc<"
A$ = A$ + "iT;dll2NWiT^Hj[HSgkmN_g=L\1gJ^YHoWT=L7?5D7_>M3chgWR7\Ek#B?1K"
A$ = A$ + "^clhmjlIb6BNA^ik16leKN6?I\1GM=fDo3<VlDO7CmEASNQ=<1\^3Za6?3Je"
A$ = A$ + "HcR=^h2>f`K5C#a5JI3?1GPM<dD_4ljLJlTLQTgTGcE`mo[o^:O2W>PVAZO\"
A$ = A$ + "Anc9mOifjRZh2=maDZ_<MLQoO\;[%%h1"
btemp$ = ""
FOR i& = 1 TO LEN(A$) STEP 4: B$ = MID$(A$, i&, 4)
IF INSTR(1, B$, "%") THEN
FOR C% = 1 TO LEN(B$): F$ = MID$(B$, C%, 1)
IF F$ <> "%" THEN C$ = C$ + F$
NEXT: B$ = C$: END IF: FOR j = 1 TO LEN(B$)
IF MID$(B$, j, 1) = "#" THEN
MID$(B$, j) = "@": END IF: NEXT
FOR t% = LEN(B$) TO 1 STEP -1
B& = B& * 64 + ASC(MID$(B$, t%)) - 48
NEXT: X$ = "": FOR t% = 1 TO LEN(B$) - 1
X$ = X$ + CHR$(B& AND 255): B& = B& \ 256
NEXT: btemp$ = btemp$ + X$: NEXT
btemp$ = _INFLATE$(btemp$, m.SIZE)
_MEMPUT m, m.OFFSET, btemp$: _MEMFREE m
BASIMAGE1& = _COPYIMAGE(v&): _FREEIMAGE v&
END FUNCTION
FUNCTION BASIMAGE2& 'witch.png
v& = _NEWIMAGE(100, 96, 32)
DIM m AS _MEM: m = _MEMIMAGE(v&)
A$ = ""
A$ = A$ + "haIkMV\Bc4447?7mP??NcCRGl5#?XRXX8j11AAa=R8^P;h2^S2^7#Aa3NaK2"
A$ = A$ + "nDhIO7lJomm_CjhT9Cb<IVNjZ<CMh767UTdeoYk^ZZ[^WLiEib98888THFMe"
A$ = A$ + "EEGNiUZc>k<=hehJK^iVJXnkGF0H_Q]OQ5FhoG8GMIWMfA]hR;:jB:aXS>JX"
A$ = A$ + "J#md5Y?Sm0S557]`?mfK_R^`8m``<c<SFC`HOH<#ZKOo5a<?]OVJZYDOla79"
A$ = A$ + "BOFNiUEgOomR^H9Nla7EaMn53_mfKJ=9OnlR^H9#o5<7Q=VWQjfBc4f#C`k3"
A$ = A$ + "6;TjfBc2FAC:Y;[_njR^H1#\7fbW\a6K<eMgMWFGfMgM3dgR`0nbMk]gVIeF"
A$ = A$ + "MliFd?iK^iVRfb4nn0o\Yffd<d7aJ`0k2UPh;8G3:Qnk23\9T3QJ`:[\RF3T"
A$ = A$ + "HKXG?THIZV17L#WZ18G1VeRQjf>gX[^jbij0e]I^BBcYEDY]fJ;C7GADHXQ6"
A$ = A$ + "b9JaLc=WJ_mfCdRj`6K\QCd2=<XmbIRbJ[Kki<dS;bPf>k`QjPGJ]eF5m`38"
A$ = A$ + "o[DWG4MoB6H;X6[UGM;PnN26HCX2MlF<#7lR^f;HP]QUjAnR[aWY^7NomgCM"
A$ = A$ + "m8;W;MSVH\gj[Eb^<a4CDQMiR;^#eIWM:jQSY#Q2:Pg[ISJ2:8VLb9EC?mdZ"
A$ = A$ + ":RgQ1f0>CJ>O?dM\>^Dg6i<GMeE:`lc?_2SA5GK=lE:<]DWC66dVi8WNjYaf"
A$ = A$ + "f74VJS7o\Naf8iD?HniWOdm;\UNhe>OmeGG<?jRN4Idm?`[]PFHZgJo0=YRL"
A$ = A$ + "hcPf=ga6cOkgo<oHl]^lm02YZN#MKXI1KiKkQ7NXX990oaVWDTH\3Wc?oL]="
A$ = A$ + "b<f>^76f]dHMI5mXbJ53_foNPZlo[U]m1AF>7]0K_o0C2XOX>^N6HG4mXXN\"
A$ = A$ + "eFKUYe3>E_c0T;H\W4Yf^#5mdC?Za7OLbe1_8e<RkZQ]X2bKRaO>hSQ>oH<`"
A$ = A$ + ">iBX^>A2SdNm>>iTCD7MdAj?Sbk7;RQKcWD5ioMMi3RJe^<oM\f<V[QGK^>j"
A$ = A$ + "32OKVMfI;oIa5=9ZWS?L4ciTB]FKo6Q`ZCKoWkD1ank_O5_7VcGWJAm6GVmm"
A$ = A$ + "EBA2[N^ZeJbH3NjYW2<?NjhfIP]9]1i^7aQj=g4Q=6R;RK3OW<SYR?cQ7NHb"
A$ = A$ + "]EF3?fB<6RIl4lkH_]Sk9KTadMMLdMdA7dK3S9X6PlN_n17L#Z<_\[fcAoEI"
A$ = A$ + "P168e\me2_Wo3K_mfZ?olCb]3L0X5nmUQ2#MH^dB;A^mPJhB]V<b8S#^]P3#"
A$ = A$ + "UNlmgOGnl7\onkWLk07PZeL7af]fJ[YJ_mf9g6`9XB?<m=diEQ1f1>0b?b3?"
A$ = A$ + "l0YcM8SCm;DOna5glVPLSmlc?[NmeG9g6J;dkm32e2#DggNX?<F?7<fZYV=P"
A$ = A$ + "?j`ghFJY5b]UF1Re2_JBLcI[I>8XA8W27Ola>]NN\5IQj#YZJ8WahMMUJfQk"
A$ = A$ + "JBFX_QG#mfT6k1CKY5Q]W4J61[A3gdT\ni_7b5`;_l2ijPX5o27jW8e7GUX["
A$ = A$ + "A3Rd2i<c=HXh\lAjGDK#><ek;77Y5MgMgRFD7POV^B?j[_n4]84LAm]PaWbj"
A$ = A$ + "W[HLA?Ti:J<B[jSDNFN6O\MN]THlB>fhl>6aG:?_^\3je;91JQllOdn4ga]T"
A$ = A$ + "cc]dS6Jo6V_dI9>3nNg\BDmoEVcf=4Vo_bc75gBmZc59f>gC#?_7oj[_Zj\#"
A$ = A$ + "F`Qh[?1GfO`IA#MLIfoMbIjVPPPPPPPP#S`o0XLK%%h1"
btemp$ = ""
FOR i& = 1 TO LEN(A$) STEP 4: B$ = MID$(A$, i&, 4)
IF INSTR(1, B$, "%") THEN
FOR C% = 1 TO LEN(B$): F$ = MID$(B$, C%, 1)
IF F$ <> "%" THEN C$ = C$ + F$
NEXT: B$ = C$: END IF: FOR j = 1 TO LEN(B$)
IF MID$(B$, j, 1) = "#" THEN
MID$(B$, j) = "@": END IF: NEXT
FOR t% = LEN(B$) TO 1 STEP -1
B& = B& * 64 + ASC(MID$(B$, t%)) - 48
NEXT: X$ = "": FOR t% = 1 TO LEN(B$) - 1
X$ = X$ + CHR$(B& AND 255): B& = B& \ 256
NEXT: btemp$ = btemp$ + X$: NEXT
btemp$ = _INFLATE$(btemp$, m.SIZE)
_MEMPUT m, m.OFFSET, btemp$: _MEMFREE m
BASIMAGE2& = _COPYIMAGE(v&): _FREEIMAGE v&
END FUNCTION
RE: Scrolling fog/cloud image for moving background - bplus - 05-22-2022
Ah! do that with your drawn image!
_putimage mirror your drawing next to the image of your drawing, so it starts and ends with same seam! Just the image is twice as wide. Of course the image has to make sense in reverse and look different so not a whole bunch of detail and lot's of symmetrical figures ie random dots should be fine.
RE: Scrolling fog/cloud image for moving background - Dav - 05-22-2022
Oh that's a great idea, @bplus! I did a quick test and that will work perfectly. Now all I have to do is come up with drawing a good fog. here's a working test...
- Dav
Code: (Select All) SCREEN _NEWIMAGE(1000, 600, 32)
fog& = _NEWIMAGE(300, 200, 32)
_DEST fog&
FOR t = 1 TO 20000
c = RND * 127: x = RND * _WIDTH: y = RND * _HEIGHT
LINE (x, y)-(x + 4, y + 4), _RGBA(c, c, c, 15), BF
NEXT
fog1& = _COPYIMAGE(fog&)
_PUTIMAGE (_WIDTH, 0)-(0, _HEIGHT), fog1&
fog2& = _COPYIMAGE(fog1&)
_DEST 0
DO
_PUTIMAGE (spos, 0)-(spos + _WIDTH, _HEIGHT), fog1&
_PUTIMAGE (spos + _WIDTH, 0)-(spos + (_WIDTH * 2), _HEIGHT), fog2&
spos = spos - 6: IF spos <= -_WIDTH THEN spos = 0
_DISPLAY
_LIMIT 30
LOOP
RE: Scrolling fog/cloud image for moving background - James D Jarvis - 05-22-2022
Oh neato.
Code: (Select All) Screen _NewImage(1000, 600, 32)
_PrintMode _KeepBackground
fog& = _NewImage(300, 200, 32)
_Dest fog&
For t = 1 To 20000
c = Rnd * 127: x = Rnd * _Width: y = Rnd * _Height
ff = Rnd * 16 + 3
Line (x, y)-(x + 4, y + 4), _RGBA(c, c, c, ff), BF
' Line (x, y)-(x + 4, y + 4), _RGBA(c, c, c, 15), BF
Next
fog1& = _CopyImage(fog&)
_PutImage (_Width, 0)-(0, _Height), fog1&
fog2& = _CopyImage(fog1&)
_Dest 0
Do
Locate 15, 15: Print "The fog is pretty cool with variable transparency."
_PutImage (spos, 0)-(spos + _Width, _Height), fog1&
_PutImage (spos + _Width, 0)-(spos + (_Width * 2), _Height), fog2&
spos = spos - 6: If spos <= -_Width Then spos = 0
_Display
_Limit 30
Loop
RE: Scrolling fog/cloud image for moving background - bplus - 05-22-2022
This is what I have for landscapes, took me too long to figure the scroll:
Code: (Select All) _Title "Scroll landscape image test" 'b+ 2022-05-22
Const xmax = 800, ymax = 600
Screen _NewImage(xmax, ymax, 32)
_ScreenMove 300, 40
Randomize Timer
drawLandscape
'Sleep
wImg& = _NewImage(2 * _Width, _Height, 32)
_PutImage (0, 0)-(_Width - 1, _Height - 1), 0, wImg&
_PutImage (_Width, 0)-Step(_Width - 1, _Height), 0, wImg&, (_Width, 0)-Step(-(_Width - 1), _Height)
_PutImage , wImg&, 0
'Sleep ' ok
Do
'Cls ' don't clear because 2 giant black lines
'===================================================
_PutImage (0, 0)-(_Width - 1, _Height - 1), wImg&, 0, (x, 0)-(_Width + x, ymax)
If _Width + x >= _Width(wImg&) Then
diff = _Width + x - _Width(wImg&)
_PutImage (0, 0)-(diff, _Height - 1), wImg&, 0, (x, 0)-(x + diff, ymax)
_PutImage (2 * (_Width) - x, 0)-(_Width - 1, _Height - 1), wImg&, 0, (0, 0)-(diff + 1, ymax)
'Line (2 * _Width - x, 0)-(_Width, _Height), &HFFFF0000, BF
Else
_PutImage (0, 0)-(_Width - 1, _Height - 1), wImg&, 0, (x, 0)-(_Width + x, ymax)
End If
x = x + 2: If x > _Width(wImg&) Then x = 0
_Display
_Limit 60
Loop
Sub drawLandscape
'needs midInk, irnd
Dim i As Long, startH As Single, rr As Long, gg As Long, bb As Long
Dim mountain As Long, Xright As Single, y As Single, upDown As Single, range As Single
Dim lastx As Single, X As Long
'the sky
For i = 0 To ymax
midInk 0, 0, 128, 128, 128, 200, i / ymax
Line (0, i)-(xmax, i)
Next
'the land
startH = ymax - 200
rr = 70: gg = 70: bb = 90
For mountain = 1 To 6
Xright = 0
y = startH
While Xright < xmax
' upDown = local up / down over range, change along Y
' range = how far up / down, along X
upDown = (Rnd * .8 - .35) * (mountain * .5)
range = Xright + irnd&(15, 25) * 2.5 / mountain
lastx = Xright - 1
For X = Xright To range
y = y + upDown
Color _RGB(rr, gg, bb)
Line (lastx, y)-(X, ymax), , BF 'just lines weren't filling right
lastx = X
Next
Xright = range
Wend
rr = irnd&(rr - 15, rr): gg = irnd&(gg - 15, gg): bb = irnd&(bb - 25, bb)
If rr < 0 Then rr = 0
If gg < 0 Then gg = 0
If bb < 0 Then bb = 0
startH = startH + irnd&(5, 20)
Next
End Sub
Sub midInk (r1%, g1%, b1%, r2%, g2%, b2%, fr##)
Color _RGB32(r1% + (r2% - r1%) * fr##, g1% + (g2% - g1%) * fr##, b1% + (b2% - b1%) * fr##)
End Sub
Function irnd& (n1, n2) 'return an integer between 2 numbers
Dim l%, h%
If n1 > n2 Then l% = n2: h% = n1 Else l% = n1: h% = n2
irnd& = Int(Rnd * (h% - l% + 1)) + l%
End Function
RE: Scrolling fog/cloud image for moving background - Dav - 05-22-2022
That's pretty, bplus. Would be great for a game.
Hey James, I like the transparency idea. Will play around with that. trhanks!
I thought to do some layering of two images, one closer, so here's that. Used balls instead of lines.
- Dav
EDIT: I added a 3rd layer for more realism, but it would be too slow to _PUTIMAGE all this in a running game probably.
Code: (Select All) SCREEN _NEWIMAGE(1000, 600, 32)
fog& = _NEWIMAGE(300, 300, 32)
_DEST fog&
FOR i = 1 TO 10000
c = RND * 200 + 50
ball RND * _WIDTH, RND * _HEIGHT, RND * 15, c, c, c + 50, RND * 2
NEXT
fog1& = _COPYIMAGE(fog&)
_PUTIMAGE (_WIDTH, 0)-(0, _HEIGHT), fog1&
fog2& = _COPYIMAGE(fog1&)
_DEST 0
DO
_PUTIMAGE (spos2, 0)-(spos2 + _WIDTH, _HEIGHT), fog1&
_PUTIMAGE (spos2 + _WIDTH, 0)-(spos2 + (_WIDTH * 2), _HEIGHT), fog2&
spos2 = spos2 - 3: IF spos2 <= -_WIDTH THEN spos2 = 0
_PUTIMAGE (spos, 0)-(spos + _WIDTH + 300, _HEIGHT + 300), fog1&
_PUTIMAGE (spos + _WIDTH + 300, 0)-(spos + ((_WIDTH + 300) * 2), _HEIGHT + 300), fog2&
spos = spos - 6: IF spos <= -_WIDTH - 300 THEN spos = 0
_PUTIMAGE (spos3, 0)-(spos3 + _WIDTH + 600, _HEIGHT + 600), fog1&
_PUTIMAGE (spos3 + _WIDTH + 600, 0)-(spos3 + ((_WIDTH + 600) * 2), _HEIGHT + 600), fog2&
spos3 = spos3 - 12: IF spos3 <= -_WIDTH - 600 THEN spos3 = 0
_DISPLAY
_LIMIT 30
LOOP
SUB ball (BallX, BallY, size, r&, g&, b&, a&)
FOR s = 1 TO size STEP .4
CIRCLE (BallX, BallY), s, _RGBA(r&, g&, b&, a&)
r& = r& - 1: g& = g& - 1: b& = b& - 1
NEXT
END SUB
RE: Scrolling fog/cloud image for moving background - bplus - 05-23-2022
Nice! the layers and different speeds? give nice 3D effect. Maybe decrease rnd size of balls for back layers?
Wait that's all 1 image wow, but you are changing size.
RE: Scrolling fog/cloud image for moving background - Dav - 05-23-2022
Yeah, 1 image, just stretched out on two of the layers. I added the witch code to see how slow it would play. pretty slow, on my laptop at least. I _PUTIMAGE'd the witch first so she would seem to be in the clouds.
- Dav
Code: (Select All) SCREEN _NEWIMAGE(1000, 600, 32)
witch& = BASIMAGE2&
fog& = _NEWIMAGE(300, 300, 32)
_DEST fog&
FOR i = 1 TO 10000
c = RND * 200 + 50
ball RND * _WIDTH, RND * _HEIGHT, RND * 15, c, c, c + 50, RND * 2
NEXT
fog1& = _COPYIMAGE(fog&)
_PUTIMAGE (_WIDTH, 0)-(0, _HEIGHT), fog1&
fog2& = _COPYIMAGE(fog1&)
_DEST 0
DO
'===================================================
'Here's the witch code....
'if pressed space, move witch up& forward
IF INP(&H60) = 57 THEN
witchflyy = witchflyy - 8
witchflyx = witchflyx + 6
spos = spos - 4 '<-- scroll fog faster too (remove it wanted)
ELSE
' else wich drifts down
witchflyy = witchflyy + 3
witchflyx = witchflyx - 2
END IF
'keep witch in screen bounds
IF witchflyx < 5 THEN witchflyx = 5
IF witchflyx > _WIDTH - 100 THEN witchflyx = _WIDTH - 100
IF witchflyy < 5 THEN witchflyy = 5
IF witchflyy > _HEIGHT - 100 THEN witchflyy = _HEIGHT - 100
_PUTIMAGE (witchflyx, witchflyy), witch&
LOCATE 1, 1: PRINT "Press SPACE to fly...";
'===========================================================
_PUTIMAGE (spos2, 0)-(spos2 + _WIDTH, _HEIGHT), fog1&
_PUTIMAGE (spos2 + _WIDTH, 0)-(spos2 + (_WIDTH * 2), _HEIGHT), fog2&
spos2 = spos2 - 3: IF spos2 <= -_WIDTH THEN spos2 = 0
_PUTIMAGE (spos, 0)-(spos + _WIDTH + 400, _HEIGHT + 400), fog1&
_PUTIMAGE (spos + _WIDTH + 400, 0)-(spos + ((_WIDTH + 400) * 2), _HEIGHT + 400), fog2&
spos = spos - 6: IF spos <= -_WIDTH - 400 THEN spos = 0
_PUTIMAGE (spos3, 0)-(spos3 + _WIDTH + 800, _HEIGHT + 800), fog1&
_PUTIMAGE (spos3 + _WIDTH + 800, 0)-(spos3 + ((_WIDTH + 800) * 2), _HEIGHT + 800), fog2&
spos3 = spos3 - 12: IF spos3 <= -_WIDTH - 800 THEN spos3 = 0
_DISPLAY
_LIMIT 30
LOOP
SUB ball (BallX, BallY, size, r&, g&, b&, a&)
FOR s = 1 TO size STEP .35
CIRCLE (BallX, BallY), s, _RGBA(r&, g&, b&, a&)
r& = r& - .5: g& = g& - .5: b& = b& - .5
NEXT
END SUB
FUNCTION BASIMAGE2& 'witch.png
v& = _NEWIMAGE(100, 96, 32)
DIM m AS _MEM: m = _MEMIMAGE(v&)
A$ = ""
A$ = A$ + "haIkMV\Bc4447?7mP??NcCRGl5#?XRXX8j11AAa=R8^P;h2^S2^7#Aa3NaK2"
A$ = A$ + "nDhIO7lJomm_CjhT9Cb<IVNjZ<CMh767UTdeoYk^ZZ[^WLiEib98888THFMe"
A$ = A$ + "EEGNiUZc>k<=hehJK^iVJXnkGF0H_Q]OQ5FhoG8GMIWMfA]hR;:jB:aXS>JX"
A$ = A$ + "J#md5Y?Sm0S557]`?mfK_R^`8m``<c<SFC`HOH<#ZKOo5a<?]OVJZYDOla79"
A$ = A$ + "BOFNiUEgOomR^H9Nla7EaMn53_mfKJ=9OnlR^H9#o5<7Q=VWQjfBc4f#C`k3"
A$ = A$ + "6;TjfBc2FAC:Y;[_njR^H1#\7fbW\a6K<eMgMWFGfMgM3dgR`0nbMk]gVIeF"
A$ = A$ + "MliFd?iK^iVRfb4nn0o\Yffd<d7aJ`0k2UPh;8G3:Qnk23\9T3QJ`:[\RF3T"
A$ = A$ + "HKXG?THIZV17L#WZ18G1VeRQjf>gX[^jbij0e]I^BBcYEDY]fJ;C7GADHXQ6"
A$ = A$ + "b9JaLc=WJ_mfCdRj`6K\QCd2=<XmbIRbJ[Kki<dS;bPf>k`QjPGJ]eF5m`38"
A$ = A$ + "o[DWG4MoB6H;X6[UGM;PnN26HCX2MlF<#7lR^f;HP]QUjAnR[aWY^7NomgCM"
A$ = A$ + "m8;W;MSVH\gj[Eb^<a4CDQMiR;^#eIWM:jQSY#Q2:Pg[ISJ2:8VLb9EC?mdZ"
A$ = A$ + ":RgQ1f0>CJ>O?dM\>^Dg6i<GMeE:`lc?_2SA5GK=lE:<]DWC66dVi8WNjYaf"
A$ = A$ + "f74VJS7o\Naf8iD?HniWOdm;\UNhe>OmeGG<?jRN4Idm?`[]PFHZgJo0=YRL"
A$ = A$ + "hcPf=ga6cOkgo<oHl]^lm02YZN#MKXI1KiKkQ7NXX990oaVWDTH\3Wc?oL]="
A$ = A$ + "b<f>^76f]dHMI5mXbJ53_foNPZlo[U]m1AF>7]0K_o0C2XOX>^N6HG4mXXN\"
A$ = A$ + "eFKUYe3>E_c0T;H\W4Yf^#5mdC?Za7OLbe1_8e<RkZQ]X2bKRaO>hSQ>oH<`"
A$ = A$ + ">iBX^>A2SdNm>>iTCD7MdAj?Sbk7;RQKcWD5ioMMi3RJe^<oM\f<V[QGK^>j"
A$ = A$ + "32OKVMfI;oIa5=9ZWS?L4ciTB]FKo6Q`ZCKoWkD1ank_O5_7VcGWJAm6GVmm"
A$ = A$ + "EBA2[N^ZeJbH3NjYW2<?NjhfIP]9]1i^7aQj=g4Q=6R;RK3OW<SYR?cQ7NHb"
A$ = A$ + "]EF3?fB<6RIl4lkH_]Sk9KTadMMLdMdA7dK3S9X6PlN_n17L#Z<_\[fcAoEI"
A$ = A$ + "P168e\me2_Wo3K_mfZ?olCb]3L0X5nmUQ2#MH^dB;A^mPJhB]V<b8S#^]P3#"
A$ = A$ + "UNlmgOGnl7\onkWLk07PZeL7af]fJ[YJ_mf9g6`9XB?<m=diEQ1f1>0b?b3?"
A$ = A$ + "l0YcM8SCm;DOna5glVPLSmlc?[NmeG9g6J;dkm32e2#DggNX?<F?7<fZYV=P"
A$ = A$ + "?j`ghFJY5b]UF1Re2_JBLcI[I>8XA8W27Ola>]NN\5IQj#YZJ8WahMMUJfQk"
A$ = A$ + "JBFX_QG#mfT6k1CKY5Q]W4J61[A3gdT\ni_7b5`;_l2ijPX5o27jW8e7GUX["
A$ = A$ + "A3Rd2i<c=HXh\lAjGDK#><ek;77Y5MgMgRFD7POV^B?j[_n4]84LAm]PaWbj"
A$ = A$ + "W[HLA?Ti:J<B[jSDNFN6O\MN]THlB>fhl>6aG:?_^\3je;91JQllOdn4ga]T"
A$ = A$ + "cc]dS6Jo6V_dI9>3nNg\BDmoEVcf=4Vo_bc75gBmZc59f>gC#?_7oj[_Zj\#"
A$ = A$ + "F`Qh[?1GfO`IA#MLIfoMbIjVPPPPPPPP#S`o0XLK%%h1"
btemp$ = ""
FOR i& = 1 TO LEN(A$) STEP 4: B$ = MID$(A$, i&, 4)
IF INSTR(1, B$, "%") THEN
FOR C% = 1 TO LEN(B$): F$ = MID$(B$, C%, 1)
IF F$ <> "%" THEN C$ = C$ + F$
NEXT: B$ = C$: END IF: FOR j = 1 TO LEN(B$)
IF MID$(B$, j, 1) = "#" THEN
MID$(B$, j) = "@": END IF: NEXT
FOR t% = LEN(B$) TO 1 STEP -1
B& = B& * 64 + ASC(MID$(B$, t%)) - 48
NEXT: X$ = "": FOR t% = 1 TO LEN(B$) - 1
X$ = X$ + CHR$(B& AND 255): B& = B& \ 256
NEXT: btemp$ = btemp$ + X$: NEXT
btemp$ = _INFLATE$(btemp$, m.SIZE)
_MEMPUT m, m.OFFSET, btemp$: _MEMFREE m
BASIMAGE2& = _COPYIMAGE(v&): _FREEIMAGE v&
END FUNCTION
RE: Scrolling fog/cloud image for moving background - Dav - 05-23-2022
If I only use 2 layers, it still looks 3d a little and ALMOST moves fast enough on my laptop for some gameplay. Remember the flying witch through candies that you helped me out with collision detecting? I put it all together with the scrolling fog code. Just wanted to see what the speed would be like.
- Dav
Code: (Select All) SCREEN _NEWIMAGE(1000, 600, 32)
candy& = BASIMAGE1&
witch& = BASIMAGE2&
fog& = _NEWIMAGE(300, 300, 32)
_DEST fog&
FOR i = 1 TO 10000
c = RND * 200 + 50
ball RND * _WIDTH, RND * _HEIGHT, RND * 15, c, c, c + 50, RND * 2
NEXT
fog1& = _COPYIMAGE(fog&)
_PUTIMAGE (_WIDTH, 0)-(0, _HEIGHT), fog1&
fog2& = _COPYIMAGE(fog1&)
_DEST 0
candies = 7
DIM SHARED candyx(candies), candyy(candies), candya(candies)
'======
restart:
'======
witchflyx = 20
witchflyy = 300
candycount = 0
FOR j = 1 TO candies
candyx(j) = _WIDTH + (RND * _WIDTH) * 2
candyy(j) = 40 + (RND * (_HEIGHT - 100))
candya(j) = RND * 360
NEXT
DO
'draw candies
FOR j = 1 TO candies
RotoZoom3 candyx(j), candyy(j), candy&, 1, 1, _D2R(candya(j))
candya(j) = candya(j) + 6
IF candya(j) > 360 THEN candya(j) = 1
NEXT
'see if witch hit a candy
FOR j = 1 TO candies
wx1 = witchflyx: wy1 = witchflyy
wx2 = wx1 + 75: wy2 = wy1 + 75
jx1 = candyx(j): jy1 = candyy(j)
jx2 = jx1 + 75: jy2 = jy1 + 75
hit = collision%(wx1, wy1, 75, 75, candyx(j) - 37, candyy(j) - 37, 60, 60)
IF hit THEN
CLS
FOR r = -3 TO 0
_PUTIMAGE (spos2, 0 + r)-(spos2 + _WIDTH + r, _HEIGHT), fog1&
_PUTIMAGE (spos2 + _WIDTH + r, 0)-(spos2 + (_WIDTH * 2) + r, _HEIGHT), fog2&
spos2 = spos2 - 3: IF spos2 <= -_WIDTH THEN spos2 = 0
'draw jacks
FOR j2 = 1 TO candies
RotoZoom3 candyx(j2), candyy(j2), candy&, 1, 1, _D2R(candya(j2))
NEXT
_PUTIMAGE (spos3, 0 + r)-(spos3 + _WIDTH + 800 + r, _HEIGHT + 800), fog1&
_PUTIMAGE (spos3 + _WIDTH + 800 + r, 0)-(spos3 + ((_WIDTH + 800) * 2) + r, _HEIGHT + 800), fog2&
spos3 = spos3 - 12: IF spos3 <= -_WIDTH - 800 THEN spos3 = 0
NEXT
_DISPLAY
tmp& = _COPYIMAGE(_DISPLAY)
'spin witch out here
r = 1
FOR dy = witchflyy + 35 TO _HEIGHT STEP 3
_PUTIMAGE (0, 0), tmp&
RotoZoom3 witchflyx + 75, dy, witch&, 1, 1, _D2R(r)
r = r + 5: IF r > 360 THEN r = 1
_LIMIT 150
_DISPLAY
NEXT
_FREEIMAGE tmp&
EXIT DO
END IF
NEXT
'move candies, compute
FOR j = 1 TO candies
candyx(j) = candyx(j) - 8
IF candyx(j) < -75 THEN
candycount = candycount + 1
'If won...
IF candycount > 75 THEN
_DELAY 3
END
END IF
candyx(j) = _WIDTH + (RND * _WIDTH) * 2
candyy(j) = 40 + (RND * (_HEIGHT - 100))
END IF
NEXT
'===================================================
'Here's the witch code....
'if pressed space, move witch up& forward
IF INP(&H60) = 57 THEN
witchflyy = witchflyy - 6
witchflyx = witchflyx + 6
spos3 = spos3 - 4 '<-- scroll fog faster too (remove it wanted)
ELSE
' else wich drifts down
witchflyy = witchflyy + 3
witchflyx = witchflyx - 2
END IF
'keep witch in screen bounds
IF witchflyx < 5 THEN witchflyx = 5
IF witchflyx > _WIDTH - 100 THEN witchflyx = _WIDTH - 100
IF witchflyy < 5 THEN witchflyy = 5
IF witchflyy > _HEIGHT - 100 THEN witchflyy = _HEIGHT - 100
_PUTIMAGE (witchflyx, witchflyy), witch&
LOCATE 1, 1: PRINT "Press SPACE to fly...Avoid touching the candies!";
'===========================================================
_PUTIMAGE (spos2, 0)-(spos2 + _WIDTH, _HEIGHT), fog1&
_PUTIMAGE (spos2 + _WIDTH, 0)-(spos2 + (_WIDTH * 2), _HEIGHT), fog2&
spos2 = spos2 - 3: IF spos2 <= -_WIDTH THEN spos2 = 0
_PUTIMAGE (spos3, 0)-(spos3 + _WIDTH + 800, _HEIGHT + 800), fog1&
_PUTIMAGE (spos3 + _WIDTH + 800, 0)-(spos3 + ((_WIDTH + 800) * 2), _HEIGHT + 800), fog2&
spos3 = spos3 - 12: IF spos3 <= -_WIDTH - 800 THEN spos3 = 0
_DISPLAY
_LIMIT 30
LOOP
GOTO restart
SUB ball (BallX, BallY, size, r&, g&, b&, a&)
FOR s = 1 TO size STEP .35
CIRCLE (BallX, BallY), s, _RGBA(r&, g&, b&, a&)
r& = r& - .5: g& = g& - .5: b& = b& - .5
NEXT
END SUB
FUNCTION BASIMAGE2& 'witch.png
v& = _NEWIMAGE(100, 96, 32)
DIM m AS _MEM: m = _MEMIMAGE(v&)
A$ = ""
A$ = A$ + "haIkMV\Bc4447?7mP??NcCRGl5#?XRXX8j11AAa=R8^P;h2^S2^7#Aa3NaK2"
A$ = A$ + "nDhIO7lJomm_CjhT9Cb<IVNjZ<CMh767UTdeoYk^ZZ[^WLiEib98888THFMe"
A$ = A$ + "EEGNiUZc>k<=hehJK^iVJXnkGF0H_Q]OQ5FhoG8GMIWMfA]hR;:jB:aXS>JX"
A$ = A$ + "J#md5Y?Sm0S557]`?mfK_R^`8m``<c<SFC`HOH<#ZKOo5a<?]OVJZYDOla79"
A$ = A$ + "BOFNiUEgOomR^H9Nla7EaMn53_mfKJ=9OnlR^H9#o5<7Q=VWQjfBc4f#C`k3"
A$ = A$ + "6;TjfBc2FAC:Y;[_njR^H1#\7fbW\a6K<eMgMWFGfMgM3dgR`0nbMk]gVIeF"
A$ = A$ + "MliFd?iK^iVRfb4nn0o\Yffd<d7aJ`0k2UPh;8G3:Qnk23\9T3QJ`:[\RF3T"
A$ = A$ + "HKXG?THIZV17L#WZ18G1VeRQjf>gX[^jbij0e]I^BBcYEDY]fJ;C7GADHXQ6"
A$ = A$ + "b9JaLc=WJ_mfCdRj`6K\QCd2=<XmbIRbJ[Kki<dS;bPf>k`QjPGJ]eF5m`38"
A$ = A$ + "o[DWG4MoB6H;X6[UGM;PnN26HCX2MlF<#7lR^f;HP]QUjAnR[aWY^7NomgCM"
A$ = A$ + "m8;W;MSVH\gj[Eb^<a4CDQMiR;^#eIWM:jQSY#Q2:Pg[ISJ2:8VLb9EC?mdZ"
A$ = A$ + ":RgQ1f0>CJ>O?dM\>^Dg6i<GMeE:`lc?_2SA5GK=lE:<]DWC66dVi8WNjYaf"
A$ = A$ + "f74VJS7o\Naf8iD?HniWOdm;\UNhe>OmeGG<?jRN4Idm?`[]PFHZgJo0=YRL"
A$ = A$ + "hcPf=ga6cOkgo<oHl]^lm02YZN#MKXI1KiKkQ7NXX990oaVWDTH\3Wc?oL]="
A$ = A$ + "b<f>^76f]dHMI5mXbJ53_foNPZlo[U]m1AF>7]0K_o0C2XOX>^N6HG4mXXN\"
A$ = A$ + "eFKUYe3>E_c0T;H\W4Yf^#5mdC?Za7OLbe1_8e<RkZQ]X2bKRaO>hSQ>oH<`"
A$ = A$ + ">iBX^>A2SdNm>>iTCD7MdAj?Sbk7;RQKcWD5ioMMi3RJe^<oM\f<V[QGK^>j"
A$ = A$ + "32OKVMfI;oIa5=9ZWS?L4ciTB]FKo6Q`ZCKoWkD1ank_O5_7VcGWJAm6GVmm"
A$ = A$ + "EBA2[N^ZeJbH3NjYW2<?NjhfIP]9]1i^7aQj=g4Q=6R;RK3OW<SYR?cQ7NHb"
A$ = A$ + "]EF3?fB<6RIl4lkH_]Sk9KTadMMLdMdA7dK3S9X6PlN_n17L#Z<_\[fcAoEI"
A$ = A$ + "P168e\me2_Wo3K_mfZ?olCb]3L0X5nmUQ2#MH^dB;A^mPJhB]V<b8S#^]P3#"
A$ = A$ + "UNlmgOGnl7\onkWLk07PZeL7af]fJ[YJ_mf9g6`9XB?<m=diEQ1f1>0b?b3?"
A$ = A$ + "l0YcM8SCm;DOna5glVPLSmlc?[NmeG9g6J;dkm32e2#DggNX?<F?7<fZYV=P"
A$ = A$ + "?j`ghFJY5b]UF1Re2_JBLcI[I>8XA8W27Ola>]NN\5IQj#YZJ8WahMMUJfQk"
A$ = A$ + "JBFX_QG#mfT6k1CKY5Q]W4J61[A3gdT\ni_7b5`;_l2ijPX5o27jW8e7GUX["
A$ = A$ + "A3Rd2i<c=HXh\lAjGDK#><ek;77Y5MgMgRFD7POV^B?j[_n4]84LAm]PaWbj"
A$ = A$ + "W[HLA?Ti:J<B[jSDNFN6O\MN]THlB>fhl>6aG:?_^\3je;91JQllOdn4ga]T"
A$ = A$ + "cc]dS6Jo6V_dI9>3nNg\BDmoEVcf=4Vo_bc75gBmZc59f>gC#?_7oj[_Zj\#"
A$ = A$ + "F`Qh[?1GfO`IA#MLIfoMbIjVPPPPPPPP#S`o0XLK%%h1"
btemp$ = ""
FOR i& = 1 TO LEN(A$) STEP 4: B$ = MID$(A$, i&, 4)
IF INSTR(1, B$, "%") THEN
FOR C% = 1 TO LEN(B$): F$ = MID$(B$, C%, 1)
IF F$ <> "%" THEN C$ = C$ + F$
NEXT: B$ = C$: END IF: FOR j = 1 TO LEN(B$)
IF MID$(B$, j, 1) = "#" THEN
MID$(B$, j) = "@": END IF: NEXT
FOR t% = LEN(B$) TO 1 STEP -1
B& = B& * 64 + ASC(MID$(B$, t%)) - 48
NEXT: X$ = "": FOR t% = 1 TO LEN(B$) - 1
X$ = X$ + CHR$(B& AND 255): B& = B& \ 256
NEXT: btemp$ = btemp$ + X$: NEXT
btemp$ = _INFLATE$(btemp$, m.SIZE)
_MEMPUT m, m.OFFSET, btemp$: _MEMFREE m
BASIMAGE2& = _COPYIMAGE(v&): _FREEIMAGE v&
END FUNCTION
FUNCTION BASIMAGE1& 'candy.png
v& = _NEWIMAGE(75, 75, 32)
DIM m AS _MEM: m = _MEMIMAGE(v&)
A$ = ""
A$ = A$ + "haIkL^ZTR3450UOUE^oBHAR4964[49B\8ARTZh;09B\8AR\gjTZ^CeE6jT>9"
A$ = A$ + "MBo8GaYHNGY?cmEg9c\HQIa2555555UNcbU;=[F]b\NmjZGimSmeD:bf]K=W"
A$ = A$ + ">MbLkf=cmkg[NmbU;V37>Di]HOmU:#l3NjicWV?Onl3_Oo^jSMnlI3^DMVI1"
A$ = A$ + ">Ph8K?Ic[G_<?Nl`LmjeIOL6a<h2G^ZNL6iVkf]KFj[S7?n[l_VPh<ZYag7m"
A$ = A$ + "1RmeoD1eZ8>Qe__^b>6SlbiB<FOMU]c86SjHcQI<jJ>hgl5ekf_OOak:O[]g"
A$ = A$ + "4hJLN\G;S=DOVlXQh:L]MNHYV?fflEndGDVG5nko<E`K7keFXAZ_CMWnD[2?"
A$ = A$ + "SGf\Ic?NZTm5i?M]n^d3TJjT7c\3eME9j;FWMaEfNRh9GNbfGUB=<F_nf;\["
A$ = A$ + "NBP_^BH_TnFOgNfCkjhMQLOOATO#_\VVOGf78aC#OlT0aSaN=?4Hmo]JFbNo"
A$ = A$ + "4752GUkaGL]cNQUI747I7;5:?E2m8a3DgZ^K2]S:5OaenDhXBaGOK6LeG^S]"
A$ = A$ + "VJGUSnRi7RQWbEOik\hS5idlGaXNEMR]3l5fcC\ME>m\24[jkB=;PmMV3gK]"
A$ = A$ + "H6KQW`A<GlO<VZmZVjn:6NBVoElT0^;Uc7SANXh:K?1bIE7KWh2RkC1?9Tji"
A$ = A$ + "RC]WJbE0ekS]CLaD=[U?N2hN>UZW5mHg?Tm8h[W0>?]Dni=I\Za;g_R^h:9f"
A$ = A$ + ":E[K=FaFlcUO?`JgG?9Tb?[9QLodbcO:e2kSWTi]R]CLAXZaKk9V1X?NBVO8"
A$ = A$ + "EW==4W[UDGZ_iMiBo#X_cVFolkin5=4?U3^RH[^FgZ^WXWo#m4`cTOZV3:dU"
A$ = A$ + "NRQ>F:GVabVVVgjKgGajWI#8boBei[Li;Ggce#W_E?V:UW]b5=iY#k8kI5Bi"
A$ = A$ + "Jj]i:iggSALT=YnIHe4DOM\mS=YnISfFLeDiYDoLnJSQ\O^iTW\S]6cl`BaC"
A$ = A$ + "0[SQ\7hflD>fc[9XgDXWg\4m4#_9jAYiMna#??:1fCL9kY#h[ihOkiM]F?ei"
A$ = A$ + "8o=WNV[2]_HmkjLHH63nLhDVm?GW5?d>Sl:L2c\b[lnh7nLZSn=bo[JDgXXX"
A$ = A$ + "XXXXXDNlO<Mg%%h1"
btemp$ = ""
FOR i& = 1 TO LEN(A$) STEP 4: B$ = MID$(A$, i&, 4)
IF INSTR(1, B$, "%") THEN
FOR C% = 1 TO LEN(B$): F$ = MID$(B$, C%, 1)
IF F$ <> "%" THEN C$ = C$ + F$
NEXT: B$ = C$: END IF: FOR j = 1 TO LEN(B$)
IF MID$(B$, j, 1) = "#" THEN
MID$(B$, j) = "@": END IF: NEXT
FOR t% = LEN(B$) TO 1 STEP -1
B& = B& * 64 + ASC(MID$(B$, t%)) - 48
NEXT: X$ = "": FOR t% = 1 TO LEN(B$) - 1
X$ = X$ + CHR$(B& AND 255): B& = B& \ 256
NEXT: btemp$ = btemp$ + X$: NEXT
btemp$ = _INFLATE$(btemp$, m.SIZE)
_MEMPUT m, m.OFFSET, btemp$: _MEMFREE m
BASIMAGE1& = _COPYIMAGE(v&): _FREEIMAGE v&
END FUNCTION
SUB RotoZoom3 (X AS LONG, Y AS LONG, Image AS LONG, xScale AS SINGLE, yScale AS SINGLE, radianRotation AS SINGLE)
' This assumes you have set your drawing location with _DEST or default to screen.
' X, Y - is where you want to put the middle of the image
' Image - is the handle assigned with _LOADIMAGE
' xScale, yScale - are shrinkage < 1 or magnification > 1 on the given axis, 1 just uses image size.
' These are multipliers so .5 will create image .5 size on given axis and 2 for twice image size.
' radianRotation is the Angle in Radian units to rotate the image
' note: Radian units for rotation because it matches angle units of other Basic Trig functions
' and saves a little time converting from degree.
' Use the _D2R() function if you prefer to work in degree units for angles.
DIM px(3) AS SINGLE: DIM py(3) AS SINGLE ' simple arrays for x, y to hold the 4 corners of image
DIM W&, H&, sinr!, cosr!, i&, x2&, y2& ' variables for image manipulation
W& = _WIDTH(Image&): H& = _HEIGHT(Image&)
px(0) = -W& / 2: py(0) = -H& / 2 'left top corner
px(1) = -W& / 2: py(1) = H& / 2 ' left bottom corner
px(2) = W& / 2: py(2) = H& / 2 ' right bottom
px(3) = W& / 2: py(3) = -H& / 2 ' right top
sinr! = SIN(-radianRotation): cosr! = COS(-radianRotation) ' rotation helpers
FOR i& = 0 TO 3 ' calc new point locations with rotation and zoom
x2& = xScale * (px(i&) * cosr! + sinr! * py(i&)) + X: y2& = yScale * (py(i&) * cosr! - px(i&) * sinr!) + Y
px(i&) = x2&: py(i&) = y2&
NEXT
_MAPTRIANGLE _SEAMLESS(0, 0)-(0, H& - 1)-(W& - 1, H& - 1), Image TO(px(0), py(0))-(px(1), py(1))-(px(2), py(2))
_MAPTRIANGLE _SEAMLESS(0, 0)-(W& - 1, 0)-(W& - 1, H& - 1), Image TO(px(0), py(0))-(px(3), py(3))-(px(2), py(2))
END SUB
FUNCTION collision% (b1x, b1y, b1w, b1h, b2x, b2y, b2w, b2h)
' x, y represent the box left most x and top most y
' w, h represent the box width and height which is the usual way sprites / tiles / images are described
' such that boxbottom = by + bh
' and boxright = bx + bw
'so the specific gosub above is generalized to a function procedure here!
IF (b1y + b1h < b2y) OR (b1y > b2y + b2h) OR (b1x > b2x + b2w) OR (b1x + b1w < b2x) THEN
collision% = 0
ELSE
collision% = -1 ' Collsion is true
END IF
END FUNCTION
RE: Scrolling fog/cloud image for moving background - bplus - 05-23-2022
Pretty nice! I have just the thing to remove the white outline of witch I think? Been awhile since I used it.
|