TGC Codebase Backup



Goblin hunter by Kequor

12th Feb 2004 0:05
Summary

This is exactly the same as the monster hunt game except I made it more winnable by making your bullets travel faster and your gun has two barrels.



Description



Code
                                    ` This code was downloaded from The Game Creators
                                    ` It is reproduced here with full permission
                                    ` http://www.thegamecreators.com
                                    
                                    Rem Setup sync
Sync On
Sync Rate 30
Draw to front
Backdrop on
Set camera range 1,3000
Autocam off
Hide mouse

Fog on
Fog distance 3000
Fog color RGB(128,128,128)
Color Backdrop RGB(128,128,128)

Rem make matrix
Make matrix 1,10000,10000,20,20

Rem texture matrix
Load image "grass09.bmp",1
Prepare matrix texture 1,1,1,1
Fill matrix 1,0,1

rem Make Gun
Make object cylinder 1,2
Make object cylinder 100,2
XRotate Object 100,90
XRotate Object 1,90
Fix object pivot 1 
Fix object pivot 100
Scale Object 100,100,100,500
Scale object 1,100,100,500
position object 100,-1,-7,15
position object 1,1,-7,15
Lock object on 1
Lock object on 100

rem make HUD
Make object Plain 200,1,1
position object 200,-2.7,1.9,4
Lock object on 200
ghost object on 200

Make object Plain 201,1,1
position object 201,2.7,1.9,4
Lock object on 201
ghost object on 201
Load image "score.bmp",201
Texture object 201,201

rem Load and create hud bitmaps.
Load Bitmap "Radar.bmp",2
Create Bitmap 1,50,50

rem fire texture
Load Image "fire.bmp",2

rem Make Bullet
Make Object Sphere 2,2
texture object 2,2
Hide Object 2

rem Make MonsterBullet
Make Object Sphere 102,2
texture object 102,2
Hide Object 102

rem Make Explosion
Make Object Sphere 30,20
texture object 30,2
ghost object on 30
Hide Object 30
Make Object Sphere 31,20
texture object 31,2
ghost object on 31
Hide Object 31

rem Make Monster Explosion
Make Object Sphere 130,20
texture object 130,2
ghost object on 130
Hide Object 130
Make Object Sphere 131,20
texture object 131,2
ghost object on 131
Hide Object 131

rem load particles
For x  = 0 to 10
	Make object plain x+10,5,5
	Texture object x+10,2
	Set object x+10,1,0,0	
	Ghost object on x+10
	Hide object x+10
Next x

rem load Monsterparticles
Load Image "fire.bmp",2
For x  =100 to 110
	Make object plain x+10,5,5
	Texture object x+10,2
	Set object x+10,1,0,0	
	Ghost object on x+10
	Hide object x+10
Next x

rem intialize particle counter
Pn=10
MPn=110

rem load sounds
Load sound "crickets.wav",1
Loop sound 1

Load 3Dsound "fireball2.wav",2
Load 3Dsound "fireball2.wav",102
Load 3Dsound "Explode.wav",3
Load 3Dsound "Explode.wav",103


rem Randomize the matrix
randomize matrix 1,125

rem create decorative objects
load image "cottag02.bmp",300
t=300
For x = 1 to 9
	For z = 1 to 9
		Make object cube t,100	
		Scale object t,100,600,100
		y = get ground height(1,x*1000,z*1000)		
		position object t,x*1000,y+275,z*1000
		texture object t,300
		scale object texture t,1,-6
		inc t
	next z
next x

Rem Load Target
Load object "idle.x",3
Append Object "Walk.x",3,21
Yrotate object 3,180
Fix Object Pivot 3
Loop Object 3
mX# = 5000
mZ# = 5000
mY# = Get Ground Height(1,5000,5000)

X# = 5500
Y# =  Get Ground Height(1,5500,5500)
Z# = 5500
MonsterScore=0
PlayerScore=0
Gosub PlaceMonster
Gosub PlacePlayer

Rem Main loop
Do

	set cursor 550,20
	print "MScore: ",MonsterScore
	set cursor 550,40
	print "PScore: ",PlayerScore
	print total object frames(3)
	oldcAY# = cAY#
	oldcAX# = cAX#

	oldX#=X#
	oldY#=Y#
	oldZ#=Z#
	
	cAY# = WrapValue(cAY#+MousemoveX()*0.2)
	cAX# = WrapValue(cAX#+MousemoveY()*0.2)
	caZ# = Camera angle Z()

	Rem  Control input for camera
	If Upkey()=1
		XTest# = Newxvalue(X#,cAY#,7)
		ZTest# = Newzvalue(Z#,cAY#,7)
		If XTest#>0 and XTest#<10000 and ZTest#>0 and ZTest#<10000
			X#=XTest#
			Z#=ZTest#
		Endif
	Endif

	If Downkey()=1
		XTest# = Newxvalue(X#,Wrapvalue(cAY#-180),7)
		ZTest# = Newzvalue(Z#,Wrapvalue(cAY#-180),7)
		If XTest#>0 and XTest#<10000 and ZTest#>0 and ZTest#<10000
			X#=XTest#
			Z#=ZTest#
		Endif
	Endif

	If Leftkey()=1 
		XTest# = Newxvalue(X#,Wrapvalue(cAY#-90),7)
		ZTest# = Newzvalue(Z#,Wrapvalue(cAY#-90),7)
		If XTest#>0 and XTest#<10000 and ZTest#>0 and ZTest#<10000
			X#=XTest#
			Z#=ZTest#
		Endif
	Endif

	If Rightkey()=1 	
		XTest# = Newxvalue(X#,Wrapvalue(cAY#+90),7)
		ZTest# = Newzvalue(Z#,Wrapvalue(cAY#+90),7)
		If XTest#>0 and XTest#<10000 and ZTest#>0 and ZTest#<10000
			X#=XTest#
			Z#=ZTest#
		Endif
	Endif
	
	Rem Rotate camera
	cTestX#=WrapValue(cAX#-180)
	if cTestX# > 225 then cAX#=45
	if cTestX# < 135 then cAX#=315

	YRotate camera CurveAngle(cAY#,oldcAY#,24)
	XRotate camera CurveAngle(cAX#,oldcAX#,24)
	Y# = Get ground height(1,X#,Z#)+35

	rem collision detection
	if DecoCollide(X#,Y#,Z#) = 1
		X#=oldX#
		Y#=oldY#
		Z#=oldZ#
	Endif


	Rem Position Camera

	Position Camera X#,Y#,Z#

	Rem Position Listener
	Position Listener X#,Y#,Z#
	Rotate Listener 0,cAY#,0
		


	Rem Shoot bullet	
	if Mouseclick()=1 and Explode =0
		if BulletLife=0 or BulletLife<50
			Position object 2,X#,Y#-7,Z#
			Set object to camera orientation 2
			BulletLife =120
			show object 2
			Loop sound 2
		Endif
	Endif
	

	If BulletLife > 0 then Gosub ShootBullet
	If MonsterBulletLife > 0 then Gosub MonsterShootBullet

	If Explode > 0 then Gosub ExplodeRocket
	If MonsterExplode > 0 
		Gosub MonsterExplodeRocket
	else
			Gosub MonsterAI
	Endif


	Rem make radar
	Copy Bitmap 2,1
	set current bitmap 1
	ink rgb(0,0,255),rgb(0,0,0)
	PRX#=X#/200
	PRZ#=50-(Z#/200)
	Circle PRX#,PRZ#,1
	ink rgb(255,0,0),rgb(0,0,0)
	MRX#=mX#/200
	MRZ#=50-(mZ#/200)	
	Circle MRX#,MRZ#,1
	Get image 200,0,0,50,50
	set current bitmap 0
	texture object 200,200
	ink rgb(255,128,128),rgb(0,0,0)	
	
	Rem Refresh Screen
	Sync
Loop

Rem check for collision with wall decorations
Function DecoCollide(X#,Y#,Z#)

	for u = 1 to 9
		for v = 1 to 9
			if X#>u*1000-60 
				if X#<u*1000+60
					if Z#>v*1000-60
						if Z#<v*1000+60
							if Y# < Get ground height(1,u*1000,v*1000)+575
								Collide=1
								Exitfunction Collide
							endif
						endif
					endif
				endif			
			endif
		next v
	next u
	Collide=0

Endfunction Collide

Rem Shoot player bullet
ShootBullet:
		Dec BulletLife
		Move object 2,24

		bX#=Object position X(2)
		bY#=Object position Y(2)
		bZ#=Object position Z(2)		

		inc Pn
		if Pn=21 then Pn=10
		Scale object Pn,100,100,100
		Position object Pn,bX#,bY#,bZ#
		point object Pn,X#,Y#,Z#
		Zrotate object Pn,rnd(180)
		Show object Pn
		for x = 1 to 10
			scale object int((Wrapvalue((Pn-9+x)*36))/36)+10,100+x*25,100+x*25,100+x*25
		set cursor 10,10
		next x
		
		if bY# < Get Ground height(1,bX#,bZ#) then BulletLife=0
		Position sound 2,bX#,bY#,bZ#
		set cursor 10,10
		if Sqrt((mX# - bX#)^2 + (mY#+25 - bY#)^2 + (mZ# - bZ#)^2) <20
			Gosub PlaceMonster
			inc PlayerScore
			MonsterBulletLife = 1
			BulletLife=0
		endif

		if DecoCollide(bX#,bY#,bZ#) = 1 then BulletLife = 0

		if BulletLife = 0 
			Hide object 2
			stop sound 2
			for x=10 to 20
				hide object x
			next x
			Explode = 20
		endif
Return	

Rem Explode bullet
ExplodeRocket:
	Position object 30,bX#,bY#,bZ#
	Show object 30
	Position object 31,bX#,bY#,bZ#
	Show object 31
	EScale=20*(30-Explode)
	Scale object 30,EScale,EScale,EScale
	Yrotate object 30,WrapValue(Explode*37)
	Scale object 31,EScale/1.5,EScale/1.5,EScale/1.5
	Yrotate object 31,WrapValue(359-Explode*37)
	Dec Explode
	If Explode = 0 then hide object 30: Hide object 31
	If Explode=18 
		position sound 3,bX#,bY#,bZ#
		play sound 3
	endif
	If Explode < 15 then position sound 3,X#,Y#,Z#
Return

Rem Explode monster bullet
MonsterExplodeRocket:
	Position object 130,MbX#,MbY#,MbZ#
	Show object 130
	Position object 131,MbX#,MbY#,MbZ#
	Show object 131
	EScale=20*(30-MonsterExplode)
	Scale object 130,EScale,EScale,EScale
	Yrotate object 130,WrapValue(MonsterExplode*37)
	Scale object 131,EScale/1.5,EScale/1.5,EScale/1.5
	Yrotate object 131,WrapValue(359-MonsterExplode*37)
	Dec MonsterExplode
	If MonsterExplode = 0 then hide object 130: Hide object 131
	If MonsterExplode=18 
		position sound 103,X#,Y#,Z#
		play sound 103
	endif
	If MonsterExplode < 15 then position sound 103,X#,Y#,Z#
Return

Rem Simple AI for guided monster misile
MonsterAI:
			Point object 3,X#,Y#,Z#
			If AvoidDeco >0
				mA# = Object Angle Y(3)
				Dec AvoidDeco
				Yrotate object 3,WrapValue(mA#+AvoidDeco*60)
			endif
		
			Rem Position Monster at new location
			Position Object 3,mX#,mY#,mZ#

			Rem check distance from player 
			PDist=Sqrt((mX# - X#)^2 + (mY#+25 - Y#)^2 + (mZ# - Z#)^2)

			Rem If the player is within range shoot bullet
			if PDist<1500 
				if MonsterBulletLife=0 or MonsterBulletLife < 500-Pdist/10
					Point object 3,X#,Y#-25,Z#
					If BulletAvoidDeco > 0
						CornerAim = Rnd(1)
						mA# = object angle Y(3)
						if CornerAim = 0 then Yrotate Object 3,WrapValue(mA#+BulletAvoidDeco*10)
						if CornerAim = 1 then Yrotate Object 3,WrapValue(mA#+BulletAvoidDeco*-16)
						Dec BulletAvoidDeco
					Endif

					If ShootUp > 0
						mA# = object angle X(3)
						XRotate Object 3,WrapValue(mA#+ShootUp*-8)
						Dec ShootUp
					Endif

					Position object 102,mX#,mY#+25,mZ#
					Set object to object orientation 102,3
					MonsterBulletLife =500
					show object 102
					Loop sound 102
					
					Rem Play idle animation
					Loop Object 3,0,20
				Endif
			Endif
			if PDist>1000 
				Rem Store old location
				OldmX# = mX#
				OldmZ# = mZ#
				OldmY# = mY#

				Rem Play walking animation
				Loop Object 3,21,46
				
				Rem Move monster
				Move Object 3,7
				
				Rem Get new position
 				mX# = Object Position X(3)
 				mZ# = Object Position Z(3)			
				mY# = Get Ground Height(1,mX#,mZ#)

				Rem Check for Decoration collision
				If DecoCollide(mX#,mY#,mZ#) = 1 and AvoidDeco = 0
					mX# = OldmX#
					mZ# = OldmZ#
					mY# = OldmY#
					AvoidDeco = 3	
				Endif

			Endif
Return
	
Rem Shoot Monster bullet	
MonsterShootBullet:
		Dec MonsterBulletLife
		Move object 102,12

		MbX#=Object position X(102)
		MbY#=Object position Y(102)
		MbZ#=Object position Z(102)		

		inc MPn
		if MPn=121 then MPn=110
		Scale object MPn,100,100,100
		Position object MPn,MbX#,MbY#,MbZ#
		Position sound 102,MbX#,MbY#,MbZ#
		point object MPn,X#,Y#,Z#
		Zrotate object MPn,rnd(180)
		Show object MPn
		for x = 1 to 10
			scale object int((Wrapvalue((MPn-9+x)*36))/36)+110,100+x*25,100+x*25,100+x*25
		next x
		
		if MbY# < Get Ground height(1,MbX#,MbZ#) 
			MonsterBulletLife=0
			ShootUp=3
		endif

		Pdist=Sqrt((X# - MbX#)^2 + (Y#+25 - MbY#)^2 + (Z# - MbZ#)^2)
		if  Pdist<50
			GoSub PlacePlayer
			MonsterBulletLife = 0
			inc MonsterScore
		endif
		Rem guided missile
		if Pdist <500+PlayerScore*100 and Pdist>250 then Point object 102,X#,Y#,Z#
		if Pdist < 100 then point object 102,X#,Y#,Z#
		
		if DecoCollide(MbX#,MbY#,MbZ#) = 1 
			MonsterBulletLife = 0
			BulletAvoidDeco = BulletAvoidDeco + 2
		Endif

		if MonsterBulletLife = 0 
			Hide object 102
			stop sound 102
			for x=110 to 120
				hide object x
			next x
			MonsterExplode = 20
		endif
Return	

PlaceMonster:

			mX#=X#
			mY#=Y#
			mZ#=Z#

			While Sqrt((X# - MX#)^2 + (Y#+25 - MY#)^2 + (Z# - MZ#)^2)<1000

					mX#=rnd(10000)
					mZ#=rnd(10000)
					mY#= get ground height(1,mX#,mZ#)
					If DecoCollide(mX#,mY#,mZ#) = 1 
						mX#=X#
						mY#=Y#
						mZ#=Z#
					endif
			EndWhile
			
			Position object 3,mX#,mY#,mZ#

Return

PlacePlayer:

			X#=mX#
			Y#=mY#
			Z#=mZ#

			While Sqrt((X# - mX#)^2 + (Y#+25 - mY#)^2 + (Z# - mZ#)^2)<1000

				X#=rnd(10000)
				Z#=rnd(10000)
				Y#= get ground height(1,X#,Z#)
				If DecoCollide(X#,Y#,Z#) = 1 
					X#=mX#
					Y#=mY#
					Z#=mZ#
				endif
				
			EndWhile
			
			Position camera X#,Y#,Z#
			Point camera mX#,mY#,mZ#

Return