1 //Copyright Paul Reiche, Fred Ford. 1992-2002
2 
3 /*
4  *  This program is free software; you can redistribute it and/or modify
5  *  it under the terms of the GNU General Public License as published by
6  *  the Free Software Foundation; either version 2 of the License, or
7  *  (at your option) any later version.
8  *
9  *  This program is distributed in the hope that it will be useful,
10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  *  GNU General Public License for more details.
13  *
14  *  You should have received a copy of the GNU General Public License
15  *  along with this program; if not, write to the Free Software
16  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17  */
18 
19 #include "../commall.h"
20 #include "resinst.h"
21 #include "strings.h"
22 
23 #include "uqm/build.h"
24 #include "uqm/gameev.h"
25 #include "libs/mathlib.h"
26 
27 
28 static LOCDATA yehat_desc =
29 {
30 	NULL, /* init_encounter_func */
31 	NULL, /* post_encounter_func */
32 	NULL, /* uninit_encounter_func */
33 	YEHAT_PMAP_ANIM, /* AlienFrame */
34 	YEHAT_FONT, /* AlienFont */
35 	WHITE_COLOR_INIT, /* AlienTextFColor */
36 	BLACK_COLOR_INIT, /* AlienTextBColor */
37 	{0, 0}, /* AlienTextBaseline */
38 	0, /* (SIS_TEXT_WIDTH - 16) * 2 / 3, */ /* AlienTextWidth */
39 	ALIGN_CENTER, /* AlienTextAlign */
40 	VALIGN_MIDDLE, /* AlienTextValign */
41 	YEHAT_COLOR_MAP, /* AlienColorMap */
42 	YEHAT_MUSIC, /* AlienSong */
43 	NULL_RESOURCE, /* AlienAltSong */
44 	0, /* AlienSongFlags */
45 	YEHAT_CONVERSATION_PHRASES, /* PlayerPhrases */
46 	15, /* NumAnimations */
47 	{ /* AlienAmbientArray (ambient animations) */
48 		{ /* right hand-wing tapping keyboard; front guy */
49 			4, /* StartIndex */
50 			3, /* NumFrames */
51 			YOYO_ANIM
52 					| WAIT_TALKING, /* AnimFlags */
53 			ONE_SECOND / 10, ONE_SECOND / 10, /* FrameRate */
54 			ONE_SECOND / 4, ONE_SECOND / 2,/* RestartRate */
55 			(1 << 6) | (1 << 7),
56 		},
57 		{ /* left hand-wing tapping keyboard; front guy */
58 			7, /* StartIndex */
59 			3, /* NumFrames */
60 			YOYO_ANIM
61 					| WAIT_TALKING, /* AnimFlags */
62 			ONE_SECOND / 10, ONE_SECOND / 10, /* FrameRate */
63 			ONE_SECOND / 4, ONE_SECOND / 2,/* RestartRate */
64 			(1 << 6) | (1 << 7),
65 		},
66 		{
67 			10, /* StartIndex */
68 			3, /* NumFrames */
69 			YOYO_ANIM, /* AnimFlags */
70 			ONE_SECOND / 20, 0, /* FrameRate */
71 			ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
72 			(1 << 4) | (1 << 14),
73 		},
74 		{
75 			13, /* StartIndex */
76 			3, /* NumFrames */
77 			YOYO_ANIM, /* AnimFlags */
78 			ONE_SECOND / 20, 0, /* FrameRate */
79 			ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
80 			(1 << 5),
81 		},
82 		{
83 			16, /* StartIndex */
84 			5, /* NumFrames */
85 			YOYO_ANIM, /* AnimFlags */
86 			ONE_SECOND / 15, ONE_SECOND / 15, /* FrameRate */
87 			ONE_SECOND * 6, ONE_SECOND * 3,/* RestartRate */
88 			(1 << 2) | (1 << 14),
89 		},
90 		{
91 			21, /* StartIndex */
92 			5, /* NumFrames */
93 			YOYO_ANIM, /* AnimFlags */
94 			ONE_SECOND / 15, ONE_SECOND / 15, /* FrameRate */
95 			ONE_SECOND * 6, ONE_SECOND * 3,/* RestartRate */
96 			(1 << 3),
97 		},
98 		{ /* right arm-wing rising; front guy */
99 			26, /* StartIndex */
100 			2, /* NumFrames */
101 			YOYO_ANIM | WAIT_TALKING, /* AnimFlags */
102 			ONE_SECOND / 15, ONE_SECOND / 15, /* FrameRate */
103 			ONE_SECOND * 6, ONE_SECOND * 3,/* RestartRate */
104 			(1 << 0) | (1 << 1),
105 		},
106 		{ /* left arm-wing rising; front guy */
107 			28, /* StartIndex */
108 			2, /* NumFrames */
109 			YOYO_ANIM | WAIT_TALKING, /* AnimFlags */
110 			ONE_SECOND / 15, ONE_SECOND / 15, /* FrameRate */
111 			ONE_SECOND * 6, ONE_SECOND * 3,/* RestartRate */
112 			(1 << 0) | (1 << 1),
113 		},
114 		{
115 			30, /* StartIndex */
116 			3, /* NumFrames */
117 			YOYO_ANIM, /* AnimFlags */
118 			ONE_SECOND / 30, ONE_SECOND / 30, /* FrameRate */
119 			ONE_SECOND / 30, ONE_SECOND / 30, /* RestartRate */
120 			0, /* BlockMask */
121 		},
122 		{
123 			33, /* StartIndex */
124 			3, /* NumFrames */
125 			YOYO_ANIM, /* AnimFlags */
126 			ONE_SECOND / 30, ONE_SECOND / 30, /* FrameRate */
127 			ONE_SECOND / 30, ONE_SECOND / 30, /* RestartRate */
128 			0, /* BlockMask */
129 		},
130 		{
131 			36, /* StartIndex */
132 			3, /* NumFrames */
133 			YOYO_ANIM, /* AnimFlags */
134 			ONE_SECOND / 30, ONE_SECOND / 30, /* FrameRate */
135 			ONE_SECOND / 30, ONE_SECOND / 30, /* RestartRate */
136 			0, /* BlockMask */
137 		},
138 		{
139 			39, /* StartIndex */
140 			3, /* NumFrames */
141 			YOYO_ANIM, /* AnimFlags */
142 			ONE_SECOND / 30, ONE_SECOND / 30, /* FrameRate */
143 			ONE_SECOND / 30, ONE_SECOND / 30, /* RestartRate */
144 			0, /* BlockMask */
145 		},
146 		{
147 			42, /* StartIndex */
148 			3, /* NumFrames */
149 			YOYO_ANIM, /* AnimFlags */
150 			ONE_SECOND / 30, ONE_SECOND / 30, /* FrameRate */
151 			ONE_SECOND / 30, ONE_SECOND / 30, /* RestartRate */
152 			0, /* BlockMask */
153 		},
154 		{
155 			45, /* StartIndex */
156 			3, /* NumFrames */
157 			YOYO_ANIM, /* AnimFlags */
158 			ONE_SECOND / 30, ONE_SECOND / 30, /* FrameRate */
159 			ONE_SECOND / 30, ONE_SECOND / 30, /* RestartRate */
160 			0, /* BlockMask */
161 		},
162 		{
163 			48, /* StartIndex */
164 			4, /* NumFrames */
165 			YOYO_ANIM | WAIT_TALKING, /* AnimFlags */
166 			ONE_SECOND / 30, 0, /* FrameRate */
167 			ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
168 			(1 << 2) | (1 << 4),
169 		},
170 	},
171 	{ /* AlienTransitionDesc - empty */
172 		0, /* StartIndex */
173 		0, /* NumFrames */
174 		0, /* AnimFlags */
175 		0, 0, /* FrameRate */
176 		0, 0, /* RestartRate */
177 		0, /* BlockMask */
178 	},
179 	{ /* AlienTalkDesc */
180 		1, /* StartIndex */
181 		3, /* NumFrames */
182 		0, /* AnimFlags */
183 		ONE_SECOND / 15, 0, /* FrameRate */
184 		ONE_SECOND / 12, 0, /* RestartRate */
185 		0, /* BlockMask */
186 	},
187 	NULL, /* AlienNumberSpeech - none */
188 	/* Filler for loaded resources */
189 	NULL, NULL, NULL,
190 	NULL,
191 	NULL,
192 };
193 
194 static void
ExitConversation(RESPONSE_REF R)195 ExitConversation (RESPONSE_REF R)
196 {
197 	setSegue (Segue_hostile);
198 
199 	if (PLAYER_SAID (R, bye_homeworld))
200 		NPCPhrase (GOODBYE_AND_DIE_HOMEWORLD);
201 	else if (PLAYER_SAID (R, bye_royalist))
202 		NPCPhrase (GOODBYE_AND_DIE_ROYALIST);
203 	else if (PLAYER_SAID (R, i_demand_you_ally_homeworld0))
204 	{
205 		NPCPhrase (ENEMY_MUST_DIE);
206 
207 		SET_GAME_STATE (NO_YEHAT_ALLY_HOME, 1);
208 	}
209 	else if (PLAYER_SAID (R, bye_space))
210 	{
211 		if ((BYTE)TFB_Random () & 1)
212 			NPCPhrase (GOODBYE_AND_DIE_SPACE);
213 		else
214 		{
215 			NPCPhrase (GO_IN_PEACE);
216 
217 			setSegue (Segue_peace);
218 		}
219 	}
220 	else if (PLAYER_SAID (R, not_here)
221 			|| PLAYER_SAID (R, not_send))
222 	{
223 		switch (GET_GAME_STATE (YEHAT_REBEL_VISITS))
224 		{
225 			case 0:
226 				NPCPhrase (JUST_A_TRICK_1);
227 				break;
228 			case 1:
229 				NPCPhrase (JUST_A_TRICK_2);
230 				break;
231 		}
232 		SET_GAME_STATE (YEHAT_REBEL_VISITS, 1);
233 	}
234 	else if (PLAYER_SAID (R, ok_send))
235 	{
236 		NPCPhrase (WE_REVOLT);
237 
238 		setSegue (Segue_peace);
239 		SET_GAME_STATE (YEHAT_CIVIL_WAR, 1);
240 		SET_GAME_STATE (YEHAT_VISITS, 0);
241 		SET_GAME_STATE (YEHAT_HOME_VISITS, 0);
242 		SET_GAME_STATE (YEHAT_REBEL_VISITS, 0);
243 		SET_GAME_STATE (YEHAT_REBEL_INFO, 0);
244 		SET_GAME_STATE (YEHAT_REBEL_TOLD_PKUNK, 0);
245 		SET_GAME_STATE (NO_YEHAT_INFO, 0);
246 
247 		AddEvent (RELATIVE_EVENT, 0, 0, 0, YEHAT_REBEL_EVENT);
248 	}
249 }
250 
251 static void
Royalists(RESPONSE_REF R)252 Royalists (RESPONSE_REF R)
253 {
254 	if (PLAYER_SAID (R, how_is_rebellion))
255 	{
256 		BYTE NumVisits;
257 
258 		NumVisits = GET_GAME_STATE (YEHAT_ROYALIST_INFO);
259 		switch (NumVisits++)
260 		{
261 			case 0:
262 				NPCPhrase (ROYALIST_REBELLION_1);
263 				break;
264 			case 1:
265 				NPCPhrase (ROYALIST_REBELLION_2);
266 				--NumVisits;
267 				break;
268 		}
269 		SET_GAME_STATE (YEHAT_ROYALIST_INFO, NumVisits);
270 
271 		DISABLE_PHRASE (how_is_rebellion);
272 	}
273 	else if (PLAYER_SAID (R, what_about_pkunk_royalist))
274 	{
275 		if (GET_GAME_STATE (YEHAT_ABSORBED_PKUNK))
276 			NPCPhrase (PKUNK_ABSORBED_ROYALIST);
277 		else
278 			NPCPhrase (HATE_PKUNK_ROYALIST);
279 
280 		SET_GAME_STATE (YEHAT_ROYALIST_TOLD_PKUNK, 1);
281 	}
282 	else if (PLAYER_SAID (R, sorry_about_revolution))
283 	{
284 		NPCPhrase (ALL_YOUR_FAULT);
285 
286 		SET_GAME_STATE (NO_YEHAT_INFO, 1);
287 	}
288 
289 	if (PHRASE_ENABLED (how_is_rebellion))
290 		Response (how_is_rebellion, Royalists);
291 	if (!GET_GAME_STATE (YEHAT_ROYALIST_TOLD_PKUNK)
292 			&& GET_GAME_STATE (PKUNK_VISITS)
293 			&& GET_GAME_STATE (PKUNK_HOME_VISITS))
294 		Response (what_about_pkunk_royalist, Royalists);
295 	if (!GET_GAME_STATE (NO_YEHAT_INFO))
296 		Response (sorry_about_revolution, Royalists);
297 	Response (bye_royalist, ExitConversation);
298 }
299 
300 static void
StartRevolt(RESPONSE_REF R)301 StartRevolt (RESPONSE_REF R)
302 {
303 	if (PLAYER_SAID (R, shofixti_alive_1))
304 	{
305 		NPCPhrase (SEND_HIM_OVER_1);
306 
307 		SET_GAME_STATE (YEHAT_REBEL_TOLD_PKUNK, 1);
308 	}
309 	else if (PLAYER_SAID (R, shofixti_alive_2))
310 		NPCPhrase (SEND_HIM_OVER_2);
311 
312 	if (HaveEscortShip (SHOFIXTI_SHIP))
313 		Response (ok_send, ExitConversation);
314 	else
315 		Response (not_here, ExitConversation);
316 	Response (not_send, ExitConversation);
317 }
318 
319 static void
YehatHome(RESPONSE_REF R)320 YehatHome (RESPONSE_REF R)
321 {
322 
323 	if (PLAYER_SAID (R, whats_up_homeworld))
324 	{
325 		BYTE NumVisits;
326 
327 		NumVisits = GET_GAME_STATE (YEHAT_ROYALIST_INFO);
328 		switch (NumVisits++)
329 		{
330 			case 0:
331 				NPCPhrase (GENERAL_INFO_HOMEWORLD_1);
332 				break;
333 			case 1:
334 				NPCPhrase (GENERAL_INFO_HOMEWORLD_2);
335 				--NumVisits;
336 				break;
337 		}
338 		SET_GAME_STATE (YEHAT_ROYALIST_INFO, NumVisits);
339 
340 		DISABLE_PHRASE (whats_up_homeworld);
341 	}
342 	else if (PLAYER_SAID (R, at_least_help_us_homeworld))
343 	{
344 		NPCPhrase (NO_HELP_ENEMY);
345 
346 		SET_GAME_STATE (NO_YEHAT_HELP_HOME, 1);
347 	}
348 	else if (PLAYER_SAID (R, give_info))
349 	{
350 		NPCPhrase (NO_INFO_FOR_ENEMY);
351 
352 		SET_GAME_STATE (NO_YEHAT_INFO, 1);
353 	}
354 	else if (PLAYER_SAID (R, what_about_pkunk_royalist))
355 	{
356 		if (GET_GAME_STATE (YEHAT_ABSORBED_PKUNK))
357 			NPCPhrase (PKUNK_ABSORBED_ROYALIST);
358 		else
359 			NPCPhrase (HATE_PKUNK_ROYALIST);
360 
361 		SET_GAME_STATE (YEHAT_ROYALIST_TOLD_PKUNK, 1);
362 	}
363 
364 	if (PHRASE_ENABLED (whats_up_homeworld))
365 		Response (whats_up_homeworld, YehatHome);
366 	if (!GET_GAME_STATE (YEHAT_ROYALIST_TOLD_PKUNK)
367 			&& GET_GAME_STATE (PKUNK_VISITS)
368 			&& GET_GAME_STATE (PKUNK_HOME_VISITS))
369 		Response (what_about_pkunk_royalist, YehatHome);
370 	if (!GET_GAME_STATE (NO_YEHAT_HELP_HOME))
371 		Response (at_least_help_us_homeworld, YehatHome);
372 	if (!GET_GAME_STATE (NO_YEHAT_INFO))
373 		Response (give_info, YehatHome);
374 	if (!GET_GAME_STATE (NO_YEHAT_ALLY_HOME))
375 	{
376 		UNICODE buf[ALLIANCE_NAME_BUFSIZE];
377 
378 		GetAllianceName (buf, name_1);
379 		construct_response (
380 				shared_phrase_buf,
381 				i_demand_you_ally_homeworld0,
382 				GLOBAL_SIS (CommanderName),
383 				i_demand_you_ally_homeworld1,
384 				buf,
385 				i_demand_you_ally_homeworld2,
386 				GLOBAL_SIS (ShipName),
387 				i_demand_you_ally_homeworld3,
388 				(UNICODE*)NULL);
389 		DoResponsePhrase (i_demand_you_ally_homeworld0,
390 				ExitConversation, shared_phrase_buf);
391 	}
392 	Response (bye_homeworld, ExitConversation);
393 }
394 
395 static void
YehatSpace(RESPONSE_REF R)396 YehatSpace (RESPONSE_REF R)
397 {
398 	BYTE i, LastStack;
399 	RESPONSE_REF pStr[3];
400 
401 	LastStack = 0;
402 	pStr[0] = pStr[1] = pStr[2] = 0;
403 	if (PLAYER_SAID (R, whats_up_space_1)
404 			|| PLAYER_SAID (R, whats_up_space_2)
405 			|| PLAYER_SAID (R, whats_up_space_3)
406 			|| PLAYER_SAID (R, whats_up_space_4))
407 	{
408 		BYTE NumVisits;
409 
410 		NumVisits = GET_GAME_STATE (YEHAT_REBEL_INFO);
411 		switch (NumVisits++)
412 		{
413 			case 0:
414 				NPCPhrase (GENERAL_INFO_SPACE_1);
415 				break;
416 			case 1:
417 				NPCPhrase (GENERAL_INFO_SPACE_2);
418 				break;
419 			case 2:
420 				NPCPhrase (GENERAL_INFO_SPACE_3);
421 				break;
422 			case 3:
423 				NPCPhrase (GENERAL_INFO_SPACE_4);
424 				--NumVisits;
425 				break;
426 		}
427 		SET_GAME_STATE (YEHAT_REBEL_INFO, NumVisits);
428 
429 		DISABLE_PHRASE (whats_up_space_1);
430 	}
431 	else if (PLAYER_SAID (R, i_demand_you_ally_space0))
432 	{
433 		NPCPhrase (WE_CANNOT_1);
434 
435 		LastStack = 2;
436 		SET_GAME_STATE (NO_YEHAT_ALLY_SPACE, 1);
437 	}
438 	else if (PLAYER_SAID (R, obligation))
439 	{
440 		NPCPhrase (WE_CANNOT_2);
441 
442 		setSegue (Segue_peace);
443 		SET_GAME_STATE (NO_YEHAT_ALLY_SPACE, 2);
444 
445 		return;
446 	}
447 	else if (PLAYER_SAID (R, at_least_help_us_space))
448 	{
449 		NPCPhrase (SORRY_CANNOT);
450 
451 		LastStack = 1;
452 		SET_GAME_STATE (NO_YEHAT_HELP_SPACE, 1);
453 	}
454 	else if (PLAYER_SAID (R, dishonor))
455 	{
456 		NPCPhrase (HERES_A_HINT);
457 
458 		SET_GAME_STATE (NO_YEHAT_HELP_SPACE, 2);
459 	}
460 	else if (PLAYER_SAID (R, what_about_pkunk_royalist))
461 	{
462 		if (GET_GAME_STATE (YEHAT_ABSORBED_PKUNK))
463 			NPCPhrase (PKUNK_ABSORBED_ROYALIST);
464 		else
465 			NPCPhrase (HATE_PKUNK_ROYALIST);
466 
467 		SET_GAME_STATE (YEHAT_ROYALIST_TOLD_PKUNK, 1);
468 	}
469 
470 // SET_FUNCPTR (&PtrDesc, YehatSpace);
471 	if (PHRASE_ENABLED (whats_up_space_1))
472 	{
473 		switch (GET_GAME_STATE (YEHAT_REBEL_INFO))
474 		{
475 			case 0:
476 				pStr[0] = whats_up_space_1;
477 				break;
478 			case 1:
479 				pStr[0] = whats_up_space_2;
480 				break;
481 			case 2:
482 				pStr[0] = whats_up_space_3;
483 				break;
484 			case 3:
485 				pStr[0] = whats_up_space_4;
486 				break;
487 		}
488 	}
489 	switch (GET_GAME_STATE (NO_YEHAT_HELP_SPACE))
490 	{
491 		case 0:
492 			pStr[1] = at_least_help_us_space;
493 			break;
494 		case 1:
495 			pStr[1] = dishonor;
496 			break;
497 	}
498 	switch (GET_GAME_STATE (NO_YEHAT_ALLY_SPACE))
499 	{
500 		case 0:
501 		{
502 			UNICODE buf[ALLIANCE_NAME_BUFSIZE];
503 
504 			GetAllianceName (buf, name_1);
505 			construct_response (
506 					shared_phrase_buf,
507 					i_demand_you_ally_space0,
508 					GLOBAL_SIS (CommanderName),
509 					i_demand_you_ally_space1,
510 					GLOBAL_SIS (ShipName),
511 					i_demand_you_ally_space2,
512 					buf,
513 					i_demand_you_ally_space3,
514 					(UNICODE*)NULL);
515 			pStr[2] = i_demand_you_ally_space0;
516 			break;
517 		}
518 		case 1:
519 			pStr[2] = obligation;
520 			break;
521 	}
522 
523 	if (pStr[LastStack])
524 	{
525 		if (pStr[LastStack] != i_demand_you_ally_space0)
526 			Response (pStr[LastStack], YehatSpace);
527 		else
528 			DoResponsePhrase (pStr[LastStack], YehatSpace, shared_phrase_buf);
529 	}
530 	for (i = 0; i < 3; ++i)
531 	{
532 		if (i != LastStack && pStr[i])
533 		{
534 			if (pStr[i] != i_demand_you_ally_space0)
535 				Response (pStr[i], YehatSpace);
536 			else
537 				DoResponsePhrase (pStr[i], YehatSpace, shared_phrase_buf);
538 		}
539 	}
540 	if (!GET_GAME_STATE (YEHAT_ROYALIST_TOLD_PKUNK)
541 			&& GET_GAME_STATE (PKUNK_VISITS)
542 			&& GET_GAME_STATE (PKUNK_HOME_VISITS))
543 		Response (what_about_pkunk_royalist, YehatSpace);
544 	if (GET_GAME_STATE (SHOFIXTI_VISITS))
545 	{
546 		switch (GET_GAME_STATE (YEHAT_REBEL_TOLD_PKUNK))
547 		{
548 			case 0:
549 				Response (shofixti_alive_1, StartRevolt);
550 				break;
551 			case 1:
552 				Response (shofixti_alive_2, StartRevolt);
553 				break;
554 		}
555 	}
556 	Response (bye_space, ExitConversation);
557 }
558 
559 static void
Intro(void)560 Intro (void)
561 {
562 	BYTE NumVisits;
563 
564 	if (LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE)
565 	{
566 		NPCPhrase (OUT_TAKES);
567 
568 		setSegue (Segue_peace);
569 		return;
570 	}
571 
572 	if (GET_GAME_STATE (YEHAT_CIVIL_WAR))
573 	{
574 		if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7))
575 		{
576 			NumVisits = GET_GAME_STATE (YEHAT_HOME_VISITS);
577 			switch (NumVisits++)
578 			{
579 				case 0:
580 					NPCPhrase (ROYALIST_HOMEWORLD_HELLO_1);
581 					break;
582 				case 1:
583 					NPCPhrase (ROYALIST_HOMEWORLD_HELLO_2);
584 					--NumVisits;
585 					break;
586 			}
587 			SET_GAME_STATE (YEHAT_HOME_VISITS, NumVisits);
588 		}
589 		else
590 		{
591 			NumVisits = GET_GAME_STATE (YEHAT_VISITS);
592 			switch (NumVisits++)
593 			{
594 				case 0:
595 					NPCPhrase (ROYALIST_SPACE_HELLO_1);
596 					break;
597 				case 1:
598 					NPCPhrase (ROYALIST_SPACE_HELLO_2);
599 					--NumVisits;
600 					break;
601 			}
602 			SET_GAME_STATE (YEHAT_VISITS, NumVisits);
603 		}
604 
605 		Royalists ((RESPONSE_REF)0);
606 	}
607 	else if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7))
608 	{
609 		NumVisits = GET_GAME_STATE (YEHAT_HOME_VISITS);
610 		switch (NumVisits++)
611 		{
612 			case 0:
613 				NPCPhrase (HOMEWORLD_HELLO_1);
614 				break;
615 			case 1:
616 				NPCPhrase (HOMEWORLD_HELLO_2);
617 				--NumVisits;
618 				break;
619 		}
620 		SET_GAME_STATE (YEHAT_HOME_VISITS, NumVisits);
621 
622 		YehatHome ((RESPONSE_REF)0);
623 	}
624 	else
625 	{
626 		NumVisits = GET_GAME_STATE (YEHAT_VISITS);
627 		switch (NumVisits++)
628 		{
629 			case 0:
630 				NPCPhrase (SPACE_HELLO_1);
631 				break;
632 			case 1:
633 				NPCPhrase (SPACE_HELLO_2);
634 				break;
635 			case 2:
636 				NPCPhrase (SPACE_HELLO_3);
637 				break;
638 			case 3:
639 				NPCPhrase (SPACE_HELLO_4);
640 				--NumVisits;
641 				break;
642 		}
643 		SET_GAME_STATE (YEHAT_VISITS, NumVisits);
644 
645 		YehatSpace ((RESPONSE_REF)0);
646 	}
647 }
648 
649 static COUNT
uninit_yehat(void)650 uninit_yehat (void)
651 {
652 	return (0);
653 }
654 
655 static void
post_yehat_enc(void)656 post_yehat_enc (void)
657 {
658 	// nothing defined so far
659 }
660 
661 LOCDATA*
init_yehat_comm(void)662 init_yehat_comm (void)
663 {
664 	LOCDATA *retval;
665 
666 	yehat_desc.init_encounter_func = Intro;
667 	yehat_desc.post_encounter_func = post_yehat_enc;
668 	yehat_desc.uninit_encounter_func = uninit_yehat;
669 
670 	yehat_desc.AlienTextBaseline.x = SIS_SCREEN_WIDTH * 2 / 3;
671 	yehat_desc.AlienTextBaseline.y = 60;
672 	yehat_desc.AlienTextWidth = (SIS_TEXT_WIDTH - 16) * 2 / 3;
673 
674 	if (LOBYTE (GLOBAL (CurrentActivity)) != WON_LAST_BATTLE)
675 	{
676 		setSegue (Segue_hostile);
677 	}
678 	else
679 	{
680 		setSegue (Segue_peace);
681 	}
682 	retval = &yehat_desc;
683 
684 	return (retval);
685 }
686