project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Racer.lua
changeset 7568 75ba91f14ed5
equal deleted inserted replaced
7566:57d343ee382f 7568:75ba91f14ed5
       
     1 
       
     2 ------------------------------------------
       
     3 -- RACER 0.5
       
     4 -- map-independant racing script
       
     5 -- by mikade
       
     6 -----------------------------------------
       
     7 
       
     8 -----------------------------------
       
     9 --0.1: took all the code from crazy racer and scrapped most of it
       
    10 -----------------------------------
       
    11 
       
    12 -- Removed tumbler system
       
    13 -- Removed extra adds like boosters etc
       
    14 -- Added experimental waypoint placement system
       
    15 -- More user feedback
       
    16 -- Reduced race complexity limit to 5 waypoints
       
    17 -- stop placement at complexity limit reached and end turn
       
    18 -- guys dont keep racing after dying
       
    19 -- invulnerable feasibility
       
    20 -- reverted time keeping method
       
    21 -- reduced feedback display time
       
    22 -- colour-coded addcaptions
       
    23 -- cleaned up code
       
    24 -- support for more players properly added
       
    25 -- tardis fix
       
    26 -- remove airstrikes
       
    27 
       
    28 -- i think the remainder 0 .456 sec of the tracktime isnt getting reset on newturn
       
    29 
       
    30 -- update feedback
       
    31 
       
    32 -------
       
    33 -- 0.2
       
    34 -------
       
    35 
       
    36 -- allow gameflags
       
    37 -- extend time to 90s
       
    38 -- remove other air-attack based weps
       
    39 -- turn off water rise for sd
       
    40 
       
    41 -------
       
    42 -- 0.3
       
    43 -------
       
    44 
       
    45 -- prevent WP being placed in land
       
    46 -- prevent waypoints being placed outside border
       
    47 
       
    48 -------
       
    49 -- 0.4
       
    50 -------
       
    51 
       
    52 -- update user feedback
       
    53 -- add more sounds
       
    54 
       
    55 -------
       
    56 -- 0.5
       
    57 -------
       
    58 
       
    59 -- fix ghost disappearing if hog falls in water or somehow dies
       
    60 -- lengthen ghost tracking interval to improve performance on slower machines
       
    61 -- increase waypoint limit to 8
       
    62 -- allow for persistent showmission information
       
    63 
       
    64 -----------------------------
       
    65 -- SCRIPT BEGINS
       
    66 -----------------------------
       
    67 
       
    68 loadfile(GetDataPath() .. "Scripts/Locale.lua")()
       
    69 
       
    70 ------------------
       
    71 -- Got Variables?
       
    72 ------------------
       
    73 
       
    74 local fMod = 1000000 -- 1
       
    75 local roundLimit = 3
       
    76 local roundNumber = 0
       
    77 local firstClan = 10
       
    78 
       
    79 local fastX = {}
       
    80 local fastY = {}
       
    81 local fastCount = 0
       
    82 local fastIndex = 0
       
    83 local fastColour
       
    84 
       
    85 local currX = {}
       
    86 local currY = {}
       
    87 local currCount = 0
       
    88 
       
    89 --------------------------
       
    90 -- hog and team tracking variales
       
    91 --------------------------
       
    92 
       
    93 local numhhs = 0 -- store number of hedgehogs
       
    94 local hhs = {} -- store hedgehog gears
       
    95 
       
    96 local numTeams --  store the number of teams in the game
       
    97 local teamNameArr = {}	-- store the list of teams
       
    98 local teamClan = {}
       
    99 local teamSize = {}	-- store how many hogs per team
       
   100 local teamIndex = {} -- at what point in the hhs{} does each team begin
       
   101 
       
   102 local teamComment = {}
       
   103 local teamScore = {}
       
   104 
       
   105 -------
       
   106 -- racer vars
       
   107 --------
       
   108 
       
   109 local cGear = nil
       
   110 
       
   111 local bestClan = nil
       
   112 local bestTime = nil
       
   113 
       
   114 local gameBegun = false
       
   115 local gameOver = false
       
   116 local racerActive = false
       
   117 local trackTime = 0
       
   118 
       
   119 local wpCirc = {}
       
   120 local wpX = {}
       
   121 local wpY = {}
       
   122 local wpCol = {}
       
   123 local wpActive = {}
       
   124 local wpRad = 450 --75
       
   125 local wpCount = 0
       
   126 local wpLimit = 8
       
   127 
       
   128 local roundN
       
   129 local lastRound
       
   130 local RoundHasChanged
       
   131 
       
   132 -------------------
       
   133 -- general methods
       
   134 -------------------
       
   135 
       
   136 function RebuildTeamInfo()
       
   137 
       
   138 
       
   139 	-- make a list of individual team names
       
   140 	for i = 0, (TeamsCount-1) do
       
   141 		teamNameArr[i] = " " -- = i
       
   142 		teamSize[i] = 0
       
   143 		teamIndex[i] = 0
       
   144 		teamScore[i] = 100000
       
   145 	end
       
   146 	numTeams = 0
       
   147 
       
   148 	for i = 0, (numhhs-1) do
       
   149 
       
   150 		z = 0
       
   151 		unfinished = true
       
   152 		while(unfinished == true) do
       
   153 
       
   154 			newTeam = true
       
   155 			tempHogTeamName = GetHogTeamName(hhs[i]) -- this is the new name
       
   156 
       
   157 			if tempHogTeamName == teamNameArr[z] then
       
   158 				newTeam = false
       
   159 				unfinished = false
       
   160 			end
       
   161 
       
   162 			z = z + 1
       
   163 
       
   164 			if z == TeamsCount then
       
   165 				unfinished = false
       
   166 				if newTeam == true then
       
   167 					teamNameArr[numTeams] = tempHogTeamName
       
   168 					numTeams = numTeams + 1
       
   169 				end
       
   170 			end
       
   171 
       
   172 		end
       
   173 
       
   174 	end
       
   175 
       
   176 	-- find out how many hogs per team, and the index of the first hog in hhs
       
   177 	for i = 0, (numTeams-1) do
       
   178 		for z = 0, (numhhs-1) do
       
   179 			if GetHogTeamName(hhs[z]) == teamNameArr[i] then
       
   180 				teamClan[i] = GetHogClan(hhs[z])
       
   181 				if teamSize[i] == 0 then
       
   182 					teamIndex[i] = z -- should give starting index
       
   183 				end
       
   184 				teamSize[i] = teamSize[i] + 1
       
   185 				--add a pointer so this hog appears at i in hhs
       
   186 			end
       
   187 		end
       
   188 
       
   189 	end
       
   190 
       
   191 end
       
   192 
       
   193 
       
   194 -----------------
       
   195 -- RACER METHODS
       
   196 -----------------
       
   197 
       
   198 function CheckWaypoints()
       
   199 
       
   200 	trackFinished = true
       
   201 
       
   202 	for i = 0, (wpCount-1) do
       
   203 
       
   204 		g1X, g1Y = GetGearPosition(CurrentHedgehog)
       
   205 		g2X, g2Y = wpX[i], wpY[i]
       
   206 
       
   207 		g1X = g1X - g2X
       
   208 		g1Y = g1Y - g2Y
       
   209 		dist = (g1X*g1X) + (g1Y*g1Y)
       
   210 
       
   211 		--if i == 0 then
       
   212 		--	AddCaption(dist .. "/" .. (wpRad*wpRad) )
       
   213 		--end
       
   214 
       
   215 		NR = (48/100*wpRad)/2
       
   216 
       
   217 		if dist < (NR*NR) then
       
   218 		--if dist < (wpRad*wpRad) then
       
   219 			--AddCaption("howdy")
       
   220 			wpActive[i] = true
       
   221 			wpCol[i] = GetClanColor(GetHogClan(CurrentHedgehog)) -- new				--GetClanColor(1)
       
   222 			SetVisualGearValues(wpCirc[i], wpX[i], wpY[i], 20, 100, 1, 10, 0, wpRad, 5, wpCol[i])
       
   223 
       
   224 			wpRem = 0
       
   225 			for k = 0, (wpCount-1) do
       
   226 				if wpActive[k] == false then
       
   227 					wpRem = wpRem + 1
       
   228 				end
       
   229 			end
       
   230 
       
   231 			AddCaption(loc("Way-Points Remaining") .. ": " .. wpRem,0xffba00ff,capgrpAmmoinfo)
       
   232 
       
   233 		end
       
   234 
       
   235 		if wpActive[i] == false then
       
   236 			trackFinished = false
       
   237 		end
       
   238 
       
   239 	end
       
   240 
       
   241 	return(trackFinished)
       
   242 
       
   243 end
       
   244 
       
   245 function AdjustScores()
       
   246 
       
   247 	if bestTime == nil then
       
   248 		bestTime = 100000
       
   249 		bestClan = 10
       
   250 		bestTimeComment = "N/A"
       
   251 	end
       
   252 
       
   253 	newScore = false
       
   254 
       
   255 	-- update this clan's time if the new track is better
       
   256 	for i = 0, (numTeams-1) do
       
   257 		if teamClan[i] == GetHogClan(CurrentHedgehog) then
       
   258 			if trackTime < teamScore[i] then
       
   259 				teamScore[i] = trackTime
       
   260 				newScore = true
       
   261 			else
       
   262 				newScore = false
       
   263 			end
       
   264 		end
       
   265 	end
       
   266 
       
   267 	--bestTime = 100000
       
   268 	--bestClan = 10
       
   269 
       
   270 	-- find the best time out of those so far
       
   271 	for i = 0, (numTeams-1) do
       
   272 		if teamScore[i] < bestTime then
       
   273 			bestTime = teamScore[i]
       
   274 			bestClan = teamClan[i]
       
   275 		end
       
   276 	end
       
   277 
       
   278 	if bestTime ~= 100000 then
       
   279 		bestTimeComment = (bestTime/1000) ..loc("s")
       
   280 	end
       
   281 
       
   282 	if newScore == true then
       
   283 		if trackTime == bestTime then -- best time of the race
       
   284 			ShowMission(loc("RACER"),
       
   285 			loc("TRACK COMPLETED"),
       
   286 			loc("NEW RACE RECORD: ") .. (trackTime/1000) ..loc("s") .. "|" ..
       
   287 			loc("WINNING TIME: ") .. bestTimeComment, 0, 4000)
       
   288 			PlaySound(sndHomerun)
       
   289 		else	-- best time for the clan
       
   290 			ShowMission(loc("RACER"),
       
   291 			loc("TRACK COMPLETED"),
       
   292 			loc("NEW CLAN RECORD: ") .. (trackTime/1000) ..loc("s") .. "|" ..
       
   293 			loc("WINNING TIME: ") .. bestTimeComment, 4, 4000)
       
   294 		end
       
   295 	else -- not any kind of new score
       
   296 		ShowMission(loc("RACER"),
       
   297 		loc("TRACK COMPLETED"),
       
   298 		loc("TIME: ") .. (trackTime/1000) ..loc("s") .. "|" ..
       
   299 		loc("WINNING TIME: ") .. bestTimeComment, -amSkip, 4000)
       
   300 		PlaySound(sndHellish)
       
   301 	end
       
   302 
       
   303 
       
   304 	--------
       
   305 	--new
       
   306 	--------
       
   307 
       
   308 	if bestTime == trackTime then
       
   309 		--AddCaption("wooooooooooooooooooooooooooooo")
       
   310 
       
   311 		fastColour = GetClanColor(GetHogClan(CurrentHedgehog))
       
   312 
       
   313 		for i = 0, (currCount-1) do
       
   314 			fastX[i] = currX[i]
       
   315 			fastY[i] = currY[i]
       
   316 		end
       
   317 
       
   318 		fastCount = currCount
       
   319 		fastIndex = 0
       
   320 
       
   321 		--currCount = 0 -- is this needed?
       
   322 
       
   323 	else
       
   324 		currCount = 0
       
   325 		fastIndex = 0
       
   326 	end
       
   327 
       
   328 
       
   329 end
       
   330 
       
   331 function onNewRound()
       
   332 
       
   333 	roundNumber = roundNumber + 1
       
   334 
       
   335 	totalComment = ""
       
   336 	for i = 0, (TeamsCount-1) do
       
   337 			if teamNameArr[i] ~= " " then				-- teamScore[teamClan[i]]
       
   338 				teamComment[i] = teamNameArr[i] .. ": " .. (teamScore[i]/1000) .. loc("s|")
       
   339 				totalComment = totalComment .. teamComment[i]
       
   340 			elseif teamNameArr[i] == " " then
       
   341 				teamComment[i] = "|"
       
   342 			end
       
   343 	end
       
   344 
       
   345 	ShowMission(	loc("RACER"),
       
   346 					loc("STATUS UPDATE"),
       
   347 					loc("Rounds Complete: ") .. roundNumber .. "/" .. roundLimit .. "|" .. " " .. "|" ..
       
   348 					loc("Best Team Times: ") .. "|" .. totalComment, 0, 4000)
       
   349 
       
   350 	-- end game if its at round limit
       
   351 	if roundNumber == roundLimit then
       
   352 		for i = 0, (numhhs-1) do
       
   353 			if GetHogClan(hhs[i]) ~= bestClan then
       
   354 				SetEffect(hhs[i], heResurrectable, false)
       
   355 				SetHealth(hhs[i],0)
       
   356 			end
       
   357 		end
       
   358 		gameOver = true
       
   359 		TurnTimeLeft = 1
       
   360 	end
       
   361 
       
   362 end
       
   363 
       
   364 function CheckForNewRound()
       
   365 
       
   366 	-------------
       
   367 	------ new
       
   368 	-------------
       
   369 
       
   370 	--[[turnN = turnN + 1
       
   371 	if gameBegun == false then
       
   372 		if turnN == 2 then
       
   373 			for i = 0, (numhhs-1) do
       
   374 				if hhs[i] ~= nil then
       
   375 					SetEffect(hhs[i], heResurrectable, false)
       
   376 					SetHealth(hhs[i],0)
       
   377 				end
       
   378 			end
       
   379 			gameOver = true
       
   380 			TurnTimeLeft = 1
       
   381 		end
       
   382 	else
       
   383 
       
   384 
       
   385 	end]]
       
   386 
       
   387 	--[[if roundBegun == true then
       
   388 
       
   389 		if RoundHasChanged == true then
       
   390 			roundN = roundN + 1
       
   391 			RoundHasChanged = false
       
   392 			onNewRound()
       
   393 		end
       
   394 
       
   395 		if lastRound ~= TotalRounds then -- new round, but not really
       
   396 
       
   397 			if RoundHasChanged == false then
       
   398 				RoundHasChanged = true
       
   399 			end
       
   400 
       
   401 		end
       
   402 
       
   403 		AddCaption("RoundN:" .. roundN .. "; " .. "TR: " .. TotalRounds)
       
   404 
       
   405 		lastRound = TotalRounds
       
   406 
       
   407 	end]]
       
   408 
       
   409 	------------
       
   410 	----- old
       
   411 	------------
       
   412 
       
   413 	if GetHogClan(CurrentHedgehog) == firstClan then
       
   414 		onNewRound()
       
   415 	end
       
   416 
       
   417 end
       
   418 
       
   419 function DisableTumbler()
       
   420 	currCount = 0
       
   421 	fastIndex = 0
       
   422 	TurnTimeLeft = 0
       
   423 	racerActive = false -- newadd
       
   424 end
       
   425 
       
   426 function HandleGhost()
       
   427 
       
   428 	-- get the current xy of the racer at this point
       
   429 	currX[currCount] = GetX(CurrentHedgehog)
       
   430 	currY[currCount] = GetY(CurrentHedgehog)
       
   431 	currCount = currCount + 1
       
   432 
       
   433 	-- draw a ping of smoke where the fastest player was at this point
       
   434 	if (fastCount ~= 0) and (fastIndex < fastCount) then
       
   435 
       
   436 		fastIndex = fastIndex + 1
       
   437 
       
   438 		tempE = AddVisualGear(fastX[fastIndex], fastY[fastIndex], vgtSmoke, 0, false)
       
   439 		g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
       
   440 		SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, fastColour )
       
   441 
       
   442 		--AddCaption("fC: " .. fastIndex .. " / " .. fastCount)
       
   443 
       
   444 	else
       
   445 
       
   446 		--AddCaption("excep fC: " .. fastIndex .. " / " .. fastCount)
       
   447 
       
   448 	end
       
   449 
       
   450 
       
   451 
       
   452 end
       
   453 
       
   454 ----------------------------------
       
   455 -- GAME METHODS / EVENT HANDLERS
       
   456 ----------------------------------
       
   457 
       
   458 function onGameInit()
       
   459 	GameFlags = GameFlags + gfInfAttack + gfInvulnerable
       
   460 	CaseFreq = 0
       
   461 	TurnTime = 90000
       
   462 	WaterRise = 0
       
   463 end
       
   464 
       
   465 
       
   466 function onGameStart()
       
   467 
       
   468 	roundN = 0
       
   469 	lastRound = TotalRounds
       
   470 	RoundHasChanged = false -- true
       
   471 
       
   472 	RebuildTeamInfo()
       
   473 
       
   474 	ShowMission	(
       
   475 				loc("RACER"),
       
   476 				loc("a Hedgewars mini-game"),
       
   477 
       
   478 				loc("Build a track and race.") .. "|" ..
       
   479 				loc("Round Limit:") .. " " .. roundLimit .. "|" ..
       
   480 
       
   481 				"", 4, 4000
       
   482 				)
       
   483 end
       
   484 
       
   485 function PlaceWayPoint(x,y)
       
   486 
       
   487 	if (wpCount < wpLimit) then -- seems to not work with a hedgehog nil chek
       
   488 
       
   489 		wpX[wpCount] = x
       
   490 		wpY[wpCount] = y
       
   491 		wpCol[wpCount] = 0xffffffff
       
   492 		wpCirc[wpCount] = AddVisualGear(wpX[wpCount],wpY[wpCount],vgtCircle,0,true)
       
   493 																		--100
       
   494 		SetVisualGearValues(wpCirc[wpCount], wpX[wpCount], wpY[wpCount], 20, 100, 1, 10, 0, wpRad, 5, wpCol[wpCount])
       
   495 
       
   496 		wpCount = wpCount + 1
       
   497 
       
   498 		AddCaption(loc("Waypoint placed.") .. " " .. loc("Available points remaining: ") .. (wpLimit-wpCount))
       
   499 
       
   500 	end
       
   501 
       
   502 end
       
   503 
       
   504 function onNewTurn()
       
   505 
       
   506 	CheckForNewRound()
       
   507 
       
   508 	racerActive = false
       
   509 
       
   510 	trackTime = 0
       
   511 
       
   512 	currCount = 0 -- hopefully this solves problem
       
   513 	AddAmmo(CurrentHedgehog, amAirAttack, 0)
       
   514 	gTimer = 0
       
   515 
       
   516 	-- Set the waypoints to unactive on new round
       
   517 	for i = 0,(wpCount-1) do
       
   518 		wpActive[i] = false
       
   519 		wpCol[i] = 0xffffffff
       
   520 		SetVisualGearValues(wpCirc[i], wpX[i], wpY[i], 20, 100, 1, 10, 0, wpRad, 5, wpCol[i])
       
   521 	end
       
   522 
       
   523 	-- Handle Starting Stage of Game
       
   524 	if (gameOver == false) and (gameBegun == false) then
       
   525 		if wpCount >= 3 then
       
   526 			gameBegun = true
       
   527 			roundNumber = 0
       
   528 			firstClan = GetHogClan(CurrentHedgehog)
       
   529 			ShowMission(loc("RACER"),
       
   530 			loc("GAME BEGUN!!!"),
       
   531 			loc("Complete the track as fast as you can!"), 2, 4000)
       
   532 		else
       
   533 			ShowMission(loc("RACER"),
       
   534 			loc("NOT ENOUGH WAYPOINTS"),
       
   535 			loc("Place more waypoints using the 'Air Attack' weapon."), 2, 4000)
       
   536 			AddAmmo(CurrentHedgehog, amAirAttack, 4000)
       
   537             ParseCommand("setweap " .. string.char(amAirAttack))
       
   538 		end
       
   539 	end
       
   540 
       
   541 	if gameOver == true then
       
   542 		gameBegun = false
       
   543 		racerActive = false -- newadd
       
   544 	end
       
   545 
       
   546 	AddAmmo(CurrentHedgehog, amTardis, 0)
       
   547 	AddAmmo(CurrentHedgehog, amDrillStrike, 0)
       
   548 	AddAmmo(CurrentHedgehog, amMineStrike, 0)
       
   549 	AddAmmo(CurrentHedgehog, amNapalm, 0)
       
   550 	AddAmmo(CurrentHedgehog, amPiano, 0)
       
   551 
       
   552 end
       
   553 
       
   554 function onGameTick20()
       
   555 
       
   556 	-- airstrike detected, convert this into a potential waypoint spot
       
   557 	if cGear ~= nil then
       
   558 		x,y = GetGearPosition(cGear)
       
   559         if x > -9000 then
       
   560             x,y = GetGearTarget(cGear)
       
   561 
       
   562 
       
   563             if TestRectForObstacle(x-20, y-20, x+20, y+20, true) then
       
   564                 AddCaption(loc("Please place the way-point in the open, within the map boundaries."))
       
   565                 PlaySound(sndDenied)
       
   566             elseif (y > WaterLine-50) then
       
   567                 AddCaption(loc("Please place the way-point further from the waterline."))
       
   568                 PlaySound(sndDenied)
       
   569             else
       
   570                 PlaceWayPoint(x, y)
       
   571                 if wpCount == wpLimit then
       
   572                     AddCaption(loc("Race complexity limit reached."))
       
   573                     DisableTumbler()
       
   574                 end
       
   575             end
       
   576         else
       
   577             DeleteGear(cGear)
       
   578         end
       
   579         SetGearPosition(cGear, -10000, 0)
       
   580 	end
       
   581 
       
   582 
       
   583 	-- start the player tumbling with a boom once their turn has actually begun
       
   584 	if racerActive == false then
       
   585 
       
   586 		if (TurnTimeLeft > 0) and (TurnTimeLeft ~= TurnTime) then
       
   587 
       
   588 			-- if the gamehas started put the player in the middle of the first
       
   589 			--waypoint that was placed
       
   590 			if gameBegun == true then
       
   591 				AddCaption(loc("Good to go!"))
       
   592 				racerActive = true
       
   593 				trackTime = 0
       
   594 
       
   595 				SetGearPosition(CurrentHedgehog, wpX[0], wpY[0])
       
   596 				AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), gtGrenade, 0, 0, 0, 1)
       
   597 				FollowGear(CurrentHedgehog)
       
   598 
       
   599 				HideMission()
       
   600 
       
   601 			else
       
   602 				-- still in placement mode
       
   603 			end
       
   604 
       
   605 		end
       
   606 	end
       
   607 
       
   608 
       
   609 
       
   610 	-- has the player started his tumbling spree?
       
   611 	if (CurrentHedgehog ~= nil) then
       
   612 
       
   613 		--airstrike conversion used to be here
       
   614 
       
   615 		-- if the RACE has started, show tracktimes and keep tabs on waypoints
       
   616 		if (racerActive == true) and (gameBegun == true) then
       
   617 
       
   618 			--ghost
       
   619 			if GameTime%40 == 0 then
       
   620 				HandleGhost()
       
   621 			end
       
   622 
       
   623 			trackTime = trackTime + 20
       
   624 
       
   625 			if GameTime%100 == 0 then
       
   626                 
       
   627                 if trackTime%1000 == 0 then
       
   628                     AddCaption((trackTime/1000)..'.0',GetClanColor(GetHogClan(CurrentHedgehog)),capgrpMessage2)
       
   629                 else
       
   630                     AddCaption(trackTime/1000,GetClanColor(GetHogClan(CurrentHedgehog)),capgrpMessage2)
       
   631                 end
       
   632 
       
   633 				if (CheckWaypoints() == true) then
       
   634 					AdjustScores()
       
   635 					racerActive = false
       
   636 					DisableTumbler()
       
   637 				end
       
   638 
       
   639 			end
       
   640 
       
   641 		end
       
   642 
       
   643 
       
   644 
       
   645 		-- if the player has expended his tunbling time, stop him tumbling
       
   646 		if TurnTimeLeft <= 20 then
       
   647 			DisableTumbler()
       
   648 		end
       
   649 
       
   650 	end
       
   651 
       
   652 end
       
   653 
       
   654 function onGearResurrect(gear)
       
   655 
       
   656 	AddVisualGear(GetX(gear), GetY(gear), vgtBigExplosion, 0, false)
       
   657 
       
   658 	if gear == CurrentHedgehog then
       
   659 		DisableTumbler()
       
   660 	end
       
   661 
       
   662 	-- if the player stops and "dies" or flies into water, stop him racing
       
   663 	--[[if gear == CurrentHedgehog then
       
   664 		DisableTumbler()
       
   665 		ShowMission(loc("RACER"),
       
   666 		loc("TRACK FAILED!"),
       
   667 		loc("WINNING TIME: ") .. bestTimeComment, -amSkip, 4000)
       
   668 	end]]
       
   669 
       
   670 end
       
   671 
       
   672 function onGearAdd(gear)
       
   673 
       
   674 	if GetGearType(gear) == gtHedgehog then
       
   675 		hhs[numhhs] = gear
       
   676 		numhhs = numhhs + 1
       
   677 		SetEffect(gear, heResurrectable, true)
       
   678 	end
       
   679 
       
   680 	if GetGearType(gear) == gtAirAttack then
       
   681 		cGear = gear
       
   682 	end
       
   683 
       
   684 end
       
   685 
       
   686 function onGearDelete(gear)
       
   687 
       
   688 	if GetGearType(gear) == gtAirAttack then
       
   689 		cGear = nil
       
   690 	end
       
   691 
       
   692 end
       
   693 
       
   694 --[[function onAmmoStoreInit()
       
   695 	SetAmmo(amRope, 9, 0, 0, 0)
       
   696 	SetAmmo(amJetpack, 9, 0, 0, 0)
       
   697 	SetAmmo(amSkip, 9, 0, 0, 0)
       
   698 end]]
       
   699 
       
   700