sr2lua/bh06.lua

  1. -- bh06.lua 
  2. -- SR2 mission script 
  3. -- 3/28/07 
  4.  
  5. -- Debug flags 
  6. DEBUG_TRUCK_ENTRY =				false 
  7.  
  8. -- Tweakable Parameters 
  9. MIN_PHASE1_NOTORIETY =			2.000001 
  10. MIN_TURRET_NOTORIETY =			3 
  11. MIN_TURRET_NOTORIETY_COOP =	4 
  12. Truck_health_warning_level =	0.8 
  13. PIERCE_PREFERRED_STATION_1 =	7 -- 102.4 Klassic FM 
  14. PIERCE_PREFERRED_STATION_2 =	10 -- 105.0 The World 
  15.  
  16. -- Groups -- 
  17. GROUP_COURTESY_CAR =				"bh06_$courtesy_car" 
  18. GROUP_COURTESY_CAR_COOP =		"bh06_$courtesy_car_coop" 
  19. GROUP_PARCEL_TRUCK =				"bh06_$parcel_truck" 
  20. GROUP_TEMP =						"bh06_$temp" 
  21. GROUP_AMBUSH =						"bh06_$ambush" 
  22. GROUP_AMBUSH_BIKE =				"bh06_$ambush_bike" 
  23. GROUP_AMBUSH_MOUNTAIN =			"bh06_$ambush_mountain" 
  24.  
  25. -- Navpoints -- 
  26. NAV_LOCAL_START =					"bh06_$n032" 
  27. NAV_REMOTE_START =				"bh06_$n033" 
  28. NAV_TOP_OF_SEMI =					"bh06_$n000" 
  29. NAV_ARENA =							"bh06_$n001" 
  30. NAV_ARENA_ENTRY =					{"bh06_$n031", "bh06_$n030"} 
  31. NAV_ARENA_ROUTE =					{"bh06_$n003", "bh06_$n004", "bh06_$n005", "bh06_$n006", "bh06_$n026", "bh06_$n028", "bh06_$n029", 
  32. 										"bh06_$n007", "bh06_$n008", "bh06_$n009", "bh06_$n010", "bh06_$n027", 
  33. 										"bh06_$n011", "bh06_$n012", "bh06_$n013", "bh06_$n014",  
  34. 										"bh06_$n015", "bh06_$n016", "bh06_$n017", "bh06_$n018",  
  35. 										"bh06_$n019", "bh06_$n020", "bh06_$n021", "bh06_$n022",  
  36. 										"bh06_$n023", "bh06_$n001"} 
  37. NAV_AMBUSH_PATH =					{"bh06_$n034", "bh06_$n035"} 
  38. NAV_AMBUSH_BIKE_TRIG =			"bh06_$n036" 
  39. NAV_AMBUSH_MOUNTAIN_TRIG =		"bh06_$n038" 
  40. NAV_AMBUSH_MOUNTAIN_PATH =		"bh06_$n037" 
  41. FIRST_WAYPOINT =					"bh06_$waypoint" 
  42. NAV_LOCAL_TRUCK_STAGING =		"bh06_$c000" 
  43. NAV_REMOTE_TRUCK_STAGING =		"bh06_$c001" 
  44. NAV_PIERCE_TRUCK_STAGING =		"bh06_$c001" 
  45. NAV_LOCAL_END =					"bh06_$n039" 
  46. NAV_REMOTE_END =					"bh06_$n040" 
  47.  
  48.  
  49. -- Text -- 
  50. TEXT_BRING_HOMEY =				"bh06_bring_homey"	-- Pickup the fireworks truck from the warehouse. 
  51. --TEXT_BRING_HOMEY_COOP =			"bh06_bring_homey_coop" -- Pickup the fireworks truck from the warehouse. 
  52. TEXT_NEED_A_HOMEY =				"bh06_need_a_homey" -- You'll need Pierce with you. 
  53. TEXT_REENTER_TRUCK =				"bh06_reenter_truck" -- Get back in the fireworks truck. 
  54. TEXT_30_SECONDS =					"bh06_30_seconds" -- You have 30 seconds to reenter the truck. 
  55. TEXT_GET_TO_THE_ARENA =			"bh06_get_to_the_arena" -- Get to the Arena 
  56. TEXT_PARCEL_TRUCK_DESTROYED = "bh06_parcel_truck_destroyed" 
  57. TEXT_PARCEL_TRUCK_HEALTH =		"bh06_parcel_truck_health" -- Truck: 
  58. TEXT_TRIBAL_KILLED =				"bh06_tribal_killed" -- Brotherhood killed 
  59. TEXT_KILL_TRIBAL =				"bh06_kill_tribal" -- Kill the Brotherhood guarding the turck. 
  60. TEXT_ENTER_TRUCK =				"bh06_enter_truck" -- Get into the Fireworks truck 
  61. TEXT_PIERCE_DIED =				"bh06_pierce_died" 
  62. TEXT_PIERCE_DISMISSED =			"bh06_pierce_dismissed" 
  63. TEXT_USE_FIREWORKS =				"bh06_use_fireworks" -- Throw fireworks boxes to defend the truck.  
  64. TEXT_DONT_DAMAGE_TRUCK =		"bh06_dont_damage_truck" -- Don't damage the fir 
  65. TEXT_DIDNT_GET_TO_ARENA =		"bh06_didnt_get_to_arena" 
  66.  
  67. TEXT_WAREHOUSE	=					"bh06_warehouse"	-- Head to the warehouse. 
  68. TEXT_PROTECT_TRUCK =				"bh06_protect_truck" -- Protect the truck. 
  69.  
  70. -- Vehicles -- 
  71. VEH_PARCEL_TRUCK =				"bh06_$v000" 
  72. VEH_AMBUSH =						{"bh06_$v002", "bh06_$v003"} 
  73. VEH_AMBUSH_BIKE =					{"bh06_$v004", "bh06_$v005", "bh06_$v006"} 
  74. VEH_AMBUSH_MOUNTAIN =			"bh06_$v007" 
  75.  
  76. -- Characters -- 
  77. CHAR_TRIBAL_TELEPORT =			"bh06_$c008" 
  78. CHAR_PIERCE =							"bh06_$c009" 
  79. CHAR_TRIBAL =						{"bh06_$c000", "bh06_$c001", "bh06_$c002", "bh06_$c003", "bh06_$c004", "bh06_$c005", "bh06_$c006", "bh06_$c007", "bh06_$c008", "bh06_$c010", "bh06_$c011", "bh06_$c012"} 
  80. CHAR_AMBUSH =						{{"bh06_$c013", "bh06_$c014"}, 
  81. 										 {"bh06_$c015", "bh06_$c016"}} 
  82. CHAR_AMBUSH_BIKE =				{"bh06_$c017", "bh06_$c018", "bh06_$c019"} 
  83. CHAR_AMBUSH_MOUNTAIN =			{"bh06_$c020", "bh06_$c021"} 
  84.  
  85. -- Cutscenes -- 
  86. CUTSCENE_IN =						"br06-1.bik" 
  87. CUTSCENE_OUT =						"br06-2.bik" 
  88.  
  89. -- Voice -- 
  90. VOICE_CHECKIN =					{{"PIERCE_BR06_CHECKIN_01", CHAR_PIERCE, 1},  
  91. 										 {"PLAYER_BR06_CHECKIN_01", LOCAL_PLAYER, 1}} 
  92. VOICE_MUSIC =						{{"PIERCE_BR06_MUSIC_01", CHAR_PIERCE, 1}, 
  93. 										 {"PLAYER_BR06_MUSIC_01", LOCAL_PLAYER, 1}, 
  94. 										 {"PIERCE_BR06_MUSIC_02", CHAR_PIERCE, 1}} 
  95. VOICE_BICKER =						{{"PLAYER_BR06_BICKER_01", LOCAL_PLAYER, 1}, 
  96. 										 {"PIERCE_BR06_BICKER_01", CHAR_PIERCE, 1}} 
  97. VOICE_PLAYER_INTRO_01 =			{{"PLAYER_BR06_INTRO_01", LOCAL_PLAYER, 1}} 
  98. VOICE_PIERCE_DAMAGE =			{{{"PIERCE_BR06_DAMAGE_01", CHAR_PIERCE, 1}}, 
  99. 										 {{"PIERCE_BR06_DAMAGE_02", CHAR_PIERCE, 1}}, 
  100. 										 {{"PIERCE_BR06_DAMAGE_03", CHAR_PIERCE, 1}}} 
  101. VOICE_PIERCE_DRIVING_01 =		{{"PIERCE_BR06_DRIVING_01", CHAR_PIERCE, 1}} 
  102. VOICE_PIERCE_END_01 =			{{"PIERCE_BR06_END_01", CHAR_PIERCE, 0}} 
  103.  
  104. -- Threads -- 
  105. THREAD_PATHFIND =					-1 
  106. THREAD_NOTORIETY =				-1 
  107. THREAD_PYROBOX =					-1 
  108. THREAD_AMBUSH =					-1 
  109. THREAD_AMBUSH_BIKE =				{-1, -1, -1} 
  110. THREAD_AMBUSH_TRUCK =			{-1, -1} 
  111. THREAD_AMBUSH_MOUNTAIN =		-1 
  112. ALL_THREADS =						{THREAD_PATHFIND, THREAD_NOTORIETY, THREAD_PYROBOX, THREAD_AMBUSH, THREAD_AMBUSH_BIKE[1],  
  113. 										 THREAD_AMBUSH_BIKE[2], THREAD_AMBUSH_BIKE[3], THREAD_AMBUSH_TRUCK[1], THREAD_AMBUSH_TRUCK[2], THREAD_AMBUSH_MOUNTAIN} 
  114.  
  115. -- Other -- 
  116. IN_COOP =							false 
  117. Tribal_killed =					0 
  118. INITIAL_NUM_TRIBAL =				sizeof_table(CHAR_TRIBAL) 
  119. NOTORIETY_DELTA =					0.0033 
  120. Heading_to_arena =				false 
  121. EXPLOSION_TRUCK_DESTROYED =	"Exp Fireworks" 
  122. PARCEL_TRUCK_INITIAL_HP =		0 
  123. Next_pierce_damage_voice =		1 
  124.  
  125.  
  126. function bh06_start(bh06_checkpoint, is_restart) 
  127.  
  128. 	-- Always create both courtesy cars. If the player starts the mission w/ extra followers, 
  129. 	-- this gives them a vehicle to use. 
  130. 	local start_groups = {GROUP_COURTESY_CAR, GROUP_COURTESY_CAR_COOP, GROUP_TEMP} 
  131.  
  132. 	if (is_restart) then 
  133.  
  134. 		for i,group in pairs(start_groups) do 
  135. 			group_create(group, true) 
  136. 		end 
  137.  
  138. 		-- Teleport the player(s) to their start locations 
  139. 		teleport_coop(NAV_LOCAL_START, NAV_REMOTE_START) 
  140.  
  141. 	else 
  142. 		cutscene_play(	"br06-01", start_groups, {NAV_LOCAL_START, NAV_REMOTE_START}, false) 
  143. 		for i,group in pairs(start_groups) do 
  144. 			group_show(group) 
  145. 		end		 
  146. 	end 
  147.  
  148. 	bh06_initialize(bh06_checkpoint) 
  149.  
  150. 	if (DEBUG_TRUCK_ENTRY) then 
  151. 		bh06_truck_test() 
  152. 	end 
  153.  
  154. 	bh06_get_the_truck() 
  155. end 
  156.  
  157. function bh06_initialize(checkpoint) 
  158.  
  159. 	mission_start_fade_out(0.0) 
  160.  
  161. 	bh06_initialize_common() 
  162.  
  163. 	bh06_initialize_checkpoint(checkpoint) 
  164.  
  165. 	mission_start_fade_in() 
  166.  
  167. end 
  168.  
  169. -- Initialization code shared by all checkpoints. 
  170. function bh06_initialize_common() 
  171.  
  172. 	-- Start trigger is hit...the activate button was hit 
  173. 	set_mission_author("Phillip Alexander and Aaron Hanson (aka Father Zucosos)") 
  174.  
  175. 	if coop_is_active() then 
  176. 		IN_COOP = true 
  177. 	end 
  178.  
  179. 	set_time_of_day(18, 30) 
  180.  
  181. 	party_add(CHAR_PIERCE) 
  182. 	on_death("bh06_failure_pierce_died", CHAR_PIERCE) 
  183. 	on_dismiss("bh06_failure_pierce_dismissed", CHAR_PIERCE) 
  184.  
  185. 	notoriety_force_no_spawn("Brotherhood", true) 
  186. 	notoriety_set_max("Brotherhood", 2) 
  187.  
  188. end 
  189.  
  190. -- Initialization code specific to the checkpoint. 
  191. function bh06_initialize_checkpoint(checkpoint) 
  192.  
  193. 	-- This mission has no checkpoints 
  194.  
  195. end 
  196.  
  197. function bh06_truck_test() 
  198.  
  199. 	group_create("bh06_$Gtruck_test", true) 
  200.  
  201. 	local VEH_TEST_TRUCK = "bh06_$v008" 
  202. 	VEH_PARCEL_TRUCK = VEH_TEST_TRUCK 
  203.  
  204. 	NAV_LOCAL_TRUCK_STAGING = NAV_LOCAL_START 
  205. 	NAV_REMOTE_TRUCK_STAGING = NAV_REMOTE_START 
  206. 	NAV_PIERCE_TRUCK_STAGING = "bh06_$c0009" 
  207.  
  208. 	delay(10) 
  209.  
  210. 	bh06_setup_truck_occupants() 
  211.  
  212. 	thread_new("bh06_music_bicker", VEH_TEST_TRUCK) 
  213.  
  214. 	while(true) do 
  215. 		thread_yield() 
  216. 	end 
  217. end 
  218.  
  219. function bh06_music_bicker(truck) 
  220.  
  221. 	audio_play_conversation(VOICE_PIERCE_DRIVING_01, NOT_CALL) 
  222.  
  223. 	if (IN_COOP) then 
  224. 		return 
  225. 	end 
  226.  
  227. 	delay(15) 
  228.  
  229. 	while( not character_is_ready(CHAR_PIERCE) ) do 
  230. 		thread_yield() 
  231. 	end 
  232.  
  233. 	if (not vehicle_is_destroyed(truck)) then 
  234. 		local player_station = radio_get_station(truck) 
  235. 		local pierce_station = PIERCE_PREFERRED_STATION_1 
  236. 		if (player_station == pierce_station) then 
  237. 			pierce_station = PIERCE_PREFERRED_STATION_2 
  238. 		end 
  239.  
  240. 		radio_set_station(truck, pierce_station) 
  241.  
  242. 		delay(1) 
  243.  
  244. 		audio_play_conversation(VOICE_MUSIC, NOT_CALL) 
  245. 	end 
  246.  
  247.  
  248. end 
  249.  
  250. function bh06_get_the_truck() 
  251.  
  252. 	-- Start creating the parcel truck 
  253. 	thread_new("bh06_create_the_truck") 
  254.  
  255. 	-- Play the intro conversation 
  256. 	audio_play_conversation(VOICE_PLAYER_INTRO_01, NOT_CALL) 
  257.  
  258. 	-- Start raising Brotherhood notoriety 
  259. 	THREAD_NOTORIETY = thread_new("bh06_notoriety") 
  260.  
  261. 	-- Add indicators for the fight with the Brotherhood 
  262. 	mission_waypoint_add(FIRST_WAYPOINT, SYNC_ALL) 
  263. 	for i, npc in pairs(CHAR_TRIBAL) do 
  264.       marker_add_npc( npc, MINIMAP_ICON_KILL, INGAME_EFFECT_KILL, SYNC_ALL ) 
  265. 		on_death("bh06_tribal_killed", npc) 
  266. 	end 
  267.  
  268. 	-- Tell the players what to do 
  269. 	mission_help_table(TEXT_BRING_HOMEY) 
  270. 	local thread_warehouse_nag = thread_new("bh06_nag", TEXT_WAREHOUSE) 
  271.  
  272. 	-- Wait until a player is close to the truck or has killed a tribal gang member 
  273. 	while (	(get_dist_closest_player_to_object(VEH_PARCEL_TRUCK) > 100) and 
  274. 				(Tribal_killed == 0) 
  275. 			) do 
  276. 		thread_yield() 
  277. 	end 
  278. 	thread_kill(thread_warehouse_nag) 
  279. 	mission_help_clear()	 
  280. 	marker_remove_vehicle(VEH_PARCEL_TRUCK, SYNC_ALL) 
  281. 	mission_waypoint_remove(SYNC_ALL) 
  282. 	delay(2.0) 
  283.  
  284. 	mission_help_table(TEXT_KILL_TRIBAL) 
  285. 	bh06_show_tribal_counter() 
  286.  
  287. 	while (bh06_truck_defenders_alive()) do 
  288. 		thread_yield() 
  289. 	end 
  290. 	 
  291. 	delay(2) 
  292. 	objective_text_clear(0) 
  293.  
  294. 	minimap_icon_add_vehicle_radius(VEH_PARCEL_TRUCK, MINIMAP_ICON_PROTECT_ACQUIRE, 10) 
  295. 	mission_help_table(TEXT_ENTER_TRUCK) 
  296. 	 
  297. 	-- Keep waiting if Pierce is incapacitated or the player's not near the truck 
  298. 	local function ready_to_enter_truck() 
  299. 		local close_enough = get_dist_closest_player_to_object(VEH_PARCEL_TRUCK) < 10 
  300. 		return ( close_enough and character_is_ready(CHAR_PIERCE) ) 
  301. 	end 
  302.  
  303. 	while ( not ready_to_enter_truck() ) do 
  304. 		thread_yield() 
  305. 	end 
  306. 		 
  307. 	marker_remove_vehicle(VEH_PARCEL_TRUCK, SYNC_ALL) 
  308.  
  309. 	-- Setup the truck's occupants 
  310. 	bh06_setup_truck_occupants() 
  311.  
  312. 	bh06_get_to_arena() 
  313. end 
  314.  
  315. function bh06_create_the_truck() 
  316. 	group_create(GROUP_PARCEL_TRUCK, true) 
  317. 	PARCEL_TRUCK_INITIAL_HP = get_current_hit_points(VEH_PARCEL_TRUCK) 
  318. 	vehicle_set_untowable(VEH_PARCEL_TRUCK, true) 
  319. 	on_damage("bh06_truck_health_warning", VEH_PARCEL_TRUCK, Truck_health_warning_level) 
  320. 	on_vehicle_destroyed("bh06_failure_truck_destroyed", VEH_PARCEL_TRUCK) 
  321. 	set_unjackable_flag(VEH_PARCEL_TRUCK, true) 
  322. end 
  323.  
  324. function bh06_setup_truck_occupants() 
  325.  
  326. 	-- Make everyone invulnerable 
  327. 	player_controls_disable(LOCAL_PLAYER) 
  328. 	turn_invulnerable(LOCAL_PLAYER, false) 
  329. 	if IN_COOP then 
  330. 		turn_invulnerable(REMOTE_PLAYER, false) 
  331. 		player_controls_disable(REMOTE_PLAYER) 
  332. 	else 
  333. 		turn_invulnerable(CHAR_PIERCE) 
  334. 	end 
  335.  
  336. 	tutorial_lock("satchel_charges") 
  337. 	fade_out(1.0) 
  338. 	fade_out_block() 
  339.  
  340. 	-- Get rid of all party members other than Pierce 
  341. 	party_dismiss_all() 
  342.  
  343. 	-- Wait for the dimiss to take effect 
  344. 	if (IN_COOP) then 
  345. 		delay(1.0) 
  346. 	end 
  347. 	party_add(CHAR_PIERCE) 
  348.  
  349. 	-- Make sure that no one is currently in a vehicle 
  350. 	character_evacuate_from_all_vehicles(LOCAL_PLAYER) 
  351. 	character_evacuate_from_all_vehicles(CHAR_PIERCE) 
  352. 	if (IN_COOP) then 
  353. 		character_evacuate_from_all_vehicles(REMOTE_PLAYER) 
  354. 	end 
  355.  
  356. 	-- Teleport everyone to a staging area near the truck. 
  357. 	teleport_coop(NAV_LOCAL_TRUCK_STAGING, NAV_REMOTE_TRUCK_STAGING, true) 
  358.  
  359. 	-- Courtesy vehicles are no longer needed. 
  360. 	release_to_world(GROUP_COURTESY_CAR) 
  361. 	release_to_world(GROUP_COURTESY_CAR_COOP) 
  362.  
  363. 	if(not IN_COOP) then 
  364. 		vehicle_infinite_mass(VEH_PARCEL_TRUCK, true) 
  365. 	end 
  366. 	vehicle_disable_flee(VEH_PARCEL_TRUCK, true) 
  367. 	vehicle_disable_chase(VEH_PARCEL_TRUCK, true) 
  368. 	set_unjackable_flag(VEH_PARCEL_TRUCK, false) 
  369.  
  370. 	-- Wait for truck to spawn-in 
  371. 	while(not vehicle_exists(VEH_PARCEL_TRUCK)) do 
  372. 		thread_yield() 
  373. 	end 
  374.  
  375. 	follower_make_independent(CHAR_PIERCE, true) 
  376. 	if IN_COOP then 
  377. 		vehicle_enter_teleport(REMOTE_PLAYER, VEH_PARCEL_TRUCK, 0) 
  378. 		vehicle_enter_teleport(CHAR_PIERCE, VEH_PARCEL_TRUCK, 1) 
  379. 		set_player_can_enter_exit_vehicles(REMOTE_PLAYER, false) 
  380. 	else 
  381. 		vehicle_enter_teleport(CHAR_PIERCE, VEH_PARCEL_TRUCK, 0) 
  382. 	end 
  383. 	vehicle_enter_teleport(LOCAL_PLAYER, VEH_PARCEL_TRUCK, 2) 
  384. 	set_player_can_enter_exit_vehicles(LOCAL_PLAYER, false) 
  385. 	follower_make_independent(CHAR_PIERCE, false) 
  386.  
  387. 	set_unjackable_flag(VEH_PARCEL_TRUCK, true) 
  388. 	vehicle_suppress_npc_exit(VEH_PARCEL_TRUCK, true) 
  389. 	vehicle_set_invulnerable_to_player_explosives(VEH_PARCEL_TRUCK, true) 
  390. 	 
  391. 	while(not character_is_in_vehicle(LOCAL_PLAYER, VEH_PARCEL_TRUCK)) do 
  392. 		thread_yield() 
  393. 	end 
  394. 	while(not character_is_in_vehicle(CHAR_PIERCE, VEH_PARCEL_TRUCK)) do 
  395. 		thread_yield() 
  396. 	end 
  397. 	if (IN_COOP) then 
  398. 		while(not character_is_in_vehicle(REMOTE_PLAYER, VEH_PARCEL_TRUCK)) do 
  399. 			thread_yield() 
  400. 		end 
  401. 	end 
  402.  
  403. 	-- Give the server the pyrobox and make sure that it stays equipped at all times. 
  404. 	inv_weapon_add_temporary(LOCAL_PLAYER, "pyroBox", 1, true) 
  405. 	inv_weapon_disable_all_but_this_slot(WEAPON_SLOT_THROWN, SYNC_LOCAL) 
  406. 	THREAD_PYROBOX = thread_new("bh06_keep_pyrobox_equipped") 
  407.  
  408. 	fade_in(1.0) 
  409. 	fade_in_block() 
  410.  
  411. 	player_controls_enable(LOCAL_PLAYER) 
  412. 	turn_vulnerable(LOCAL_PLAYER) 
  413. 	if IN_COOP then 
  414. 		player_controls_enable(REMOTE_PLAYER) 
  415. 		turn_vulnerable(REMOTE_PLAYER) 
  416. 	else 
  417. 		turn_vulnerable(CHAR_PIERCE) 
  418. 	end 
  419. end 
  420.  
  421. function bh06_nag(text_tag) 
  422.  
  423. 	delay(15.0) 
  424. 	while(true) do 
  425. 		mission_help_table_nag(text_tag) 
  426. 		delay(25.0) 
  427. 	end 
  428.  
  429. end 
  430.  
  431. function bh06_tribal_killed( tribal_name ) 
  432.    mission_debug( tribal_name.." killed." ) 
  433. 	marker_remove_npc( tribal_name, SYNC_ALL ) 
  434. 	Tribal_killed = Tribal_killed + 1 
  435. 	bh06_show_tribal_counter() 
  436. end 
  437.  
  438. function bh06_show_tribal_counter() 
  439. 	objective_text(0, TEXT_TRIBAL_KILLED, Tribal_killed, INITIAL_NUM_TRIBAL) 
  440. end 
  441.  
  442. function bh06_truck_defenders_alive() 
  443. 	return Tribal_killed < INITIAL_NUM_TRIBAL 
  444. end 
  445.  
  446. function bh06_get_to_arena() 
  447. 	Heading_to_arena = true 
  448.  
  449. 	notoriety_set_max("Brotherhood", 5) 
  450. 	notoriety_force_no_spawn("Brotherhood", false) 
  451.  
  452. 	THREAD_AMBUSH = thread_new("bh06_ambush") 
  453.  
  454. 	mission_help_table(TEXT_USE_FIREWORKS, "", "", SYNC_LOCAL) 
  455.  
  456. 	if not IN_COOP then 
  457. 		thread_new("bh06_music_bicker", VEH_PARCEL_TRUCK) 
  458. 		vehicle_set_use_short_cuts(VEH_PARCEL_TRUCK, false) 
  459. 		THREAD_PATHFIND = thread_new("bh06_pathfind_to_arena") 
  460. 	else 
  461. 		hud_timer_set(0, 180000, "bh06_failure_didnt_get_to_arena_in_time", true, SYNC_ALL) 
  462. 	end 
  463.  
  464. 	marker_add_navpoint(NAV_ARENA, MINIMAP_ICON_LOCATION, INGAME_EFFECT_VEHICLE_LOCATION, SYNC_ALL) 
  465. 	if IN_COOP then 
  466. 		mission_waypoint_add(NAV_ARENA, SYNC_ALL) 
  467. 	end 
  468.  
  469. 	hud_bar_on(0, "Health", TEXT_PARCEL_TRUCK_HEALTH, PARCEL_TRUCK_INITIAL_HP) 
  470.  
  471. 	delay(6) 
  472. 	mission_help_table(TEXT_GET_TO_THE_ARENA) 
  473.  
  474. 	local thread_protect_truck_nag = thread_new("bh06_nag", TEXT_PROTECT_TRUCK) 
  475. 	while get_dist_vehicle_to_nav(VEH_PARCEL_TRUCK, NAV_ARENA) > 10 do 
  476. 		thread_yield() 
  477. 		hud_bar_set_value(0, get_current_hit_points(VEH_PARCEL_TRUCK), SYNC_ALL) 
  478. 	end 
  479.  
  480. 	-- Turn off Brotherhood & Police notoriety so that cars don't pile up around the player as they stop. 
  481. 	notoriety_reset("Brotherhood") 
  482. 	notoriety_set("Brotherhood", 0) 
  483. 	notoriety_set_max("Brotherhood", 0) 
  484.  
  485. 	notoriety_reset("Police") 
  486. 	notoriety_set("Police", 0) 
  487. 	notoriety_set_max("Police", 0) 
  488.  
  489. 	thread_kill(thread_protect_truck_nag) 
  490. 	mission_help_clear()	 
  491.  
  492. 	hud_bar_off(0) 
  493.  
  494. 	mission_waypoint_remove() 
  495. 	marker_remove_navpoint(NAV_ARENA) 
  496.  
  497. 	-- Stop the truck when they reach the trigger if a player is driving 
  498. 	if IN_COOP then 
  499. 		vehicle_max_speed(VEH_PARCEL_TRUCK, 0) 
  500. 		player_controls_disable( REMOTE_PLAYER ) 
  501. 	   vehicle_stop_do( REMOTE_PLAYER ) 
  502.    else 
  503. 		player_controls_disable( LOCAL_PLAYER ) 
  504. 		vehicle_stop_do( LOCAL_PLAYER ) 
  505. 	end 
  506.  
  507. 	audio_play_conversation(VOICE_PIERCE_END_01, NOT_CALL) 
  508.  
  509. 	mission_end_success("bh06", "br06-02", {NAV_LOCAL_END, NAV_REMOTE_END}) 
  510.  
  511. end 
  512.  
  513. function bh06_ambush() 
  514. 	group_create(GROUP_AMBUSH_BIKE, true) 
  515. 	group_create(GROUP_AMBUSH, true) 
  516. 	group_create(GROUP_AMBUSH_MOUNTAIN, true) 
  517.  
  518. 	for i, set in pairs(CHAR_AMBUSH) do 
  519. 		for j, npc in pairs(set) do 
  520. 			set_ignore_ai_flag(npc, true) 
  521. 		end 
  522. 	end 
  523. 	for i, npc in pairs(CHAR_AMBUSH_BIKE) do 
  524. 		set_ignore_ai_flag(npc, true) 
  525. 	end 
  526. 	for i, npc in pairs(CHAR_AMBUSH_MOUNTAIN) do 
  527. 		set_ignore_ai_flag(npc, true) 
  528. 	end 
  529.  
  530. 	for i, veh in pairs(VEH_AMBUSH_BIKE) do 
  531. 		vehicle_enter_teleport(CHAR_AMBUSH_BIKE[i], veh) 
  532. 	end 
  533. 	for i, veh in pairs(VEH_AMBUSH) do 
  534. 		vehicle_enter_group_teleport(CHAR_AMBUSH[i], veh) 
  535. 	end 
  536. 	vehicle_enter_group_teleport(CHAR_AMBUSH_MOUNTAIN, VEH_AMBUSH_MOUNTAIN) 
  537.  
  538.  
  539. 	while (get_dist_vehicle_to_nav(VEH_PARCEL_TRUCK, NAV_AMBUSH_BIKE_TRIG) > 60) do 
  540. 		thread_yield() 
  541. 	end 
  542.  
  543. 	for i, veh in pairs(VEH_AMBUSH_BIKE) do 
  544. 		THREAD_AMBUSH_BIKE[i] = thread_new("bh06_bike_ambusher", veh, i) 
  545. 	end 
  546.  
  547. 	release_to_world(GROUP_AMBUSH_BIKE) 
  548.  
  549. 	while (get_dist_vehicle_to_nav(VEH_PARCEL_TRUCK, NAV_AMBUSH_PATH[1]) > 40) do 
  550. 		thread_yield() 
  551. 	end 
  552.  
  553. 	for i, veh in pairs(VEH_AMBUSH) do 
  554. 		THREAD_AMBUSH_TRUCK[i] = thread_new("bh06_ambusher", veh, i) 
  555. 	end 
  556.  
  557. 	release_to_world(GROUP_AMBUSH) 
  558.  
  559.  
  560. 	if (not IN_COOP) then 
  561. 		audio_play_conversation(VOICE_CHECKIN, NOT_CALL) 
  562. 	end 
  563.  
  564. 	while (get_dist_vehicle_to_nav(VEH_PARCEL_TRUCK, NAV_AMBUSH_MOUNTAIN_TRIG) > 40) do 
  565. 		thread_yield() 
  566. 	end 
  567.  
  568. 	THREAD_AMBUSH_MOUNTAIN = thread_new("bh06_mountain_ambusher") 
  569.  
  570. 	if (not IN_COOP) then 
  571. 		audio_play_conversation(VOICE_BICKER, NOT_CALL) 
  572. 	end 
  573. end 
  574.  
  575.  
  576. function bh06_mountain_ambusher() 
  577. 	for i, npc in pairs(CHAR_AMBUSH_MOUNTAIN) do 
  578. 		set_ignore_ai_flag(npc, false) 
  579. 	end 
  580. 	delay(3) 
  581. 	vehicle_suppress_flipping(VEH_AMBUSH_MOUNTAIN, true) 
  582. 	vehicle_set_torque_multiplier(VEH_AMBUSH_MOUNTAIN, 1.2) 
  583. 	vehicle_pathfind_to(VEH_AMBUSH_MOUNTAIN, NAV_AMBUSH_MOUNTAIN_PATH, true, false, false) 
  584. 	vehicle_chase(VEH_AMBUSH_MOUNTAIN, LOCAL_PLAYER, true, true, false, false) 
  585.  
  586. 	release_to_world(GROUP_AMBUSH_MOUNTAIN) 
  587.  
  588. end 
  589.  
  590. function bh06_bike_ambusher(veh, bike_num) 
  591. 	set_ignore_ai_flag(CHAR_AMBUSH_BIKE[bike_num], false) 
  592. 	delay(4-bike_num) 
  593. 	vehicle_chase(veh, LOCAL_PLAYER, true, false, false, false) 
  594. end 
  595.  
  596. function bh06_ambusher(veh, truck_num) 
  597. 	for i, npc in pairs(CHAR_AMBUSH[truck_num]) do 
  598. 		set_ignore_ai_flag(npc, false) 
  599. 	end 
  600. 	if truck_num > 1 then 
  601. 		delay(2) 
  602. 	end 
  603. 	thread_yield() 
  604. 	vehicle_pathfind_to(veh, NAV_AMBUSH_PATH[1], true, false, false) 
  605. 	thread_yield() 
  606. 	vehicle_chase(veh, LOCAL_PLAYER, true, true, false, false) 
  607. end 
  608.  
  609. function bh06_truck_health_warning() 
  610. 	mission_help_table(TEXT_DONT_DAMAGE_TRUCK) 
  611. 	Truck_health_warning_level = Truck_health_warning_level - 0.2 
  612. 	if Truck_health_warning_level > 0 then 
  613. 		on_damage("bh06_truck_health_warning", VEH_PARCEL_TRUCK, Truck_health_warning_level) 
  614. 	else 
  615. 		on_damage("", VEH_PARCEL_TRUCK, Truck_health_warning_level) 
  616. 	end 
  617.  
  618. 	if ( character_is_in_vehicle(LOCAL_PLAYER, VEH_PARCEL_TRUCK) ) then 
  619. 		if Next_pierce_damage_voice < 4 then 
  620. 			audio_play_conversation(VOICE_PIERCE_DAMAGE[Next_pierce_damage_voice], NOT_CALL) 
  621. 		end 
  622. 		Next_pierce_damage_voice = Next_pierce_damage_voice + 1 
  623. 	end 
  624. end 
  625.  
  626. function bh06_keep_pyrobox_equipped() 
  627. 	while(1) do 
  628. 		if (not inv_item_is_equipped("pyroBox", LOCAL_PLAYER)) and character_is_in_vehicle(LOCAL_PLAYER, VEH_PARCEL_TRUCK) then 
  629. 			inv_item_equip("pyroBox", LOCAL_PLAYER) 
  630. 		end 
  631. 		character_set_combat_ready(LOCAL_PLAYER, true, 1.0) 
  632. 		thread_yield() 
  633. 	end 
  634. end 
  635.  
  636. function bh06_pathfind_to_arena() 
  637. 	if ( not IN_COOP ) then 
  638. 		while not character_is_in_vehicle(CHAR_PIERCE, VEH_PARCEL_TRUCK) do 
  639. 			thread_yield() 
  640. 		end 
  641. 	end 
  642. 	vehicle_turret_base_to(VEH_PARCEL_TRUCK, NAV_ARENA_ENTRY, true) 
  643. 	vehicle_pathfind_to(VEH_PARCEL_TRUCK, NAV_ARENA, true, true) 
  644. end 
  645.  
  646. function bh06_notoriety() 
  647. 	local phase_time = 0 
  648. 	while(1) do 
  649. 		thread_yield() 
  650. 		if Heading_to_arena then 
  651. 			if (IN_COOP) then 
  652. 				notoriety_set_min("Brotherhood", MIN_TURRET_NOTORIETY_COOP) 
  653. 				notoriety_set("Brotherhood", MIN_TURRET_NOTORIETY_COOP) 
  654. 			else 
  655. 				notoriety_set_min("Brotherhood", MIN_TURRET_NOTORIETY) 
  656. 				notoriety_set("Brotherhood", MIN_TURRET_NOTORIETY) 
  657. 			end 
  658. 			break 
  659. 		else 
  660. 			 
  661. 			phase_time = 0 
  662. 			while (not Heading_to_arena) and (notoriety_get_decimal("Brotherhood") < MIN_PHASE1_NOTORIETY) do 
  663. 				thread_yield() 
  664. 				phase_time = phase_time + get_frame_time() 
  665. 				local pct = phase_time / 30 
  666. 				local new_notoriety = pct * MIN_PHASE1_NOTORIETY 
  667. 				if new_notoriety > MIN_PHASE1_NOTORIETY then 
  668. 					new_notoriety = MIN_PHASE1_NOTORIETY 
  669. 				end 
  670. 				notoriety_set("Brotherhood", new_notoriety) 
  671. 			end 
  672. 		end 
  673. 	end 
  674. end 
  675.  
  676. function bh06_failure_truck_destroyed() 
  677. 	if THREAD_PATHFIND ~= -1 then 
  678. 		thread_kill(THREAD_PATHFIND) 
  679. 	end 
  680.  
  681. 	if THREAD_NOTORIETY ~= -1 then 
  682. 		thread_kill(THREAD_NOTORIETY) 
  683. 	end 
  684.  
  685. 	explosion_create(EXPLOSION_TRUCK_DESTROYED, VEH_PARCEL_TRUCK, LOCAL_PLAYER, false) 
  686. 	delay(2) 
  687. 	explosion_create(EXPLOSION_TRUCK_DESTROYED, VEH_PARCEL_TRUCK, LOCAL_PLAYER, false) 
  688.  
  689. 	delay(3) 
  690. 	mission_end_failure("bh06", TEXT_PARCEL_TRUCK_DESTROYED) 
  691. end 
  692.  
  693. function bh06_failure_abandoned_truck() 
  694. 	mission_end_failure("bh06", TEXT_PARCEL_TRUCK_DESTROYED) 
  695. end 
  696.  
  697. function bh06_failure_pierce_died() 
  698. 	mission_end_failure("bh06", TEXT_PIERCE_DIED) 
  699. end 
  700.  
  701. function bh06_failure_pierce_dismissed() 
  702. 	mission_end_failure("bh06", TEXT_PIERCE_DISMISSED) 
  703. end 
  704.  
  705. function bh06_failure_didnt_get_to_arena_in_time() 
  706. 	mission_end_failure("bh06", TEXT_DIDNT_GET_TO_ARENA) 
  707. end 
  708.  
  709. function bh06_cleanup() 
  710. 	-- Cleanup mission here 
  711. 	IN_COOP = coop_is_active() 
  712.  
  713. 	-- Clear out the hud timer 
  714. 	hud_timer_stop(0) 
  715.  
  716. 	-- Make sure that the satchel charge tutorial doesn't stay locked 
  717. 	tutorial_unlock("satchel_charges") 
  718.  
  719. 	-- Players were made invulnerable when teleporting into the truck... make sure that 
  720. 	-- they are now vulnerable 
  721. 	turn_vulnerable(LOCAL_PLAYER) 
  722. 	if IN_COOP then 
  723. 		turn_vulnerable(REMOTE_PLAYER) 
  724. 	end 
  725.  
  726.    -- The player may be in the parcel truck - explicitly destroy it 
  727.    group_destroy( GROUP_PARCEL_TRUCK ) 
  728.  
  729. 	set_player_can_enter_exit_vehicles(LOCAL_PLAYER, true) 
  730. 	if (IN_COOP) then 
  731. 		set_player_can_enter_exit_vehicles(REMOTE_PLAYER, true) 
  732. 	end 
  733.  
  734. 	for i, thread in pairs(ALL_THREADS) do 
  735. 		if thread ~= -1 then 
  736. 			thread_kill(thread) 
  737. 		end 
  738. 	end 
  739.  
  740. 	inv_weapon_remove_temporary(LOCAL_PLAYER, "pyroBox") 
  741. 	inv_weapon_enable_or_disable_all_slots(true, SYNC_LOCAL) 
  742.  
  743. 	-- Make sure that all markers are removed 
  744. 	mission_waypoint_remove() 
  745. 	marker_remove_navpoint(NAV_ARENA) 
  746.  
  747. end 
  748.  
  749. function bh06_success() 
  750. 	-- Called when the mission has ended with success 
  751. 	--bink_play_movie(CUTSCENE_OUT) 
  752. 	if (IN_COOP) then 
  753. 		player_controls_enable(REMOTE_PLAYER) 
  754. 	else 
  755. 		player_controls_enable(LOCAL_PLAYER) 
  756. 	end 
  757. end 
  758.