Author Topic: Have image protection, want sound protection!  (Read 3920 times)

0 Members and 1 Guest are viewing this topic.

Offline johannhowitzer

  • Forum Regular
  • Posts: 118
    • View Profile
Have image protection, want sound protection!
« on: June 05, 2021, 11:11:38 pm »
I'm looking to run sounds through the same process I already have for images, to pack them into the EXE itself, so my game's assets aren't sitting out in the folder, asking to be tampered with.

Spriggsy passed me Dav's BASIMAGE program, which compresses images and exports them as a function that can be $included in a program.  It's been on the backburner for a while, since it adds an extra step in my development process every time I change an image, but now I'm winding down to first alpha demo.  So I poked through Dav's code, figured out how most of it worked, and cleaned it up a little bit:

Code: QB64: [Select]
  1. defint A-Z
  2.  
  3. const true = -1
  4. const false = 0
  5.  
  6. q = chr$(34)
  7.  
  8. screen _newimage(800, 600, 32)
  9. cls , _rgba32(255, 255, 255, 255)
  10. color _rgba32(0, 0, 0, 255), _rgba32(255, 255, 255, 255)
  11.  
  12. input "Input image file: ", in$
  13. input "Output code file: ", out$
  14.  
  15. ' Load input image memory reference into m
  16. m = _memimage(0)
  17.  
  18. ' Load image data into indata$ and compress
  19. indata$ = space$(m.size)
  20. _memget m, m.offset, indata$
  21. indata$ = _deflate$(indata$)
  22.  
  23. wid = _width
  24. hih = _height
  25.  
  26. ' Make function name from bare filename
  27.  
  28. ' Remove extension
  29. f$ = left$(out$, len(in$) - 4)
  30.  
  31. ' Remove directory structure
  32. do while instr(f$, "\") <> false
  33.    f$ = mid$(f$, instr(f$, "\") + 1)
  34.  
  35. ' Remove punctuation
  36. for i = 32 to 96
  37.    if i => 48 and i <= 57 then _continue ' Ignore numbers
  38.    if i => 65 and i <= 90 then _continue ' Ignore letters
  39.  
  40.    p = instr(f$, chr$(i))
  41.    do while p <> false
  42.       f$ = left$(f$, p - 1) + mid$(f$, p + 1)
  43.    loop
  44.  
  45. print #2, "function __" + f$ + "&"
  46. print #2, ""
  47. print #2, "handle& = _newimage("; wid; ", "; hih; ", 32)"
  48. print #2, "dim m as _mem: m = _memimage(handle&)"
  49. print #2, "a$ = "; q; q
  50. print #2, "a$ = a$ + "; q;
  51. bc& = 1
  52.  
  53.    a$ = mid$(indata$, bc&, 3)
  54.    bc& = bc& + 3
  55.    ll& = ll& + 4
  56.  
  57.    if ll& = 60 then
  58.       ll& = 0
  59.       print #2, e$(a$); q
  60.       print #2, "a$ = a$ + "; q;
  61.    else
  62.       print #2, e$(a$);
  63.    end if
  64.  
  65.    if len(indata$) - bc& < 3 then
  66.       a$ = mid$(indata$, len(indata$) - bc&, 1)
  67.       b$ = e$(a$)
  68.  
  69.       select case len(b$)
  70.          case 0: a$ = q
  71.          case 1: a$ = "%%%" + b$ + q
  72.          case 2: a$ = "%%"  + b$ + q
  73.          case 3: a$ = "%"   + b$ + q
  74.       end select
  75.  
  76.       print #2, a$;
  77.       exit do
  78.    end if
  79.  
  80. print #2, ""
  81. print #2, "final$ = "; q; q
  82. print #2, "for i& = 1 to len(a$) step 4"
  83. print #2, "   b$ = mid$(a$, i&, 4)"
  84. print #2, ""
  85. print #2, "   if instr(1, b$, "; q; "%"; q; ") then"
  86. print #2, "      for n = 1 to len(b$)"
  87. print #2, "         f$ = mid$(b$, n, 1)"
  88. print #2, "         if f$ <> "; q; "%"; q; " then c$ = c$ + f$"
  89. print #2, "      next n"
  90. print #2, "      b$ = c$"
  91. print #2, "   end if"
  92. print #2, ""
  93. print #2, "   for n = 1 to len(b$)"
  94. print #2, "      if mid$(b$, n, 1) = "; q; "#"; q; " then mid$(b$, n) = "; q; "@"; q
  95. print #2, "   next n"
  96. print #2, ""
  97. print #2, "   for n = len(b$) to 1 step -1"
  98. print #2, "      big& = (big& * 64) + asc(mid$(b$, n)) - 48"
  99. print #2, "   next n"
  100. print #2, ""
  101. print #2, "   x$ = "; q; q
  102. print #2, "   for n = 1 to len(b$) - 1"
  103. print #2, "      x$ = x$ + chr$(big& and 255)"
  104. print #2, "      big& = big& \ 256"
  105. print #2, "   next n"
  106. print #2, ""
  107. print #2, "   final$ = final$ + x$"
  108. print #2, "next i&"
  109. print #2, ""
  110. print #2, "final$ = _inflate$(final$)"
  111. print #2, "_memput m, m.offset, final$"
  112. print #2, "_memfree m"
  113. print #2, "__" + f$ + "& = _copyimage(handle&)"
  114. print #2, "_freeimage handle&"
  115. print #2, ""
  116. print #2, "end function"
  117.  
  118.  
  119. function e$(b$)
  120.  
  121. for n = len(b$) to 1 step -1
  122.    b& = (b& * 256) + asc(mid$(b$, n))
  123.  
  124. a$ = ""
  125.  
  126. for n = 1 to len(b$) + 1
  127.    g$ = chr$(48 + (b& and 63))
  128.    b& = b& \ 64
  129.    if g$ = "@" then g$ = "#"
  130.    a$ = a$ + g$
  131.  
  132. e$ = a$
  133.  
  134.  

It now asks for the input and output files at runtime, and the output filename you provide becomes the function name, sans the file extension.  This produces a text file, bas file, whatever, and you throw some code in your program assigning an image handle to the function, rather than using loadimage.

I know not quite enough about how this process works to do it with sound files.  I can see in the resulting text file that it's a giant string of binary data, using QB64's inflate/deflate compression, and it's taking four characters at a time and doing... something with them.  I also see the string ended with a number of % characters depending on how close the string length was to a multiple of four.

But that's where my understanding ends.  Has someone solved this for sound files, or can someone at least offer me a step in the right direction?  No idea where to go from here.  I've looked around through these forums and turned up nothing conclusive so far, though I did find a few threads of people discussing the possibility.

Offline Cobalt

  • QB64 Developer
  • Forum Resident
  • Posts: 878
  • At 60 I become highly radioactive!
    • View Profile
Re: Have image protection, want sound protection!
« Reply #1 on: June 06, 2021, 12:06:08 am »
My MFI file system might be a tad bit easier, it blocks all a programs assets; Graphics, Sounds, Music, Data- into one file.  Now there is no compression or encryption to it as-is, some could be easily added if your super concerned. but if somebody really wanted to mess with a games assets they will find a way.

You can take a look at it here:
https://www.qb64.org/forum/index.php?topic=2346.msg115719#msg115719

see if it might be simpler.
Granted after becoming radioactive I only have a half-life!

Offline NOVARSEG

  • Forum Resident
  • Posts: 509
    • View Profile
Re: Have image protection, want sound protection!
« Reply #2 on: June 06, 2021, 02:29:04 am »

Offline johannhowitzer

  • Forum Regular
  • Posts: 118
    • View Profile
Re: Have image protection, want sound protection!
« Reply #3 on: June 06, 2021, 06:28:19 am »
Quote
My MFI file system might be a tad bit easier, it blocks all a programs assets; Graphics, Sounds, Music, Data- into one file.

That does look promising, I'll mess around with it and see if it works for my purposes.

Offline Dav

  • Forum Resident
  • Posts: 792
    • View Profile
Re: Have image protection, want sound protection!
« Reply #4 on: June 06, 2021, 09:30:38 am »
I think something like Cobalts MFI system is definitely the way to go when using a lot of resource files.  (thanks for the old link @Cobalt - I somehow missed that when you posted it back then).

The BasImage thing is just helpful for adding a small image or two, and it's only advantage is not having to dump the image to disk to load. 

As for sounds, the same method can be used on small Wav's, and if your running under Windows and want to play sounds using Windows API, you can do so without having to dump the wavs to disk to play.  I was putting together a collection of small SFX sounds last year doing that, but lost interest.  Here's that idea if you're interested...

- Dav

Code: QB64: [Select]
  1. '============
  2. 'SFXCODES.BAS  v1.0
  3. '============
  4. 'Collection of various sound effects (in BAS code) to use in programs.
  5. 'These are wave sounds converted to strings so you will not have to
  6. 'us external files for playback.  Add the BAS code into your programs.
  7. 'These use a Win API for playback - so it's for WINDOWS only.
  8.  
  9. 'Collected by Dav, AUG/2020
  10.  
  11.     FUNCTION PlaySoundA& (lpszName AS STRING, BYVAL hModule AS LONG, BYVAL dwFlags AS LONG)
  12.  
  13. CONST SND_APPLICATION = 128 '  look for application specific association
  14. CONST SND_ALIAS = 65536 '  name is a WIN.INI [sounds] entry
  15. CONST SND_ALIAS_ID = 1114112 '  name is a WIN.INI [sounds] entry identifier
  16. CONST SND_ASYNC = 1 '  play asynchronously
  17. CONST SND_FILENAME = 131072 '  name is a file name
  18. CONST SND_LOOP = 8 '  loop the sound until next PlaySound
  19. CONST SND_MEMORY = 4 '  lpszSoundName points to a memory file
  20. CONST SND_NODEFAULT = 2 '  silence not default, if sound not found
  21. CONST SND_NOSTOP = 16 '  don't stop any currently playing sound
  22. CONST SND_NOWAIT = 8192 '  don't wait if the driver is busy
  23. CONST SND_PURGE = 64 '  purge non-static events for task
  24. CONST SND_RESOURCE = 262148 '  name is a resource name or atom
  25. CONST SND_SYNC = 0 '  play synchronously (default)
  26.  
  27. 'Demo of all the sounds in this SFX collection....
  28.  
  29. PRINT "SOUND MENU: Press number of sound to demo ... "
  30. PRINT "1) Coyote howling                   2) Alarm sound"
  31. PRINT "3) Anvil sound                      4) Bell hit"
  32.  
  33.     k$ = INKEY$
  34.     SELECT CASE k$
  35.         CASE "1": wav$ = SFX_HOWL$
  36.         CASE "2": wav$ = SFX_ALARM$
  37.         CASE "3": wav$ = SFX_ANVIL$
  38.         CASE "4": wav$ = SFX_BELLHIT$
  39.     END SELECT
  40.  
  41.     'playback wav$
  42.     IF VAL(k$) >= 1 AND VAL(k$) <= 4 THEN
  43.         x& = PlaySoundA(wav$, 0, SND_MEMORY OR SND_ASYNC)
  44.     END IF
  45.  
  46. LOOP UNTIL k$ = CHR$(27)
  47.  
  48. x& = PlaySoundA(CHR$(0), 0, SND_MEMORY) '<<<--- make sure stop sounds
  49.  
  50. FUNCTION SFX_BELLHIT$ () 'Bell hit
  51.     A$ = ""
  52.     A$ = A$ + "haIQFm7JKLO5GkO6Qn7II`8DjO84URY\E<VA84:3a]#VAc442SACH<7g2JJg"
  53.     A$ = A$ + "DE^LAidYCW>mlk>Mjd9I5U[ZJ2ESgaAaH<QP#D<V#YLL<:SbHH4UA8do#H6U"
  54.     A$ = A$ + "BI<2VBa421aNWLCgjnigPU]NOO_?_?OnlNgAFmW_lblO_8An5oddo\LgD:f5"
  55.     A$ = A$ + "R49bgQnggo75In?OW8W;BfOYd_lJD>VoO>668GTc>`\_iLB#Toi3k\_eiKMI"
  56.     A$ = A$ + "lH;l]^SiKEIThCoGZUkK^JAQHd7c3j7niCW4n;TZaOL\`4>OD^cHe9NnWE<1"
  57.     A$ = A$ + "fa8e1FLNKRcb#9oRK2;nlC?SLA5HRLaX\CWmL_cT5:h?ki86V?eQ51Fgah2c"
  58.     A$ = A$ + ";mHiYcNjacKkT8_JbhSVMb4gIOjYcNJ03<KL06iba7MRghDGfo9?=hL9WNhY"
  59.     A$ = A$ + "WP<bPoT0^G9<1>f<Po\W5PDg>IB4fGIQ;8U:ddNlaLPk\Wo\ClJknTWM\7Od"
  60.     A$ = A$ + "YhnDS^Hd]IRmBYQY?gk4gY?kdCo:l#oWO\7ciG#8j;oblo0Fo_d3CjOdcnZ9"
  61.     A$ = A$ + ">oIOgWmENYROdkQ>ahG=gR29h82mlPSOd\YWNB`4LIo3AV;12kmXo6nbYmM]"
  62.     A$ = A$ + "mR5emn>1?:P7lo:T9^kYS>V1RWIMg11AR>kYTVHM?mH<MZ8AObWML<fCgkX_"
  63.     A$ = A$ + "0AhAOA#O66`g6GGQIAo3>ViR97i6#f`Yo]IOnaN9mOTWC<6fThB_d?<2i0NH"
  64.     A$ = A$ + "jASnl?cK\\kA?YK#<HdmAlJaNY;3hBl[6eg7iPY^oQ?oaXgXI3?>eB;6O0bU"
  65.     A$ = A$ + "jL0<caIY;3?imAKefMWnY1HDhnk?Q;R`R\lihR#NCPgZ`Ac8A_lZ[AO;Blhc"
  66.     A$ = A$ + "`SWHO=H0=5S55VM2gKLm4`<?<ClYVTiYUfObWlU1_^PoW54kERWO?WHi?O\h"
  67.     A$ = A$ + "7nL<2[kSg73h4VJ?V;64OZ=N^XG:>lY87;kS>9PK1`=`Kh98<k?=i2;5?ZPH"
  68.     A$ = A$ + "\D\GTeg<PQMjACL2#Io_l;6W#>nDd9R04==oe^PHD`M\gE0g774V`XO_33c;"
  69.     A$ = A$ + "a2?4SmJ_9l4K?6FgYMAW[TNdACO<69jDJ^`]n55j`]LB6FJ?>1kA3\WP_NL0"
  70.     A$ = A$ + "iiF:50F1L[^<[o9>aRb>hXClF:iXSnd?K<CDhc7c8M30>`l6bRb7]?b]PPo4"
  71.     A$ = A$ + "ZCA5N?_M`UFdUPSLGQm\INehbnTTHYif37VJAFgmaH4EoTaf:5TLoT0^GneB"
  72.     A$ = A$ + "?jSLBU6N`OLRGRhPoHTi2oPhPIa<o4fYkL<b2khjQY^dEBgm1h5^8Ld3kKEP"
  73.     A$ = A$ + "5LMhCLUT^oe0\0dK_7j`LnhPQH2R[K?j3?0;LHO4_Ble;:cOMV[VDn`aL_:["
  74.     A$ = A$ + "o4_RI^N>`aFJ=JVN\37KF10CLQG9m0?L]T`8oo##o\igk3aH`22m<5ic;?`o"
  75.     A$ = A$ + "S#V;[n1?4INcT2mgeQ?9hoWlh^bKVF#]#R;Wdm_lAh6bknn?HX8cUB2Mh^`i"
  76.     A$ = A$ + "I?<`cf0jNo7HVJYh`7ha5?]lf?`SW9mP7HWjeNeEPMfaV?WkC>a;ab2fVRY^"
  77.     A$ = A$ + "d2G>Wk#^UHmoR?fA\P\Y]DZghB276HWJ5QiUBgkA<Q]kX?HOBd7na><Og55\"
  78.     A$ = A$ + "5G;Eb=0O:_d3Nd4jA_TiT1a4T_CCVEFE]?bUh:[07jUjZ2^O#0=]b1MaDWkl"
  79.     A$ = A$ + "\kiQ54:fm`aHZ[bfmmMHF8YLGgQR4JO\7oEF<]V2GZ4[#HS[#g?^?oZ[]A10"
  80.     A$ = A$ + "IFPMdOLGDXXEOC^4oT[9hjUmZYQm>HO<[#omLhNmXa1KDE<?LHPCV[a23aD;"
  81.     A$ = A$ + "_N>Q^3ae46MDP3GbL:5bT:ALFg3\cVCK`nNh6g##]=Vh7c>hmjkH[0K_Ch>d"
  82.     A$ = A$ + "jMYTc3]M7?DDXknkk`mSG>O1^L5h8ah9NS\5]<iGK3nRMY18[kQkgg\`=:DP"
  83.     A$ = A$ + "KEVg8>\_S4d[of_WS4_PFKC>Vh268P5;fmn35CMeT26:25Ue6L8ALen39[lj"
  84.     A$ = A$ + "[^FVLiF==lQ?LX1JJKSIc\6;#NhZ2Fm6hXTG2#aeHFFXWSMW>f3^?m0OjlP9"
  85.     A$ = A$ + "ORUg8GA;7<?L`7jQLYc9GTNe1;LoM9C1JgaP?3KnR:5BUDnnSmjIS#GKnEHF"
  86.     A$ = A$ + "APnej2#W]m\;8gKW>l9XE5#AFBZmX3\i8\9>\FVlPSSh62^7\[]Hf\2RIcLm"
  87.     A$ = A$ + "eTYG[:9gN`#7TKM1;CaER_><\O7DcbMGK^[UTF\:V[PJGgM`\i1GbmCT^P\T"
  88.     A$ = A$ + "#fL`X0JhGT`V?mJ\b47BW[[g>M#9I`DQKi[;<`cFA]m0gnh6ci#VUC;Kgf2E"
  89.     A$ = A$ + "K_g1d`Jm2:blLTk_S7B`]MOjU6I5DD4if#fmmg]=2]]alIB]AAC3aKT76>\3"
  90.     A$ = A$ + "Z2M7BJnj\Z6Jb:#GG?W2KT;DOLl5e<=DT0JAPNXCDZ0g6d=3fa1E\jgWNGA1"
  91.     A$ = A$ + "AE#Lmeb1mLJg^SSCKT?C6jIGalBFMkeeDEeZG?bXf8OAj8K]c^3=ETDeT5bW"
  92.     A$ = A$ + "_P4YY2B]gQh00ZB2if8M>X_S9Jid[=:;:83J58a0FfFFM6\]3VU6VBRR5U9:"
  93.     A$ = A$ + "kPBJM7dVh#Nn2B5;4ZiQVJPQZ8O^L2P5:91M6<P0g`d#VKEJLJJJIIk<`15c"
  94.     A$ = A$ + "E4<UbVCDFcdT<U]mjSib:89FP?_Dk]7JSJ6MjJZ8D#DAETNd\ofmkf^=INBI"
  95.     A$ = A$ + "c`:gfXXP\U3aE0Jg[S2G6jQK#C1ji^]]DQRJX21DAXSYBAHkMgaFABV`>7g="
  96.     A$ = A$ + "Dk5ZFkN>d=B:01g=4P^>f6Fm27F[cF4dTT2eGOC5EKRZlI5::6JN]WKNZVF:"
  97.     A$ = A$ + "lIiYM439Ae`]<BceAIn=HUKdZ^NSkn>_cF8mV:XQBF>1XAMM:fknkNK<?]88"
  98.     A$ = A$ + ";F#D[eklf=AXemf2E8HET4ne_5dKkN=[gL[6Xh_iGoFb=JXFD]YcmJF_NcV="
  99.     A$ = A$ + "`Ko[bNC5#CCO[n_kPV:gQh]b]_i]UedeA]jmNgOKCDAEnfi;L[B#[^][[Kg]"
  100.     A$ = A$ + "=ZDBECCYTP#9XCg>dfAgVh]o=i_]ZJU:#3Kb;[Gg^S=FlVRU:MWBJe]Ok1m\"
  101.     A$ = A$ + "`:JPFYRBUe0M4d]_kmfbZ>ZE^h=O[KF2Xm0k]^K;;M]bbE1=iKMk:jVVDXkN"
  102.     A$ = A$ + "gFjU_e]T:G^LE`J[]JIZGgf^^6mlZT\RRRF[g^omJJF7[Z8Gj>bJe9R[gZM;"
  103.     A$ = A$ + ";CcjjJbR_e]DXU3cV]9P`:b:J#5iBD;<Y4JM?7KDYLiBBU:[2=^kMKZ[KJgD"
  104.     A$ = A$ + "_ZRRJEEUBUQVMk^UMc66XbM4UZRH]Jj=KeZY9ilf64]^S:0XNS]^gM]a:EZ1"
  105.     A$ = A$ + "E;;GYV^Q>ZK^emJg0[EE]BYR5;3]jHC[XfF6XJ5E0E;EBeXIC;[FKA?RC;<E"
  106.     A$ = A$ + "ZECE]FmF]KJ#heTL[BU[XYYE3JB6E3TJ]Jib:JjeYGXJHgYUU1M`Zbgn>Q65"
  107.     A$ = A$ + "9`F]<A]Ze#DCAY:4N[9=:JPUU3eRZV^E[F=<d[g`D_61<A\:J6FQ6ES66eZD"
  108.     A$ = A$ + "VL0S`1SICb=Y31>96=0=<W;IBk0ZYZBS?MLN#K:VFe:::EddKHIe8T6j0M2S"
  109.     A$ = A$ + "BRYQE3;BS4#:EZ2KRQEe`\>a<2LR0E[Z1KJdXY=]7PK^9E5mMT0GgP:Ub9dn"
  110.     A$ = A$ + "8G1[CD\1aKLC0fLC8<?dX>5e:L3B]BeJQe=7LMMS#E#:\:iMXYEC;C:`VeZF"
  111.     A$ = A$ + "]J]=3I^NMJcX>5K>5XH6Q0A;##8:PfIHA^GH731ZF]`TXR<23?W305K>]V75"
  112.     A$ = A$ + "WcLBNHHg=d3oT0B;D=Dk8ZCOU8nVck0a1m#>4bZi`7Z5SchM8fdoAl#W>L0>"
  113.     A$ = A$ + "O:4f:ZHRCQ\n5j[FX?_iL=7:U`:Wk`QTH>5XP45Z5f?m#3W0W0i<7LNBcmP`"
  114.     A$ = A$ + "b>38SiNCh7K6NP_f523??Yc0Go[?Q0=WEhI4j[[JN;N152S1cKggD4n=9n2X"
  115.     A$ = A$ + "n7OoOnl?`j[;ko#>o7:Lco]4glo=jog0j\P_h?ok\QHW%%%0"
  116.     btemp$ = ""
  117.     FOR i& = 1 TO LEN(A$) STEP 4: B$ = MID$(A$, i&, 4)
  118.         IF INSTR(1, B$, "%") THEN
  119.             FOR C% = 1 TO LEN(B$): F$ = MID$(B$, C%, 1)
  120.                 IF F$ <> "%" THEN C$ = C$ + F$
  121.             NEXT: B$ = C$: END IF: FOR j = 1 TO LEN(B$)
  122.             IF MID$(B$, j, 1) = "#" THEN
  123.         MID$(B$, j) = "@": END IF: NEXT
  124.         FOR t% = LEN(B$) TO 1 STEP -1
  125.             B& = B& * 64 + ASC(MID$(B$, t%)) - 48
  126.             NEXT: X$ = "": FOR t% = 1 TO LEN(B$) - 1
  127.             X$ = X$ + CHR$(B& AND 255): B& = B& \ 256
  128.     NEXT: btemp$ = btemp$ + X$: NEXT
  129.     SFX_BELLHIT$ = _INFLATE$(btemp$): btemp$ = ""
  130.  
  131.  
  132.  
  133. FUNCTION SFX_ANVIL$ () 'ANVIL sound
  134.     A$ = ""
  135.     A$ = A$ + "haIKHM0MLDTV^IG>fmP3H=kNT<;?PUP=6`6Sa0f63>:WTU\T]Ed:=BC#Jbm<"
  136.     A$ = A$ + "m<MZZ>?iL#YAJTTU\BfF6WTULfRPCH26<\6KhP33;k];lF>fk1KZ_JT<Ym]e"
  137.     A$ = A$ + "<EeoMeoQ_o_oZWiEEA[NU[\cO96F9;Ic[#[97gc_033kJ#OVf\`V\O=HoL\j"
  138.     A$ = A$ + "[eA]T8M008j;ZUKLZ>PQ5e00dgL]LR`_CUY^b1QLXfDSl222llXa9U#=a[f4"
  139.     A$ = A$ + "4TUHU4hX5TaC>K\oT:6_J^fOG5k;Gc>`beneHc0=^\K2kT7FMJG1m\YSj?0Z"
  140.     A$ = A$ + "SY^3EdCJ>>Vfkne^nW7KkWK]ESYn2HWDml]?=em];\cYNYiSmIZO8f5DE;Dm"
  141.     A$ = A$ + "Od5VPj4;4k:_bY`bXNJ<\n7_I\kjBj`lXmM`Zflkg2FNcF=`:Wcn^d_bn][N"
  142.     A$ = A$ + "F\O[j]NK?TjG_8\_D]`[MfZo]2a^lGDg3]PcX1CEMhKHSZ_2>fgLao#I=Z>F"
  143.     A$ = A$ + "WH7lXZUMRmZ>m#ADg[[lkG]nWcSjUN^I?\j6W_j_maa>]:e=Q[nAgneU#Uh9"
  144.     A$ = A$ + ";Cmb?joI;Z[CgogaGjLYE38\n;N0bR[o[>dIGdfji5]NhGk;WUM_oNjifkkZ"
  145.     A$ = A$ + "n_G1UZYiio_meo\E6de\UEocGoBEDYFYeOgkMW?[7EV:[k]7MYPoB:^:gkn]"
  146.     A$ = A$ + "KFcW^[AF6G?mC\^MNj3^XULdPcXmcoJgc\ko:nVNcOaYoEga1olhoDUo[GKJ"
  147.     A$ = A$ + "3LUHGWSmO\KkgTn=klnHJn8;8o4C<jBi>nV`KJd3I#ccN8BaUdbYhgh]l:]f"
  148.     A$ = A$ + "cMeaK=gOa5V8ceeb7?dMN=GllI`lnjko6^QSnn]SM`m?[I=fi6lnQIfgZ:\k"
  149.     A$ = A$ + "SgkB\Be_Y]XdeVfLaK_E[E5j]XGll7oe\_47o_lclF?iWY]f_AIJoTcnWeLS"
  150.     A$ = A$ + "[k_jkQoYWk?Bn[Gg7k[XknUENbe?11nSLT]6ki:83KRWO`8kYdU3BM>?fo`j"
  151.     A$ = A$ + "WONknSGkJ;o;a_SIL8eUo8iYBN_gfoH;ga6njhcNVWj_Dg<FmkkImck`WelC"
  152.     A$ = A$ + "DlHN;IPSJOc[OWa2DKTARIhIm?hnZ[XF7DiVge7DlmbLl\Hi?VjV_97_mna:"
  153.     A$ = A$ + "jPZKhV<l6GGYmogGnMGf9jmndejEFaRZL\]V7do5;\VAjgYC]W`<a35NG3Dg"
  154.     A$ = A$ + "\k>MRONC7jm[lo`o^^f:NaoJ9H^?g8o\eOlo`Ja<Mb1^iR>hk]:7_LOc]QA?"
  155.     A$ = A$ + "CE?8H\AfPU^g[e5JYiSHDKSA;L3F>OKeo41?QcU_V_h`f_FUgZe7oYo\G1Si"
  156.     A$ = A$ + "2YVe\omk[F\8WN[?hJ^l1Z6[ic>d2gDOF_nF6HlEDEcIXNHjh_X]:K:aP5eX"
  157.     A$ = A$ + "UoKmc=lY5FcVohSEn=CnNQNb5OiS_N<`7UlQ_d;]T[;`O:iL;hb7JYgRo?9n"
  158.     A$ = A$ + "RGkAgAnc`e[GmBj\5ZeHJ\QR]2bPk`JYY>`ANZ2]oFDeMdCo8cDgW;<_R?ei"
  159.     A$ = A$ + "_oIJGUmIFgUOY7hN4YVkBOSAOXkSjK8Gfl?Lg5>?j;5Ckbj\=8n1gJ\Uj`o`"
  160.     A$ = A$ + "hK9h;dkc^<QCkii]NTaVo\nd4cAk[NR7kNbnEa^]Z>ghgm]Vm?joj;I\aO`F"
  161.     A$ = A$ + "^Bjk[R]N`e^^#_J_[^NbAKdQa]WeJIK;BT2R\mX5mTS\WnN<YAgm2Vi^_#Gg"
  162.     A$ = A$ + "RSSNogaNo`hHj>dQ_mkMWo?1_fJ7o4cI13l9YNPN>LaU4oT9FCULmkf:EWIJ"
  163.     A$ = A$ + "ZLMmgWB313_Q=n2_YWEIk\]^hi<j7AMGKn=KoQ^[3liFGg7daC?mGnC0gBA_"
  164.     A$ = A$ + "iFGoS=n[c?S2gOBc;NXH;XR#]4J;amgM]ejNKSKb=n9`;[P3LV5Gm[:]XiLd"
  165.     A$ = A$ + "?#kdg`kWhYNPcmYF_aboPnNfilQFnUUM^^FmRgm4FN`]\W^JXR\S`FXnN7T`"
  166.     A$ = A$ + "GfhhEiKGSH_2UNm^H3kmL=lHh7][INX?_VKGoK_[k?o3lEKJJUOQQWiJ7j3G"
  167.     A$ = A$ + "md;md;JCIOe=\`ZNa\JeUn0jZEcNk9X9b>hLUJK3GCARm4hi8foKDiSkn<m<"
  168.     A$ = A$ + "o]lROL9gYi1N\eNXgM]gXf;deC\ZaNa2^CWW[gEDi^6[:h9j_VjK?[]e#fi8"
  169.     A$ = A$ + "feJ:V?MjT>DcjbK?N:c`K\7MgSWCVmI;n<7]To=VcfmS\RS=j?Ai<3lXKNlm"
  170.     A$ = A$ + "]Qk<fY6HQe=l`U=g`SeoJKX[V:V[_MIcPa<9Y\WHRfdWO;78M94C\Y7fcIKK"
  171.     A$ = A$ + "QUNh3Tg];Oa<cKS7m#;on3o9YGhagENc9a5Sll5_m>;HaNNi#UEHjh^:GL4V"
  172.     A$ = A$ + "=a4YGGfS\Sfc_4Q9h:]QmfkbV?gk8_aS\mUnX1oMNO^2NU1FfSfjE4OZeM\<"
  173.     A$ = A$ + "[haKSKQ[OTVgBN]>Ad=GJk];Y;dPMk\LRFfZ5Un3FDa9>T_=Jm5bF`cgiiC\"
  174.     A$ = A$ + "HMS_SU_Pg?h3Gmn7lINZ]n>LggFfa0;:_\WWONefgf[=i4nf#=1#_Ej^?oF:"
  175.     A$ = A$ + "aLVDBEj?IXRjN\X[QMKm]ZRkk=l??cS<h2c[ogUjgDgNNZE=`5M<C=S?lJfl"
  176.     A$ = A$ + "P_1m2ZO73XACjA1K8A72VhB5\aZ9cf5SNH7bEZKK74\1SAfh6fi;Al4J>#Zl"
  177.     A$ = A$ + "FfN>]U7Xf9bTo:>h9MZo8MGBnkL_^VSn1kDOY]f6k:<6]71cBadI3>LFJ3<m"
  178.     A$ = A$ + "0=XOTALWW]M6JcU^_3?K[7;K1Kl`Wff<MLZQ:\TAOiVN4[7Y_=Gn^KJQFfAG"
  179.     A$ = A$ + "JK8BGhUK_kND`IS:kdH`^]D3K:ibLVM7JF9n>BEPnQ?Ne?]]9jL=KoU:ka=n"
  180.     A$ = A$ + ":IFC9mNP=mT6>N;UFN73Ekj\O0ce7[EKek\odRJYmXhdLXfBGOMP\NXff#eU"
  181.     A$ = A$ + "?mhYZXaGHoel<d_DV2ZHWk]RWP^S2:MPQZNQB7;KYJjL[6:dk^K_Nm1BiP_]"
  182.     A$ = A$ + "<f<H9PT;7NkaKCE4X[`6L?L6m[Hg]E\f1ffFN2iabTGEm>D5?EPSeeZKXkQF"
  183.     A$ = A$ + "Md3gAa6J^7]U7LTdEeXLcf=beI:k6B4B`ET>3Z_f8K;Jm^kZmZFWWASGLmMG"
  184.     A$ = A$ + "fbl>AbeGM_K[RE5lUSF#UmfI=54nPn:ZeTj;?`#NZYj#QQ=iYeX>d#7Z5:GL"
  185.     A$ = A$ + "REG_gQh[g#7A[Z8OSk]dJ68Cm[?a4Q[NkIKX`F?NP2ZIK]YOc]^G_5[]SFa["
  186.     A$ = A$ + "?E`JJ<J;bhNC6aV1Zd=3]3C8ZCGZ1ZaFk9KXbFfOXRJ<KfJ;9mHNFI3IcFI9"
  187.     A$ = A$ + "k7^ljcdAEe4k5H;\aFkdTAOmbF]Q#]iR<:4_NjhaIe2liASiHm9D1NbFdTHO"
  188.     A$ = A$ + "R5K<KWeDCZAYG[QnjBCM=?:In=>HC=TJHb=I\[fMfX_fHZcHld:fIljUP_iF"
  189.     A$ = A$ + "I\#WdWM7]f7X:cIRdTVVkW:O3YdFIK3A^:C3UAOEI6PJ=hmgYA=9kPfAk]IG"
  190.     A$ = A$ + "_BDHM^2e6_3gbnLi6fF463amRK[UfH:cEkY<eHKKUZ0RnjD_^f7<OG3V]Q6B"
  191.     A$ = A$ + "f7>JR<jJ`O67Uk\cF\I<6U9GaCbKcQ\4`QLd`fdB6f[9WQ\D1NVHjJ<BG6g4"
  192.     A$ = A$ + "n0Ydf#RN=E<nfCg#l^]E^[QCJBCXVMG?kFCBfTg8R>0Y4=C;66#96=PeVHK;"
  193.     A$ = A$ + "0Q[D=S[1dO2S]d^SBQ3WF[VDI\_Af1CGO]aJSXLQdJej;1YFQFSIf4<47>`O"
  194.     A$ = A$ + "82[fDlB`6PgB32amKbAh8ffR#W9K`HhF]FF_Y[FGh>\F1ofBF]QPMH_1QNRd"
  195.     A$ = A$ + "#S:Y]2KaWICLAiIHShUa:M`8N8U2jcZLK1<k8H2;JigJ#M6RdR==236\n6RS"
  196.     A$ = A$ + "[AL0oX[=kFWLF_je5::[9a4bVU3XhTCa;Y=J_a1^M7D`^IUFU<K:8QF?MkG_"
  197.     A$ = A$ + "QT99eh_g`J<T\IgJlUeOSACjFWgVmF_]PYQfUSic2QL25JPGB2b#1h\#jA2g"
  198.     A$ = A$ + "ZoTbJ]j;2^1UfZaXoDfd:fQDE63gR=32M8DWi8=k`L;#3F25W2W9<[MKN29B"
  199.     A$ = A$ + "A8a1]ck7Pch;41Y_f5=i8FJGfEjB`PiTYMYTUG[iVCk^9UfidK[]D\FlUBd4"
  200.     A$ = A$ + "ABNkRnULhbG85WD\:<T<n3#IaYOIKNS2dK;B8g=j=>_6KaSkB_g42ePWdQNU"
  201.     A$ = A$ + "HLei:FBlVh32dAj?6QMJ?l<RQQD>5D4HH3j5J6EFX8l5UGOhT4fEBa[eMRVa"
  202.     A$ = A$ + "]8e<#?IjDf=;Vf8Ijh>]`53hP:NHFLFOl<TND4Mb9;j28hW`VkPnLA86Qd<A"
  203.     A$ = A$ + "b`^\:CITXe`4=Z4W^AG]6fYNi8\69CigU\O1k``10hl:nHhEl;Abb7F4BY`P"
  204.     A$ = A$ + "S:\dfmhSe8MlP46m62ZS9Nh6ER0d3B4aZ9iX#SLQ3Ja><8RdT]IgU4PR28Bj"
  205.     A$ = A$ + "6G#Bf=]8b5RQLjF:<[E^XA\R;VPf28E8cfTBbH?E#KfUBbB`Vd;QCUX20HH5"
  206.     A$ = A$ + "F2Ao2\:2B^1R1UXH4mCC2SZ#PL35C2ILCNSbHQ=UR=SnS0\0R:IcX7dEo2hF"
  207.     A$ = A$ + "Um8h0::hb5WT25;]839_G4OZ8RB\0B>#Y1dZHH?F]64JD<RO;hnRcIE:R?[^"
  208.     A$ = A$ + "l5S75F5JY##:PR89;WO1>:>A>F:5IA72NIL9hGa^Ki8<>5R8KaQL<BLVXV]k"
  209.     A$ = A$ + "92Y3f8LfMj98=1C0PKGNm29U1\^U#K:RVG#QVC8875]W00JNNG4n2aB0Sak4"
  210.     A$ = A$ + "?D8PMn8lh>372842m[8QlQV#VWPbS271TCPRQSWTRB20L;8bjdUR<0WCVcVC"
  211.     A$ = A$ + "?N]0E4<kfG#:[2n4<Ck;45>_OAkP#D^PNhM3Umc``:SXCN_2lDRb#PRG9glN"
  212.     A$ = A$ + "3ab86#R0h?2U;n`lh12kVP;<WCjPnMk4E1MAiCVT0hQVf[8`=#RWSA4bkVRA"
  213.     A$ = A$ + "0Q469:g:BT>1NI9LkGVd>WOP3g1EX\9aiT9T2YMA?L8O;AkDDBP4:9ab;83i"
  214.     A$ = A$ + "PRlXMBjETSBFFTVc_GX;_2>11l#i0I0>d[727lNPf1:bXO40j4I815BP1:8#"
  215.     A$ = A$ + "3PblLif7:5?_85=W4TTCFVTRc7d5d7QKN4U33ha]Ka#XjE#9gTRn1dNhX8iU"
  216.     A$ = A$ + "h00A8TQC8W7h4IAkRUVRCRQRAQSd5W<];:?L^L8X`R<`5Q\701#1jfUT8B#0"
  217.     A$ = A$ + "BBb38AfPZ3Ll\#FN8b=8WB9:Bc[8BCQF^A9hEVRFa7?YP79B6OLDRNTXPbnh"
  218.     A$ = A$ + "H5T4XQ2B\<PLKNF02YAKS6iU9MX8;5DTc=_2SKP<W;:db4g\B\4T2XgLH49I"
  219.     A$ = A$ + "4UHX1R066A18;P3<YQXmU;`2QR#FTgQ\L:l<<bb0J>dE?b0:dZ3:d48^BVS1"
  220.     A$ = A$ + "PZol2L8FT7a1LL83QLX=lSl337TQE#0RFJR<#B2P8;NBF99:4YAQhO6d2G85"
  221.     A$ = A$ + "WP03Rm#I=JUD>F4]kO>N0Z#`UCT1b3HA_R#3h5IXAXR2P:Hi#=]8?=J203#P"
  222.     A$ = A$ + "39P#73787A0AI2B2a8i6#CacaB34009103:f\#4XAi6?;gT2L\8P1#^U3U:l"
  223.     A$ = A$ + "L`910j37_X0O^Y0Xe88;AY9#P7QJ8mTQ41H4gSnG94_cRdW=7DAi?kT7YA^C"
  224.     A$ = A$ + "k8g9M`UK510U:8\PR0LB14iR8ID:Qd05OdBHhEOZ0:nOk1R`MeAToVL>4A`S"
  225.     A$ = A$ + "lN>3#<430MC>;A6RL5oTH0TcjY>IULWX2hZW[245FTW#:QbWLP9G:U3ECJ9P"
  226.     A$ = A$ + "M:1H^9bIbTW=cTmY>d6#^T2VcaX:lg:PD6T;LiB90H:H>I75\9?9W[fcE6WB"
  227.     A$ = A$ + "L:<<9HV:DP95n^9P`Y#ogRi__mMg`a=U1LCZgDj>9RQCaG#hgg_:1nM]_oiC"
  228.     A$ = A$ + "Y0l7[l?`Z_E;8lO64GeY`OPkhnGiQ[F2oAAnO:MnQao7188g?#U[ZaEmcoR\"
  229.     A$ = A$ + "Jb6fo?0L%%L2"
  230.     btemp$ = ""
  231.     FOR i& = 1 TO LEN(A$) STEP 4: B$ = MID$(A$, i&, 4)
  232.         IF INSTR(1, B$, "%") THEN
  233.             FOR C% = 1 TO LEN(B$): F$ = MID$(B$, C%, 1)
  234.                 IF F$ <> "%" THEN C$ = C$ + F$
  235.             NEXT: B$ = C$: END IF: FOR j = 1 TO LEN(B$)
  236.             IF MID$(B$, j, 1) = "#" THEN
  237.         MID$(B$, j) = "@": END IF: NEXT
  238.         FOR t% = LEN(B$) TO 1 STEP -1
  239.             B& = B& * 64 + ASC(MID$(B$, t%)) - 48
  240.             NEXT: X$ = "": FOR t% = 1 TO LEN(B$) - 1
  241.             X$ = X$ + CHR$(B& AND 255): B& = B& \ 256
  242.     NEXT: btemp$ = btemp$ + X$: NEXT
  243.     SFX_ANVIL$ = _INFLATE$(btemp$): btemp$ = ""
  244.  
  245.  
  246. FUNCTION SFX_ALARM$ () ' Alarm sound
  247.     A$ = ""
  248.     A$ = A$ + "haI;H6oJK[\U7onn]m7gmGOlhb[D:Ud]D:]D^D:ibM;MK8D29H<N]aH<6K42"
  249.     A$ = A$ + "Q42QNB<86VIHHHH42Q#6S`HSa[aHSaH\a4<942QD:UBYUBXd;U7G^GNo`bng"
  250.     A$ = A$ + "aNV\_DJKLRl<ciLnN>cW_^dQ_neogoiOh7n_n?ZlOJhlgn[o[o`?l3o9h?oK"
  251.     A$ = A$ + "oko`]om?m3o;o#WFo]FHhI4`GL:29bB#>T\T8GDLV<dSfEejTd?\\aS>8nom"
  252.     A$ = A$ + "g4?j1^_oCh7l<nK??aXDCieO\g1?\eYO<_D]lERgDJlg6MbcSnlGX?miaong"
  253.     A$ = A$ + "#_XfT]lJemQE5KKSSSIbN5aZHVS7bf^gY9E;7>Li#6B=LFVEMG9]c9f5cT=K"
  254.     A$ = A$ + "?n_oQ`m^[k^1]ZBVOjDd9=WnkGfJ_WQ_HLeWg\gfeM3lIA^5OjdFgkG4;VgG"
  255.     A$ = A$ + "QJE?NgFj97;OobZ?\bT?\RiSckc==]]AmV[JLREaZR0gT5cRJJbT1EZ7?K0Z"
  256.     A$ = A$ + "C`ZonUVgkal]I]=E;f<>\VAaWOGhCfcLg\>7dZhlU<3D2c=nZcmOdS]VLnJU"
  257.     A$ = A$ + "EYZYW_bo=WXNgFSOjhNOL7^M#f`H[fVfnMgEdh0SaKc]\BG]TffTWRKDG<IH"
  258.     A$ = A$ + "D7_IOo]FgkQheYMj8F^MPKi>mobKMfkA1W=^i[j<ll9H7JLTMn7>glQoLdb;"
  259.     A$ = A$ + "G`JM<\S3JnbZ3OOo3OL[5_O6b><OT`f``C<O=iXSSF^9f6=Hm0OCTTJFa]HR"
  260.     A$ = A$ + "ZCW\_lgcfo^eG=g^\kd[F5E^AfW_AmCg[iVMn_\TLeLUG8eg<kSGkmPWQV]M"
  261.     A$ = A$ + "FRkaEjNaLWGOBjeC:ohZS^J6?2;;ban>FA5cjjE_UJNo#o\=CaVn<ZE5kRYI"
  262.     A$ = A$ + "fMh_mgWmVOl=SVjFgO`VilJUY_m[IkO_b3G6N#9a\Qb8V`[Mb7^fo1?=Hbji"
  263.     A$ = A$ + "iXZEc^JKdaUDG?^dS[=ilQd#FoQL;g0hoWWdY\I_UiNnY;66dfQB=QG?;c\U"
  264.     A$ = A$ + "jcoAoOn>UW\<XRih;GP[f<m3gTmlkfLmBW3KU_J87aIFV3nl^FgOOfReCB3:"
  265.     A$ = A$ + "gLhKWIODmR[kN`CK?mZYHW`laYnV]MT;GQ;G9JfLYCDoE32<3U<cb>#fcX3k"
  266.     A$ = A$ + "l_>i`ol_T_Td`J080ZEQOe=5_jnEj_VNLIfVea1T<B[X[o\lY?dIfY;baV=8"
  267.     A$ = A$ + "[fUEo=nk>eja_<mjeDOLB_h0G73odimm[gP<I<eU?I1_S5QkF^VLBOo6N;o]"
  268.     A$ = A$ + "[jlGO8m\dJeTWMNQII_Uoj5]gkWS?[KeS#[g`]I3T]]FNch3_OiNW^Y?YE5n"
  269.     A$ = A$ + "V=R:UXW>[iS?<i\5DgXTnIQ>fjMJHHcFdYcT1\1cC<J5`3[GV<I2ZQgVoak<"
  270.     A$ = A$ + "_gCUKUeJXfNJOgbVCnegJN_GT\;ih33V=?5:gA]Lgnm9_j>E:>MEFD[JR]KU"
  271.     A$ = A$ + "E?>2RYWLHnUcSlU53T^^>fQMWgeYAKnTQ4?ahIbf]ab`JEICWBKK?lKO6_gM"
  272.     A$ = A$ + "^]iU]kbQfU]WMcE>?lih=3KMXe`ema81e`LagVOdMNCjVemY];k?OG_F_^c\"
  273.     A$ = A$ + ";`?kW`W]Ci5YjgSjkdaF^NIHe6#<5kCj_X`[CPTIEfM`RDcFIglgcNnO]aj5"
  274.     A$ = A$ + "fWh\hZYQEJUlf?V^oMZ>N;n`BRECINdd`6X[nTjI?0J:WW7f\QLm:NYS9KWg"
  275.     A$ = A$ + "ja7ek];SLI5Cb3L\<2jOJO[ZVi;7QmUSV[<J79RJD6?N<]Yi`_n9dm_Scjn]"
  276.     A$ = A$ + "[5]h\aX:eCoh7X?iQf[VInZ65W=6SDI1=iOhC\Wn4_UW_8f[^AocV7LDIeIC"
  277.     A$ = A$ + "Zlhb3Oo<G3bhi2CC3KfTIlVeLk^X0i;W<5gbVaM[d>Kn0oFXcnS]Uo;k?hDL"
  278.     A$ = A$ + "Yf5GNJJSBAGlmUUnaO>kblC>`ObRTP#9a`odK6lZkG]of5mX^VAmWf?XJkTI"
  279.     A$ = A$ + "aENUiTM3A^\acEfMJJ`V=3G[AdT5YNQIc6hgdQA<:12MIWfjlgcnaVja4n;_"
  280.     A$ = A$ + "LBHUf5glIa?mPVC?CnV3#Wm^n=>8l\[4U=jfe\TkhMC#UZemjen7DYgem>h9"
  281.     A$ = A$ + ">GoIa[>:mSO<mE?cIeZ`B6ICbA^QR49b=:7D^_YCoUI>FIKWjLHkNcXWD>mj"
  282.     A$ = A$ + "M\Vnm6;KGc;;?b6jn6B\LXIMi>6NZ^9X`T9SDQ86?d=0CIRTldH5?b?0QLmI"
  283.     A$ = A$ + "iiAF>Za3a]]hMEnFh^5R8FJ:bb?OJVICjliB;;FZ`g57W6;8QHEN<LXTYBB8"
  284.     A$ = A$ + "2S2Y9i:B4;9ABRX26b?T9iLE2W`T:>bg?T:4DZ<_K2feSW[l=2cjaLaMk9a4"
  285.     A$ = A$ + "YTJKAbb96FY;Wb]mUaDGGR<>VCaR^5YAn4U<b3a4DR:;C#h9YL?g8690AijO"
  286.     A$ = A$ + "F<W`5L2>:2C5Bh;EB<a=#T9lM`9iB4FVWBaD>3iRB;H6VZiC5F>RDV[KT<>A"
  287.     A$ = A$ + "65bcj:3L#BIXCX#9`4E\nOBh11HhmAHL6E4[HHVBAQ1[:95NMRD`88RDP3`2"
  288.     A$ = A$ + "mb0I1:R8THGX2T5IjV=[?f5WX#>Q#bP3a4;>US2i2JD4G9XHNR27BCCIQQLm"
  289.     A$ = A$ + "NbI4>\jHZDbP4:UbHL>S;Td`#FV:d=:;Sj5ZbC`AldHHQSk;]J5=NVbbCfS3"
  290.     A$ = A$ + "k<DNId88c8338:62219W0AS8R4WZ`n##3O[#:P#RCPh522h]#8L9`]07B8?R"
  291.     A$ = A$ + "Q];FPlY9:F4AZ8NN\^iQ6N`\:T=5d0N4EZDofTI9l`8hk##ERCIlH5DHCC#N"
  292.     A$ = A$ + "1Li]9N:TMH#6CBAA4XXAiL1\m#P3A_KP<E5jABB5H\8V3eQ^3X]=RW?6K5ZD"
  293.     A$ = A$ + "A^`b0Y02VUVa230AFD042`9=1DIb\DAD05Z;`ZBHa9jKJe2?<lB<VYg::XoS"
  294.     A$ = A$ + "EAPjZG\_3]KGF8>9SiHc6>8ZVIoC7kg9:==b>#;WPSLLN:;8P:QE6F<X:U2J"
  295.     A$ = A$ + "eh<EDH4324h;4=>V2=3#[424h42XAT297QEIR0XlWReE9EDT4DA>0l4YA7eR"
  296.     A$ = A$ + "Ih>QiY8KOA2\A4\8;CQMl5aPL6BFA#I7d8Z4Z7DePE5bIjeU0E0ND4T:1m15"
  297.     A$ = A$ + "DhJACB>dEbjVQM3SkZ`AbD^_=^oHJe6aW^Tdb9Y;ab5JVU`Q3jMh1N4>9D_`"
  298.     A$ = A$ + "#EB_AL8622e58H`0DARED#EZX8\#YO4Q#9IAH#i42ZhLV[???>B7e87OEQ`Z"
  299.     A$ = A$ + "=6V;2c7d]f`?E`eRbL52BML#=0JH:G5ca<XY=`7jDd:=>3f<:64P#C0XH^EN"
  300.     A$ = A$ + "[oEg2<kRc:Tnnb^a`D5#9Ik6?>cX\o\]I6=ai27C4LN8X8JJ^^MU;`njO2U2"
  301.     A$ = A$ + "2n82<=2iQT#[5XVE28]1bJU0j^Dj\XFd[OcZDV7<m;=d><>S62i>HZYXOgP6"
  302.     A$ = A$ + "f5KjkKPBE1N8>TkdZQNiDmH=B4LXEj9<:6EG3dSUHJ1>G0I=#[9IX#HJ4DSX"
  303.     A$ = A$ + "L9T2Pn?HJU??;QhST#CC0dM6d>XkHAm6ZUc56fR<Z];=9Ea8HEgRHT?A`QL<"
  304.     A$ = A$ + "DeY<H<4<=>C4NK?<6[k#QD7D]01>T9QNFh4l?7>0332Rk145l^YT0LB2b`>N"
  305.     A$ = A$ + "BFk:AcgTJKBcPC2X6QI1Ad\nIANAL>61c_D#116jaDY9Q^4]h0R0hV2Xc7Do"
  306.     A$ = A$ + "HMX[5m#ES[WgY00N_h2EP;;?S6XMRhKCkg7EeX7d9e>:?ag>2b?LHbA2TkL2"
  307.     A$ = A$ + "H9LHED:h>1Hk11\B?n6Z4DMi7jUQ>1M77\F#K>TSi\P#Q>[5`;jR\83W6Gi`"
  308.     A$ = A$ + "lOoZ>oUmiOncM?l9=_hO\^f3?LjO\[jM>Ha__YbN7?mG_`m1?[gOLFU7DJb7"
  309.     A$ = A$ + "Vfl`F`\RnK7i^ocM>kG?cm9?GNckA?i9\Om;Rmg7oa_;NMinG?bX>#P_j<d_"
  310.     A$ = A$ + "L<KdHhn6JG0PaUW;\[jF\8^IeNOkm^gm^^KjgjT`eW?`j4kCo=H_O9NBJW6d"
  311.     A$ = A$ + "Rl^5MS3\`WnYN_jnW4?NndNQE\glaYV7fHdiRG\GkAKF>>j=78_i3Q_hWYOi"
  312.     A$ = A$ + "BcWGJh7Fi]oQSo]cJmXSbgded9OXg;;]hoibVkmb9OO`Akk\k[[]NI]1gL=j"
  313.     A$ = A$ + "9kIo^gJohOQMa5RjeL83_N7nU_R\HFA<ajXZ3n`R6?[ifgcoimagl]hbMVNI"
  314.     A$ = A$ + "Feb6APZUhHJb6>DP43W:jHbcIMJ6_J6^UcROm\6ohNX]i=>QLfE5MZPFne;\"
  315.     A$ = A$ + "^gCaKjelHgAcS3RBhffCojjZ?hhTMG>:\E=bYGg]aQV;^>nE?cNgkc=\BVUK"
  316.     A$ = A$ + "gf`5gOCN]gd9NB1f6U=<aa8TSkDa[_6J>iCOQoCgYijaV7I_nmC][6<o;_U^"
  317.     A$ = A$ + "oSK?K7oT:bUShh4YMWQOm2k7mB`N:L?fa=7NeL[GNDfEI_J_JC^8g#754`kY"
  318.     A$ = A$ + "7Oj:N]:n3WWj3lGSa6^2EH3[^;;LJaOk_=i`kLdP5AE]6Mi2Bmf9_mVn_nNU"
  319.     A$ = A$ + "0S6WDC<MT<RZ2KQfmQTmg[FgE;7#JFV^klTJ7i_JYic?DNn6R5^olNnfFfA3"
  320.     A$ = A$ + "GUIFgD7DnRASXV>DVG]V9c:LKB^jgWMlM?L`2#bGLaJISjl[on`G_G]a[R>^"
  321.     A$ = A$ + "ZLn06B6keDnQg7mTO:LfVYa`k<o\UXS:9g=XdCK<nZAnFRYci>VMlbf=cjhF"
  322.     A$ = A$ + "Y[6QMH3WW1MZ9dVUAS77e`Nfg_fN_W#gVE_ZjlMZZEYWNclZgkU9KUU;5=JD"
  323.     A$ = A$ + "<0:4d8jj?9OaS=j?OB?B[Jl=KS[EVOn\:?\lh[7hJ;W>EhHIJcW<Sd^=ZoHY"
  324.     A$ = A$ + "?YHN?gf1:QI9[^CE]Kem[O6oXmlgf]n9h]Gf7\>]hVc<Ol[hcCZE2]H6eUFX"
  325.     A$ = A$ + "\=7lQE]NfARUK69LJi<nla6_^ehcTob;2F]=6`[V=RHKI6TMj<[SJW_M4bR?"
  326.     A$ = A$ + "NNVE7DR`XTGaHL;[YOoJWmN<md\6eDWMFF[BX]OKMmkn2eYYUN3JlTDhRW#3"
  327.     A$ = A$ + "jUO>kGNRaP5C;DVUAK^ZKmGkMfIF?LOaeKYFQ5SS]]0BalAY>]<HS;81bacX"
  328.     A$ = A$ + "]=I9XZeEC76e1]k?>]fMNIgeTJ6m?O5[JmT?n]\OnA6cQFCSN;70`TBGSlgO"
  329.     A$ = A$ + "^i3g?JllAI1E[5_K=ihSHG\Xb3NcPg>?2fQn277;KJa#YSQ5KDO1B>HZ`X3F"
  330.     A$ = A$ + "RJFS>M<YYk6HW^k;BF;Zd<kl]Zf=5knbj>?HOfjdj=X3j53S]MJa^jM\GlhV"
  331.     A$ = A$ + "ICV?Tg\4il;bKnVPMKJnXGW\K5f88OF1bcdV<ndlFel:FD454?N2cdR9A=Zb"
  332.     A$ = A$ + "011dhnkGfj^?=k\hbEUG0;#Io=OIKkk__hdNE>bKd\h`85c`Ia=c;oPBY[g>"
  333.     A$ = A$ + "BeYBhbckej#SEWSNbcR^hjDP<Hn#\5DWbWF4db8Xg`\8LbhN1=Mi27H<nb2o"
  334.     A$ = A$ + "Fd;o]I7mGNMoehbV5G\BfZ:iR_26W?I`:jaU4;WCl5m8=lfmYdGLoF5W^<g_"
  335.     A$ = A$ + "IMij=Zj77^mDkWL#jKg#\Ym63CC]=mbG?d^F7iT9:OB_i9FVAaX6U9SWBkH>"
  336.     A$ = A$ + "lV?SO`M\gf_nK2FMn8_B]bOgea7nRbAm69jdB\LTC5fiK461\#kPN;W9kDaI"
  337.     A$ = A$ + "bkFiN\a`=\OiYfKoHAe32Fofa]?XEj#BKolQ90i<9BT2HFaYX6=H3B3M5cFZ"
  338.     A$ = A$ + "ZGQ<MPmafC_NJX9YG1^EMGA<f9ZoRNn]3Bj:L=L1n=>VgK00L6AHH4Le;CVW"
  339.     A$ = A$ + "UU8UH`W155:7FPJkdMaPP6FaSR=JS;:X`UlBT]GLoH?3d`UMmKkYM_hcEILP"
  340.     A$ = A$ + "H96`D`0n5Lm692Y1m1>;V0\E1\3A0`QnFF0RhFPIBPO0<`:>F0NW0P[XT42<"
  341.     A$ = A$ + "040oA\TR4=66h`98^;ca<Nn2U]3`8kiY1hT`eYM7TQ1_C2TM0LU>0UWV43\;"
  342.     A$ = A$ + "LhX760a40P5W3nY0GJ<O_0TnZHhg[m>ibBT1J`XHPN]0PU1L9\U[L#^KKfl]"
  343.     A$ = A$ + "mL<8I91VNb<hT36b:0Do#PU`gGKV0hUb0X88b#M\k>RH42n4Xg2D:80]90N2"
  344.     A$ = A$ + "?14g<<Pe0o;22B=[3TL0PGL0`=[iOE`d]P0VRj7`d91130DT8_8677Z]J2<F"
  345.     A$ = A$ + "aBb]Tmn8hEJoW#TN;a7TWA#9S[YH1ZFX86W0<Lgj9RWWc21A1gg78U2<Sj=1"
  346.     A$ = A$ + "\dPDl#?Pd1`4aH8b0[:PWC\N=Q3NJ27Z9aD]>0PSdfG0dB=g7#UYY`dkT6i3"
  347.     A$ = A$ + "<bT2d`XH0`<<68DA#F58d1kX>>d1SDnN\H];6PFFb1GJ0#]?AW;07I`21lR#"
  348.     A$ = A$ + "A?E26dQ#4FK8R0?0hoOcC0B>1NWLma4lM0a#Xf9>X6QU18`U87?A^bcT<JB\"
  349.     A$ = A$ + "WED\nCMF[b4#[#N<F3k3202h]43?7:Bk?f7fiH`17lDDPME3NRe6NeQ3Dg07"
  350.     A$ = A$ + "TJGZ#>D0#l#]iF7?D`XOBGV[SLd8UW;E;G1BB0B=R1]#1nlHhihJ75B#bR1o"
  351.     A$ = A$ + "PRX`#XO43PPJ#B#Z36P8JSX<<H9DXQW1_60;[2Bd4X^a0#m^L7=HNTMH?`<]"
  352.     A$ = A$ + "MX4RR8Nl]fB5IiPGH1HR1bbJ6bH`j1;A5iL;L<Dl^ekd]O?H5DS`21WF;61m"
  353.     A$ = A$ + "##I08^1?M`1T617:8CTd3<H8Pk;=]Y:ZW78KPDW>11ET#8[0b7HW0a:GO251"
  354.     A$ = A$ + "^hH8;ae>H08IVnG26Odf?0K12]M;0iV5Z=>Ql40BV;TcIfPccRXfXA[7Q=le"
  355.     A$ = A$ + "BC`i9h8T#Rk290hL3W#RFLACB0NO5HBd1[ae9`H=Hn`]OR4jH26E8HPAZdn<"
  356.     A$ = A$ + "#8gUjQ1eM01l6QRR1S3>8]AGCjh9:;C\4Lm0>GP3?l8mTN>P50D`o\J[=naB"
  357.     A$ = A$ + "SQ>OhP3ndeaT^Y54;4]K=X142bTDVfMF:a>#V9#HIR24D0:_;Xl0<3=\Q9\C"
  358.     A$ = A$ + "PF3BC0?O#TZ8fg51ff3a`R1SRbTDNJ2lJ`H1W[E=gjF#?dC__`Q1ZJ`[2MRb"
  359.     A$ = A$ + ":4f>b^B83f;1<`2>2m3dBNGlP9I1F12`S>Lhda:8FBRL3Pa<X`K=O27>>DXQ"
  360.     A$ = A$ + "C\716LSdFcPQT4ZFF2m5Lh;`0R2l?i3Cl9`TWDQ?df2^`X#aeAoj0K`mA^[5"
  361.     A$ = A$ + "RCef`PY[`8;FFV`g3;05:dDb0mAZN`G2of?34>mF?Q<]hF?\BWPQc36[d^CS"
  362.     A$ = A$ + "DI2MZ#W?eOVBjFKXi9>6i2ggUYo8X4h#]nG2NR8IP45TgjQ1`8BPg3J;PXSj"
  363.     A$ = A$ + "1?7TUeJ=H\0C[ZQmkoSS%%L2"
  364.     btemp$ = ""
  365.     FOR i& = 1 TO LEN(A$) STEP 4: B$ = MID$(A$, i&, 4)
  366.         IF INSTR(1, B$, "%") THEN
  367.             FOR C% = 1 TO LEN(B$): F$ = MID$(B$, C%, 1)
  368.                 IF F$ <> "%" THEN C$ = C$ + F$
  369.             NEXT: B$ = C$: END IF: FOR j = 1 TO LEN(B$)
  370.             IF MID$(B$, j, 1) = "#" THEN
  371.         MID$(B$, j) = "@": END IF: NEXT
  372.         FOR t% = LEN(B$) TO 1 STEP -1
  373.             B& = B& * 64 + ASC(MID$(B$, t%)) - 48
  374.             NEXT: X$ = "": FOR t% = 1 TO LEN(B$) - 1
  375.             X$ = X$ + CHR$(B& AND 255): B& = B& \ 256
  376.     NEXT: btemp$ = btemp$ + X$: NEXT
  377.     SFX_ALARM$ = _INFLATE$(btemp$): btemp$ = ""
  378.  
  379.  
  380.  
  381. FUNCTION SFX_HOWL$ () 'Coyote howling
  382.     A$ = ""
  383.     A$ = A$ + "haIYkm7JKTWUWInWSUSMhfKHPUIPMXWVIXkVdTVdQ4L2f47\g4\=FHK\>IS4"
  384.     A$ = A$ + "FJUF9T4B89:AE5EAm;ZRZ:Z2E29T4B8QT#2;S=f6K\3fT#B8QT#29Q4BXkVd"
  385.     A$ = A$ + "\c`d<m#?LkO];km77L7L__O[Bo`fYgM^kDCCWnE_jm[_O[gkckkkKFJVKNco"
  386.     A$ = A$ + "n[N^cii6ognkST<k7mgL^cM^O2l?oG?oi`ok?iLoEWkOlO8ko`_6hAloon9L"
  387.     A$ = A$ + "bO>DUTLN6_c_Q?E2mCdn9L>?biMTTUUA?3N0lKdW8;[X8SN27;;;lX1jAFAE"
  388.     A$ = A$ + "CCEFPSUVVVQC#BAEA6T^X\VQUUY2Gfd9SW8=UPVEaRiDhIhT=;g\E=3ZP;iJ"
  389.     A$ = A$ + ">GNC:F\E_NediXHeK\ka7]QAhKlIOd7o5c4gJ[kmX3KZBC[gmn_n]?\NlanI"
  390.     A$ = A$ + "WkLo\[4`Lg7oh3KZc;FLWWl^gm`Ja^b?kWlCniS5:g^goNkDECD[n1_h[Oc]"
  391.     A$ = A$ + "=GmloW?goY?jFI:_c]gOm:i;fjPWme_m^UR>aOgOm?mSVH=f2=KgXJm^koXG"
  392.     A$ = A$ + "oE_l`2a_iWm;oUOb4NB:JV_HU>kLgWmfgnX=D3?cEnl;LUKj>LJ6YL=gkQ_j"
  393.     A$ = A$ + "[NcSfb:[o5_e=6oJS?U;_a5ZNh;NoOhm?KgR\9S69`bghROjWMUiRWOoGnko"
  394.     A$ = A$ + "ngoPf:4YYTdhSLc?mGngm5;`dkiOgOnK_G5Z8A9E]<i3Oc;Nn[jV\jQ?me?k"
  395.     A$ = A$ + "PJZl2BBL4QGJjK<O8fl=Jg^A9[2ej]mjUHl=eHC\DJcV]:9ATP#Mm7m^G^Sh"
  396.     A$ = A$ + "RGjcWH=YVmZ#_j\;6?oaOcOleMBM[aVL=aZ=dSL[[=MhR?lknc_^Nli_YKb:"
  397.     A$ = A$ + "M;C<kWOnKTXicoSOgm=3_\?VV7\K^EnToVOah4KmEo`Gg;c2c6:oa_l1E3Na"
  398.     A$ = A$ + "Oa_j6TmNbCgTggRn5glI_j0aIo]OdeB^n[nWNTiBGhCV<C_GmnkKjn;_h2B7"
  399.     A$ = A$ + "lEOcA:^7kB^hjMgm=l>nHcC_mgl?o]KA>gE^fZbMfZJf5_a]2XO`KnZkE>KP"
  400.     A$ = A$ + "ebT[M;=oSmK>o\dKm^odkjAiN6?LmN`mJVNj;LQIbfn1?mPlYmi;SejKgPem"
  401.     A$ = A$ + "4Gg3Gg7oZSc5Lj[=OVZ7Lkf<;>aeMcfkY_maMhl=o21Id<4Bjc38g=>nX^jI"
  402.     A$ = A$ + "S6QD_BESD;<nhcWZjmNgKfC9`Lc7BMSkNkJIVoZGM1b6gia7F8e:;iW^lf7^"
  403.     A$ = A$ + "A^<nF92OiekF8[WIV;P#c3PmP9FMeDFkmT7]9W[?oS_hb2m^g3ge:5#\`n?n"
  404.     A$ = A$ + "AK[^fe_hELUbXA[bJ<4TbEgih3J:5IQK=WgdB66ZRl\\BF=gHSFFL92heGXT"
  405.     A$ = A$ + "T\R`7#::j5ZeZII=jh1l7>5]TVR0MF2JUR]F_K5ah[^TWX\VU[EBS=C:BAS2"
  406.     A$ = A$ + "U:J8T9LP#9Id:E_NeR6:RLdTTDDd\`GPPF4e;D^LA;MINZd9BT<3UPAa:5ei"
  407.     A$ = A$ + "Y8I4e<d1fIHHiUDeeeP?Oi8CU891SP\ZV^I>[REZEaB<CHO[^Fhd\bZ`Ga2:"
  408.     A$ = A$ + "Fej\NW:j<YR4:JB2::b\IYhT=bG8_YV\Mb6Df1hOIXYXXHh5aI5hUd<cWg#V"
  409.     A$ = A$ + "SRPPT5f6;0i3H5ebIUCCPV8340DE1cQUUGa8WY:b_cb:29;ThIi#FTVR8;59"
  410.     A$ = A$ + "5[P<>O2?lO=<1Mbc#3:1RMB2P3cQBlPB2a9Z2?65#PoX\VZ4;IjDIX4ecG<_"
  411.     A$ = A$ + "^83fb4iI#V?B=Z#b;AI8>X`CU9=1ST>H4`O<39_:\RaU=EbddBV5:TC5Y#15"
  412.     A$ = A$ + "MMEAFb\T\BJ66J#n=8>:2I7iAaO>PXY1:N8:QT=X72DH2RZV#P6UC4L1V\YC"
  413.     A$ = A$ + "U>;4^ed=de0_2R0BP=AC1RPV3iPPXAn5TY5U#6WdE#2UZe9o<oYc[;:iTe7R"
  414.     A$ = A$ + "1<#2GFL6G#`X4g`?1Ho1A628<Z0BGG3ig2LXTf#83Ue6T>bL`fLFBJnni[U`"
  415.     A$ = A$ + "TaKH#IaAB2N5`UA?G2iXXo4#52]hllh:5h:0bb`FAJlVBl^LK;AL#a2#_hG7"
  416.     A$ = A$ + ";7T[8IG81I?fUR`Ba^`SS?kDWZOi=k#SXS[fW\C03;KWbClHODdA?HMRHS7E"
  417.     A$ = A$ + "2c^Xg`#i`2XXMdfV3Z0HoBZX#<jc7l:BOaS[JbI7<kC^?of6oP:`3=OK]HGQ"
  418.     A$ = A$ + "M0IW:_B3n9:N2I8egH`UY?Aik1Uf?K]oAnOi?93SnBWaok7d57J:H:3G;`L>"
  419.     A$ = A$ + "b>#7J>6TmB=:BQ=IDeOdG=<D`WihTEhg6n0dd:?T^2BC0OK0I:ha_>\Wd<OY"
  420.     A$ = A$ + "b5=5YB5;D`XIh#91T44TecG6:CWG8EPEF`UWX<6UZE]PV0_Jaf0HQNJQWnRO"
  421.     A$ = A$ + "b_iBcCDJcmfZA>AN]Vgni_mUk[kmBoROj?ocMAFKgK_CCCAQL[oPgmnG^9k\"
  422.     A$ = A$ + "OlOmOe_H<o:MfKg>5D4=JNd[NoK?b:`UoKoYolc?KL]jMKGab\#[mOb[OaAU"
  423.     A$ = A$ + "ROSOkOk_lcV:0S9HLi;gN_7lbGodM=SN[_hglK_d]lUREF;GUe?hQ_l=?oXj"
  424.     A$ = A$ + "\nWKRa^jTci9#\<LFM?jY_mM_h>]DB7`mLC=a4C>cB1bXgihWmfgmlKGG6bg"
  425.     A$ = A$ + "4?TWKM];MUYmBGkhglkoM_JoR\#jidYChOQ97OJ?Y<ghQ_60KDD6]eT9Qk9_"
  426.     A$ = A$ + "lEW9X#S3NdC^o>e=P4XTddIS]f:[j?6]FaJ=JfNm=je^THhI6kbCiS]bVk]I"
  427.     A$ = A$ + "=EbDI4:\nnkge8a2GoJgLeTL:jVi[^nN7Ok>B1Vi6c6BZn6=UFKZaVd[bnOk"
  428.     A$ = A$ + "ofob[J4OZ;NiKi?==lQ>WNm]fKmLTaRcDH[S?\L`;ncn_lKL9OlgoojOi9im"
  429.     A$ = A$ + "?mD[#FXI5e<1G;:[ANEbX1RbGohGmZMIVnSniObbiNlomoegE?l4GhZ[`gHW"
  430.     A$ = A$ + "]ZYaaKDYIIne^eeW=NYknfWe8lHOd7?Ifmn^ogo?NVYW;mKo2GI;fZZ6=1SN"
  431.     A$ = A$ + "ef=bA6LU0D5giPf<^^hWlU;ZL_OhoiOL?f5_fEG8KieKXT`_oD:ejeaR`kRn"
  432.     A$ = A$ + "XZ\gMfDag4GLLo5Ndgo3?>W_[Ma[7dHSmJ[4O]#d`Cg]#Ri7Oj0:KLlfjQ^e"
  433.     A$ = A$ + "eV:Pemo^oiGg<i<S=^7f:]Qb_1R#UOc3gY<G4_nB[gLcfJaGNf529fjfgKo:"
  434.     A$ = A$ + "La37W=GmjFdQFaG6cfk\EQD;=m]FUYm3Okcja^le7g5Ae3OdaUR=chGOQTVm"
  435.     A$ = A$ + "^maKGAUWGBFT>nZ;hbMX\bi[e^CcZ5bYSb:cU=dRglV;6R[b^go1KWW:F2nB"
  436.     A$ = A$ + "MkF8iDOj_n;FPKSWn^W]>OXeR[eiPmK#kj;o\;_0Aa]>l`]KE>_Y^#fh1341"
  437.     A$ = A$ + ":J[8b#bXgL_Sg]LfU_aDN5KO`>5B_bRNYKmT_n5M9Vm:GIN01lQ]UR^jZaDJ"
  438.     A$ = A$ + "OhMfb:S_UmVBYHA5R8QBbGJSmgZ4Y_5G>2?\UYG1V0;]H0j2MjEG;C#_nC8D"
  439.     A$ = A$ + "ZkF[GEQ<Nh898X1Hn4Y9X5=:F_Im:Fj#iK6RH[iamZQb8T_e6Kd^ZU6:_U0I"
  440.     A$ = A$ + "<O^M_FL6E[2i]b1HZ[D0fQhgOL6S:]KEF9Kd#ABaZU_Li26b\Ic#`X0aW^]:"
  441.     A$ = A$ + ":4KiIWeM2eVK_M3UD13VD4]E^RDj#126;33DY2:_ZSB?0k#A5g=PBnJl49RW"
  442.     A$ = A$ + "2PoDXH>9bT9c:HFYFI3^D134WBBGCP:MJ:iBMg\M1Q<aRV8;_X0MZHaBA[T_"
  443.     A$ = A$ + "LUb5`0=8cT>3hKJP5S0aQ#S;Q0L1OY1`B#H8T\[09bAU=;]PJ^RUbKXP0<P`"
  444.     A$ = A$ + "U`CC0X8#MjDZBilJ#YDX#?0F3Q0`<G>3=ETU[:aT:\OoQCc3#e:WG70M9Q#o"
  445.     A$ = A$ + "d7^P8je[2_??EZhaRWRPR1EY7`PEX4`^02P5X>La?03Dn2FjRXe40BSUUQ4M"
  446.     A$ = A$ + "jTY8iah^0D#0N:A4D5MD7J<h>dPg1B13QLB0I4PSA3mfIXUbE^FUl:\ICW6X"
  447.     A$ = A$ + "S0gAc:IDXL9He1`M1h4T5I#XT81H>8iidU9^T:Z^96I:9=6J4P75nOH40XEJ"
  448.     A$ = A$ + "B<4YBA`:KF03<3H1:7`356bBa[HJIUC7P?Pa4P#A1#G09HJQ`AIG>G`6[3Zh"
  449.     A$ = A$ + "20O3`a2<jdNZ]RA#OLPQ084I`L:?0Z1N_XCe9WbM>o7KH\>##hiko7i]am8e"
  450.     A$ = A$ + "7E32l9D<BAZO9LaAkee6>RPC7c31SPA60QL6K\B:8c#Ff1?b0\HPI8>0IdP:"
  451.     A$ = A$ + "ofFV8JO>2J6o8o`ET]MFTh]mFA9<fYn5mi`=XcgW=inmckP=ZOIk1A1WXT=O"
  452.     A$ = A$ + "S2Oa14PmQ98L2fLHL49MB\734^]B7ZYnbJ0>?KKNhC6RIaAnS04Q_?LYcZ[A"
  453.     A$ = A$ + "A7?0mXd9\[cjkWl]565Mh90AaO6fL\bANRS6`k2]a=b=lhCDDe=#P[IA]CAB"
  454.     A$ = A$ + "chPe4g6FnlidQVGbT:Ej<X_=#d1DB5[D]B1Mn\9S6>::_;J?=leNaZ=JeXT6"
  455.     A$ = A$ + "MR0[hfKDX3:dJ_ZEUFK\gNm:;4cc<C>mBQcbSfC9KFKcSNlcN`FVaWO\_hRG"
  456.     A$ = A$ + "OY8D2X?Ed[]cSNkkOmAUB=gUn\?oZck?55H^RFM>n5_oKOinFaWK\;nUC<g:"
  457.     A$ = A$ + "QPT?\6]>hY_k[OmMJ`7deDC>e<^FNEoA8DZ_oSOckNaa]d8R\f:;=o]VJjIm"
  458.     A$ = A$ + "T#[kMOiKOemg\\:\7Q>a:CMi;>f\ab]cCOc;_kjFRl:i:VSfgTOnWN9GI[Nd"
  459.     A$ = A$ + "cOnMG?W0WJaJEeC]`Enl;?ObLm>HoNUeTd:f\E5ih;>i4c5R_HcjiUIX5;]a"
  460.     A$ = A$ + "QkeDH]Y^jDNI[0UmY2i;2OcknR7_>c2SMUISKf^SEVELi9CUklfgM\EXIVJY"
  461.     A$ = A$ + "DV=Z`_f=WdEZ:gm[nVkG<QWEBXe\CnTgl;^h\4]OjgnV]hli>RfVgk`B1^d_"
  462.     A$ = A$ + "jgL;j=OegnT:aGLaHi?lAg>gZGlSobE<^m[NF7RUVe;o6?jAmb>mi_P;QmOk"
  463.     A$ = A$ + "k_SlRGM2_JkodkF`gU?o4AKlRod_K?Zi^b41;LhMkTjjOj5VSKogoWOKc4c?"
  464.     A$ = A$ + "m:2Mg_;glGhC7?LeWlkoj]IFIN_2m^cN6;OnOeiGDk^o^o`mDm>m<aZLl3jA"
  465.     A$ = A$ + ">eWn9CVISgn7OAU8c<]G]mNd]eGhloj;7\fcoQ_oHQUVHjhe>j>=RN]?i2^4"
  466.     A$ = A$ + "?hKnnWG9n2c5>oNgY;aeohOmeBdn5OgG]1ibc0VfC>bHYco[^PkL?lgmeK#\"
  467.     A$ = A$ + "`D;b^m;Oe6a_j7oYc9Nk_m?L7iUWHBoi?nIk;hjBOiLL7l]oY7K^j4S]Xh>?"
  468.     A$ = A$ + "i8EGOai_N\F_h7n^S0M>E\bk_O1oGkc_RKe3oZoYkK6HfiRGnh7]IfaoX?jB"
  469.     A$ = A$ + "n[lho`g^7kbC>7ij?iIKBNc;lIG?Ac7mVkH6Jni3Uk`Wo`Z1_fi_TKUmOa;g"
  470.     A$ = A$ + "Rcc=W;JQm^cfJQVO6?<]^cmjbiM>GQefj1g]FlY_bh[X\kcoZkG8bLg`EVBK"
  471.     A$ = A$ + "]C=6o;_B<UVK_EAb#1B8GKS=ZBkNb9LUZlQ?in]H3\d:I:\eQmdR^\;_YeKd"
  472.     A$ = A$ + "]<CXE3#F4`[fPacdC]HZ2kLdVVYlj9#F0NgVF4nG=8QN]6iY3jNeHb]_mMfd"
  473.     A$ = A$ + ":UkIV?P#Smf_]JL_[4P#_a6[GR?IT4d:i\<48R7;SDQ6=:8V>BhT0jd^M[X#"
  474.     A$ = A$ + "4=JBJI[2VBXSA#d\HI;IZdYb#;KJZbS>=2JaLEKF_PDfhARUQEFg4QE0Z:V["
  475.     A$ = A$ + "#N=^<9RUTP5Z0Z;10lU<:E_Z1EXElh?970MYT639]LQJe\HR\bb[4RdXFkjF"
  476.     A$ = A$ + "2TTlVeJFEW`[[im4S_H[^];K8;YHHI:C6M]e2VPBfZ4Ddf:OQl020jTA25:J"
  477.     A$ = A$ + "JJAX?Z6]KEcBV1#JUUR6go5ULa>Kf[V>Mb4IH4UiB7d[_8<5jMkSf^4K\0Q9"
  478.     A$ = A$ + "Db3Hf2i1RL6]fNkfi5bV>[PQU1G2ONl6QD[LS6U=UhhTdc3QQ\AFcGPhdb6i"
  479.     A$ = A$ + "bIRnU3MD<lIRhO]0#7M:ViAo\\#X?4b4JE?[PPVIF\Jc>8DajRT91LA1RTT2"
  480.     A$ = A$ + "1\ZBmV]JDY04992_bR;]J4:S6K]gf];1^[\V^2CD?^FHUH2U0?XNNE840aOQ"
  481.     A$ = A$ + "H;=md^2aGYgf[GF12e6EJe^\#HGgh6c7P:Gmf]ZVg#7eZINEZX[^h2N2VRC_"
  482.     A$ = A$ + "Dm6=ZE^Da2FVZ\9l]`<ci>4E^FK^cV];3He18K2I2\h\c]L`\j=gNoMkEcB5"
  483.     A$ = A$ + "1IAP:^_UFHieB[DOk3?HS:jl0<9`dX2kNn5F=Q4dkdF=<5IiDbG]NAQ8;<=0"
  484.     A$ = A$ + "gW]#[eQe<55cbX5?A`fVLVEB8T_FmJU;FZF[>][G#8nbC=neWcG:ibMgJ[N]"
  485.     A$ = A$ + "ZG]Je:5eb^j=^dG<nR9ekL`Akg[F1;X[_ZjILOm;?fdNcJeNkMfXEeB517AG"
  486.     A$ = A$ + "P8TkiWOYeB`XG^ej[g^N9;30c6GfXNGJA?1C;FXE_e[WGGEc\#YRjD1VOZYF"
  487.     A$ = A$ + "0<^fmjD[#>;dVU:ZYlLc9_UKLCge[D\#i6Mke]N>VPc=nHC^DL`[gOW^E<ed"
  488.     A$ = A$ + "cG]AESd;=nU^flATZ]i^Ke^JA0\JYLBYmiJ6GNSSPiG1R`UZDYD>5NHQfWWE"
  489.     A$ = A$ + "G;:YBYFMJFD7260DHC^8;>eD^2cIE[I3Xe2ESRPJ=iC7bcB;_JXD\Z5JdMSN"
  490.     A$ = A$ + "=;IX2eCe49l?oDgLADG;k_g6=:JZ3kkPHobX5:2UR=kd^IebX5E=AZ4nM_TK"
  491.     A$ = A$ + "8HHD]C_>#\8W90<U>^_5G`M`dlj#L\NU2`FC0f90??`b^FdG2FcZ]k21^li;"
  492.     A$ = A$ + "EdBU;ChEMkNe0a9U\ZgMc=keZ\1jh<YB^f2c<kbQX;\a]_cQ`F3M0\X89dKg"
  493.     A$ = A$ + "dck;U4dldfKd^Fi2idTH9R^Z[iFHeHd6=fnf7]Gg:iTQ698B6ao:[h;<doDk"
  494.     A$ = A$ + "M>Lo=ZK9ACT9;5IbP[jaK82EHgenmZJRBC`cC5gkB;1=K9E\mFK313C51<jh"
  495.     A$ = A$ + "d[]T[UmWB^fF7N`F=\TH1TnB\am<k=WeC<QZkLlMf[C9M9NNAA^<1#ka3CW["
  496.     A$ = A$ + "cN7MhVe1[PVVUQ<^g5L]T_4REgnhk^O;;A:2B>9IVX^WK^U33]YN_kM#klB<"
  497.     A$ = A$ + "#_#:b\#?];h9<YI[MACGa0<>D[^TAl\`BNSaELS3?JgFi11c0TICh5g0\NCd"
  498.     A$ = A$ + "XH:YRDWX\#f#^M]Xg4BEf4EeG50;c;[Yb6cclck>4Y>jcmF5D18m0X8AVT[i"
  499.     A$ = A$ + "f=:WCm=gMkf5]iFE4Ta2;]6b]gOg>5E]?fH5b#;kJYeBRJMM[^Ec1HgA7N9O"
  500.     A$ = A$ + "j0^GNe`IE[\n>KgYR9di50QGR918IOaH<Z_a>KRE87PhGV>2TPIehXnSQ_]E"
  501.     A$ = A$ + "iaM>Y;THUiVMiPPe1Y7JF#C2O`RLPTGLieB`V[iVk\A3;INl9>bUfoB;h>4Q"
  502.     A$ = A$ + "Bi^K_cjEd5#`jU152kkPH7hQ7\KW2bh8Z64XGIQ5m6W?Ok]gMSJVBXn?UUQd"
  503.     A$ = A$ + "O[jIe`4#VP]g^K53Xi7`I`TGI]HDJEj^e6=;Z9RKb0b81KU2TTeXFgNM#KI#"
  504.     A$ = A$ + "=YX8#5ckbN2TR?G]>MKEb#B0gQ47A4O[h=D6al=F_G[BjRhSdDV=E`EaWYDU"
  505.     A$ = A$ + ">mPPW<jLkTUh9C4dgJQQ>f;18#[0=iSa[cAU:B`##jM8;Jcj5=D#1491FB0g"
  506.     A$ = A$ + "J4X;K]2E[E]4T55gS3dBKdPQRQh^AkVXS?0eWT83DS`[oX4#ibF0I8[4Z_7F"
  507.     A$ = A$ + "bDA2h?DLXEnb=Je\FACEla?W=Ml`137WP7B^gYEUL`70XcTU>Cd0[1#C5]Ze"
  508.     A$ = A$ + "^5H9bH0j8Q4<#hT#Ia:=JF_D>=L7ELd4a37:LR\8EfYIIC5AlI`cT6c=]JYV"
  509.     A$ = A$ + "MkD_X>j4nQ6kY#EV0OG_2TAXFN=9L[1\IS72ZGUNXQ`S`l3L7J=8BaIF[cj]"
  510.     A$ = A$ + "`e7AC>0FK#1`<28W\1\8h\nB6?8HfI40c6YAdGXbZbL4AmkcO<BLN\ZFZP?2"
  511.     A$ = A$ + "MA83IQ`eHe:S]JIT<D6LR2L6UKfZ>DQD4MD[Z#eo`n34U#8G]fPESZI1UWd4"
  512.     A$ = A$ + "9S5H]0a8U;PG30\jB#3^:P63h?HL:ilePh44#`b#V==FSDZ5a[_8cCYoIHPV"
  513.     A$ = A$ + ";Eaj=PJg#C]8^1bA240]91Uj67W#bF6h>04X0k[NmbiDU#74\Q^4ERPn36S#"
  514.     A$ = A$ + "`\BmJUbY:S6=Q^Z04F34>19j49Z2;jbBhY3a3T32;Th3ZXPQ2JL>Hc>F#P<]"
  515.     A$ = A$ + "Bn:E;3k:]931ZHQ2618KE^J9;dWYhQo`V9:\nVRA=OU:XmC8ZX:19aKRIEcG"
  516.     A$ = A$ + "^LaLJ:X1hX[:B1XW2WPP3O8EVJ::hIM;BW2]gV0fKKCFFaF8YR42fbSV07#f"
  517.     A$ = A$ + "fK<d`29B2BPLiBiAU^0Z6ZfN3#F7Z^TgD3#IX[[9cR<K7bU`Ta3=RafK0b56"
  518.     A$ = A$ + "Q\8RLXXY#PX:KC6M#52dYS5>Ldd<BV8^cQ6mT6Vkh0iDDRPUD^X5Jh#X_cH9"
  519.     A$ = A$ + "B49LD\\;G1TR^=g8bHkfN2S6JfZT5mM3n3K4<C<g`V4AFWnDiPFlLl7T\i8C"
  520.     A$ = A$ + "69LhhIHaTk;49^\X0KL<gHQ0^n0ba`Lk8KdD0#29TS#0T]i<<#3f2n`1]<47"
  521.     A$ = A$ + "P#S>^]RFV>TQD<Q1Q`8I0Q`2fTEUi]3:99i1dg8#1j8U:;015lZ62NJ1K^A="
  522.     A$ = A$ + "ZcPlN#WX3E3MlUfBA2kVQS1hYeb10\]0#^8bLTYR5>B\d8P[8YP`o2TiYB7?"
  523.     A$ = A$ + "Jdh8b8QW7Ag0\#j<90bYXh?3iH0Idi[Q5NOb49R69JB26A]n\SV\2=1:3K<K"
  524.     A$ = A$ + "YD\HATAR>QQ\Pk7:Jb\XIf281kCV<Ml8X58T3E\42[K>3``YbP4N2T`cQ9W7"
  525.     A$ = A$ + "4^4XcTaR41Ki#<70^1^Z^2:SLl8P>9iE<QM5Ua\[>Dh\XH^3I7MJ;L#WPD6`"
  526.     A$ = A$ + "=FWI#FN1\`cQ?J4\>SU:[m9MF^HN\5BCT:^So3OC0h7;HQ8c#V9I\X8YP>^E"
  527.     A$ = A$ + "0M<Jo_\0;DM075cRfK1UN0PGjXSnTR0MHZPDT<0b8lHPoP;VT8F\hXC<=OiJ"
  528.     A$ = A$ + "eZD4I:L\dTXeRHP79W[4Z06BWl0IT=RFAQ_QZF_6Zm49dlLQBB8G:;TYX2J>"
  529.     A$ = A$ + "mi`3<fVm8`^85XhCSJU\#V2;3=VmHY#WiJm6e;3I5`WUWcRAF<NDPMD]:N`H"
  530.     A$ = A$ + "bRRj>BY9`>HRl3H7n`5JM\9T4fdA:X=6X?GD1Hi=ZQ]5KY43]a0BF0Xi[F2C"
  531.     A$ = A$ + "6\5`C7DY^NM\7Ic>lmBX8>\S\5d1PbQU>FYj5a\3V^]=RfZW0maHI\dea\cJ"
  532.     A$ = A$ + "7fQhUNQ:XX>TF4OlYXhK<XYCIXm?Xc6TdaTa\3[6Z#JkZ33<IcT<Nl4#od6#"
  533.     A$ = A$ + ">Zbh59NLl=ERh9P_H#I6#k0DAWI;VNBd5M0J;]<TW7=U2\H#lW8EFF#[U]cA"
  534.     A$ = A$ + "S538nDhk>1jTg[0[eh[JP=mDY9IQmSUa69Ni`Fl8fE]IgIi0IUYBV:;B[hDS"
  535.     A$ = A$ + "ff>=Xed9CJ;6h;<lF3di3BSIWP6MaX6b>3J59MZ<TX_OQlGf^:WM#8]mh1`Y"
  536.     A$ = A$ + "BA1BdPXI0aWVP6UF3Hgd1N37Vm<f\Sj74O;3h`QHPMd9_3I76A:D0IdUd0UG"
  537.     A$ = A$ + "3jHJ4fcT9;=?:UTUmR:_SaTQ0Mg8#7P?T>bV>bW#\;XHHQ>FCEkS67K<I`g?"
  538.     A$ = A$ + "RLiQVoejOCbL^Z2RZVf\[hLY1PNR8#:E;W5:Od9HWT1TN>ll16Q\mH3#7l0F"
  539.     A$ = A$ + "Yh11P]Ad5Q0M[<6856\D`BgNV<fgk08>R\AJ>9ESL>\KOBoTP]h85Tdk;6T="
  540.     A$ = A$ + "R^n48YP53VNOfAG>5TD>1kIA\KP;IH?d0\WRRSSJS>BY_aH>T<Go`^8VM\Dj"
  541.     A$ = A$ + "[DLP1L9C7URYK[D^Q:efW#cNQT6JWAgV<Nh4XQMP>LJ6kkMS3M4k3U>^8h8B"
  542.     A$ = A$ + "93FjhcfFcQ>BY8K4e:W^3IiQ635Ze:mQ\?#jlf3gaFYf63ff5aGS5ME7[Q7O"
  543.     A$ = A$ + "2jDfgY6Snl317TaS_l#XA3R8[<dWX0YS#F>PM\aCTU4C73gANHTl4dE6\\J7"
  544.     A$ = A$ + "b68Nd;8LBa[Y>Rhk?c`ndE`c[Q1MiQ`3DB73LbnnSP6cT3ME]QT5\WO8869<"
  545.     A$ = A$ + "^c1FS3M>7j:SHm8[QC4OoS\Sl>kQQHS=MEWUK7jhkQdXR__Ja\ggJTkkEhkh"
  546.     A$ = A$ + "ST]EZ<HY2=VaA\Bl=AbfL`3k3?U\nT79hdOjI>gEXQFYj8gW9Knk;NKWZo>4"
  547.     A$ = A$ + "Z1FY3M97jDXK<VLoHSLo]g3]NenTQe#deHc98hH=H_eAlH[di6=9i\Tk#7_8"
  548.     A$ = A$ + "i<Y9kPf`;0EoK_3\oVJ#X__d?imUBen2C=REfG[8jbHiQYSMZn\gO2Pfg6[n"
  549.     A$ = A$ + "c#\oM6J#`ai2m>:MD\DdFK37T8JL_XIH?:kfdY]795V^Tc5Q2CWQ[?mnF9V^"
  550.     A$ = A$ + "chGMXKgO??GokAEOaH?8DDiA4MW1c9eo6?Q5_=MWIAJKm3X?H6UmYS^dJ3hO"
  551.     A$ = A$ + "#`L`lAabOhUHVcI0\>;ZfF_\mmEK4jmigNlc3_bc>SEeNHc\S<bdnS7]ohon"
  552.     A$ = A$ + "0da:##LDcdNlf\lS#_ON4fCa^b9\OWaL:;gOLc>fo9XK?ELkk\]cCTMT_ClY"
  553.     A$ = A$ + "omlFJ`W:hh9k9Y;i`_3M7c\_mHkH>cLFI`]aSUm\dafIOiHCFeI<jl37LZmH"
  554.     A$ = A$ + "dEM>f8k5NWa[K?<MW;H8WSmKoIhPT9>gBm1?h4d7HomcI8HOSnhLV_lYYk<g"
  555.     A$ = A$ + "Lini<\ELo;?Pl9Ygofago1>9m6\TeoCGk;n87[S1=be04SIb9b=Ri?d1j_7e"
  556.     A$ = A$ + "A<BBWTn0mn1Y?`c>QL>9MF7mNB1i\WFjd6DomjW`3`X4?SP47AaWA1h#g8d?"
  557.     A$ = A$ + "m;8MjUPA4TdYhOd7<`B?a;<d3h7nidXd7m_Z3S#GL`=\HXY>l1LWV^STh6\i"
  558.     A$ = A$ + "J4;EH`M6iTFj`]SRWHgk7dD57n2Wf56i_77WbW?]YN29=Z;LJ9=jgISn2W98"
  559.     A$ = A$ + "=b;8n1XO2KEDLdPaIl]oMe`Il=79m1YcOJ5LB1mSXiQGWTQoMZY_6>U;`oQL"
  560.     A$ = A$ + "Q?XV7ABoHV:oI<engXVcZiANQ?\YNb[43F>OPGHT7l1d#oK2cIl1nC8XCm2W"
  561.     A$ = A$ + "T^S6n`V:o7dD7AcSN5NnaY?j3T>[T>]Y:nO0mCKAWBcRo8J^oO7\>;m1o>ee"
  562.     A$ = A$ + ";JD1eo2BM21MZGh4^V`O92j7CcO0j2WVn?j;LR[D^d8?h4dU>aKLjk]e09mQ"
  563.     A$ = A$ + "\dODGh3nPoSNQcXJQ1Jn3l2oXVjI^jISBo3:Xc8Y1G`\o_dTngEeo5JBooV?"
  564.     A$ = A$ + "l1N`O1do;k5na=Yo?HD2%%h1"
  565.  
  566.     btemp$ = ""
  567.     FOR i& = 1 TO LEN(A$) STEP 4: B$ = MID$(A$, i&, 4)
  568.         IF INSTR(1, B$, "%") THEN
  569.             FOR C% = 1 TO LEN(B$): F$ = MID$(B$, C%, 1)
  570.                 IF F$ <> "%" THEN C$ = C$ + F$
  571.             NEXT: B$ = C$: END IF: FOR j = 1 TO LEN(B$)
  572.             IF MID$(B$, j, 1) = "#" THEN
  573.         MID$(B$, j) = "@": END IF: NEXT
  574.         FOR t% = LEN(B$) TO 1 STEP -1
  575.             B& = B& * 64 + ASC(MID$(B$, t%)) - 48
  576.             NEXT: X$ = "": FOR t% = 1 TO LEN(B$) - 1
  577.             X$ = X$ + CHR$(B& AND 255): B& = B& \ 256
  578.     NEXT: btemp$ = btemp$ + X$: NEXT
  579.     SFX_HOWL$ = _INFLATE$(btemp$): btemp$ = ""
  580.  
  581.  

FellippeHeitor

  • Guest
Re: Have image protection, want sound protection!
« Reply #5 on: June 06, 2021, 09:36:28 am »
@Dav Are those sound snippets compressed or raw? If they're raw, you can likely use _SndRaw to output them, and then your program becomes multiplatform.

Offline Petr

  • Forum Resident
  • Posts: 1720
  • The best code is the DNA of the hops.
    • View Profile
Re: Have image protection, want sound protection!
« Reply #6 on: June 06, 2021, 10:19:48 am »
Quote
Are those sound snippets compressed or raw? If they're raw, you can likely use _SndRaw to output them, and then your program becomes multiplatform.

@FellippeHeitor in true, with _MEMSOUND is here NONE LIMIT for using also compressed sound files - just must be saved to harddrive first, then opened, loaded and deleted from drive :) this sound image which is acessed with _MEMSOUND can be then also played using _SNDRAW.

Offline Dav

  • Forum Resident
  • Posts: 792
    • View Profile
Re: Have image protection, want sound protection!
« Reply #7 on: June 06, 2021, 01:00:31 pm »
@Dav Are those sound snippets compressed or raw? If they're raw, you can likely use _SndRaw to output them, and then your program becomes multiplatform.

I don’t recall, I think they are uncompressed. I have them saved on a thumb drive somewhere with about 100 other small Sound effects.  That’s interesting about using _sndraw instead. I hadn’t considered using it. It’s one of those commands I really need to get a better grasp on and use in my thinking.  I’ll look into putting together a SFX pack that way.

- Dav

Offline johannhowitzer

  • Forum Regular
  • Posts: 118
    • View Profile
Re: Have image protection, want sound protection!
« Reply #8 on: June 08, 2021, 05:55:15 pm »
Thanks very much Cobalt, that was a simple, easily implemented solution!  60 image/sound files, all packed away and the game now runs anywhere on my computer as long as the MFI file is in the same folder.  It's also super easy to expand on, and I don't have to pre-process each file individually as I edit it.

Offline Cobalt

  • QB64 Developer
  • Forum Resident
  • Posts: 878
  • At 60 I become highly radioactive!
    • View Profile
Re: Have image protection, want sound protection!
« Reply #9 on: June 10, 2021, 07:15:42 am »
Thanks very much Cobalt, that was a simple, easily implemented solution!  60 image/sound files, all packed away and the game now runs anywhere on my computer as long as the MFI file is in the same folder.  It's also super easy to expand on, and I don't have to pre-process each file individually as I edit it.

Glad you find it useful.
Granted after becoming radioactive I only have a half-life!