I don't need to test my programs. I have an error-correcting modem.

Legacy:ProjectX/Code

From Unreal Wiki, The Unreal Engine Documentation Site

Jump to: navigation, search

Ok here is where you will see a lot of code that dont work cos im a n00b at coding, if u can please tell me what ive dun wrong and tell me how to crrect id be really greatful.

When i load the new bulldog in a level, it appears, but when i walk up to it, and press [use] i cant get in it. The code i've changed is:

  1. #exec OBJ LOAD FILE=..\staticmeshes\BulldogMeshes.usx
    
  2. #exec OBJ LOAD FILE=..\sounds\WeaponSounds.uax
    
  3. #exec OBJ LOAD FILE=..\textures\VehicleFX.utx
    
  4.  
    
  5. class Betterbulldog extends KCar
    
  6.     placeable;
    
  7.  
    
  8. // triggers used to get into the Bulldog
    
  9. var const vector	FrontTriggerOffset;
    
  10. var BulldogTrigger	FLTrigger, FRTrigger, FlipTrigger;
    
  11.  
    
  12.  
    
  13. // headlight projector
    
  14. var const vector		HeadlightOffset;
    
  15. var BulldogHeadlight	Headlight;
    
  16. var bool				HeadlightOn;
    
  17.  
    
  18. // Light materials
    
  19. var Material			ReverseMaterial;
    
  20. var Material			BrakeMaterial;
    
  21. var Material			TailOffMaterial;
    
  22.  
    
  23. var Material			HeadlightOnMaterial;
    
  24. var Material			HeadlightOffMaterial;
    
  25.  
    
  26. var BulldogHeadlightCorona HeadlightCorona[8];
    
  27. var (Bulldog) vector	HeadlightCoronaOffset[8];
    
  28.  
    
  29. // Used to prevent triggering sounds continuously
    
  30. var float			UntilNextImpact;
    
  31.  
    
  32. // Wheel dirt emitter
    
  33. var BulldogDust		Dust[4]; // FL, FR, RL, RR
    
  34.  
    
  35. // Distance below centre of tire to place dust.
    
  36. var float			DustDrop;
    
  37.  
    
  38. // Ratio between dust kicked up and amount wheels are slipping
    
  39. var (Bulldog) float	DustSlipRate;
    
  40. var (Bulldog) float DustSlipThresh;
    
  41.  
    
  42. // Maximum speed at which you can get in the vehicle.
    
  43. var (Bulldog) float	TriggerSpeedThresh;
    
  44. var bool			TriggerState; // true for on, false for off.
    
  45. var bool			FlipTriggerState;
    
  46.  
    
  47. // Destroyed Buggy
    
  48. var (Bulldog) class<Actor>	DestroyedEffect;
    
  49. var (Bulldog) sound			DestroyedSound;
    
  50.  
    
  51. // Weapon
    
  52. var			  float	FireCountdown;
    
  53. var			  float SinceLastTargetting;
    
  54. var			  Pawn  CurrentTarget;
    
  55.  
    
  56. var (Bulldog) float		FireInterval;
    
  57. var (Bulldog) float		TargettingInterval;
    
  58. var (Bulldog) vector	RocketFireOffset; // Position (car ref frame) that rockets are launched from
    
  59. var (Bulldog) float     TargettingRange;
    
  60. var (Bulldog) Material	TargetMaterial;
    
  61.  
    
  62.  
    
  63. // Bulldog sound things
    
  64. var (Bulldog) float	EnginePitchScale;
    
  65. var (Bulldog) sound	BulldogStartSound;
    
  66. var (Bulldog) sound	BulldogIdleSound;
    
  67. var (Bulldog) float	HitSoundThreshold;
    
  68. var (Bulldog) sound	BulldogSquealSound;
    
  69. var (Bulldog) float	SquealVelThresh;
    
  70. var (Bulldog) sound	BulldogHitSound;
    
  71.  
    
  72. var (Bulldog) String BulldogStartForce;
    
  73. var (Bulldog) String BulldogIdleForce;
    
  74. var (Bulldog) String BulldogSquealForce;
    
  75. var (Bulldog) String BulldogHitForce;
    
  76.  
    
  77. replication
    
  78. {
    
  79. 	reliable if(Role == ROLE_Authority)
    
  80. 		HeadlightOn, CurrentTarget;
    
  81. }
    
  82.  
    
  83. function PreBeginPlay()
    
  84. {
    
  85. 	Super.PreBeginPlay();
    
  86. 	if ( Level.IsDemoBuild() )
    
  87. 		Destroy();
    
  88. }
    
  89.  
    
  90. simulated function PostNetBeginPlay()
    
  91. {
    
  92. 	local vector RotX, RotY, RotZ;
    
  93. 	local int i;
    
  94.  
    
  95.     Super.PostNetBeginPlay();
    
  96.  
    
  97.     GetAxes(Rotation,RotX,RotY,RotZ);
    
  98.  
    
  99. 	// Only have triggers on server
    
  100. 	if(Level.NetMode != NM_Client)
    
  101. 	{
    
  102. 		// Create triggers for gettting into the Bulldog
    
  103. 		FLTrigger = spawn(class'BetterbulldogTrigger', self,, Location + FrontTriggerOffset.X * RotX + FrontTriggerOffset.Y * RotY + FrontTriggerOffset.Z * RotZ);
    
  104. 		FLTrigger.SetBase(self);
    
  105. 		FLTrigger.SetCollision(true, false, false);
    
  106.  
    
  107. 		FRTrigger = spawn(class'BetterbulldogTrigger', self,, Location + FrontTriggerOffset.X * RotX - FrontTriggerOffset.Y * RotY + FrontTriggerOffset.Z * RotZ);
    
  108. 		FRTrigger.SetBase(self);
    
  109. 		FRTrigger.SetCollision(true, false, false);
    
  110.  
    
  111. 		TriggerState = true;
    
  112.  
    
  113. 		// Create trigger for flipping the bulldog back over.
    
  114. 		FlipTrigger = spawn(class'BetterbulldogTrigger', self,, Location);
    
  115. 		Fliptrigger.bCarFlipTrigger = true;
    
  116. 		FlipTrigger.SetBase(self);
    
  117. 		FlipTrigger.SetCollisionSize(350, 200);
    
  118. 		FlipTrigger.SetCollision(false, false, false);
    
  119.  
    
  120. 		FlipTriggerState = false;
    
  121. 	}
    
  122.  
    
  123. 	// Dont bother making emitters etc. on dedicated server
    
  124. 	if(Level.NetMode != NM_DedicatedServer)
    
  125. 	{
    
  126. 		// Create headlight projector. We make sure it doesn't project on the vehicle itself.
    
  127. 		Headlight = spawn(class'BulldogHeadlight', self,, Location + HeadlightOffset.X * RotX + HeadlightOffset.Y * RotY + HeadlightOffset.Z * RotZ);
    
  128. 		Headlight.SetBase(self);
    
  129. 		Headlight.SetRelativeRotation(rot(-2000, 32768, 0));
    
  130.  
    
  131. 		// Create wheel dust emitters.
    
  132. 		Dust[0] = spawn(class'BulldogDust', self,, Location + WheelFrontAlong*RotX + WheelFrontAcross*RotY + (WheelVert-DustDrop)*RotZ);
    
  133. 		Dust[0].SetBase(self);
    
  134.  
    
  135. 		Dust[1] = spawn(class'BulldogDust', self,, Location + WheelFrontAlong*RotX - WheelFrontAcross*RotY + (WheelVert-DustDrop)*RotZ);
    
  136. 		Dust[1].SetBase(self);	
    
  137.  
    
  138. 		Dust[2] = spawn(class'BulldogDust', self,, Location + WheelRearAlong*RotX + WheelRearAcross*RotY + (WheelVert-DustDrop)*RotZ);
    
  139. 		Dust[2].SetBase(self);
    
  140.  
    
  141. 		Dust[3] = spawn(class'BulldogDust', self,, Location + WheelRearAlong*RotX - WheelRearAcross*RotY + (WheelVert-DustDrop)*RotZ);
    
  142. 		Dust[3].SetBase(self);
    
  143.  
    
  144. 		// Set light materials
    
  145. 		Skins[1]=BrakeMaterial;
    
  146. 		Skins[2]=HeadlightOffMaterial;
    
  147.  
    
  148. 		// Spawn headlight coronas
    
  149. 		for(i=0; i<8; i++)
    
  150. 		{
    
  151. 			HeadlightCorona[i] = spawn(class'BulldogHeadlightCorona', self,, Location + (HeadlightCoronaOffset[i] >> Rotation) );
    
  152. 			HeadlightCorona[i].SetBase(self);
    
  153. 		}
    
  154. 	}
    
  155.  
    
  156.     // For KImpact event
    
  157.     KSetImpactThreshold(HitSoundThreshold);
    
  158.  
    
  159. 	// If this is not 'authority' version - don't destroy it if there is a problem. 
    
  160. 	// The network should sort things out.
    
  161. 	if(Role != ROLE_Authority)
    
  162. 	{
    
  163. 		KarmaParams(KParams).bDestroyOnSimError = False;
    
  164. 		KarmaParams(frontLeft.KParams).bDestroyOnSimError = False;
    
  165. 		KarmaParams(frontRight.KParams).bDestroyOnSimError = False;
    
  166. 		KarmaParams(rearLeft.KParams).bDestroyOnSimError = False;
    
  167. 		KarmaParams(rearRight.KParams).bDestroyOnSimError = False;
    
  168. 	}
    
  169. }
    
  170.  
    
  171. simulated event Destroyed()
    
  172. {
    
  173. 	local int i;
    
  174.  
    
  175. 	//Log("Betterbulldog Destroyed");
    
  176.  
    
  177. 	// Clean up random stuff attached to the car
    
  178. 	if(Level.NetMode != NM_Client)
    
  179. 	{
    
  180.  
    
  181. 		FLTrigger.Destroy();
    
  182. 		FRTrigger.Destroy();
    
  183. 		FlipTrigger.Destroy();
    
  184. 	}
    
  185.  
    
  186. 	if(Level.NetMode != NM_DedicatedServer)
    
  187. 	{
    
  188. 		'''Headlight.Destroy();
    
  189.  
    
  190. 		for(i=0; i<4; i++)
    
  191. 			Dust[i].Destroy();
    
  192.  
    
  193. 		for(i=0; i<8; i++)
    
  194. 			HeadlightCorona[i].Destroy();'''
    
  195. 	}
    
  196.  
    
  197. 	// This will destroy wheels & joints
    
  198. 	Super.Destroyed();
    
  199.  
    
  200. 	// Trigger destroyed sound and effect
    
  201. 	if(Level.NetMode != NM_DedicatedServer)
    
  202. 	{
    
  203. 		spawn(DestroyedEffect, self, , Location );
    
  204. 		PlaySound(DestroyedSound);
    
  205. 	}
    
  206. }
    
  207.  
    
  208. function KImpact(actor other, vector pos, vector impactVel, vector impactNorm)
    
  209. {
    
  210.     /* Only make noises for Bulldog-world impacts */
    
  211.     if(other != None)
    
  212.         return;
    
  213.  
    
  214.     if(UntilNextImpact < 0)
    
  215.     {
    
  216.         //PlaySound(BulldogHitSound);
    
  217.  
    
  218.         // hack to stop the sound repeating rapidly on impacts
    
  219.         //UntilNextImpact = GetSoundDuration(BulldogHitSound);
    
  220.  
    
  221.  
    
  222.     }
    
  223. }
    
  224.  
    
  225. simulated function ClientKDriverEnter(PlayerController pc)
    
  226. {
    
  227. 	//Log("Bulldog ClientKDriverEnter");
    
  228.  
    
  229. 	Super.ClientKDriverEnter(pc);
    
  230. }
    
  231.  
    
  232. function KDriverEnter(Pawn p)
    
  233. {
    
  234. 	//Log("Bulldog KDriverEnter");
    
  235.  
    
  236. 	Super.KDriverEnter(p);
    
  237.  
    
  238. 	//PlaySound(BulldogStartSound);
    
  239.  
    
  240. 	//AmbientSound=BulldogIdleSound;
    
  241.  
    
  242. 	p.bHidden = True;
    
  243. 	ReceiveLocalizedMessage(class'Vehicles.BulldogMessage', 1);
    
  244. }
    
  245.  
    
  246. simulated function ClientKDriverLeave(PlayerController pc)
    
  247. {
    
  248. 	//Log("Bulldog ClientKDriverLeave");
    
  249.  
    
  250. 	Super.ClientKDriverLeave(pc);
    
  251. }
    
  252.  
    
  253. function bool KDriverLeave(bool bForceLeave)
    
  254. {
    
  255. 	local Pawn OldDriver;
    
  256.  
    
  257. 	//Log("Bulldog KDriverLeave");
    
  258.  
    
  259. 	OldDriver = Driver;
    
  260.  
    
  261. 	// If we succesfully got out of the car, make driver visible again.
    
  262. 	if( Super.KDriverLeave(bForceLeave) )
    
  263. 	{
    
  264. 		OldDriver.bHidden = false;
    
  265. 		AmbientSound = None;	
    
  266. 		return true;
    
  267. 	}
    
  268. 	else
    
  269. 		return false;
    
  270. }
    
  271.  
    
  272. function LaunchRocket(bool bWasAltFire)
    
  273. {
    
  274. 	local vector RotX, RotY, RotZ, FireLocation;
    
  275. 	local BulldogRocket R;
    
  276. 	local PlayerController PC;
    
  277.  
    
  278. 	// Client can't do firing
    
  279. 	if(Role != ROLE_Authority)
    
  280. 		return;
    
  281.  
    
  282. 	// Fire as many rockets as we have time to.
    
  283. 	GetAxes(Rotation, RotX, RotY, RotZ);
    
  284. 	FireLocation = Location + (RocketFireOffset >> Rotation);
    
  285.  
    
  286. 	while(FireCountdown <= 0)
    
  287. 	{
    
  288. 		if(!bWasAltFire)
    
  289. 		{
    
  290. 			// Fire a rocket at the current target (starts flying forward and up a bit)
    
  291.  
    
  292. 			R = spawn(class'Vehicles.BulldogRocket', self, , FireLocation, rotator(-1 * RotX + 0.2 * RotZ));
    
  293. 			R.Seeking = CurrentTarget;
    
  294.  
    
  295. 			// Play firing noise
    
  296. 			PlaySound(Sound'WeaponSounds.RocketLauncher.RocketLauncherFire', SLOT_None,,,,, false);
    
  297. 			PC = PlayerController(Controller);
    
  298. 			if (PC != None && PC.bEnableWeaponForceFeedback)
    
  299. 				PC.ClientPlayForceFeedback("RocketLauncherFire");
    
  300. 		}
    
  301. 		else
    
  302. 		{
    
  303. 			//Log("Would AltFire At:"$CurrentTarget);
    
  304. 		}
    
  305.  
    
  306. 		FireCountdown += FireInterval;
    
  307. 	}
    
  308. }
    
  309.  
    
  310. // Fire a rocket (if we've had time to reload!)
    
  311. function VehicleFire(bool bWasAltFire)
    
  312. {
    
  313. 	Super.VehicleFire(bWasAltFire);
    
  314.  
    
  315. 	if(FireCountdown < 0)
    
  316. 	{
    
  317. 		FireCountdown = 0;
    
  318. 		LaunchRocket(bWasAltFire);
    
  319. 	}
    
  320. }
    
  321.  
    
  322. // For drawing targetting reticule
    
  323. simulated function DrawHud(Canvas C)
    
  324. {
    
  325. 	local int XPos, YPos;
    
  326. 	local vector ScreenPos;
    
  327. 	local float RatioX, RatioY;
    
  328. 	local float tileX, tileY;
    
  329. 	local float SizeX, SizeY, PosDotDir;
    
  330. 	local vector CameraLocation, CamDir;
    
  331. 	local rotator CameraRotation;
    
  332.  
    
  333. 	if(CurrentTarget == None)
    
  334. 		return;
    
  335.  
    
  336. 	SizeX = 64.0;
    
  337. 	SizeY = 64.0;
    
  338.  
    
  339. 	ScreenPos = C.WorldToScreen( CurrentTarget.Location );
    
  340.  
    
  341. 	// Dont draw reticule if target is behind camera
    
  342. 	C.GetCameraLocation( CameraLocation, CameraRotation );
    
  343. 	CamDir = vector(CameraRotation);
    
  344. 	PosDotDir = (CurrentTarget.Location - CameraLocation) Dot CamDir;
    
  345. 	if( PosDotDir < 0)
    
  346. 		return;
    
  347.  
    
  348. 	RatioX = C.SizeX / 640.0;
    
  349. 	RatioY = C.SizeY / 480.0;
    
  350.  
    
  351. 	tileX = sizeX * RatioX;
    
  352. 	tileY = sizeY * RatioX;
    
  353.  
    
  354. 	XPos = ScreenPos.X;
    
  355. 	YPos = ScreenPos.Y;
    
  356. 	C.Style = ERenderStyle.STY_Additive;
    
  357. 	C.DrawColor.R = 255;
    
  358. 	C.DrawColor.G = 255;
    
  359. 	C.DrawColor.B = 255;
    
  360. 	C.DrawColor.A = 255;
    
  361. 	C.SetPos(XPos - tileX*0.5, YPos - tileY*0.5);
    
  362. 	C.DrawTile( TargetMaterial, tileX, tileY, 0.0, 0.0, 256, 256); //--- TODO : Fix HARDCODED USIZE
    
  363. }
    
  364.  
    
  365. simulated function Tick(float Delta)
    
  366. {
    
  367.     Local float BestAim, BestDist, TotalSlip, EnginePitch, VMag;
    
  368. 	Local vector RotX, RotY, RotZ, FireLocation;
    
  369. 	local pawn NewTarget;
    
  370. 	local int i;
    
  371.  
    
  372.     Super.Tick(Delta);
    
  373.  
    
  374. 	// Weapons (run on server and replicated to client)
    
  375. 	if(Role == ROLE_Authority)
    
  376. 	{
    
  377. 		// Only put headlights on when driver is in. Save batteries!
    
  378. 		if(Driver != None)
    
  379. 			HeadlightOn=true;
    
  380. 		else
    
  381. 			HeadlightOn=false;
    
  382.  
    
  383. 		// Do targetting (do nothing if no controller)
    
  384. 		SinceLastTargetting += Delta;
    
  385. 		if(Controller != None && SinceLastTargetting > TargettingInterval)
    
  386. 		{
    
  387. 			GetAxes(Rotation, RotX, RotY, RotZ);
    
  388.  
    
  389. 			FireLocation = Location + (RocketFireOffset >> Rotation);
    
  390.  
    
  391. 			// BestAim is zero - so we will only target things in front of the buggy
    
  392. 			BestAim = 0;
    
  393. 			NewTarget = Controller.PickTarget(BestAim, BestDist, -1.0 * RotX, FireLocation, TargettingRange);
    
  394.  
    
  395. 			// If this is a new lock - play lock-on noise
    
  396. 			if(NewTarget != CurrentTarget)
    
  397. 			{
    
  398. 				if(NewTarget == None)
    
  399. 					PlayerController(Controller).ClientPlaySound(Sound'WeaponSounds.SeekLost');
    
  400. 				else
    
  401. 					PlayerController(Controller).ClientPlaySound(Sound'WeaponSounds.LockOn');
    
  402. 			}
    
  403.  
    
  404. 			CurrentTarget = NewTarget;
    
  405. 			SinceLastTargetting = 0;
    
  406. 		}
    
  407.  
    
  408. 		// Countdown to next shot
    
  409. 		FireCountdown -= Delta;
    
  410.  
    
  411. 		// This is for sustained barrages.
    
  412. 		// Primary fire takes priority
    
  413. 		if(bVehicleIsFiring)
    
  414. 			LaunchRocket(false);
    
  415. 		else if(bVehicleIsAltFiring)
    
  416. 			LaunchRocket(true);
    
  417. 	}
    
  418.  
    
  419. 	// Dont bother doing effects on dedicated server.
    
  420. 	if(Level.NetMode != NM_DedicatedServer)
    
  421. 	{
    
  422. 		// Update brake light colors.
    
  423. 		if(Gear == -1 && OutputBrake == false)
    
  424. 		{
    
  425. 			// REVERSE
    
  426. 			Skins[1] = ReverseMaterial;
    
  427. 		}
    
  428. 		else if(Gear == 0 && OutputBrake == true)
    
  429. 		{
    
  430. 			// BRAKE
    
  431. 			Skins[1] = BrakeMaterial;
    
  432. 		}
    
  433. 		else
    
  434. 		{
    
  435. 			// OFF
    
  436. 			Skins[1] = TailOffMaterial;
    
  437. 		}
    
  438.  
    
  439. 		// Set headlight projector state.
    
  440. 		Headlight.DetachProjector();
    
  441. 		if(HeadlightOn)
    
  442. 		{
    
  443. 			Headlight.AttachProjector();
    
  444. 			Skins[2] = HeadlightOnMaterial;
    
  445. 			for(i=0; i<8; i++)
    
  446. 				HeadlightCorona[i].bHidden = false;
    
  447. 		}
    
  448. 		else
    
  449. 		{
    
  450. 			Skins[2] = HeadlightOffMaterial;
    
  451. 			for(i=0; i<8; i++)
    
  452. 				HeadlightCorona[i].bHidden = true;
    
  453. 		}
    
  454.  
    
  455. 		// Update dust kicked up by wheels.
    
  456. 		Dust[0].UpdateDust(frontLeft, DustSlipRate, DustSlipThresh);
    
  457. 		Dust[1].UpdateDust(frontRight, DustSlipRate, DustSlipThresh);
    
  458. 		Dust[2].UpdateDust(rearLeft, DustSlipRate, DustSlipThresh);
    
  459. 		Dust[3].UpdateDust(rearRight, DustSlipRate, DustSlipThresh);
    
  460. 	}
    
  461.  
    
  462.     UntilNextImpact -= Delta;
    
  463.  
    
  464. 	// This assume the sound is an idle-ing sound, and increases with pitch
    
  465. 	// as wheels speed up.
    
  466. 	EnginePitch = 64 + ((WheelSpinSpeed/EnginePitchScale) * (255-64));
    
  467.     SoundPitch = FClamp(EnginePitch, 0, 254);
    
  468. 	//Log("Engine Pitch:"$SoundPitch);
    
  469.     //SoundVolume = 255;
    
  470.  
    
  471.     // Currently, just use rear wheels for slipping noise
    
  472.     TotalSlip = rearLeft.GroundSlipVel + rearRight.GroundSlipVel;
    
  473.     //log("TotalSlip:"$TotalSlip);
    
  474. 	if(TotalSlip > SquealVelThresh)
    
  475. 	{
    
  476. 		rearLeft.AmbientSound = BulldogSquealSound;
    
  477. 	}
    
  478. 	else
    
  479. 	{
    
  480. 		rearLeft.AmbientSound = None;
    
  481. 	}
    
  482.  
    
  483. 	// Dont have triggers on network clients.
    
  484. 	if(Level.NetMode != NM_Client)
    
  485. 	{
    
  486. 		// If vehicle is moving, disable collision for trigger.
    
  487. 		VMag = VSize(Velocity);
    
  488.  
    
  489. 		if(!bIsInverted && VMag < TriggerSpeedThresh && TriggerState == false)
    
  490. 		{
    
  491. 			FLTrigger.SetCollision(true, false, false);
    
  492. 			FRTrigger.SetCollision(true, false, false);
    
  493. 			TriggerState = true;
    
  494. 		}
    
  495. 		else if((bIsInverted || VMag > TriggerSpeedThresh) && TriggerState == true)
    
  496. 		{
    
  497. 			FLTrigger.SetCollision(false, false, false);
    
  498. 			FRTrigger.SetCollision(false, false, false);
    
  499. 			TriggerState = false;
    
  500. 		}
    
  501.  
    
  502. 		// If vehicle is inverted, and slow, turn on big 'flip vehicle' trigger.
    
  503. 		if(bIsInverted && VMag < TriggerSpeedThresh && FlipTriggerState == false)
    
  504. 		{
    
  505. 			FlipTrigger.SetCollision(true, false, false);
    
  506. 			FlipTriggerState = true;	
    
  507. 		}
    
  508. 		else if((!bIsInverted || VMag > TriggerSpeedThresh) && FlipTriggerState == true)
    
  509. 		{
    
  510. 			FlipTrigger.SetCollision(false, false, false);
    
  511. 			FlipTriggerState = false;
    
  512. 		}
    
  513. 	}
    
  514. }
    
  515.  
    
  516. // Really simple at the moment!
    
  517. function TakeDamage(int Damage, Pawn instigatedBy, Vector hitlocation, 
    
  518. 						Vector momentum, class<DamageType> damageType)
    
  519. {
    
  520. 	// Avoid damage healing the car!
    
  521. 	if(Damage < 0)
    
  522. 		return;
    
  523.  
    
  524. 	if(damageType == class'DamTypeSuperShockBeam')
    
  525. 		Health -= 100; // Instagib doesn't work on vehicles
    
  526. 	else
    
  527. 		Health -= 0.5 * Damage; // Weapons do less damage
    
  528.  
    
  529. 	// The vehicle is dead!
    
  530. 	if(Health <= 0)
    
  531. 	{
    
  532. 		if ( Controller != None )
    
  533. 		{
    
  534. 			if( Controller.bIsPlayer )
    
  535. 			{
    
  536. 				ClientKDriverLeave(PlayerController(Controller)); // Just to reset HUD etc.
    
  537. 				Controller.PawnDied(self); // This should unpossess the controller and let the player respawn
    
  538. 			}
    
  539. 			else
    
  540. 				Controller.Destroy();
    
  541. 		}
    
  542.  
    
  543. 		Destroy(); // Destroy the vehicle itself (see Destroyed below)
    
  544. 	}
    
  545.  
    
  546.     //KAddImpulse(momentum, hitlocation);
    
  547. }
    
  548.  
    
  549. defaultproperties
    
  550. {
    
  551. 	DrawType=DT_StaticMesh
    
  552. 	StaticMesh=StaticMesh'BulldogMeshes.Simple.S_Chassis'
    
  553.  
    
  554.     Begin Object Class=KarmaParamsRBFull Name=KParams0
    
  555.         KInertiaTensor(0)=20
    
  556.         KInertiaTensor(1)=0
    
  557.         KInertiaTensor(2)=0
    
  558.         KInertiaTensor(3)=30
    
  559.         KInertiaTensor(4)=0
    
  560.         KInertiaTensor(5)=48
    
  561. 		KCOMOffset=(X=0.8,Y=0.0,Z=-0.7)
    
  562. 		KStartEnabled=True
    
  563. 		KFriction=1.6
    
  564. 		KLinearDamping=0
    
  565. 		KAngularDamping=0
    
  566. 		bKNonSphericalInertia=False
    
  567.         bHighDetailOnly=False
    
  568.         bClientOnly=False
    
  569. 		bKDoubleTickRate=True
    
  570.         Name="KParams0"
    
  571.     End Object
    
  572.     KParams=KarmaParams'KParams0'
    
  573.  
    
  574. 	DrawScale=0.4
    
  575.  
    
  576. 	FrontTireClass=class'BulldogTire'
    
  577. 	RearTireClass=class'BulldogTire'
    
  578.  
    
  579. 	WheelFrontAlong=-100
    
  580. 	WheelFrontAcross=110
    
  581. 	WheelRearAlong=115
    
  582. 	WheelRearAcross=110
    
  583. 	WheelVert=-15
    
  584.  
    
  585. 	DestroyedEffect=class'XEffects.RocketExplosion'
    
  586. 	DestroyedSound=sound'WeaponSounds.P1RocketLauncherAltFire'
    
  587.  
    
  588.  
    
  589. 	//FrontTriggerOffset=(X=174,Y=0,Z=20)
    
  590. 	FrontTriggerOffset=(X=0,Y=165,Z=10)
    
  591.  
    
  592. 	TriggerSpeedThresh=40
    
  593.  
    
  594. 	HeadlightOffset=(X=-200,Y=0,Z=50)
    
  595. 	HeadlightOn=false
    
  596.  
    
  597. 	// Light materials
    
  598. 	ReverseMaterial=Material'VehicleFX.BDReverseLight_ON'
    
  599. 	BrakeMaterial=Material'VehicleFX.BDTaiLight_ON'
    
  600. 	TailOffMaterial=Material'VehicleFX.BDTailOff'
    
  601.  
    
  602. 	HeadlightOnMaterial=Material'VehicleFX.BDHeadlights_ON'
    
  603. 	HeadlightOffMaterial=Material'VehicleFX.BDHeadlights'
    
  604.  
    
  605. 	HeadlightCoronaOffset(0)=(X=-199,Y=51,Z=57)
    
  606. 	HeadlightCoronaOffset(1)=(X=-199,Y=-51,Z=57)
    
  607. 	HeadlightCoronaOffset(2)=(X=-128,Y=38,Z=125)
    
  608. 	HeadlightCoronaOffset(3)=(X=-189,Y=93,Z=28)
    
  609. 	HeadlightCoronaOffset(4)=(X=-183,Y=-93,Z=26)
    
  610. 	HeadlightCoronaOffset(5)=(X=-190,Y=-51,Z=77)
    
  611. 	HeadlightCoronaOffset(6)=(X=-128,Y=63,Z=123)
    
  612. 	HeadlightCoronaOffset(7)=(X=-185,Y=85,Z=10)
    
  613.  
    
  614. 	// Sounds
    
  615. 	EnginePitchScale=655350
    
  616. 	HitSoundThreshold=30
    
  617. 	SquealVelThresh=15
    
  618.  
    
  619. 	DustSlipRate=2.8
    
  620. 	DustSlipThresh=0.1
    
  621. 	DustDrop=30
    
  622.  
    
  623. 	// Weaponary
    
  624. 	bSpecialHUD=true
    
  625. 	FireInterval=0.9
    
  626. 	TargettingInterval=0.5
    
  627. 	RocketFireOffset=(X=0,Y=0,Z=180)
    
  628. 	TargettingRange=5000
    
  629.     TargetMaterial=Material'InterfaceContent.Hud.fbBombFocus'
    
  630.  
    
  631.  
    
  632. 	// Driver positions
    
  633.  
    
  634. 	ExitPositions(0)=(X=0,Y=200,Z=100)
    
  635. 	ExitPositions(1)=(X=0,Y=-200,Z=100)
    
  636. 	ExitPositions(2)=(X=350,Y=0,Z=100)
    
  637. 	ExitPositions(3)=(X=-350,Y=0,Z=100)
    
  638.  
    
  639. 	DrivePos=(X=-165,Y=0,Z=-100)
    
  640.  
    
  641.     OutputBrake=1
    
  642.     Steering=0
    
  643.     Throttle=0
    
  644.     Gear=1
    
  645. 	StopThreshold=40
    
  646.  
    
  647.     MaxSteerAngle=3400
    
  648.     MaxBrakeTorque=55
    
  649.  
    
  650. 	TorqueCurve=(Points=((InVal=0,OutVal=270),(InVal=20000,OutVal=170),(InVal=300000,OutVal=0)))
    
  651.     TorqueSplit=0.5
    
  652.     SteerPropGap=500
    
  653.     SteerTorque=15000
    
  654.     SteerSpeed=20000
    
  655.  
    
  656.     TireMass=0.5    
    
  657.     ChassisMass=8
    
  658.  
    
  659.     TireRollFriction=1.5
    
  660.     TireLateralFriction=1.5
    
  661.     TireRollSlip=0.06
    
  662.     TireLateralSlip=0.04
    
  663.     TireMinSlip=0.001
    
  664.     TireSlipRate=0.007
    
  665.     TireSoftness=0.0
    
  666.     TireAdhesion=0
    
  667.     TireRestitution=0
    
  668.  
    
  669. 	HandbrakeThresh=1000
    
  670. 	TireHandbrakeSlip=0.2
    
  671. 	TireHandbrakeFriction=-1.2
    
  672.  
    
  673.     SuspStiffness=150
    
  674.     SuspDamping=14.5
    
  675.     SuspHighLimit=0.5
    
  676.     SuspLowLimit=-0.5
    
  677.     SuspRef=0
    
  678.  
    
  679. 	AirSpeed = 5000
    
  680.  
    
  681. 	Health=300
    
  682.  
    
  683.     // sound
    
  684.     SoundRadius=255
    
  685.  
    
  686.     UntilNextImpact=500
    
  687. }
    
  688. </uscript lines>
    
  689. Pz. help.
    
  690.  
    
  691. '''EntropicLqd:''' Is this in a new class?  Any reason why you didn't post the whole code segment?
    
  692.  
    
  693. '''ProjectX:''' It's a modification of the bulldog, so it has lower acceleration and slightly higher speed, this is the only part i've changed so far, and this is the only part, therefore, where my problem will be.
    
  694.  
    
  695. '''ZxAnPhOrIaN:''' I am a n00b at uscripting also.. Look at my new map component at the open source area. It is a multi skybox zone thing similar to slickwilly's UT one, but more "user(or n00b)-friendly". And its for UT2003!
    
  696. '''AlphaOne:''' What happens when you try to run this codes? Does it actually compile?
    
  697. '''ProjectX:''' It compiles fine in UCC make and it appears in-game, i just cant enter it, thats the only thing wrong.
    
  698. '''ProjectX:''' I've found the problem, i forgot to change one of the class names in bulldog trigger. My new problem is now occurring (isn't debugging fun!?!?!?) Its in the uscript section above and heres the error i get in UCC MAKE: Error, type mismatch in '='. Ok, the line is line 292 in the script.
    
  699. '''ProjectX:''' Does anyone know what's wrong?
    
  700. '''AlphaOne:''' You must be really frustrated with this!? Before I try to help you, I would like to know if you modified the '''actuall''' bulldog code or created a subclass of a bulldog? If you modified the original bulldog, then you shouldn't be doing that. Really. That's why most of the original game code says that if you modify it you'll have problems. You either subclass the bulldog, or copy+pase the bulldog code into your own version of the bulldog. You can find how to [[Create A Subclass]] here. Alternatively, you can totally recreate your own bulldog, by creating a new package, creating classes MyBulldog and MyBulldogTires. Then fool around with those variables. The first step is easier (I think). When you subclass the bulldog, only include (in the defaultproperties) those variables that you've changed. If you don't know Object Oriented Programming (OOP), then you should search the net or this site for more info. It is the key to programming in UScript. I hope that helps.
    
  701. '''ProjectX:''' I copied the script to my own folder and compiled with UCC Make, changing the name to "betterbulldog"
    
  702. '''ProjectX:''' so ure all as infuriatingly n00bish as me/ have other stuff to do/ dont like me?
    
  703. '''ProjectX:''' I know this is a lot of code for you to help me with, but this is my first time at coding and if i dont get help now you may forever lose out on some great random insanity (like Food Fight UT2K3 not copyrighted in anyway, i would love to see this idea made)and anyway, the problem is only with 1 line of code, though i recognise that it may be due to another line of code somewhere else.
    
  704. '''Mychaeel:''' What's your problem with that code, again?  Compiler error in line 292?
    
  705. '''EntropicLqd:''' Bah - beat me to it.
    
  706. '''Daid303:''' Uh, can't find anything that wrong with line 292. Are you really really sure that this is YOUR code, and that that is the Right error?
    
  707. '''Mychaeel:''' Do you happen to have your ''own'' version of class BulldogRocket in your package?  Then that class and class Vehicles.BulldogRocket would indeed mismatch.
    
  708. '''ProjectX:''' That could be it, i shall check
    
  709. '''MythOpus:''' As you may or may not know... line ' 292 ' refers to the class that shoots the rocket.  Are you sure you have changed this to the class you have? Ex- Vehicles.OriginalBulldogFire to MyPackage.MyClassFire ?
    
  710.  
    
  711. '''Foxpaw:''' I decided to pore over this and figure out "what's down with that." :P
    
  712.  
    
  713. This is a part that doesn't work. It may have been an error in the copying, but other than this it compiled fine. (Actually I didn't have any betterbulldogtriggers so I just substituted them for regular bulldog triggers and made it so you can enter an empty betterbulldog by shooting it.. but you would probrably like to retain the method you have now.
    
  714. <uscript>
    
  715.   '''Headlight.Destroy();
    
  716.  
    
  717.   for(i=0; i<4; i++)
    
  718.     Dust[i].Destroy();
    
  719.  
    
  720.   for(i=0; i<8; i++)
    
  721.     HeadlightCorona[i].Destroy();'''
    

''' specifies a name constant, and obviously, is an invalid one.

Other than the bit above, it compiled and drove fine. It flips a lot less than the regular bulldog too.