TGC Codebase Backup



my FPS by Serge Adjo

28th May 2009 13:29
Summary

this code is a very good FPS. 'my FPS' is in WIP so many features and functions aren't there ; use what you find useful: controls with mouse + arrowkey, .dbo level fully textured e



Description

this code is a very good FPS. 'my FPS' is in WIP so many features and functions aren't there ; use what you find useful: controls with mouse + arrowkey, .dbo level fully textured etc...
this is my first FPS ; simple shooter, very simple and quick... player can't shoot for the moment so you have to add this functionality
WIP forum thread is there:
http://forum.thegamecreators.com/?m=forum_view&t=151744&b=8&p=0#m1772117



Code
                                    ` This code was downloaded from The Game Creators
                                    ` It is reproduced here with full permission
                                    ` http://www.thegamecreators.com
                                    
                                    REM * Titre  : programmer1
REM * Auteur : programmeur prog'
REM * Date   : 01/ 06/ 2009
REM ;
REM ###################################################################################
REM |PROG PRINCIPAL "_prog.dba" ; "_prog-PRO.dbpro"///////////////////////////////////|
REM ################################################################################### #

IF FILE EXIST("util.txt")=1 THEN f_Util()
// f_Util()
REM Débuter PROGRAMME PRINCIPAL ; déclarer les variables en premier;
REM f_Débuter()
f_DECLARER_VARIABLES()

f_INITIALISER()
f_INTRO()
f_MENU()

f_PREPARE_SCENE()
REM f_NETTOYER()
REM f_QUITTER()

JOUER_LA_SCENE_Zgot:
REM BOUCLE ////////////////////////
DO
	
SET CURSOR 0,0
PRINT V_Joueur_X_#
PRINT V_Joueur_Y_#
PRINT V_Joueur_Z_#
// PRINT T_CARTE_E(1)
// 	CONTROL CAMERA USING ARROWKEYS 0,0.1,1
	f_CONTROLES()
	POSITION MOUSE SCREEN WIDTH()/2,SCREEN HEIGHT()/2
	SYNC
LOOP
REM ___ F I N ____/////////////////
	FINIR_TOUT:
	END
Rem ***** Included Source File *****
REM * Titre  : programmer1
REM * Auteur : programmeur prog'
REM * Date   : 01/ 06/ 2009
REM ;
REM ###################################################################################
REM |***** Included Source File ***** "_prog.dba" ; "_prog-PRO.dbpro"///////////////////////////////////|
REM ################################################################################### #


REM /////// CONTROLES /////////////
FUNCTION f_CONTROLES()

REM AVANT / ARRIERE
	IF UPKEY()=1 THEN INC V_Avance_#,0.1 ELSE V_Avance_#= 0
	IF DOWNKEY()=1 THEN INC V_Recul_#,0.1 ELSE V_Recul_#= 0
	IF V_Avance_# > V_Recul_#
		IF V_Recul_#>0 THEN DEC V_Recul_#, 0.1
	ENDIF
	IF V_Avance_# < V_Recul_#
		IF V_Avance_#>0 THEN DEC V_Avance_#, 0.1
	ENDIF
	
REM DROITE / GAUCHE
	IF RIGHTKEY()=1 THEN INC V_Droite_#,0.1 ELSE V_Droite_#= 0
	IF LEFTKEY()=1 THEN INC V_Gauche_#,0.1 ELSE V_Gauche_#= 0
	IF V_Droite_# > V_Gauche_#
		IF V_Gauche_#>0 THEN DEC V_Gauche_#, 0.1
	ENDIF
	IF V_Droite_# < V_Gauche_#
		IF V_Droite_#>0 THEN DEC V_Droite_#, 0.1
	ENDIF
	
		REM Enregistre coordonnées joueur axe xyz
    V_OldJoueur_X_# = CAMERA POSITION X()
    V_OldJoueur_Y_# = CAMERA POSITION Y()
    V_OldJoueur_Z_# = CAMERA POSITION Z()
	
	V_OldCameraY_# = V_CameraY_#
	V_OldCameraX_# = V_CameraX_#
	
	REM CAMERA / SOURIS
	V_CameraY_# = WrapValue(V_CameraY_#+MousemoveX()*V_Camera_Vitesse_#)
	V_CameraX_# = WrapValue(V_CameraX_#+MousemoveY()*V_Camera_Vitesse_#)
	V_CameraZ_# = Camera angle Z()

	Rem  Control pour camera
	IF V_Avance_#>0 AND V_Gauche_#=0 AND V_Droite_#=0
		MOVE CAMERA V_Joueur_Vitesse_#
		V_Joueur_X_# = CAMERA POSITION X()
		V_Joueur_Y_# = CAMERA POSITION Y()
		V_Joueur_Z_# = CAMERA POSITION Z()
	ENDIF

	IF V_Recul_#>0 AND V_Gauche_#=0 AND V_Droite_#=0
		MOVE CAMERA 0-V_Joueur_Vitesse_#
		V_Joueur_X_# = CAMERA POSITION X()
		V_Joueur_Y_# = CAMERA POSITION Y()
		V_Joueur_Z_# = CAMERA POSITION Z()
	ENDIF

	IF V_Gauche_#>0 AND V_Avance_#=0 AND V_Recul_#=0
		V_Joueur_X_# = Newxvalue(V_Joueur_X_#,Wrapvalue(V_CameraY_#-90),V_Joueur_Vitesse_#)
		V_Joueur_Z_# = Newzvalue(V_Joueur_Z_#,Wrapvalue(V_CameraY_#-90),V_Joueur_Vitesse_#)
	ENDIF

	IF V_Droite_#>0 AND V_Avance_#=0 AND V_Recul_#=0
		V_Joueur_X_# = Newxvalue(V_Joueur_X_#,Wrapvalue(V_CameraY_#+90),V_Joueur_Vitesse_#)
		V_Joueur_Z_# = Newzvalue(V_Joueur_Z_#,Wrapvalue(V_CameraY_#+90),V_Joueur_Vitesse_#)
	ENDIF
	
	REM DIAGONALES:	AVANCER.
	IF V_Gauche_#>0 AND V_Avance_#>0
		YROTATE CAMERA CAMERA ANGLE Y()-45
		MOVE CAMERA V_Joueur_Vitesse_#
		V_Joueur_X_# = CAMERA POSITION X()
		V_Joueur_Y_# = CAMERA POSITION Y()
		V_Joueur_Z_# = CAMERA POSITION Z()
	ENDIF

	IF V_Droite_#>0 AND V_Avance_#>0
		YROTATE CAMERA CAMERA ANGLE Y()+45
		MOVE CAMERA V_Joueur_Vitesse_#
		V_Joueur_X_# = CAMERA POSITION X()
		V_Joueur_Y_# = CAMERA POSITION Y()
		V_Joueur_Z_# = CAMERA POSITION Z()
	ENDIF
	REM DIAGONALES:	RECULER.
	IF V_Gauche_#>0 AND V_Recul_#>0 AND V_Avance_#=0
		YROTATE CAMERA CAMERA ANGLE Y()+45
		MOVE CAMERA 0-V_Joueur_Vitesse_#
		V_Joueur_X_# = CAMERA POSITION X()
		V_Joueur_Y_# = CAMERA POSITION Y()
		V_Joueur_Z_# = CAMERA POSITION Z()
	ENDIF

	IF V_Droite_#>0 AND V_Recul_#>0 AND V_Avance_#=0
		YROTATE CAMERA CAMERA ANGLE Y()-45
		MOVE CAMERA 0-V_Joueur_Vitesse_#
		V_Joueur_X_# = CAMERA POSITION X()
		V_Joueur_Y_# = CAMERA POSITION Y()
		V_Joueur_Z_# = CAMERA POSITION Z()
	ENDIF	
	
	Rem Tourne camera
// 	V_CameraTest_X_#=WrapValue(V_CameraX_#-180)
// 	if V_CameraTest_X_# > 225 then V_CameraX_#=45
// 	if V_CameraTest_X_# < 135 then V_CameraX_#=315
	V_CameraTest_X_#=WrapValue(V_CameraX_#-180)
	if V_CameraTest_X_# > 270 then V_CameraX_#=90
	if V_CameraTest_X_# < 90 then V_CameraX_#=270

	YRotate camera CurveAngle(V_CameraY_#,V_OldCameraY_#,24)
	XRotate camera CurveAngle(V_CameraX_#,V_OldCameraX_#,24)

	Rem REPositionne Camera
// 	V_Joueur_Y_# = Get ground height(1,V_Joueur_X_#,V_Joueur_Z_#)+35
	Position Camera V_Joueur_X_#,V_Joueur_Y_#,V_Joueur_Z_#
	f_CollisionGlissante(V_OldJoueur_X_#,V_OldJoueur_Y_#,V_OldJoueur_Z_#,V_Joueur_X_#,V_Joueur_Y_#,V_Joueur_Z_#,V_TailleJoueur_#,V_Niveau_E)

	Rem Position Listener
	Position Listener V_Joueur_X_#,V_Joueur_Y_#,V_Joueur_Z_#
	Rotate Listener 0,V_CameraY_#,0	
ENDFUNCTION

REM /////// COLLISION GLISSANTE /////////////

FUNCTION f_CollisionGlissante(X1#,Y1#,Z1#,X2#,Y2#,Z2#,Radius#,Obj)

    C = sc_SphereSlide(Obj,X1#,Y1#,Z1#,X2#,Y2#,Z2#,Radius#,0)
    
    IF C > 0
    
        V_Joueur_X_# = sc_getCollisionSlideX()
        V_Joueur_Y_# = sc_getCollisionSlideY()
        V_Joueur_Z_# = sc_getCollisionSlideZ()
    
        POSITION CAMERA V_Joueur_X_#, V_Joueur_Y_#, V_Joueur_Z_#
        
        Position Listener V_Joueur_X_#, V_Joueur_Y_#, V_Joueur_Z_#
 		Rotate Listener 0,V_CameraY_#,0
    ENDIF
	REM Sliding Collision with Sparky's Collision dll
	REM By RUCCUS ----- Email/MSN: Ask-RUCCUS@hotmail.com
ENDFUNCTION

REM ////// INITIER /////////////////

FUNCTION f_DECLARER_VARIABLES()

	GLOBAL V_Joueur_#	: V_Joueur_#= 200
	GLOBAL V_TailleJoueur_# : V_TailleJoueur_#=2
	
	GLOBAL V_OldJoueur_X_# : V_OldJoueur_X_#= 5	
	GLOBAL V_OldJoueur_Y_# : V_OldJoueur_Y_#= 3
	GLOBAL V_OldJoueur_Z_# : V_OldJoueur_Z_#= 4
	GLOBAL V_Joueur_X_# : V_Joueur_X_#= V_OldJoueur_X_#	
	GLOBAL V_Joueur_Y_# : V_Joueur_Y_#= V_OldJoueur_Y_#
	GLOBAL V_Joueur_Z_# : V_Joueur_Z_#= V_OldJoueur_Z_#
	
	GLOBAL V_Joueur_Vitesse_# : V_Joueur_Vitesse_#= 0.1
	GLOBAL V_Camera_Vitesse_# : V_Camera_Vitesse_#= 0.2
	GLOBAL V_Avance_#	: V_Avance_#= 0
	GLOBAL V_Droite_#	: V_Droite_#= 0
	GLOBAL V_Recul_#	: V_Recul_#= 0
	GLOBAL V_Gauche_#	: V_Gauche_#= 0

	GLOBAL V_OldCameraY_#
	GLOBAL V_OldCameraX_#
	GLOBAL V_CameraY_#
	GLOBAL V_CameraX_#
	GLOBAL V_CameraTest_X_#
	
	REM VARIABLE D'USAGE ET DE LECTURE
	GLOBAL V_LECTURE1_# : GLOBAL V_LECTURE2_# : GLOBAL V_LECTURE3_#
// 	GLOBAL V_COL_E
// 	GLOBAL V_LIN_E
	
	
	REM CHEMINS ET NOM$
	GLOBAL V_Niveau_E : V_Niveau_E = 100
	GLOBAL V_Niveau_JEU_$ : V_Niveau_JEU_$ = "1"
	
	
ENDFUNCTION

FUNCTION f_Débuter()
	
ENDFUNCTION

` ***µµµµµµµµµµµ*******
REM ///////

