Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Scrolling fog/cloud image for moving background
#1
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

Find my programs here in Dav's QB64 Corner
Reply
#2
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.
b = b + ...
Reply
#3
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

Find my programs here in Dav's QB64 Corner
Reply
#4
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
Reply
#5
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
b = b + ...
Reply
#6
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

Find my programs here in Dav's QB64 Corner
Reply
#7
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 Smile wow, but you are changing size.
b = b + ...
Reply
#8
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

Find my programs here in Dav's QB64 Corner
Reply
#9
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

Find my programs here in Dav's QB64 Corner
Reply
#10
Pretty nice! I have just the thing to remove the white outline of witch I think? Been awhile since I used it.
b = b + ...
Reply




Users browsing this thread: 7 Guest(s)