TGC Codebase Backup



My Holiday CD Player by Anonymous Coder

21st Nov 2004 23:58
Summary

A CD player that was built and tested in a Windows XP environment using DB v.1.13 enhanced. I designed it to be totally automated and operated via mouse. It only runs from DB edito



Description



Code
                                    ` This code was downloaded from The Game Creators
                                    ` It is reproduced here with full permission
                                    ` http://www.thegamecreators.com
                                    
                                    Rem * Title  : MY HOLIDAY CD PLAYER
Rem * Author : TIMOTHY J. SAUNDERS
Rem * Date   : NOVEMBER 2004
REMSTART
*********************************************
***   PRESS "F5" TO START THE CD PLAYER   ***
***         CLICK "EXIT" TO QUIT          ***
*********************************************

**********************************
*      MY HOLIDAY CD PLAYER      *
**********************************
* WRITTEN BY TIMOTHY J. SAUNDERS *
**********************************
*         NOVEMBER 2004          *
**********************************

CODE REM'S EXCLUDED ON PURPOSE...
YOU LEARN BETTER BY FIGURING IT OUT YOURSELF.
REMEND

SYNC ON : SYNC RATE 0 : HIDE MOUSE
AUTOCAM OFF : POSITION CAMERA 0,0,-0.01 : POINT CAMERA 0,0,0
BACKDROP ON : COLOR BACKDROP 0
RANDOMIZE TIMER()
LOAD IMAGE "Tree.bmp",1
LOAD IMAGE "Top.bmp",2
LOAD IMAGE "stop.bmp",3
LOAD IMAGE "prev.bmp",4
LOAD IMAGE "next.bmp",5
LOAD IMAGE "play.bmp",6
LOAD IMAGE "star.bmp",7
LOAD IMAGE "starfield.bmp",8
LOAD IMAGE "exit.bmp",9
LOAD IMAGE "party.bmp",10
LOAD SOUND "startparty.wav",1
LOAD SOUND "stopparty.wav",2
LOAD SOUND "buttons.wav",3
MAKE OBJECT PLAIN 1,0.2,0.2
SET OBJECT 1,1,0,1
POSITION OBJECT 1,-0.04,1.05,2
TEXTURE OBJECT 1,7
SET SPOT LIGHT 0,15,30
POSITION LIGHT 0,-0.04,1.05,1
POINT LIGHT 0,-0.04,1.05,2
LOAD OBJECT "tunnel.x",2
SCALE OBJECT 2,500,1000,500
POSITION OBJECT 2,0,0,0
XROTATE OBJECT 2,90
LOAD OBJECT "lense.x",3
YROTATE OBJECT 3,180
SCALE OBJECT 3,130,130,100
POSITION OBJECT 3,-0.04,0,2
GHOST OBJECT ON 3
SET AMBIENT LIGHT 5
MAKE LIGHT 1 : MAKE LIGHT 2
SET SPOT LIGHT 1,45,90 : SET SPOT LIGHT 2,45,90
POSITION LIGHT 1,-0.04,0,0 : POSITION LIGHT 2,-0.04,0,0
POINT LIGHT 1,-0.04,0,2 : POINT LIGHT 2,-0.04,0,2
MAKE LIGHT 3
SET POINT LIGHT 3,-500,0,500
SET LIGHT RANGE 3,3000
COLOR LIGHT 3,RGB(255,255,255)
FOG DISTANCE -500
HIDE OBJECT 2 : HIDE LIGHT 3
SPRITE 1,170,50,1
SPRITE 2,291,52,2 : HIDE SPRITE 2
SPRITE 3,1,430,3 : HIDE SPRITE 3
SPRITE 4,180,430,4 : HIDE SPRITE 4
SPRITE 5,360,430,5 : HIDE SPRITE 5
SPRITE 6,540,430,6 : HIDE SPRITE 6
SPRITE 7,1,1,9 : HIDE SPRITE 7
SPRITE 8,540,1,10 : HIDE SPRITE 8
WHITE=RGB(255,255,255)
RESET=1 : MUSIC=1 : TS=1 : SCANNER=1
STEPPER=1
PZ=2000 : PZSTEP=-2
FD=-500 : FDSTEP=2
TZD#=-2.5

GOSUB CHECKFORCD

DO
IF MOUSEMOVEX()<>0 OR MOUSEMOVEY()<>0 THEN BUTTONTIME=300
IF BUTTONTIME=300
	SHOW SPRITE 3 : SHOW SPRITE 4 : SHOW SPRITE 5 : SHOW SPRITE 6
	SHOW SPRITE 7 : SHOW SPRITE 8 : SHOW MOUSE
ENDIF
IF BUTTONTIME>0
	BUTTONTIME=BUTTONTIME-1
	IF BUTTONTIME=0
		HIDE SPRITE 3 : HIDE SPRITE 4 : HIDE SPRITE 5 : HIDE SPRITE 6
		HIDE SPRITE 7 : HIDE SPRITE 8 : HIDE MOUSE
	ENDIF
	MX=MOUSEX() : MY=MOUSEY()
	IF MY<51 AND MOUSECLICK()=1
		IF MX<101
			OFFSET SPRITE 7,-5,-5 : PLAY SOUND 3
			REPEAT : WAIT 1 : UNTIL MOUSECLICK()=0
			OFFSET SPRITE 7,0,0
			GOTO SHUTDOWN
		ENDIF
		IF MX>539
			IF PARTY=0 THEN OFFSET SPRITE 8,-5,-5 : PARTY=1 : PLAY SOUND 1 : GOTO TOGGLEP
			IF PARTY=1 THEN OFFSET SPRITE 8,0,0 : PARTY=0 : PLAY SOUND 2
			TOGGLEP:
			REPEAT : WAIT 1 : UNTIL MOUSECLICK()=0
			IF PARTY=1
				SHOW OBJECT 2 : SHOW LIGHT 3 : FOG ON : TEXTURE BACKDROP 8
			ELSE
				HIDE OBJECT 2 : HIDE LIGHT 3 : FOG OFF : COLOR BACKDROP 0
			ENDIF
		ENDIF
	ENDIF
	IF MY>429 AND MOUSECLICK()=1
		IF MX<101
			OFFSET SPRITE 3,-5,-5 : PLAY SOUND 3
			REPEAT : WAIT 1 : UNTIL MOUSECLICK()=0
			OFFSET SPRITE 3,0,0
			SCANNER=0 : MUSIC=0
			HIDE OBJECT 1 : HIDE LIGHT 1 : HIDE LIGHT 2 : HIDE SPRITE 2
			GOSUB CDPLAYER
		ENDIF
		IF MUSIC=1
			IF MX<281 AND MX>179
				OFFSET SPRITE 4,-5,-5 : PLAY SOUND 3
				REPEAT : WAIT 1 : UNTIL MOUSECLICK()=0
				OFFSET SPRITE 4,0,0
				TS=-1 : GOSUB CDPLAYER : TS=1
			ENDIF
			IF MX<461 AND MX>359
				OFFSET SPRITE 5,-5,-5 : PLAY SOUND 3
				REPEAT : WAIT 1 : UNTIL MOUSECLICK()=0
				OFFSET SPRITE 5,0,0
				TS=1 : GOSUB CDPLAYER
			ENDIF
		ENDIF
		IF MUSIC=0
			IF MX<641 AND MX>539
				OFFSET SPRITE 6,-5,-5 : PLAY SOUND 3
				REPEAT : WAIT 1 : UNTIL MOUSECLICK()=0
				OFFSET SPRITE 6,0,0
				IF PATH EXIST(DRIVE$)=0 THEN GOSUB CHECKFORCD
				SCANNER=1 : MUSIC=1
				SHOW OBJECT 1 : SHOW LIGHT 1 : SHOW LIGHT 2 : SHOW SPRITE 2
				GOSUB CDPLAYER
			ENDIF
		ENDIF
	ENDIF
ENDIF
IF MUSIC=1
	SWITCH=SWITCH+1
	IF SWITCH>25
		CR=RND(245)+10 : CG=RND(245)+10 : CB=RND(245)+10
		TCOLORA=RGB(CR,CG,CB)
		CR=RND(245)+10 : CG=RND(245)+10 : CB=RND(245)+10
		TCOLORB=RGB(CR,CG,CB)
		SWITCH=0
	ENDIF
	TOGGLE=TOGGLE+1
	IF TOGGLE>25
		IF ANGEL=1 THEN SHOW SPRITE 2 : ANGEL=0 : GOTO SKIP
		IF ANGEL=0 THEN HIDE SPRITE 2 : ANGEL=1
		SKIP:
		TOGGLE=0
	ENDIF
	BDY=BDY-1
	SCROLL BACKDROP 0,BDY
	POINT=POINT+1
	IF POINT>4 THEN POINT=1
	IF POINT=1 THEN PX=500 : PY=0
	IF POINT=2 THEN PX=0 : PY=-500
	IF POINT=3 THEN PX=-500 : PY=0
	IF POINT=4 THEN PX=0 : PY=500
	PZ=PZ+PZSTEP
	IF PZ<-2000 THEN PZSTEP=2
	IF PZ>2000 THEN PZSTEP=-2
	POSITION LIGHT 3,PX,PY,PZ
	TZ#=CURVEVALUE(TZD#,TZ#,50)
	IF TZ#<-2.4 THEN TZD#=7
	IF TZ#>6.9 THEN TZD#=-2.5
	POSITION OBJECT 2,0,0,TZ#
	FD=FD+FDSTEP
	IF FD<-500 THEN FDSTEP=2
	IF FD>500 THEN FDSTEP=-2
	FOG DISTANCE FD : FOG COLOR TCOLORA
	STAR=STAR+STEPPER
	IF STAR>100 THEN STEPPER=-1
	IF STAR<50 THEN STEPPER=1
	SCALE OBJECT 1,STAR,STAR,STAR
	XYZA#=WRAPVALUE(XYZA#+1) : XYZB#=WRAPVALUE(XYZA#+180)
	ZROTATE OBJECT 1,XYZA# : YROTATE OBJECT 2,XYZA#
	ROTATE LIGHT 1,0,XYZA#,0 : ROTATE LIGHT 2,XYZB#,0,0
	IF XYZA#=180 THEN COLOR LIGHT 1,TCOLORA
	IF XYZB#=180 THEN COLOR LIGHT 2,TCOLORB
	IF PATH EXIST(DRIVE$)=0
		SCANNER=1 : GOSUB CHECKFORCD
	ELSE
		SCANNER=0
	ENDIF
	RUNTIME#=(TIMER()-STARTTIME#)
	COUNTDOWN#=TOTALTIME#-RUNTIME#
	CONVERTH#=INT(((COUNTDOWN#/1000)/60)/60) : CONVERTH$=STR$(CONVERTH#)
	CONVERTM#=INT((COUNTDOWN#/1000)/60) : CONVERTM$=STR$(CONVERTM#)
	CONVERTS#=INT(((((COUNTDOWN#/1000)/60)-CONVERTM#)*100)*0.6)
	CONVERTS$=STR$(CONVERTS#)
	INK TCOLORA,0
	TEXT 1,410,CONVERTH$+" : "+CONVERTM$+" : "+CONVERTS$+"   "
	TEXT 510,410,TRACKS$+" TRACKS TO GO   "
	IF COUNTDOWN#<0 THEN TS=1 : GOSUB CDPLAYER
ENDIF
IF TEXTTIME>0
	TEXTTIME=TEXTTIME-1
	IF TEXTTIME=0 AND MUSIC=0 THEN INFO$=""
ENDIF
IF SCANNER=1 AND SEEK>0
	SEEK=SEEK-1
	IF SEEK=0 THEN GOSUB CHECKFORCD
ENDIF
INK TCOLORB,0 : CENTER TEXT 320,410,INFO$
SYNC
LOOP

CHECKFORCD:
T=0 : TS=1 : MUSIC=1 : RESET=1
SHOW OBJECT 1 : SHOW SPRITE 2 : SHOW LIGHT 1 : SHOW LIGHT 2
PERFORM CHECKLIST FOR DRIVES
FOR D=1 TO CHECKLIST QUANTITY()
DRIVE$=CHECKLIST STRING$(D)
CD DRIVE$
FIND FIRST
FT=GET FILE TYPE()
IF FT=-1 OR FT=1 THEN GOTO NEXTDRIVE
FN$=GET FILE NAME$()
EXT$=RIGHT$(FN$,3)
IF EXT$="CDA" OR EXT$="cda" THEN GOTO CDPLAYER
NEXTDRIVE:
NEXT D
INFO$="AUDIO CD NOT DETECTED." : TCOLORB=WHITE
TEXTTIME=300
RESET=0
HIDE SPRITE 2 : HIDE OBJECT 1 : HIDE LIGHT 1 : HIDE LIGHT 2
DRIVE$="" : MUSIC=0
IF SCANNER=1 THEN SEEK=1000
RETURN

CDPLAYER:
IF RESET=1
	PERFORM CHECKLIST FOR FILES
	TT=CHECKLIST QUANTITY()
	RESET=0
ENDIF
IF MUSIC EXIST(1)=1
	STOP MUSIC 1
	DELETE MUSIC 1
ENDIF
IF MUSIC=1
	T=T+TS
	IF T>TT THEN T=1
	IF T<1 THEN T=TT
	TN$=CHECKLIST STRING$(T)
	IF FILE EXIST(TN$)=1
		FS=FILE SIZE(TN$)
		OPEN TO READ 1,TN$
		FOR HEADER=1 TO FS
		READ BYTE 1,A
		IF HEADER=FS-2 THEN SECONDS=A
		IF HEADER=FS-1 THEN MINUTES=A
		IF HEADER=FS THEN HOURS=A
		NEXT HEADER
		CLOSE FILE 1
		REPEAT : WAIT 1000 : UNTIL FILE OPEN(1)=0
		TOTALTIME#=(((((HOURS*60)+MINUTES)*60)+SECONDS)*1000)+5000
		LOAD CDMUSIC T,1
		SET MUSIC VOLUME 1,100
		PLAY MUSIC 1
		STARTTIME#=TIMER()
		INFO$="PLAYING TRACK # "+STR$(T)+"   "
		TRACKS=TT-T : TRACKS$=STR$(TRACKS)
	ELSE
		MUSIC=0 : T=0 : TS=1 : RESET=0
		INFO$="AUDIO CD NOT DETECTED." : TCOLORB=WHITE
		HIDE SPRITE 2 : HIDE OBJECT 1 : HIDE LIGHT 1 : HIDE LIGHT 2
		DRIVE$=""
		TEXTTIME=300
	ENDIF
ELSE
	MUSIC=0 : TS=0 : TCOLORB=WHITE
	IF PATH EXIST(DRIVE$)=1 THEN INFO$="MUSIC IS OFF."
	HIDE SPRITE 2 : HIDE OBJECT 1 : HIDE LIGHT 1 : HIDE LIGHT 2
	TEXTTIME=300
ENDIF
RETURN

REM FANCY-WANCY WAY TO END PROGRAM AND FREE-UP RESOURCES
SHUTDOWN:
HIDE MOUSE : CLS : INK WHITE,0
SYNC OFF : BACKDROP OFF : FOG OFF
CENTER TEXT 320,1,"SHUTDOWN IN PROGRESS..."
IF MUSIC EXIST(1)=1 THEN STOP MUSIC 1 : DELETE MUSIC 1 : WAIT 500
FOR CLEAN=1 TO 3 : DELETE OBJECT CLEAN : DELETE LIGHT CLEAN : DELETE SOUND CLEAN
CLS : CENTER TEXT 320,1,"SHUTDOWN IN PROGRESS..." : WAIT 500 : NEXT CLEAN
FOR CLEAN=1 TO 8 : DELETE SPRITE CLEAN
CENTER TEXT 320,1,"SHUTDOWN IN PROGRESS..." : WAIT 500 : NEXT CLEAN
FOR CLEAN=1 TO 10 : DELETE IMAGE CLEAN
CENTER TEXT 320,1,"SHUTDOWN IN PROGRESS..." : NEXT CLEAN
CLS
CENTER TEXT 320,240,"HO!  HO!  HO!  HAPPY HOLIDAY'S EVERYBODY!!!"
END
REM END OF SHUTDOWN