FUNCTION f_NETTOYER()
	
ENDFUNCTION

FUNCTION f_QUITTER()
	
ENDFUNCTION

FUNCTION f_INITIALISER()
	AUTOCAM OFF : SYNC ON : SYNC RATE 60
	SET DISPLAY MODE 1024,768,32,1
	AI START
ENDFUNCTION

FUNCTION f_INTRO()
		
ENDFUNCTION

FUNCTION f_MENU()
	
ENDFUNCTION

REM /////////////////////////////////
Rem ***** Included Source File *****
REM * Titre  : programmer1
REM * Auteur : programmeur prog'
REM * Date   : 01/ 06/ 2009
REM ;
REM ###################################################################################
REM |***** Included Source File ***** "_prog.dba" ; "_prog-PRO.dbpro"///////////////////////////////////|
REM ################################################################################### #

REM /////// SCENE //////////////////

FUNCTION f_PREPARE_SCENE()
	SET DIR "BIN32" : SET DIR V_Niveau_JEU_$
	
	IF FILE EXIST(V_Niveau_JEU_$+".dbo") = 0
		LOAD OBJECT V_Niveau_JEU_$+".x",V_Niveau_E : SAVE OBJECT V_Niveau_JEU_$+".dbo",V_Niveau_E : DELETE OBJECT V_Niveau_E : LOAD OBJECT V_Niveau_JEU_$+".dbo",V_Niveau_E
	ELSE
		LOAD OBJECT V_Niveau_JEU_$+".dbo",V_Niveau_E
	ENDIF
	
	REM Met le niveau dans le groupe 0 avec collision complexe polygone (type 0) 2 facesPerNode
	SC_SETUPCOMPLEXOBJECT V_Niveau_E,0,2 : SC_allowObjectScaling V_Niveau_E : SCALE OBJECT V_Niveau_E,100,100,100 : SC_updateObject V_Niveau_E
	REM CHARGER 3 NIVEAUX....
	
	POSITION CAMERA V_Joueur_X_#,V_Joueur_Y_#,V_Joueur_Z_#
	AI ADD OBSTACLE FROM LEVEL V_Niveau_E,0,0.1,0,0
	AI DEBUG SHOW OBSTACLE BOUNDS 0, 0.1
