Samples Gallery & Reference > Games
'Written In Stone' - Word Puzzle Game by Dav
(1/1)
Qwerkey:
'Written In Stone'
Author: @Dav
Source: qb64.org Forum
URL: https://www.qb64.org/forum/index.php?topic=2434.msg116494#msg116494
Version: 1.1
Tags: [Graphics], [Puzzle]
Description:
It's a word puzzle game. There are 50 well known quotes, scrambled up. Using the mouse you arrange the letters to make the quote. Only letters over and under each other can be swapped (same column), not side by side.
Source Code (given for reference only - you will need to download the .zip file):
--- Code: QB64: ---'================'WRITTEN IN STONE v1.1 by Dav for QB64-GL v1.4'================ 'A Word puzzle game by Dav (My 1st ever game in QB64)'First version coded FEB 1st-13th, 2013 for QB64-SDL.'Updated code MAR 31st, 2020 to work in QB64-GL v1.4. 'There are 50 well know quotes, all scrambled up.'Using mouse, unscramble the letters to make quote.'You can only swap letters in the same column. '======================================================'NOTE: THIS PROGRAM REQUIRES THE "winstone-data"folder' AND ALL OF ITS DATA FILES!'====================================================== DEFINT A-Z DECLARE SUB Credits ()DECLARE SUB DrawRows ()DECLARE SUB HelpScreen (imagehandle&)DECLARE SUB ConfigScreen (imagehandle&)DECLARE SUB GetQuote (quote)DECLARE SUB SelectLetter ()DECLARE SUB SelectQuote ()DECLARE SUB SelectNumber (number$, x, y, image&)DECLARE SUB ButtonShow (ButtonType%, ButtonFile$, x, y)DECLARE SUB StoneRoll (way$, image&, speed!)DECLARE SUB ScrollScreenUp (image&, speed!)DECLARE SUB ScrollScreenDown (image&, speed!)DECLARE SUB ScreenCurtain (way$, left&, right&, speed!)DECLARE SUB ScreenShake (image&, val1, val2, speed!) '=== Shared data SUBs/FUNCs use...DIM SHARED quote, maxquote, row1$, row2$, row3$DIM SHARED OrigRow1$, OrigRow2$, OrigRow3$DIM SHARED selected, selectedcol%, selectedrow%, col%, row%, sel$, sel2$DIM SHARED source$, config$, unsolved, music&, musicflag, sfxflag, timerflagDIM SHARED back& source$ = "winstone-data\" '<<<<<<---- Location of Data files! <<<<<<< 'Set screen, fullscreenSCREEN _NEWIMAGE(1024, 768, 32): _FULLSCREEN _SQUAREPIXELS 'Give it a title....DO: LOOP UNTIL _SCREENEXISTS: _TITLE "Written In Stone v1.1" LOCATE 24, 54: PRINT "Loading Data..." '==================================================================================' LOAD WINSTONE.DAT CONFIG FILE - HOLDS SOUND SETTINGS AND QUOTE INFO'=================================================================================='The config file is simple. It's 53 bytes, holding settings for 50 quotes and'3 for game settings, music, sfx, timer. CHR$(1) for TRUE, CHR$(0) for false.'Byte #1 of CHR$(0) means quote #1 isn't solved. CHR$(1) means it is, and so on... '== these are failsafes in case on config problem musicflag = 1sfxflag = 1timerflag = 1 '== max # of quotes (don't change this...)maxquote = 50 unsolved = 0 'How many quotes are solved OPEN "winstone.dat" FOR BINARY AS #1 '=== IF NO CONFIG FILE, MAKE ONE IF LOF(1) = 0 THEN '=== file not there so make a new dat file '=== mark all quotes unsolved config$ = "" FOR i = 1 TO maxquote v$ = CHR$(0) config$ = config$ + v$ 'all unsolved for now PUT #1, i, v$ unsolved = unsolved + 1 NEXT V2$ = CHR$(1) PUT #1, 51, V2$: config$ = config$ + CHR$(1) PUT #1, 52, V2$: config$ = config$ + CHR$(1) PUT #1, 53, V2$: config$ = config$ + CHR$(1) GOTO loadedconfigEND IF '=== see if file is large enough to read settings'=== if not then make a new fileIF LOF(1) > 0 AND LOF(1) < 53 THEN '(50 quotes & 3 game settings) '=== file must be currupt, so close file, kill it, make new one. CLOSE 1: KILL "winstone.dat": OPEN "winstone.dat" FOR BINARY AS #1 config$ = "" FOR i = 1 TO maxquote v$ = CHR$(0) config$ = config$ + v$ 'all unsolved for now PUT #1, i, v$ unsolved = unsolved + 1 NEXT '=== add music, sfx & timer settings (all 1 by default) V2$ = CHR$(1) PUT #1, 51, V2$: config$ = config$ + CHR$(1) PUT #1, 52, V2$: config$ = config$ + CHR$(1) PUT #1, 53, V2$: config$ = config$ + CHR$(1) GOTO loadedconfigEND IF '==== file must be there and large enough so load data.config$ = ""FOR i = 1 TO maxquote a$ = INPUT$(1, 1) config$ = config$ + a$ IF a$ = CHR$(0) THEN unsolved = unsolved + 1NEXT '=== get game settings nowIF INPUT$(1, 1) = CHR$(0) THEN musicflag = 0: config$ = config$ + CHR$(0)ELSE musicflag = 1: config$ = config$ + CHR$(1)END IFIF INPUT$(1, 1) = CHR$(0) THEN sfxflag = 0: config$ = config$ + CHR$(0)ELSE sfxflag = 1: config$ = config$ + CHR$(1)END IFIF INPUT$(1, 1) = CHR$(0) THEN timerflag = 0: config$ = config$ + CHR$(1)ELSE timerflag = 1: config$ = config$ + CHR$(1) '<<, TIMER ALWAYS 1 for nowEND IF loadedconfig: CLOSE 1 '=== CHEATER COMMAND LINE OPTION. MARKS ALL SOLVEDIF UCASE$(COMMAND$) = "/SOLVE" THEN FOR i = 1 TO maxquote MID$(config$, i, 1) = CHR$(1) NEXT unsolved = 0END IF '===================================================================================================''=================================================================================================== '==== Go ahead and Start music if musicflag on music& = _SNDOPEN(source$ + "sfx\sfx_music.ogg", "VOL,SYNC,LEN,PAUSE")IF musicflag = 1 THEN _SNDLOOP music& '===================================================================================================' OPEN SHARED IMAGE FILES'=================================================================================================== '=== load title page back& = _LOADIMAGE(source$ + "img\paper-title.jpg", 32) '===== load select menu fly in vid frames. DIM SHARED selectframe(0 TO 15) AS LONGFOR t = 0 TO 15 a$ = LTRIM$(STR$(t)) IF LEN(a$) = 2 THEN a$ = "00" + a$ IF LEN(a$) = 1 THEN a$ = "000" + a$ selectframe(t) = _LOADIMAGE(source$ + "vid\sel" + a$ + ".jpg")NEXT '==================================================================================================='=================================================================================================== _DELAY 1 'let screen res change play catch up if needed '=========== drop down screen IF sfxflag = 1 THEN _SNDPLAYFILE source$ + "sfx\sfx_dropdown.mp3"ScrollScreenDown back&, 60 IF sfxflag = 1 THEN _SNDPLAYFILE source$ + "sfx\sfx_boom.mp3"ScreenShake back&, 5, 4, 75 _DELAY 2 '=== Load images for Timer bar (3 colors) timegrn& = _LOADIMAGE(source$ + "img\time_grn2.jpg", 32)timeyel& = _LOADIMAGE(source$ + "img\time_yel2.jpg", 32)timered& = _LOADIMAGE(source$ + "img\time_red2.jpg", 32) '=========titlemenu:'========= '=== Pop in Main Menu on screenIF sfxflag = 1 THEN _SNDPLAYFILE source$ + "sfx\sfx_pop1.mp3" '<< POP soundmenutop& = _LOADIMAGE(source$ + "img\menu_top2.jpg", 32) '<< Get it,_PUTIMAGE (238, 152), menutop&, 0 '<< Set it..._FREEIMAGE menutop& '<< ... and forget it. 'draw bitton as normal firstButtonShow "startbtn.jpg", 565, 335ButtonShow "quitbtn.jpg", 565, 283ButtonShow "help.jpg", 565, 177ButtonShow "config.jpg", 565, 229 '=== get menu choice_MOUSESHOW DO DO WHILE _MOUSEINPUT mx = _MOUSEX: my = _MOUSEY LeftDown = _MOUSEBUTTON(1) '=== highlight buttons if mouse over it IF mx > 565 AND mx < 721 AND my > 335 AND my < 375 THEN ButtonShow "_startbtn.jpg", 565, 335: but1 = 1 ELSE IF but1 = 1 THEN ButtonShow "startbtn.jpg", 565, 335 but1 = 0 END IF END IF IF mx > 565 AND mx < 721 AND my > 283 AND my < 323 THEN ButtonShow "_quitbtn.jpg", 565, 283: but2 = 1 ELSE IF but2 = 1 THEN ButtonShow "quitbtn.jpg", 565, 283 but2 = 0 END IF END IF IF mx > 565 AND mx < 721 AND my > 177 AND my < 217 THEN ButtonShow "_help.jpg", 565, 177: but3 = 1 ELSE IF but3 = 1 THEN ButtonShow "help.jpg", 565, 177 but3 = 0 END IF END IF IF mx > 565 AND mx < 721 AND my > 229 AND my < 269 THEN ButtonShow "_config.jpg", 565, 229: but4 = 1 ELSE IF but4 = 1 THEN ButtonShow "config.jpg", 565, 229 but4 = 0 END IF END IF LOOP IF LeftDown THEN '=== if start button clicked IF mx > 565 AND mx < 721 AND my > 335 AND my < 375 THEN ButtonClick 1, "startbtn.jpg", 565, 335 EXIT DO END IF IF mx > 565 AND mx < 721 AND my > 283 AND my < 323 THEN ButtonClick 1, "quitbtn.jpg", 565, 283 _PUTIMAGE (0, 0), back&, 0 GOTO Quit END IF IF mx > 565 AND mx < 721 AND my > 177 AND my < 217 THEN ButtonClick 1, "help.jpg", 565, 177 _PUTIMAGE (0, 0), back&, 0 _DELAY .25 HelpScreen (back&) _DELAY .25 GOTO titlemenu END IF IF mx > 565 AND mx < 721 AND my > 229 AND my < 269 THEN ButtonClick 1, "config.jpg", 565, 229 _PUTIMAGE (0, 0), back&, 0 _DELAY .25 ConfigScreen (back&) _DELAY .25 GOTO titlemenu END IF END IF IF INKEY$ = CHR$(27) THEN GOTO Quit LOOP _PUTIMAGE (0, 0), back&, 0_DELAY .25 ScrollScreenUp back&, 75 _FREEIMAGE back& '=======================================================================================' START GAME'======================================================================================= quote = 1 'just a safety... RANDOMIZE TIMER SelectQuoteGetQuote (quote) '========NewBoard:'======== '=== scroll down playing board back& = _LOADIMAGE(source$ + "img\board6.jpg", 32) ScrollScreenDown back&, 60 DrawRows _MOUSESHOW TIMER ON '========================================================================================' MAIN GAME LOOP'======================================================================================== Mainloop: starttime! = TIMERpoppy = 0 'flag to not show more than one popup message in a secondrumbleon = 0 'flag for rumble happening _PRINTMODE _KEEPBACKGROUND: COLOR _RGB(115, 115, 115)LOCATE 17, 90: PRINT "Quote:"; quote; "("; LTRIM$(STR$(unsolved)); " to solve)"; DO '=== Catch mouse DO WHILE _MOUSEINPUT mx = _MOUSEX: my = _MOUSEY '=== break up screen in 35x35 grid col% = INT(mx / 35) - 2: row% = INT(my / 35) - 2 LeftDown = _MOUSEBUTTON(1) LOOP IF LeftDown = -1 THEN '=== clicked quote button here... IF mx > 402 AND mx < 558 AND my > 302 AND my < 342 THEN '=== turn off rumble if it was on IF rumbleon = 1 THEN IF sfxflag = 1 THEN IF _SNDPLAYING(rumble&) THEN _SNDSTOP rumble&: _SNDSTOP rumble& END IF END IF ButtonClick 0, "quote.jpg", 403, 302 ScrollScreenUp 0, 60 'scroll up current screen SelectQuote GetQuote (quote) GOTO NewBoard END IF 'Clicked HINT button IF mx > 580 AND mx < 736 AND my > 302 AND my < 342 THEN ButtonClick 0, "hint.jpg", 580, 302 'Find first hint letter here, and select it for user. 'hint letter is first letter in row that doesn't line up with origrow 'Look in 1st row first found = 0 FOR tt = 1 TO LEN(row1$) 'check row1 data H1$ = UCASE$(MID$(row1$, tt, 1)) 'get letter in row1 H2$ = UCASE$(MID$(OrigRow1$, tt, 1)) 'compare with original spot 'If row1$ part needs moved, then mark this IF H1$ <> H2$ THEN hintcol% = tt: hintrow% = 1: found = 1: EXIT FOR END IF NEXT IF found = 0 THEN FOR tt = 1 TO LEN(row2$) 'check row1 data H1$ = UCASE$(MID$(row2$, tt, 1)) 'get letter in row1 H2$ = UCASE$(MID$(OrigRow2$, tt, 1)) 'compare with original spot 'If row2$ part needs moved, then mark this IF H1$ <> H2$ THEN hintcol% = tt: hintrow% = 2: found = 1: EXIT FOR END IF NEXT END IF IF found = 0 THEN FOR tt = 1 TO LEN(row3$) 'check row1 data H1$ = UCASE$(MID$(row3$, tt, 1)) 'get letter in row1 H2$ = UCASE$(MID$(OrigRow3$, tt, 1)) 'compare with original spot 'If row3$ part needs moved, then mark this IF H1$ <> H2$ THEN hintcol% = tt: hintrow% = 3: found = 1: EXIT FOR END IF NEXT END IF IF found = 1 THEN 'flash hint letter FOR fl = 1 TO 3 letter& = _LOADIMAGE(source$ + "fnt2\_" + H1$ + ".jpg", 32) _PUTIMAGE (70 + (hintcol% * 35), 70 + (hintrow% * 35)), letter& _FREEIMAGE letter& _DELAY .15 letter& = _LOADIMAGE(source$ + "fnt2\" + H1$ + ".jpg", 32) _PUTIMAGE (70 + (hintcol% * 35), 70 + (hintrow% * 35)), letter& _FREEIMAGE letter& _DELAY .15 NEXT END IF END IF '=== clicked title menu button here... IF mx > 759 AND mx < 915 AND my > 302 AND my < 342 THEN ESCBail: '=== turn off rumble if it was on IF rumbleon = 1 THEN IF sfxflag = 1 THEN _SNDSTOP rumble& END IF ButtonClick 0, "title.jpg", 759, 302 ScrollScreenUp 0, 75 'scroll up current screen _FREEIMAGE back& 'release board as back& '=== reload title as back& '<<<<<<<<<<<<<< NEED TO CHANGE THIS STUPID WAY back& = _LOADIMAGE(source$ + "img\paper-title.jpg", 32) '=== load slide in sides (left right) left& = _LOADIMAGE(source$ + "\img\paper-title-left.jpg") right& = _LOADIMAGE(source$ + "\img\paper-title-right.jpg") ScreenCurtain "CLOSE", left&, right&, 120 _FREEIMAGE left& _FREEIMAGE right& _PUTIMAGE , back&, 0 _DELAY .25 GOTO titlemenu END IF '===If inbound col & row fields clicked IF col% <= 23 AND col% > 0 AND row% <= 3 AND row% > 0 THEN IF selected = 0 THEN '=== If no letter selected yet, then... '=== Get 1st selected letter on current row SelectLetter ELSE '=== must already but one selected, so... '=== get another selected letter (only on same Col%) '=== then do the swap in rows$, then redraw new placements. '=== if same column (but not same row)...ok IF col% = selectedcol% AND row% <> selectedrow% THEN '=== get 2nd selected letter SELECT CASE row% CASE 1: sel2$ = MID$(row1$, col%, 1) CASE 2: sel2$ = MID$(row2$, col%, 1) CASE 3: sel2$ = MID$(row3$, col%, 1) END SELECT '=== only select if not a space or empty place IF sel2$ <> " " AND sel2$ <> "" THEN '=== load 2st selected letter (highlighted one) letter& = _LOADIMAGE(source$ + "fnt2\_" + sel2$ + ".jpg", 32) _PUTIMAGE (70 + (col% * 35), 70 + (row% * 35)), letter& _FREEIMAGE letter& IF sfxflag = 1 THEN _SNDPLAYFILE source$ + "sfx\sfx_click2.mp3" '=== SWAP LETTER DISPLAY HERE FOR o = 1 TO 2 'load 2nd letter normal letter& = _LOADIMAGE(source$ + "fnt2\" + sel2$ + ".jpg", 32) _PUTIMAGE (70 + (col% * 35), 70 + (row% * 35)), letter& _FREEIMAGE letter& 'load first letter normal letter& = _LOADIMAGE(source$ + "fnt2\" + sel$ + ".jpg", 32) _PUTIMAGE (70 + (col% * 35), 70 + (selectedrow% * 35)), letter& _FREEIMAGE letter& _DELAY .05 'load 2nd letter highlighted letter& = _LOADIMAGE(source$ + "fnt2\_" + sel2$ + ".jpg", 32) _PUTIMAGE (70 + (col% * 35), 70 + (row% * 35)), letter& _FREEIMAGE letter& 'load first letter highlighted letter& = _LOADIMAGE(source$ + "fnt2\_" + sel$ + ".jpg", 32) _PUTIMAGE (70 + (col% * 35), 70 + (selectedrow% * 35)), letter& _FREEIMAGE letter& '_DELAY .02 NEXT _DELAY .2 '=== SWAP LETTERS INTERNALLY HERE 'replace current row letter with 1st sel$ letter SELECT CASE row% CASE 1: MID$(row1$, col%, 1) = sel$ CASE 2: MID$(row2$, col%, 1) = sel$ CASE 3: MID$(row3$, col%, 1) = sel$ END SELECT 'replace 1st select row with curr row letter SELECT CASE selectedrow% CASE 1: MID$(row1$, col%, 1) = sel2$ CASE 2: MID$(row2$, col%, 1) = sel2$ CASE 3: MID$(row3$, col%, 1) = sel2$ END SELECT '=== DONE! Redraw rows''' selected = 0 DrawRows END IF ELSE '=== must be a new column, so '=== un select letters, select this new one... DrawRows '=== fresh look SelectLetter END IF END IF END IF '==== If rows match original, YOU GOT IT!!!! IF row1$ = OrigRow1$ AND row2$ = OrigRow2$ AND row3$ = OrigRow3$ THEN '=== turn off rumble if it was on IF rumbleon = 1 THEN IF sfxflag = 1 THEN IF _SNDPLAYING(rumble&) THEN _SNDSTOP rumble&: _SNDSTOP rumble& END IF END IF IF sfxflag = 1 THEN _SNDPLAYFILE source$ + "sfx\sfx_clap.ogg" '=== Popup a good message rndpop$ = LTRIM$(STR$(FIX((RND * 16) + 1))) 'get 1 of 16 pop& = _LOADIMAGE(source$ + "img\pop-z-" + rndpop$ + ".jpg", 32) _PUTIMAGE (0, 450), pop&, 0: _FREEIMAGE pop& '==== flash letters here... FlashRows _DELAY 1 '=== Mark quote # as solved in config$ data MID$(config$, quote, 1) = CHR$(1) IF unsolved > 0 THEN unsolved = unsolved - 1 'decrease one from unsolved count END IF ScrollScreenUp 0, 60 '=== IF ALL QUOTES SOLVED - WIN - SHOW CREDITS!!! IF unsolved = 0 THEN Credits _AUTODISPLAY back& = _LOADIMAGE(source$ + "img\paper-title.jpg", 32) GOTO Quit END IF '=== if already solved next quote, go to select quote quote = quote + 1 IF MID$(config$, quote, 1) = CHR$(1) THEN SelectQuote '=== if at last quote, then go to select menu IF quote > maxquote THEN SelectQuote END IF '==== next quote , scroll down board again.. back& = _LOADIMAGE(source$ + "img\board6.jpg", 32) ScrollScreenDown back&, 60 GetQuote quote DrawRows GOTO Mainloop END IF END IF '=== update timer stuff here... L = INT(TIMER - starttime!) + 1 'New way to draw timer because hint delay made it skip a draw sometimes FOR V = 0 TO L IF V > 0 AND V <= 34 THEN _PUTIMAGE (88 + (V * 10), 253), timegrn& IF V > 34 AND V <= 49 THEN _PUTIMAGE (88 + (V * 10), 253), timeyel& IF V > 49 THEN _PUTIMAGE (88 + (V * 10), 253), timered& NEXT '============ GET A POPUP here ========================== rndpop$ = LTRIM$(STR$(FIX((RND * 6) + 1))) '======================================================== '=== open pop.... IF L = 2 AND poppy <> L THEN '<<<<<<<< poppy pop& = _LOADIMAGE(source$ + "img\pop-a-" + rndpop$ + ".jpg", 32) _PUTIMAGE (0, 450), pop&, 0: _FREEIMAGE pop& poppy = L '<<<<<<<< poppy END IF IF L = 10 AND poppy <> L THEN pop& = _LOADIMAGE(source$ + "img\pop-b-" + rndpop$ + ".jpg", 32) _PUTIMAGE (0, 450), pop&, 0: _FREEIMAGE pop& poppy = L '<<<<<<<< poppy END IF IF L = 18 AND poppy <> L THEN pop& = _LOADIMAGE(source$ + "img\pop-c-" + rndpop$ + ".jpg", 32) _PUTIMAGE (0, 450), pop&, 0: _FREEIMAGE pop& poppy = L '<<<<<<<< poppy END IF IF L = 26 AND poppy <> L THEN pop& = _LOADIMAGE(source$ + "img\pop-d-" + rndpop$ + ".jpg", 32) _PUTIMAGE (0, 450), pop&, 0: _FREEIMAGE pop& poppy = L '<<<<<<<< poppy END IF '==== yellow.... IF L = 34 AND poppy <> L THEN pop& = _LOADIMAGE(source$ + "img\pop-e-" + rndpop$ + ".jpg", 32) _PUTIMAGE (0, 450), pop&, 0: _FREEIMAGE pop& poppy = L '<<<<<<<< poppy END IF IF L = 41 AND poppy <> L THEN pop& = _LOADIMAGE(source$ + "img\pop-f-" + rndpop$ + ".jpg", 32) _PUTIMAGE (0, 450), pop&, 0: _FREEIMAGE pop& poppy = L '<<<<<<<< poppy END IF '=== red..... IF L = 49 AND poppy <> L THEN pop& = _LOADIMAGE(source$ + "img\pop-g-" + rndpop$ + ".jpg", 32) _PUTIMAGE (0, 450), pop&, 0: _FREEIMAGE pop& poppy = L '<<<<<<<< poppy END IF IF L = 54 AND poppy <> L THEN pop& = _LOADIMAGE(source$ + "img\pop-h-" + rndpop$ + ".jpg", 32) _PUTIMAGE (0, 450), pop&, 0: _FREEIMAGE pop& poppy = L '<<<<<<<< poppy END IF '=== Start rumble is time near end (dooom coming...) IF L > 54 AND rumbleon = 0 THEN '<<<< was 114 rumble& = _SNDOPEN(source$ + "sfx\sfx_rumble2.ogg", "VOL,SYNC,LEN,PAUSE") IF sfxflag = 1 THEN _SNDLOOP rumble& rumbleon = 1 'tag as rumble is playing END IF 'start shaking screen if > 56 or maybe if rumble on IF L > 56 THEN '=== grab current background, shake it _DISPLAY 'curr& = _SCREENIMAGE curr& = _COPYIMAGE(_DISPLAY) _AUTODISPLAY _PUTIMAGE (RND * 3, RND * 3)-(1023, 767), curr&, 0: _DISPLAY _PUTIMAGE , curr&, 0: _DISPLAY END IF '======================================================== IF L = 60 THEN '<<<< 60 seconds and timer is up '=========== Play drop down sound IF sfxflag = 1 THEN _SNDPLAYFILE source$ + "sfx\sfx_dropdown.mp3" '=== drop down screen timesup& = _LOADIMAGE(source$ + "img\paper-timeup.jpg", 32) ScrollScreenDown timesup&, 75 _SNDSTOP rumble& _SNDCLOSE rumble& '=== shake (BOOM) IF sfxflag = 1 THEN _SNDPLAYFILE source$ + "sfx\sfx_boom.mp3" ScreenShake timesup&, 5, 4, 60 _DELAY 1.5 _FREEIMAGE timesup& IF sfxflag = 1 THEN _SNDPLAYFILE source$ + "sfx\sfx_roll.ogg" StoneRoll "RIGHT", 0, 25 '=== do retry quote here, or main menu.... SelectQuote GetQuote quote 'Place board back back& = _LOADIMAGE(source$ + "img\board6.jpg", 32) ScrollScreenDown back&, 60 DrawRows GOTO Mainloop END IF IF INKEY$ = CHR$(27) THEN GOTO ESCBail LOOP Quit: '=================================================================' CLOSE ALL OPENED IMAGE & SOUND FILES, SAVE CONFIG DATA'================================================================= 'free all select frame video image handles first...FOR t = 0 TO 14 _FREEIMAGE selectframe(t)NEXT IF musicflag = 1 THEN _SNDSTOP music& _SNDCLOSE music&END IF IF sfxflag = 1 THEN roll& = _SNDOPEN(source$ + "sfx\sfx_crumble.ogg", "VOL,SYNC,LEN,PAUSE") _SNDPLAY roll&END IF 'Shake the screen a little'=== shake (BOOM)ScreenShake back&, 6, 4, 60 IF sfxflag = 1 THEN _SNDSTOP roll&: _SNDCLOSE roll& _SNDPLAYFILE source$ + "sfx\sfx_slideup.ogg"END IF ScrollScreenUp back&, 60 '===== Save config data OPEN "winstone.dat" FOR OUTPUT AS #1SEEK #1, 1PRINT #1, config$;CLOSE 1 _DELAY 1 '========================= _FREEIMAGE back&_FREEIMAGE timegrn&_FREEIMAGE timeyel&_FREEIMAGE timered& SYSTEM '=================================================================================================================' * * * * * * * * * * * SUBS/FUNCTIONS & OTHER NOTES * * * * * * * * * * * *'================================================================================================================= '================================================================================================================= SUB DrawRows () '== Draws the row1$, row2$, row3$ data to screen. '===draw row1 FOR t = 1 TO LEN(row1$) L$ = UCASE$(MID$(row1$, t, 1)) 'IF L$ = " " THEN L$ = "space" IF L$ <> " " THEN letter& = _LOADIMAGE(source$ + "fnt2\" + L$ + ".jpg", 32) _PUTIMAGE (70 + (t * 35), 105), letter& _FREEIMAGE letter& END IF NEXT '===draw row2 FOR t = 1 TO LEN(row2$) L$ = UCASE$(MID$(row2$, t, 1)) 'IF L$ = " " THEN L$ = "space" IF L$ <> " " THEN letter& = _LOADIMAGE(source$ + "fnt2\" + L$ + ".jpg", 32) _PUTIMAGE (70 + (t * 35), 140), letter& _FREEIMAGE letter& END IF NEXT '===draw row3 FOR t = 1 TO LEN(row3$) L$ = UCASE$(MID$(row3$, t, 1)) 'IF L$ = " " THEN L$ = "space" IF L$ <> " " THEN letter& = _LOADIMAGE(source$ + "fnt2\" + L$ + ".jpg", 32) _PUTIMAGE (70 + (t * 35), 175), letter& _FREEIMAGE letter& END IF NEXT END SUB '================================================================================================================= SUB FlashRows () '=== Animate quote rows for a sec to show solved. FOR flash = 1 TO 6 '===draw row1 highlighted FOR t = 1 TO LEN(row1$) L$ = UCASE$(MID$(row1$, t, 1)) 'IF L$ = " " THEN L$ = "space" IF L$ <> " " THEN letter& = _LOADIMAGE(source$ + "fnt2\_" + L$ + ".jpg", 32) _PUTIMAGE (70 + (t * 35), 105), letter& _FREEIMAGE letter& END IF NEXT '===draw row2 FOR t = 1 TO LEN(row2$) L$ = UCASE$(MID$(row2$, t, 1)) 'IF L$ = " " THEN L$ = "space" IF L$ <> " " THEN letter& = _LOADIMAGE(source$ + "fnt2\_" + L$ + ".jpg", 32) _PUTIMAGE (70 + (t * 35), 140), letter& _FREEIMAGE letter& END IF NEXT '===draw row3 FOR t = 1 TO LEN(row3$) L$ = UCASE$(MID$(row3$, t, 1)) 'IF L$ = " " THEN L$ = "space" IF L$ <> " " THEN letter& = _LOADIMAGE(source$ + "fnt2\_" + L$ + ".jpg", 32) _PUTIMAGE (70 + (t * 35), 175), letter& _FREEIMAGE letter& END IF NEXT _DELAY .15 DrawRows 'Show them normal _DELAY .15 NEXT END SUB '================================================================================================================= SUB SelectLetter () 'gets a selected letter, only if no space... SELECT CASE row% CASE 1: sel$ = MID$(row1$, col%, 1) CASE 2: sel$ = MID$(row2$, col%, 1) CASE 3: sel$ = MID$(row3$, col%, 1) END SELECT '=== dont select if a space or empty place IF sel$ = " " OR sel$ = "" THEN selected = 0 ELSE IF sfxflag = 1 THEN _SNDPLAYFILE source$ + "sfx\sfx_select.ogg" '=== load 1st selected letter (highlighted one) letter& = _LOADIMAGE(source$ + "fnt2\_" + sel$ + ".jpg", 32) _PUTIMAGE (70 + (col% * 35), 70 + (row% * 35)), letter& _FREEIMAGE letter& selected = 1: selectedrow% = row%: selectedcol% = col% END IF '=== select sound '=== time for mouse button to get up _DELAY .3 END SUB '================================================================================================================= SUB HelpScreen (imagehandle&) pic& = _LOADIMAGE(source$ + "\img\helpscreen.jpg") StoneRoll "RIGHT", pic&, 25 IF sfxflag = 1 THEN _SNDSTOP roll& _MOUSESHOW DO '=== Catch mouse DO WHILE _MOUSEINPUT mx = _MOUSEX: my = _MOUSEY LeftDown = _MOUSEBUTTON(1) IF mx > 417 AND mx < 573 AND my > 687 AND my < 727 THEN ButtonShow "_back.jpg", 417, 687 ELSE ButtonShow "back.jpg", 417, 687 END IF LOOP IF LeftDown THEN '=== if back button IF mx > 417 AND mx < 573 AND my > 687 AND my < 727 THEN ButtonClick 1, "back.jpg", 417, 687 EXIT DO END IF END IF LOOP StoneRoll "LEFT", imagehandle&, 25 _FREEIMAGE pic& END SUB '================================================================================================================= SUB ConfigScreen (imagehandle&) pic& = _LOADIMAGE(source$ + "\img\configscreen2.jpg") _DEST pic& '=== Mark setting on screen here. IF musicflag = 1 THEN LINE (451, 252)-(476, 275), _RGB32(0, 255, 0), BF 'ON = green ELSE LINE (585, 252)-(610, 275), _RGB32(0, 255, 0), BF 'OFF = green END IF IF sfxflag = 1 THEN LINE (451, 309)-(476, 332), _RGB32(0, 255, 0), BF 'ON = green ELSE LINE (587, 309)-(612, 332), _RGB32(0, 255, 0), BF 'OFF = green END IF IF timerflag = 1 THEN LINE (451, 369)-(477, 393), _RGB32(0, 255, 0), BF 'ON = green ELSE LINE (588, 370)-(614, 394), _RGB32(0, 255, 0), BF 'OFF = green END IF _DEST 0 IF sfxflag = 1 THEN _SNDPLAYFILE source$ + "sfx\sfx_roll.ogg" StoneRoll "RIGHT", pic&, 25 ConfigTop: _MOUSESHOW DO '=== Catch mouse DO WHILE _MOUSEINPUT mx = _MOUSEX: my = _MOUSEY LeftDown = _MOUSEBUTTON(1) IF mx > 417 AND mx < 573 AND my > 687 AND my < 727 THEN ButtonShow "_back.jpg", 417, 687 ELSE ButtonShow "back.jpg", 417, 687 END IF LOOP IF LeftDown THEN '=== if back button IF mx > 417 AND mx < 573 AND my > 687 AND my < 727 THEN ButtonClick 1, "back.jpg", 417, 687 EXIT DO END IF 'Music ON click IF mx > 451 AND mx < 477 AND my > 252 AND my < 276 THEN musicflag = 1 MID$(config$, 51, 1) = CHR$(1) 'MARK CONFIG SPOT AS MUSIC ON _SNDLOOP music& IF sfxflag = 1 THEN _SNDPLAYFILE source$ + "sfx\sfx_click2.mp3" LINE (451, 252)-(476, 275), _RGB32(0, 255, 0), BF 'ON = green LINE (585, 252)-(610, 275), _RGB32(255, 255, 255), BF 'OFF = white _DELAY .3 END IF 'Music OFF clicked IF mx > 585 AND mx < 610 AND my > 252 AND my < 275 THEN musicflag = 0 MID$(config$, 51, 1) = CHR$(0) 'MARK CONFIG SPOT AS MUSIC OFF _SNDSTOP music& IF sfxflag = 1 THEN _SNDPLAYFILE source$ + "sfx\sfx_click2.mp3" LINE (451, 252)-(476, 275), _RGB32(255, 255, 255), BF 'ON LINE (585, 252)-(610, 275), _RGB32(0, 255, 0), BF 'OFF _DELAY .3 END IF 'SFX ON clicked IF mx > 451 AND mx < 477 AND my > 309 AND my < 333 THEN sfxflag = 1 MID$(config$, 52, 1) = CHR$(1) 'MARK CONFIG SPOT AS SFX ON _SNDPLAYFILE source$ + "sfx\sfx_click2.mp3" LINE (451, 309)-(476, 332), _RGB32(0, 255, 0), BF 'ON LINE (587, 309)-(612, 332), _RGB32(255, 255, 255), BF _DELAY .3 END IF 'SFX OFF clicked IF mx > 587 AND mx < 612 AND my > 309 AND my < 332 THEN sfxflag = 0 MID$(config$, 52, 1) = CHR$(0) 'MARK CONFIG SPOT AS SFX OFF _SNDPLAYFILE source$ + "sfx\sfx_click2.mp3" LINE (451, 309)-(476, 332), _RGB32(255, 255, 255), BF 'ON LINE (587, 309)-(612, 332), _RGB32(0, 255, 0), BF _DELAY .3 END IF 'TIMER OFF CLICKED IF mx > 588 AND mx < 614 AND my > 370 AND my < 394 THEN timerflag = 1 MID$(config$, 53, 1) = CHR$(1) 'MARK CONFIG SPOT AS TIMER ON IF sfxflag = 1 THEN _SNDPLAYFILE source$ + "sfx\sfx_click2.mp3" _DELAY .3 _DISPLAY snapshot& = _COPYIMAGE(_DISPLAY) _AUTODISPLAY timerwimp& = _LOADIMAGE(source$ + "img\timernotice.jpg") _PUTIMAGE (218, 160), timerwimp&, 0 _FREEIMAGE timerwimp& '=== wait for Reply... DO cheese = _MOUSEINPUT mx2 = _MOUSEX: my2 = _MOUSEY LeftDown2 = _MOUSEBUTTON(1) 'hover button IF mx2 > 286 AND mx2 < 717 AND my2 > 466 AND my2 < 520 THEN ButtonShow "_wimp.jpg", 286, 466 IF _MOUSEBUTTON(1) THEN ButtonClick 1, "wimp.jpg", 286, 466 EXIT DO END IF ELSE ButtonShow "wimp.jpg", 286, 466 END IF LOOP _PUTIMAGE , snapshot&, 0 _FREEIMAGE snapshot& GOTO ConfigTop END IF '==== RESET GAME CLICKED IF mx > 369 AND mx < 617 AND my > 585 AND my < 639 THEN ButtonClick 0, "reset.jpg", 369, 585 _DISPLAY snapshot& = _COPYIMAGE(_DISPLAY) _AUTODISPLAY timerwimp& = _LOADIMAGE(source$ + "img\resetnotice.jpg") _PUTIMAGE (276, 160), timerwimp&, 0 _FREEIMAGE timerwimp& '=== Get YES or NO DO cheese = _MOUSEINPUT mx2 = _MOUSEX: my2 = _MOUSEY LeftDown2 = _MOUSEBUTTON(1) 'YES button poll IF mx2 > 318 AND mx2 < 474 AND my2 > 395 AND my2 < 435 THEN ButtonShow "_yes.jpg", 318, 395 IF _MOUSEBUTTON(1) THEN ButtonClick 1, "yes.jpg", 318, 395 '=== RESET CONFIG DATA HERE (ONLY QUOTE STUFF) FOR cc = 1 TO 50 MID$(config$, cc, 1) = CHR$(0) NEXT unsolved = 50 EXIT DO END IF ELSE ButtonShow "yes.jpg", 318, 395 END IF 'NO BUTTON poll IF mx2 > 516 AND mx2 < 672 AND my2 > 395 AND my2 < 435 THEN ButtonShow "_no.jpg", 516, 395 IF _MOUSEBUTTON(1) THEN ButtonClick 1, "no.jpg", 516, 395 EXIT DO END IF ELSE ButtonShow "no.jpg", 516, 395 END IF LOOP _PUTIMAGE , snapshot&, 0 _FREEIMAGE snapshot& GOTO ConfigTop END IF END IF LOOP IF sfxflag = 1 THEN _SNDPLAYFILE source$ + "sfx\sfx_roll.ogg" StoneRoll "LEFT", imagehandle&, 25 _FREEIMAGE pic& END SUB '================================================================================================================= SUB SelectQuote () '=== Brings up Select Quote Menu selectmenu& = _LOADIMAGE(source$ + "img\select.jpg", 32) solvedimg& = _LOADIMAGE(source$ + "img\solved.jpg", 32) '=== Play Select menu fly in vid '======================== FOR t = 15 TO 0 STEP -1 _PUTIMAGE (0, 0), selectframe(t) _LIMIT 40 NEXT _PUTIMAGE , selectmenu&, 0 '======================= _FREEIMAGE selectmenu& 'no need it because we're going to change it so much, just grab background now '=== If quotes have been solved, put solved tag image .. IF MID$(config$, 1, 1) = CHR$(1) THEN _PUTIMAGE (209, 173), solvedimg&, 0 IF MID$(config$, 2, 1) = CHR$(1) THEN _PUTIMAGE (284, 173), solvedimg&, 0 IF MID$(config$, 3, 1) = CHR$(1) THEN _PUTIMAGE (359, 173), solvedimg&, 0 IF MID$(config$, 4, 1) = CHR$(1) THEN _PUTIMAGE (434, 173), solvedimg&, 0 IF MID$(config$, 5, 1) = CHR$(1) THEN _PUTIMAGE (509, 173), solvedimg&, 0 IF MID$(config$, 6, 1) = CHR$(1) THEN _PUTIMAGE (584, 173), solvedimg&, 0 IF MID$(config$, 7, 1) = CHR$(1) THEN _PUTIMAGE (659, 173), solvedimg&, 0 IF MID$(config$, 8, 1) = CHR$(1) THEN _PUTIMAGE (734, 173), solvedimg&, 0 IF MID$(config$, 9, 1) = CHR$(1) THEN _PUTIMAGE (209, 235), solvedimg&, 0 IF MID$(config$, 10, 1) = CHR$(1) THEN _PUTIMAGE (284, 235), solvedimg&, 0 IF MID$(config$, 11, 1) = CHR$(1) THEN _PUTIMAGE (359, 235), solvedimg&, 0 IF MID$(config$, 12, 1) = CHR$(1) THEN _PUTIMAGE (434, 235), solvedimg&, 0 IF MID$(config$, 13, 1) = CHR$(1) THEN _PUTIMAGE (509, 235), solvedimg&, 0 IF MID$(config$, 14, 1) = CHR$(1) THEN _PUTIMAGE (584, 235), solvedimg&, 0 IF MID$(config$, 15, 1) = CHR$(1) THEN _PUTIMAGE (659, 235), solvedimg&, 0 IF MID$(config$, 16, 1) = CHR$(1) THEN _PUTIMAGE (734, 235), solvedimg&, 0 IF MID$(config$, 17, 1) = CHR$(1) THEN _PUTIMAGE (209, 297), solvedimg&, 0 IF MID$(config$, 18, 1) = CHR$(1) THEN _PUTIMAGE (284, 297), solvedimg&, 0 IF MID$(config$, 19, 1) = CHR$(1) THEN _PUTIMAGE (359, 297), solvedimg&, 0 IF MID$(config$, 20, 1) = CHR$(1) THEN _PUTIMAGE (434, 297), solvedimg&, 0 IF MID$(config$, 21, 1) = CHR$(1) THEN _PUTIMAGE (509, 297), solvedimg&, 0 IF MID$(config$, 22, 1) = CHR$(1) THEN _PUTIMAGE (584, 297), solvedimg&, 0 IF MID$(config$, 23, 1) = CHR$(1) THEN _PUTIMAGE (659, 297), solvedimg&, 0 IF MID$(config$, 24, 1) = CHR$(1) THEN _PUTIMAGE (734, 297), solvedimg&, 0 IF MID$(config$, 25, 1) = CHR$(1) THEN _PUTIMAGE (209, 359), solvedimg&, 0 IF MID$(config$, 26, 1) = CHR$(1) THEN _PUTIMAGE (284, 359), solvedimg&, 0 IF MID$(config$, 27, 1) = CHR$(1) THEN _PUTIMAGE (359, 359), solvedimg&, 0 IF MID$(config$, 28, 1) = CHR$(1) THEN _PUTIMAGE (434, 359), solvedimg&, 0 IF MID$(config$, 29, 1) = CHR$(1) THEN _PUTIMAGE (509, 359), solvedimg&, 0 IF MID$(config$, 30, 1) = CHR$(1) THEN _PUTIMAGE (584, 359), solvedimg&, 0 IF MID$(config$, 31, 1) = CHR$(1) THEN _PUTIMAGE (659, 359), solvedimg&, 0 IF MID$(config$, 32, 1) = CHR$(1) THEN _PUTIMAGE (734, 359), solvedimg&, 0 IF MID$(config$, 33, 1) = CHR$(1) THEN _PUTIMAGE (209, 421), solvedimg&, 0 IF MID$(config$, 34, 1) = CHR$(1) THEN _PUTIMAGE (284, 421), solvedimg&, 0 IF MID$(config$, 35, 1) = CHR$(1) THEN _PUTIMAGE (359, 421), solvedimg&, 0 IF MID$(config$, 36, 1) = CHR$(1) THEN _PUTIMAGE (434, 421), solvedimg&, 0 IF MID$(config$, 37, 1) = CHR$(1) THEN _PUTIMAGE (509, 421), solvedimg&, 0 IF MID$(config$, 38, 1) = CHR$(1) THEN _PUTIMAGE (584, 421), solvedimg&, 0 IF MID$(config$, 39, 1) = CHR$(1) THEN _PUTIMAGE (659, 421), solvedimg&, 0 IF MID$(config$, 40, 1) = CHR$(1) THEN _PUTIMAGE (734, 421), solvedimg&, 0 IF MID$(config$, 41, 1) = CHR$(1) THEN _PUTIMAGE (209, 483), solvedimg&, 0 IF MID$(config$, 42, 1) = CHR$(1) THEN _PUTIMAGE (284, 483), solvedimg&, 0 IF MID$(config$, 43, 1) = CHR$(1) THEN _PUTIMAGE (359, 483), solvedimg&, 0 IF MID$(config$, 44, 1) = CHR$(1) THEN _PUTIMAGE (434, 483), solvedimg&, 0 IF MID$(config$, 45, 1) = CHR$(1) THEN _PUTIMAGE (509, 483), solvedimg&, 0 IF MID$(config$, 46, 1) = CHR$(1) THEN _PUTIMAGE (584, 483), solvedimg&, 0 IF MID$(config$, 47, 1) = CHR$(1) THEN _PUTIMAGE (659, 483), solvedimg&, 0 IF MID$(config$, 48, 1) = CHR$(1) THEN _PUTIMAGE (734, 483), solvedimg&, 0 IF MID$(config$, 49, 1) = CHR$(1) THEN _PUTIMAGE (209, 545), solvedimg&, 0 IF MID$(config$, 50, 1) = CHR$(1) THEN _PUTIMAGE (284, 545), solvedimg&, 0 '===load select menu message based on solved # IF unsolved = 0 THEN selectmsg& = _LOADIMAGE(source$ + "img\select-champ.jpg", 32) _PUTIMAGE (376, 547), selectmsg&, 0 ELSE selectmsg& = _LOADIMAGE(source$ + "img\select-msg.jpg", 32) _PUTIMAGE (400, 548), selectmsg&, 0 END IF _FREEIMAGE selectmsg& 'NOW grab screen again as select menu '=== Grab background _DISPLAY selectmenu& = _COPYIMAGE(_DISPLAY) _AUTODISPLAY '=== get menu choice _MOUSESHOW DO '=== Catch mouse DO WHILE _MOUSEINPUT mx = _MOUSEX: my = _MOUSEY: LeftDown = _MOUSEBUTTON(1) LOOP IF LeftDown THEN '== 1 IF mx > 209 AND mx < 277 AND my > 173 AND my < 227 THEN SelectNumber "1", 209, 173, selectmenu&: EXIT DO END IF '== 2 IF mx > 284 AND mx < 353 AND my > 173 AND my < 227 THEN SelectNumber "2", 284, 173, selectmenu&: EXIT DO END IF '== 3 IF mx > 359 AND mx < 428 AND my > 173 AND my < 227 THEN SelectNumber "3", 359, 173, selectmenu&: EXIT DO END IF '== 4 IF mx > 434 AND mx < 503 AND my > 173 AND my < 227 THEN SelectNumber "4", 434, 173, selectmenu&: EXIT DO END IF '== 5 IF mx > 509 AND mx < 578 AND my > 173 AND my < 227 THEN SelectNumber "5", 509, 173, selectmenu&: EXIT DO END IF '== 6 IF mx > 584 AND mx < 652 AND my > 173 AND my < 227 THEN SelectNumber "6", 584, 173, selectmenu&: EXIT DO END IF '== 7 IF mx > 659 AND mx < 727 AND my > 173 AND my < 227 THEN SelectNumber "7", 659, 173, selectmenu&: EXIT DO END IF '== 8 IF mx > 734 AND mx < 803 AND my > 173 AND my < 227 THEN SelectNumber "8", 734, 173, selectmenu&: EXIT DO END IF '== 9 IF mx > 209 AND mx < 278 AND my > 235 AND my < 289 THEN SelectNumber "9", 209, 235, selectmenu&: EXIT DO END IF '== 10 IF mx > 284 AND mx < 353 AND my > 235 AND my < 289 THEN SelectNumber "10", 284, 235, selectmenu&: EXIT DO END IF '== 11 IF mx > 359 AND mx < 428 AND my > 235 AND my < 289 THEN SelectNumber "11", 359, 235, selectmenu&: EXIT DO END IF '== 12 IF mx > 434 AND mx < 503 AND my > 235 AND my < 289 THEN SelectNumber "12", 434, 235, selectmenu&: EXIT DO END IF '== 13 IF mx > 509 AND mx < 578 AND my > 235 AND my < 289 THEN SelectNumber "13", 509, 235, selectmenu&: EXIT DO END IF '=== 14 IF mx > 584 AND mx < 653 AND my > 235 AND my < 289 THEN SelectNumber "14", 584, 235, selectmenu&: EXIT DO END IF '=== 15 IF mx > 659 AND mx < 728 AND my > 235 AND my < 289 THEN SelectNumber "15", 659, 235, selectmenu&: EXIT DO END IF '=== 16 IF mx > 734 AND mx < 803 AND my > 235 AND my < 289 THEN SelectNumber "16", 734, 235, selectmenu&: EXIT DO END IF '=== 17 IF mx > 209 AND mx < 278 AND my > 297 AND my < 351 THEN SelectNumber "17", 209, 297, selectmenu&: EXIT DO END IF '=== 18 IF mx > 284 AND mx < 353 AND my > 297 AND my < 351 THEN SelectNumber "18", 284, 297, selectmenu&: EXIT DO END IF '=== 19 IF mx > 359 AND mx < 428 AND my > 297 AND my < 351 THEN SelectNumber "19", 359, 297, selectmenu&: EXIT DO END IF '=== 20 IF mx > 434 AND mx < 503 AND my > 297 AND my < 351 THEN SelectNumber "20", 434, 297, selectmenu&: EXIT DO END IF '=== 21 IF mx > 509 AND mx < 578 AND my > 297 AND my < 351 THEN SelectNumber "21", 509, 297, selectmenu&: EXIT DO END IF '=== 22 IF mx > 584 AND mx < 653 AND my > 297 AND my < 351 THEN SelectNumber "22", 584, 297, selectmenu&: EXIT DO END IF '=== 23 IF mx > 659 AND mx < 728 AND my > 297 AND my < 351 THEN SelectNumber "23", 659, 297, selectmenu&: EXIT DO END IF '=== 24 IF mx > 734 AND mx < 803 AND my > 297 AND my < 351 THEN SelectNumber "24", 734, 297, selectmenu&: EXIT DO END IF '=== 25 IF mx > 209 AND mx < 278 AND my > 359 AND my < 413 THEN SelectNumber "25", 209, 359, selectmenu&: EXIT DO END IF '=== 26 IF mx > 284 AND mx < 353 AND my > 359 AND my < 413 THEN SelectNumber "26", 284, 359, selectmenu&: EXIT DO END IF '=== 27 IF mx > 359 AND mx < 428 AND my > 359 AND my < 413 THEN SelectNumber "27", 359, 359, selectmenu&: EXIT DO END IF '=== 28 IF mx > 434 AND mx < 503 AND my > 359 AND my < 413 THEN SelectNumber "28", 434, 359, selectmenu&: EXIT DO END IF '=== 29 IF mx > 509 AND mx < 578 AND my > 359 AND my < 413 THEN SelectNumber "29", 509, 359, selectmenu&: EXIT DO END IF '=== 30 IF mx > 584 AND mx < 653 AND my > 359 AND my < 413 THEN SelectNumber "30", 584, 359, selectmenu&: EXIT DO END IF '=== 31 IF mx > 659 AND mx < 728 AND my > 359 AND my < 413 THEN SelectNumber "31", 659, 359, selectmenu&: EXIT DO END IF '=== 32 IF mx > 734 AND mx < 803 AND my > 359 AND my < 413 THEN SelectNumber "32", 734, 359, selectmenu&: EXIT DO END IF '=== 33 IF mx > 209 AND mx < 278 AND my > 421 AND my < 475 THEN SelectNumber "33", 209, 421, selectmenu&: EXIT DO END IF '=== 34 IF mx > 284 AND mx < 353 AND my > 421 AND my < 475 THEN SelectNumber "34", 284, 421, selectmenu&: EXIT DO END IF '=== 35 IF mx > 359 AND mx < 428 AND my > 421 AND my < 475 THEN SelectNumber "35", 359, 421, selectmenu&: EXIT DO END IF '=== 36 IF mx > 434 AND mx < 503 AND my > 421 AND my < 475 THEN SelectNumber "36", 434, 421, selectmenu&: EXIT DO END IF '=== 37 IF mx > 509 AND mx < 578 AND my > 421 AND my < 475 THEN SelectNumber "37", 509, 421, selectmenu&: EXIT DO END IF '=== 38 IF mx > 584 AND mx < 653 AND my > 421 AND my < 475 THEN SelectNumber "38", 584, 421, selectmenu&: EXIT DO END IF '=== 39 IF mx > 659 AND mx < 728 AND my > 421 AND my < 475 THEN SelectNumber "39", 659, 421, selectmenu&: EXIT DO END IF '=== 40 IF mx > 734 AND mx < 803 AND my > 421 AND my < 475 THEN SelectNumber "40", 734, 421, selectmenu&: EXIT DO END IF '=== 41 IF mx > 209 AND mx < 278 AND my > 483 AND my < 537 THEN SelectNumber "41", 209, 483, selectmenu&: EXIT DO END IF '=== 42 IF mx > 284 AND mx < 353 AND my > 483 AND my < 537 THEN SelectNumber "42", 284, 483, selectmenu&: EXIT DO END IF '=== 43 IF mx > 359 AND mx < 428 AND my > 483 AND my < 537 THEN SelectNumber "43", 359, 483, selectmenu&: EXIT DO END IF '=== 44 IF mx > 434 AND mx < 503 AND my > 483 AND my < 537 THEN SelectNumber "44", 434, 483, selectmenu&: EXIT DO END IF '=== 45 IF mx > 509 AND mx < 578 AND my > 483 AND my < 537 THEN SelectNumber "45", 509, 483, selectmenu&: EXIT DO END IF '=== 46 IF mx > 584 AND mx < 653 AND my > 483 AND my < 537 THEN SelectNumber "46", 584, 483, selectmenu&: EXIT DO END IF '=== 47 IF mx > 659 AND mx < 728 AND my > 483 AND my < 537 THEN SelectNumber "47", 659, 483, selectmenu&: EXIT DO END IF '=== 48 IF mx > 734 AND mx < 803 AND my > 483 AND my < 537 THEN SelectNumber "48", 734, 483, selectmenu&: EXIT DO END IF '=== 49 IF mx > 209 AND mx < 278 AND my > 545 AND my < 599 THEN SelectNumber "49", 209, 545, selectmenu&: EXIT DO END IF '=== 50 IF mx > 284 AND mx < 353 AND my > 545 AND my < 599 THEN SelectNumber "50", 284, 545, selectmenu&: EXIT DO END IF END IF LOOP '=== Play select menu again, flying out. '======================== FOR t = 0 TO 15 _PUTIMAGE (0, 0), selectframe(t) _DISPLAY _LIMIT 40 NEXT '======================= _FREEIMAGE selectmenu& _FREEIMAGE solvedimg& END SUB SUB SelectNumber (number$, x, y, image&) IF sfxflag = 1 THEN _SNDPLAYFILE source$ + "sfx\sfx_click.mp3" btn& = _LOADIMAGE(source$ + "num\" + number$ + ".jpg", 32) _PUTIMAGE (x, y), btn&, 0: _FREEIMAGE btn& _DELAY .15: _PUTIMAGE (0, 0), image&, 0: _DELAY .15 quote = VAL(number$)END SUB '================================================================================================================ SUB GetQuote (quote) '=== Gets new quote to solve based on quote value, '=== Sets the Row data... SELECT CASE quote '' QUOTES MUST NOT BE LONGER THAN 23 LETTERS ON ONE ROW '' AND ALL ROWS SHOULD BE SAME LENGTH (PAD WITH SPACES) CASE 1 OrigRow1$ = "GREAT MINDS ": row1$ = OrigRow1$ OrigRow2$ = "THINK ALIKE ": row2$ = OrigRow2$ OrigRow3$ = " ": row3$ = OrigRow3$ CASE 2 OrigRow1$ = "TO ERR IS HUMAN ": row1$ = OrigRow1$ OrigRow2$ = "TO FORGIVE DEVINE": row2$ = OrigRow2$ OrigRow3$ = " ": row3$ = OrigRow3$ CASE 3 OrigRow1$ = "IT AINT OVER TILL ": row1$ = OrigRow1$ OrigRow2$ = "THE FAT LADY SINGS ": row2$ = OrigRow2$ OrigRow3$ = " ": row3$ = OrigRow3$ CASE 4 OrigRow1$ = "A ROLLING STONE ": row1$ = OrigRow1$ OrigRow2$ = "GATHERS NO MOSS ": row2$ = OrigRow2$ OrigRow3$ = " ": row3$ = OrigRow3$ CASE 5 OrigRow1$ = "LAUGHTER IS THE ": row1$ = OrigRow1$ OrigRow2$ = "BEST MEDICINE ": row2$ = OrigRow2$ OrigRow3$ = " ": row3$ = OrigRow3$ CASE 6 OrigRow1$ = "ABSENCE MAKES THE ": row1$ = OrigRow1$ OrigRow2$ = "HEART GROW FONDER ": row2$ = OrigRow2$ OrigRow3$ = " ": row3$ = OrigRow3$ CASE 7 OrigRow1$ = "YOU CANT HAVE YOUR ": row1$ = OrigRow1$ OrigRow2$ = "CAKE AND EAT IT TOO": row2$ = OrigRow2$ OrigRow3$ = " ": row3$ = OrigRow3$ CASE 8 OrigRow1$ = "IF AT FIRST YOU DONT ": row1$ = OrigRow1$ OrigRow2$ = "SUCCEED TRY TRY AGAIN": row2$ = OrigRow2$ OrigRow3$ = " ": row3$ = OrigRow3$ CASE 9 OrigRow1$ = "NECESSITY IS ": row1$ = OrigRow1$ OrigRow2$ = "THE MOTHER OF ": row2$ = OrigRow2$ OrigRow3$ = "INVENTION ": row3$ = OrigRow3$ CASE 10 OrigRow1$ = "CLEANLINESS ": row1$ = OrigRow1$ OrigRow2$ = "IS NEXT TO ": row2$ = OrigRow2$ OrigRow3$ = "GODLINESS": row3$ = OrigRow3$ CASE 11 OrigRow1$ = "THE BIGGER THEY ": row1$ = OrigRow1$ OrigRow2$ = "ARE THE HARDER ": row2$ = OrigRow2$ OrigRow3$ = "THEY FALL ": row3$ = OrigRow3$ CASE 12 OrigRow1$ = "ACTIONS SPEAK ": row1$ = OrigRow1$ OrigRow2$ = "LOUDER THAN ": row2$ = OrigRow2$ OrigRow3$ = "WORDS ": row3$ = OrigRow3$ CASE 13 OrigRow1$ = "A CHAIN IS ONLY ": row1$ = OrigRow1$ OrigRow2$ = "AS STRONG AS ITS ": row2$ = OrigRow2$ OrigRow3$ = "WEAKEST LINK ": row3$ = OrigRow3$ CASE 14 OrigRow1$ = "BIRDS OF A ": row1$ = OrigRow1$ OrigRow2$ = "FEATHER FLOCK ": row2$ = OrigRow2$ OrigRow3$ = "TOGETHER ": row3$ = OrigRow3$ CASE 15 OrigRow1$ = "WHEN THE CATS ": row1$ = OrigRow1$ OrigRow2$ = "AWAY THE MICE ": row2$ = OrigRow2$ OrigRow3$ = "WILL PLAY ": row3$ = OrigRow3$ CASE 16 OrigRow1$ = "A FOOL AND HIS ": row1$ = OrigRow1$ OrigRow2$ = "MONEY ARE SOON ": row2$ = OrigRow2$ OrigRow3$ = "PARTED ": row3$ = OrigRow3$ CASE 17 OrigRow1$ = "NONE SO BLIND ": row1$ = OrigRow1$ OrigRow2$ = "AS THOSE WHO ": row2$ = OrigRow2$ OrigRow3$ = "WILL NOT SEE ": row3$ = OrigRow3$ CASE 18 OrigRow1$ = "YOU CANT JUDGE ": row1$ = OrigRow1$ OrigRow2$ = "A BOOK BY ITS ": row2$ = OrigRow2$ OrigRow3$ = "COVER ": row3$ = OrigRow3$ CASE 19 OrigRow1$ = "DONT PUT ALL ": row1$ = OrigRow1$ OrigRow2$ = "YOUR EGGS IN ": row2$ = OrigRow2$ OrigRow3$ = "ONE BASKET ": row3$ = OrigRow3$ CASE 20 OrigRow1$ = "FOOLS RUSH IN ": row1$ = OrigRow1$ OrigRow2$ = "WHERE ANGELS ": row2$ = OrigRow2$ OrigRow3$ = "FEAR TO TREAD ": row3$ = OrigRow3$ CASE 21 OrigRow1$ = "ALL WORK AND NO ": row1$ = OrigRow1$ OrigRow2$ = "PLAY MAKES JACK ": row2$ = OrigRow2$ OrigRow3$ = "A DULL BOY ": row3$ = OrigRow3$ CASE 22 OrigRow1$ = "OLD SOLDIERS NEVER ": row1$ = OrigRow1$ OrigRow2$ = "DIE THEY SIMPLY ": row2$ = OrigRow2$ OrigRow3$ = "FADE AWAY ": row3$ = OrigRow3$ CASE 23 OrigRow1$ = "DONT COUNT YOUR ": row1$ = OrigRow1$ OrigRow2$ = "CHICKENS BEFORE ": row2$ = OrigRow2$ OrigRow3$ = "THEY ARE HATCHED": row3$ = OrigRow3$ CASE 24 OrigRow1$ = "LIGHTNING NEVER ": row1$ = OrigRow1$ OrigRow2$ = "STRIKES TWICE IN ": row2$ = OrigRow2$ OrigRow3$ = "THE SAME PLACE ": row3$ = OrigRow3$ CASE 25 OrigRow1$ = "AN OUNCE OF PREVENTION": row1$ = OrigRow1$ OrigRow2$ = "IS WORTH A POUND OF": row2$ = OrigRow2$ OrigRow3$ = " CURE ": row3$ = OrigRow3$ CASE 26 OrigRow1$ = "DONT CROSS YOUR ": row1$ = OrigRow1$ OrigRow2$ = "BRIDGES BEFORE ": row2$ = OrigRow2$ OrigRow3$ = "YOU COME TO THEM": row3$ = OrigRow3$ CASE 27 OrigRow1$ = "IT WAS THE LAST ": row1$ = OrigRow1$ OrigRow2$ = "STRAW THAT BROKE ": row2$ = OrigRow2$ OrigRow3$ = "THE CAMELS BACk": row3$ = OrigRow3$ CASE 28 OrigRow1$ = "YOU CAN CATCH MORE ": row1$ = OrigRow1$ OrigRow2$ = "FLIES WITH HONEY ": row2$ = OrigRow2$ OrigRow3$ = "THAN WITH VINEGAR ": row3$ = OrigRow3$ CASE 29 OrigRow1$ = "NEVER PUT OFF UNTIL": row1$ = OrigRow1$ OrigRow2$ = "TOMORROW WHAT YOU ": row2$ = OrigRow2$ OrigRow3$ = "CAN DO TODAY ": row3$ = OrigRow3$ CASE 30 OrigRow1$ = "IF YOU LIE DOWN ": row1$ = OrigRow1$ OrigRow2$ = "WITH DOGS YOU WILL": row2$ = OrigRow2$ OrigRow3$ = "GET UP WITH FLEAS ": row3$ = OrigRow3$ CASE 31 OrigRow1$ = "THOSE WHO LIVE IN ": row1$ = OrigRow1$ OrigRow2$ = "GLASS HOUSES SHOULD": row2$ = OrigRow2$ OrigRow3$ = "NOT THROW STONES ": row3$ = OrigRow3$ CASE 32 OrigRow1$ = " NECESSITY IS A HARD": row1$ = OrigRow1$ OrigRow2$ = "NURSE BUT SHE RAISES": row2$ = OrigRow2$ OrigRow3$ = "STRONG CHILDREN ": row3$ = OrigRow3$ CASE 33 OrigRow1$ = "IT IS BETTER TO BE ": row1$ = OrigRow1$ OrigRow2$ = "GREEN AND GROWING ": row2$ = OrigRow2$ OrigRow3$ = "THAN RIPE AND ROTTEN": row3$ = OrigRow3$ CASE 34 OrigRow1$ = "HE WHO FIGHTS AND ": row1$ = OrigRow1$ OrigRow2$ = "RUNS AWAY MAY LIVE ": row2$ = OrigRow2$ OrigRow3$ = "TO FIGHT ANOTHER DAY": row3$ = OrigRow3$ CASE 35 OrigRow1$ = "YOU CAN LEAD A HORSE": row1$ = OrigRow1$ OrigRow2$ = "TO WATER BUT YOU ": row2$ = OrigRow2$ OrigRow3$ = "CANT MAKE HIM DRINK ": row3$ = OrigRow3$ CASE 36 OrigRow1$ = "THE GRASS IS ALWAYS": row1$ = OrigRow1$ OrigRow2$ = "GREENER ON THE OTHER": row2$ = OrigRow2$ OrigRow3$ = "SIDE OF THE FENCE ": row3$ = OrigRow3$ CASE 37 OrigRow1$ = "THOSE WHO DO NOT ": row1$ = OrigRow1$ OrigRow2$ = "LEARN FROM HISTORY ARE": row2$ = OrigRow2$ OrigRow3$ = "DOOMED TO REPEAT IT ": row3$ = OrigRow3$ CASE 38 OrigRow1$ = "BETTER TO HAVE LOVED ": row1$ = OrigRow1$ OrigRow2$ = "AND LOST THAN NEVER ": row2$ = OrigRow2$ OrigRow3$ = "TO HAVE LOVED AT ALL ": row3$ = OrigRow3$ CASE 39 OrigRow1$ = "LAUGH AND THE WORLD ": row1$ = OrigRow1$ OrigRow2$ = " LAUGHS WITH YOU WEEP ": row2$ = OrigRow2$ OrigRow3$ = " AND YOU WEEP ALONE ": row3$ = OrigRow3$ CASE 40 OrigRow1$ = "OH WHAT A TANGLED WEB ": row1$ = OrigRow1$ OrigRow2$ = "WE WEAVE WHEN FIRST WE ": row2$ = OrigRow2$ OrigRow3$ = "PRACTICE TO DECEIVE ": row3$ = OrigRow3$ CASE 41 OrigRow1$ = "IF YOU DONT KNOW WHERE ": row1$ = OrigRow1$ OrigRow2$ = "YOURE GOING THEN THE ": row2$ = OrigRow2$ OrigRow3$ = "JOURNEYS NEVER ENDING ": row3$ = OrigRow3$ CASE 42 OrigRow1$ = "ANSWER TO THE ULTIMATE ": row1$ = OrigRow1$ OrigRow2$ = "QUESTION OF LIFE THE ": row2$ = OrigRow2$ OrigRow3$ = "UNIVERSE AND EVERYTHING": row3$ = OrigRow3$ CASE 43 OrigRow1$ = "FOOL ME ONCE SHAME ON ": row1$ = OrigRow1$ OrigRow2$ = "YOU FOOL ME TWICE ": row2$ = OrigRow2$ OrigRow3$ = " SHAME ON ME ": row3$ = OrigRow3$ CASE 44 OrigRow1$ = "A BROKEN FRIENDSHIP ": row1$ = OrigRow1$ OrigRow2$ = "MAY BE SOLDERED BUT ": row2$ = OrigRow2$ OrigRow3$ = "WILL NEVER BE SOUND ": row3$ = OrigRow3$ CASE 45 OrigRow1$ = "IF YOU CANNOT HAVE THE": row1$ = OrigRow1$ OrigRow2$ = "BEST THEN MAKE THE ": row2$ = OrigRow2$ OrigRow3$ = "BEST OF WHAT YOU HAVE ": row3$ = OrigRow3$ CASE 46 OrigRow1$ = "HE WHO SAYS WHAT HE ": row1$ = OrigRow1$ OrigRow2$ = "LIKES SHALL HEAR WHAT": row2$ = OrigRow2$ OrigRow3$ = " HE DOESNT LIKE ": row3$ = OrigRow3$ CASE 47 OrigRow1$ = "HE THAT HAS A GREAT ": row1$ = OrigRow1$ OrigRow2$ = "NOSE THINKS EVERYBODY": row2$ = OrigRow2$ OrigRow3$ = "IS SPEAKING OF IT ": row3$ = OrigRow3$ CASE 48 OrigRow1$ = "HE THAT WOULD HAVE ": row1$ = OrigRow1$ OrigRow2$ = "EGGS MUST ENDURE THE ": row2$ = OrigRow2$ OrigRow3$ = "CRACKLING OF THE HENS": row3$ = OrigRow3$ CASE 49 OrigRow1$ = "A FRIEND IS SOMEONE": row1$ = OrigRow1$ OrigRow2$ = "KNOWS ALL ABOUT YOU ": row2$ = OrigRow2$ OrigRow3$ = " AND STILL LOVES YOU": row3$ = OrigRow3$ CASE 50 OrigRow1$ = "A MAN OF WORDS AND ": row1$ = OrigRow1$ OrigRow2$ = "NOT DEEDS IS LIKE A ": row2$ = OrigRow2$ OrigRow3$ = "GARDEN FULL OF WEEDS": row3$ = OrigRow3$ 'failsafe... CASE ELSE OrigRow1$ = "TO ERR IS HUMAN ": row1$ = OrigRow1$ OrigRow2$ = "TO FORGIVE DEVINE": row2$ = OrigRow2$ OrigRow3$ = " ": row3$ = OrigRow3$ END SELECT remix: 'maybe make tag to set if 1&2 were not swapped, swap 1&3, if no space.? '=== Randomly Mix up the letters in rows FOR t = 1 TO LEN(row1$) '=== mix up row 1 with 2 r1$ = MID$(row1$, t, 1) r2$ = MID$(row2$, t, 1) '=== Only swap 1 & 2 when no space present IF r1$ <> " " AND r2$ <> " " THEN IF INT(RND * 2) = 1 THEN MID$(row1$, t, 1) = r2$ MID$(row2$, t, 1) = r1$ END IF END IF '=== mix up row 2 with 3 r2$ = MID$(row2$, t, 1) r3$ = MID$(row3$, t, 1) '=== Only swap 2 &3 when no space present IF r2$ <> " " AND r3$ <> " " THEN IF INT(RND * 2) = 1 THEN MID$(row2$, t, 1) = r3$ MID$(row3$, t, 1) = r2$ END IF END IF NEXT '=== just in case no mixing occurred (happens once in a blue moon).. IF OrigRow1$ = row1$ AND OrigRow2$ = row2$ THEN GOTO remix END SUB '=================================================================================================='=================================================================================================== '======================================================================================' ScrollScreenDown'====================================================================================== SUB ScrollScreenDown (image&, speed!) '=== This SUB Scrolls Down a previously opened image. '=== image& = previously opened image handle to use. '=== THE IMAGE MUST BE PREVIOUSLY OPENED OR AN ERROR WILL OCCUR! '=== speed& = Value for the _LIMIT. FOR y = -767 TO 0 STEP 25 _PUTIMAGE (0, y), image&, 0 _DISPLAY _LIMIT speed! NEXT _PUTIMAGE , image&, 0 'make sure it's centered _DISPLAY _AUTODISPLAY END SUB '======================================================================================' ScrollScreenUp'====================================================================================== SUB ScrollScreenUp (image&, speed!) '=== This SUB Scrolls the screen UP out of sight. '=== image& = previously opened image handle to use. '=== THE IMAGE MUST BE PREVIOUSLY OPENED OR AN ERROR WILL OCCUR! '=== speed! = Value for the _LIMIT. '=== NOTE: If image& value is 0, then scrolls up the current screen. usecurrent = 0 IF image& = 0 OR image& > -1 THEN 'image& = _SCREENIMAGE image& = _COPYIMAGE(_DISPLAY) usecurrent = 1 END IF rev = 767 FOR y = 0 TO -767 STEP -25 _PUTIMAGE (0, y), image&, 0: _DISPLAY LINE (0, rev - 25)-(1023, rev), _RGB32(0, 0, 0), BF rev = rev - 25 _LIMIT speed! NEXT IF usecurrent = 1 THEN _FREEIMAGE image& _AUTODISPLAY END SUB '======================================================================================' StoneRoll'====================================================================================== SUB StoneRoll (way$, image&, speed!) '=== The SUB rolls a stone column sequence left or right. '=== An optional image& can be given to drag along from behind. '=== way$: "LEFT" = Roll left. "RIGHT" = Roll right. '=== image& = Optional Previously opened imagehandle to drag in. '=== speed! = Value for the _LIMIT. (I think in fps) '=== Load the stone column image sequence below.... REDIM rollframe(0 TO 5) AS LONG FOR t = 0 TO 5: a$ = LTRIM$(STR$(t)) IF LEN(a$) = 2 THEN a$ = "00" + a$ IF LEN(a$) = 1 THEN a$ = "000" + a$ rollframe(t) = _LOADIMAGE(source$ + "vid\roll" + a$ + ".jpg") NEXT IF sfxflag = 1 THEN roll& = _SNDOPEN(source$ + "sfx\sfx_roll.ogg", "VOL,SYNC,LEN,PAUSE") _SNDPLAY roll& END IF '=== choose what to do... SELECT CASE UCASE$(way$) CASE "RIGHT" x = -135 DO FOR t = 0 TO 5 STEP 1 a$ = LTRIM$(STR$(t)) IF LEN(a$) = 2 THEN a$ = "00" + a$ IF LEN(a$) = 1 THEN a$ = "000" + a$ _PUTIMAGE (x, 0), rollframe(t), 0 _DISPLAY IF image& <> 0 THEN IF x > 1024 THEN _PUTIMAGE (0, RND * 2), image&, 0 ELSE _PUTIMAGE (x - 1024, RND * 2), image&, 0 END IF _DISPLAY ELSE LINE (x - 20, 0)-(x, 768), _RGB32(0, 0, 0), BF END IF x = x + 20 _LIMIT speed! '_AUTODISPLAY NEXT LOOP UNTIL x > 1024 + 135 CASE "LEFT" x = 1024 DO FOR t = 5 TO 0 STEP -1 a$ = LTRIM$(STR$(t)) IF LEN(a$) = 2 THEN a$ = "00" + a$ IF LEN(a$) = 1 THEN a$ = "000" + a$ _PUTIMAGE (x, 0), rollframe(t), 0 _DISPLAY IF image& <> 0 THEN IF x > -135 THEN _PUTIMAGE (x + 135, RND * 2), image&, 0 ELSE _PUTIMAGE (0, RND * 2), image&, 0 END IF _DISPLAY ELSE LINE (x + 135, 0)-(1023, 767), _RGB32(0, 0, 0), BF END IF x = x - 20 _LIMIT speed! '_AUTODISPLAY NEXT LOOP UNTIL x < -135 END SELECT '== center screen if image given IF image& <> 0 THEN _PUTIMAGE , image&, 0 _DISPLAY END IF IF sfxflag = 1 THEN _SNDSTOP roll& _SNDCLOSE roll& END IF '=== free up used image handles FOR t = 0 TO 5 _FREEIMAGE rollframe(t) NEXT _AUTODISPLAY END SUB '================================================================================== SUB ScreenCurtain (way$, left&, right&, speed!) '=== This opened and closes the screen like a curtain. '=== It uses two previously opened images which are just '=== the screen split into a left & right side. '=== way$: "OPEN" = open curtain, "CLOSE" = Close it '=== speed! = Value for the _LIMIT SELECT CASE UCASE$(way$) CASE "CLOSE" IF sfxflag = 1 THEN roll& = _SNDOPEN(source$ + "sfx\sfx_roll.ogg", "VOL,SYNC,LEN,PAUSE") _SNDPLAY roll& END IF x2 = 1024 FOR x = -511 TO 0 STEP 4 'The y is randoming shaked up 'for a dragging effect _PUTIMAGE (x, RND * 2), left&, 0: _PUTIMAGE (x2, RND * 2), right&, 0: x2 = x2 - 4 _LIMIT speed! NEXT '=== make sure image is centered _PUTIMAGE (0, 0), left&, 0: _PUTIMAGE (513, 0), right&, 0: _DISPLAY _AUTODISPLAY IF sfxflag = 1 THEN _SNDSTOP roll&: _SNDCLOSE roll& _SNDPLAYFILE source$ + "sfx\sfx_boom.mp3" END IF '=== A little shake to show joining ScreenShake 0, 4, 3, 60 CASE "OPEN" x2 = 513 FOR x = 0 TO -512 STEP -5 CLS _PUTIMAGE (x, RND * 2), left&, 0: _PUTIMAGE (x2, RND * 2), right&, 0: _DISPLAY x2 = x2 + 5 _LIMIT speed! NEXT _AUTODISPLAY: CLS 'Clear the screen END SELECT END SUB '======================================================================================' ScreenShake'====================================================================================== SUB ScreenShake (image&, val1, val2, speed!) '=== This SUB shakes the current screen '=== image& = previously image handle to use. '=== val1 = first loop (x) '=== val2 = second loop (y) '=== speed! = Value for the _LIMIT '=== NOTE: Ifimage& = 0 then uses current screen. usecurrent = 0 IF image& = 0 OR image& > -1 THEN image& = _COPYIMAGE(_DISPLAY) usecurrent = 1 END IF FOR g = val1 TO 1 STEP -1 FOR S = 1 TO val2 _PUTIMAGE (RND * (S * g), RND * (S * g))-(1023, 767), image&, 0 _DISPLAY _LIMIT speed! _AUTODISPLAY NEXT NEXT '=== center screen after shaking _PUTIMAGE , image&, 0 _DISPLAY IF usecurrent = 1 THEN _FREEIMAGE image& _AUTODISPLAY END SUB '======================================================================================'====================================================================================== SUB Credits () left& = _LOADIMAGE(source$ + "img\paper-title-left.jpg") right& = _LOADIMAGE(source$ + "img\paper-title-right.jpg") IF _SNDPLAYING(music&) THEN _SNDSTOP music& IF sfxflag = 1 THEN _SNDPLAYFILE source$ + "sfx\sfx_roll.ogg" ScreenCurtain "CLOSE", left&, right&, 60 _FREEIMAGE left& _FREEIMAGE right& _DELAY .15 '=== load crumble frame numbers... DIM framenum(0 TO 14) AS LONG FOR t = 0 TO 14 a$ = LTRIM$(STR$(t)) IF LEN(a$) = 2 THEN a$ = "00" + a$ IF LEN(a$) = 1 THEN a$ = "000" + a$ framenum(t) = _LOADIMAGE(source$ + "vid\crum" + a$ + ".jpg") NEXT '=== start crumble sound IF sfxflag = 1 THEN _SNDPLAYFILE source$ + "sfx\sfx_crumble.ogg" '=== BIG Shake FOR b = 1 TO 2 ScreenShake 0, 6, 5, 60 NEXT 'CRUMLE!!!! FOR t = 0 TO 14 _PUTIMAGE (0, 0), framenum(t) _LIMIT 15 'IF INKEY$ <> "" THEN EXIT DO NEXT CLS 'WASH OUT!!!! FOR t = 0 TO 255 STEP 6 LINE (0, 0)-(1023, 767), _RGB32(t, t, t), BF _LIMIT 50 NEXT FOR t = 255 TO 0 STEP -4 LINE (0, 0)-(1023, 767), _RGB32(t, t, t), BF _LIMIT 50 NEXT CLS IF sfxflag = 1 THEN _SNDPLAYFILE source$ + "sfx\sfx_fanfare.ogg" _DELAY 2 'free all image handles... FOR t = 0 TO 14 _FREEIMAGE framenum(t) NEXT creditmusic& = _SNDOPEN(source$ + "sfx\credits.ogg") IF musicflag = 1 THEN _SNDLOOP creditmusic& pic& = _LOADIMAGE(source$ + "\img\win.jpg") y = -768 DO CLS _PUTIMAGE (0, 0), pic&, 0, (0, y)-(1024, y + 768) y = y + 1: IF y > 5672 THEN EXIT DO 'or y = 0 to start over IF INKEY$ <> "" THEN EXIT DO x1 = RND * 1024: y1 = RND * 768 LINE (x1, y1)-(x1 + 12, y1 + 1), _RGB32(115, 115, 115), BF 'across LINE (x1 + 6, y1 - 6)-(x1 + 7, y1 + 6), _RGB32(115, 115, 115), BF 'down FOR p = 1 TO 1000 PSET (RND * 1024, RND * 768), _RGB32(115, 115, 115) NEXT _LIMIT 50 _DISPLAY LOOP _FREEIMAGE pic& IF _SNDPLAYING(creditmusic&) THEN _SNDSTOP creditmusic& _SNDCLOSE creditmusic& END SUB '======================================================================================'====================================================================================== SUB ButtonShow (ButtonFile$, x, y) btn& = _LOADIMAGE(source$ + "img\" + ButtonFile$, 32) _PUTIMAGE (x, y), btn&, 0 '_DISPLAY: _AUTODISPLAY _FREEIMAGE btn&END SUB '======================================================================================'====================================================================================== SUB ButtonClick (ButtonType%, ButtonFile$, x, y) '=== ButtonType% is if a hover highlighted button on not. IF sfxflag = 1 THEN _SNDPLAYFILE source$ + "sfx\sfx_click.mp3" IF ButtonType% = 0 THEN ButtonShow "_" + ButtonFile$, x, y: _DELAY .15 ButtonShow ButtonFile$, x, y: _DELAY .15 ELSE ButtonShow ButtonFile$, x, y: _DELAY .15 ButtonShow "_" + ButtonFile$, x, y: _DELAY .15 ButtonShow ButtonFile$, x, y END IF END SUB
Navigation
[0] Message Index
Go to full version