ENDFUNCTION

REM ////////// UTILITAIRES ////////////
FUNCTION f_Util()
//   	LOAD BITMAP "CARTEB.BMP",1 : SET CURRENT BITMAP 1 : LOCK PIXELS : V_LECTURE1_#=BITMAP WIDTH(1) : V_LECTURE2_#=BITMAP HEIGHT(1)
 	LOAD BITMAP "CARTEA.BMP",1 : SET CURRENT BITMAP 1 : V_LECTURE1_#=BITMAP WIDTH(1) : V_LECTURE2_#=BITMAP HEIGHT(1)
	GLOBAL DIM T_CARTEA_E(V_LECTURE1_#,V_LECTURE2_#)
	LOCK PIXELS
	FOR V_COL_E=0 TO V_LECTURE1_#
 		FOR V_LIN_E=0 TO V_LECTURE2_#
 			T_CARTEA_E(V_COL_E,V_LIN_E)=RGBR(POINT(V_COL_E,V_LIN_E))
		NEXT V_LIN_E
	NEXT V_COL_E
	
	
	FOR V_COL_E=0 TO V_LECTURE1_#
 		FOR V_LIN_E=0 TO V_LECTURE2_#
 			SET CURRENT BITMAP 1 : RED=T_CARTEA_E(V_COL_E,V_LIN_E) : DOT V_COL_E,V_LIN_E,RGB(RED,0,0)
		NEXT V_LIN_E
	NEXT V_COL_E
	UNLOCK PIXELS
	GET IMAGE 1,0,0,V_LECTURE1_#,V_LECTURE2_#,3
	SAVE IMAGE "A.BMP",1
	



	SYNC ON
	SYNC RATE 60
	SET DISPLAY MODE 1024,768,32,1
	DO
		SET CURSOR 0,0
		PRINT T_CARTEA_E(5,3)
		PRINT T_CARTEA_E(5,4)
		PRINT T_CARTEA_E(5,5)
// 		COPY BITMAP 0,1
		SYNC
	LOOP
	END
ENDFUNCTION
REM