From eb6878d7eedfb395c4ce80368e7c52b8074e1dc6 Mon Sep 17 00:00:00 2001 From: ghaushe Date: Thu, 6 Feb 2003 02:23:33 +0000 Subject: [PATCH] Clean up trackplayer.c Hopefully this removes many of the weird crashing issues. ZFP no longer stutter. Rewind after playing sort-of works, but still needs more work. git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@689 8092fc87-c524-0410-9efc-e669fe64eaf9 --- sc2/ChangeLog | 1 + sc2/src/sc2code/comm/zoqfot/zoqfotc.c | 1042 ++++++++-------------- sc2/src/sc2code/commglue.c | 8 +- sc2/src/sc2code/commglue.h | 3 +- sc2/src/sc2code/libs/sound/sound.h | 1 + sc2/src/sc2code/libs/sound/stream.c | 15 - sc2/src/sc2code/libs/sound/trackplayer.c | 71 +- sc2/src/sc2code/libs/sound/trackplayer.h | 2 +- 8 files changed, 439 insertions(+), 704 deletions(-) diff --git a/sc2/ChangeLog b/sc2/ChangeLog index 4e1f64bf0..f965eb808 100644 --- a/sc2/ChangeLog +++ b/sc2/ChangeLog @@ -1,4 +1,5 @@ Changes towards version 0.2: +- Fix ZFP stuttering and some other random sound issues -PBlue - Correctly deal with multiply-mapped keys. This may fix some keys not being detected correctly on the Mac as well - PBlue - OpenGL mode now fully supports partial screen updates -Mika diff --git a/sc2/src/sc2code/comm/zoqfot/zoqfotc.c b/sc2/src/sc2code/comm/zoqfot/zoqfotc.c index 16a47693c..fc4f05472 100644 --- a/sc2/src/sc2code/comm/zoqfot/zoqfotc.c +++ b/sc2/src/sc2code/comm/zoqfot/zoqfotc.c @@ -100,37 +100,35 @@ enum }; static void -SelectAlien (COUNT index, BYTE which_alien) +SelectAlienZOQ (void) { - switch (which_alien) - { - case ZOQ_ALIEN: - CommData.AlienTransitionDesc.StartIndex = FOT_TO_ZOQ; - CommData.AlienTalkDesc.StartIndex = ZOQ_TALK_INDEX; - CommData.AlienTalkDesc.NumFrames = ZOQ_TALK_FRAMES; - CommData.AlienAmbientArray[1].AnimFlags &= ~WAIT_TALKING; + CommData.AlienTransitionDesc.StartIndex = FOT_TO_ZOQ; + CommData.AlienTalkDesc.StartIndex = ZOQ_TALK_INDEX; + CommData.AlienTalkDesc.NumFrames = ZOQ_TALK_FRAMES; + CommData.AlienAmbientArray[1].AnimFlags &= ~WAIT_TALKING; - CommData.AlienTextTemplate.baseline.x = ZOQ_BASE_X; - CommData.AlienTextTemplate.baseline.y = ZOQ_BASE_Y; - CommData.AlienTextFColor = ZOQ_FG_COLOR; - CommData.AlienTextBColor = ZOQ_BG_COLOR; - break; - case FOT_ALIEN: - break; - case PIK_ALIEN: - CommData.AlienTransitionDesc.StartIndex = FOT_TO_PIK; - CommData.AlienTalkDesc.StartIndex = PIK_TALK_INDEX; - CommData.AlienTalkDesc.NumFrames = PIK_TALK_FRAMES; - CommData.AlienAmbientArray[1].AnimFlags |= WAIT_TALKING; + CommData.AlienTextTemplate.baseline.x = ZOQ_BASE_X; + CommData.AlienTextTemplate.baseline.y = ZOQ_BASE_Y; + CommData.AlienTextFColor = ZOQ_FG_COLOR; + CommData.AlienTextBColor = ZOQ_BG_COLOR; +} +static void +SelectAlienFOT (void) +{ +} - CommData.AlienTextTemplate.baseline.x = PIK_BASE_X; - CommData.AlienTextTemplate.baseline.y = PIK_BASE_Y; - CommData.AlienTextFColor = PIK_FG_COLOR; - CommData.AlienTextBColor = PIK_BG_COLOR; - break; - } +static void +SelectAlienPIK (void) +{ + CommData.AlienTransitionDesc.StartIndex = FOT_TO_PIK; + CommData.AlienTalkDesc.StartIndex = PIK_TALK_INDEX; + CommData.AlienTalkDesc.NumFrames = PIK_TALK_FRAMES; + CommData.AlienAmbientArray[1].AnimFlags |= WAIT_TALKING; - AlienTalkSegue (index); + CommData.AlienTextTemplate.baseline.x = PIK_BASE_X; + CommData.AlienTextTemplate.baseline.y = PIK_BASE_Y; + CommData.AlienTextFColor = PIK_FG_COLOR; + CommData.AlienTextBColor = PIK_BG_COLOR; } static void @@ -140,76 +138,56 @@ ExitConversation (RESPONSE_REF R) if (PLAYER_SAID (R, bye_homeworld)) { - NPCPhrase (GOODBYE_HOME0); - NPCPhrase (GOODBYE_HOME1); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (GOODBYE_HOME0, &SelectAlienZOQ); + NPCPhrase_cb (GOODBYE_HOME1, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); } else if (PLAYER_SAID (R, decide_later)) { - NPCPhrase (PLEASE_HURRY0); - NPCPhrase (PLEASE_HURRY1); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (PLEASE_HURRY0, &SelectAlienZOQ); + NPCPhrase_cb (PLEASE_HURRY1, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); } else if (PLAYER_SAID (R, valuable_info)) { - NPCPhrase (GOODBYE0); - NPCPhrase (GOODBYE1); - NPCPhrase (GOODBYE2); - NPCPhrase (GOODBYE3); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (GOODBYE0, &SelectAlienZOQ); + NPCPhrase_cb (GOODBYE1, &SelectAlienPIK); + NPCPhrase_cb (GOODBYE2, &SelectAlienZOQ); + NPCPhrase_cb (GOODBYE3, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); } else if (PLAYER_SAID (R, how_can_i_help)) { - NPCPhrase (EMMISSARIES0); - NPCPhrase (EMMISSARIES1); - NPCPhrase (EMMISSARIES2); - NPCPhrase (EMMISSARIES3); - NPCPhrase (EMMISSARIES4); - NPCPhrase (EMMISSARIES5); - NPCPhrase (EMMISSARIES6); - NPCPhrase (EMMISSARIES7); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien (6, PIK_ALIEN); - SelectAlien (7, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (EMMISSARIES0, &SelectAlienZOQ); + NPCPhrase_cb (EMMISSARIES1, &SelectAlienPIK); + NPCPhrase_cb (EMMISSARIES2, &SelectAlienZOQ); + NPCPhrase_cb (EMMISSARIES3, &SelectAlienPIK); + NPCPhrase_cb (EMMISSARIES4, &SelectAlienZOQ); + NPCPhrase_cb (EMMISSARIES5, &SelectAlienPIK); + NPCPhrase_cb (EMMISSARIES6, &SelectAlienZOQ); + NPCPhrase_cb (EMMISSARIES7, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); } else if (PLAYER_SAID (R, sure)) { - NPCPhrase (WE_ALLY0); - NPCPhrase (WE_ALLY1); - NPCPhrase (WE_ALLY2); - NPCPhrase (WE_ALLY3); - NPCPhrase (WE_ALLY4); - NPCPhrase (WE_ALLY5); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (WE_ALLY0, &SelectAlienZOQ); + NPCPhrase_cb (WE_ALLY1, &SelectAlienPIK); + NPCPhrase_cb (WE_ALLY2, &SelectAlienZOQ); + NPCPhrase_cb (WE_ALLY3, &SelectAlienPIK); + NPCPhrase_cb (WE_ALLY4, &SelectAlienZOQ); + NPCPhrase_cb (WE_ALLY5, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); ActivateStarShip (ZOQFOTPIK_SHIP, 0); AddEvent (RELATIVE_EVENT, 3, 0, 0, ZOQFOT_DISTRESS_EVENT); SET_GAME_STATE (ZOQFOT_HOME_VISITS, 0); } else if (PLAYER_SAID (R, all_very_interesting)) { - NPCPhrase (SEE_TOLD_YOU0); - NPCPhrase (SEE_TOLD_YOU1); - NPCPhrase (SEE_TOLD_YOU2); - NPCPhrase (SEE_TOLD_YOU3); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (SEE_TOLD_YOU0, &SelectAlienZOQ); + NPCPhrase_cb (SEE_TOLD_YOU1, &SelectAlienPIK); + NPCPhrase_cb (SEE_TOLD_YOU2, &SelectAlienZOQ); + NPCPhrase_cb (SEE_TOLD_YOU3, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); SET_GAME_STATE (ZOQFOT_HOSTILE, 1); SET_GAME_STATE (ZOQFOT_HOME_VISITS, 0); @@ -217,10 +195,9 @@ ExitConversation (RESPONSE_REF R) } else if (PLAYER_SAID (R, never)) { - NPCPhrase (WE_ENEMIES0); - NPCPhrase (WE_ENEMIES1); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (WE_ENEMIES0, &SelectAlienZOQ); + NPCPhrase_cb (WE_ENEMIES1, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); SET_GAME_STATE (ZOQFOT_HOME_VISITS, 0); SET_GAME_STATE (ZOQFOT_HOSTILE, 1); @@ -231,18 +208,13 @@ ExitConversation (RESPONSE_REF R) static void FormAlliance (RESPONSE_REF R) { - NPCPhrase (ALLY_WITH_US0); - NPCPhrase (ALLY_WITH_US1); - NPCPhrase (ALLY_WITH_US2); - NPCPhrase (ALLY_WITH_US3); - NPCPhrase (ALLY_WITH_US4); - NPCPhrase (ALLY_WITH_US5); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (ALLY_WITH_US0, &SelectAlienZOQ); + NPCPhrase_cb (ALLY_WITH_US1, &SelectAlienPIK); + NPCPhrase_cb (ALLY_WITH_US2, &SelectAlienZOQ); + NPCPhrase_cb (ALLY_WITH_US3, &SelectAlienPIK); + NPCPhrase_cb (ALLY_WITH_US4, &SelectAlienZOQ); + NPCPhrase_cb (ALLY_WITH_US5, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); Response (sure, ExitConversation); Response (never, ExitConversation); @@ -254,127 +226,85 @@ ZoqFotIntro (RESPONSE_REF R) { if (PLAYER_SAID (R, we_are_vindicator0)) { - NPCPhrase (WE_GLAD0); - NPCPhrase (WE_GLAD1); - NPCPhrase (WE_GLAD2); - NPCPhrase (WE_GLAD3); - NPCPhrase (WE_GLAD4); - NPCPhrase (WE_GLAD5); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (WE_GLAD0, &SelectAlienZOQ); + NPCPhrase_cb (WE_GLAD1, &SelectAlienPIK); + NPCPhrase_cb (WE_GLAD2, &SelectAlienZOQ); + NPCPhrase_cb (WE_GLAD3, &SelectAlienPIK); + NPCPhrase_cb (WE_GLAD4, &SelectAlienZOQ); + NPCPhrase_cb (WE_GLAD5, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); DISABLE_PHRASE (we_are_vindicator0); } else if (PLAYER_SAID (R, your_race)) { - NPCPhrase (YEARS_AGO0); - NPCPhrase (YEARS_AGO1); - NPCPhrase (YEARS_AGO2); - NPCPhrase (YEARS_AGO3); - NPCPhrase (YEARS_AGO4); - NPCPhrase (YEARS_AGO5); - NPCPhrase (YEARS_AGO6); - NPCPhrase (YEARS_AGO7); - NPCPhrase (YEARS_AGO8); - NPCPhrase (YEARS_AGO9); - NPCPhrase (YEARS_AGO10); - NPCPhrase (YEARS_AGO11); - NPCPhrase (YEARS_AGO12); - NPCPhrase (YEARS_AGO13); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien (6, PIK_ALIEN); - SelectAlien (7, ZOQ_ALIEN); - SelectAlien (8, PIK_ALIEN); - SelectAlien (9, ZOQ_ALIEN); - SelectAlien (10, PIK_ALIEN); - SelectAlien (11, ZOQ_ALIEN); - SelectAlien (12, PIK_ALIEN); - SelectAlien (13, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (YEARS_AGO0, &SelectAlienZOQ); + NPCPhrase_cb (YEARS_AGO1, &SelectAlienPIK); + NPCPhrase_cb (YEARS_AGO2, &SelectAlienZOQ); + NPCPhrase_cb (YEARS_AGO3, &SelectAlienPIK); + NPCPhrase_cb (YEARS_AGO4, &SelectAlienZOQ); + NPCPhrase_cb (YEARS_AGO5, &SelectAlienPIK); + NPCPhrase_cb (YEARS_AGO6, &SelectAlienZOQ); + NPCPhrase_cb (YEARS_AGO7, &SelectAlienPIK); + NPCPhrase_cb (YEARS_AGO8, &SelectAlienZOQ); + NPCPhrase_cb (YEARS_AGO9, &SelectAlienPIK); + NPCPhrase_cb (YEARS_AGO10, &SelectAlienZOQ); + NPCPhrase_cb (YEARS_AGO11, &SelectAlienPIK); + NPCPhrase_cb (YEARS_AGO12, &SelectAlienZOQ); + NPCPhrase_cb (YEARS_AGO13, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); DISABLE_PHRASE (your_race); } else if (PLAYER_SAID (R, where_from)) { - NPCPhrase (TRAVELED_FAR0); - NPCPhrase (TRAVELED_FAR1); - NPCPhrase (TRAVELED_FAR2); - NPCPhrase (TRAVELED_FAR3); - NPCPhrase (TRAVELED_FAR4); - NPCPhrase (TRAVELED_FAR5); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (TRAVELED_FAR0, &SelectAlienZOQ); + NPCPhrase_cb (TRAVELED_FAR1, &SelectAlienPIK); + NPCPhrase_cb (TRAVELED_FAR2, &SelectAlienZOQ); + NPCPhrase_cb (TRAVELED_FAR3, &SelectAlienPIK); + NPCPhrase_cb (TRAVELED_FAR4, &SelectAlienZOQ); + NPCPhrase_cb (TRAVELED_FAR5, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); DISABLE_PHRASE (where_from); } else if (PLAYER_SAID (R, what_emergency)) { - NPCPhrase (UNDER_ATTACK0); - NPCPhrase (UNDER_ATTACK1); - NPCPhrase (UNDER_ATTACK2); - NPCPhrase (UNDER_ATTACK3); - NPCPhrase (UNDER_ATTACK4); - NPCPhrase (UNDER_ATTACK5); - NPCPhrase (UNDER_ATTACK6); - NPCPhrase (UNDER_ATTACK7); - NPCPhrase (UNDER_ATTACK8); - NPCPhrase (UNDER_ATTACK9); - NPCPhrase (UNDER_ATTACK10); - NPCPhrase (UNDER_ATTACK11); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien (6, PIK_ALIEN); - SelectAlien (7, ZOQ_ALIEN); - SelectAlien (8, PIK_ALIEN); - SelectAlien (9, ZOQ_ALIEN); - SelectAlien (10, PIK_ALIEN); - SelectAlien (11, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (UNDER_ATTACK0, &SelectAlienZOQ); + NPCPhrase_cb (UNDER_ATTACK1, &SelectAlienPIK); + NPCPhrase_cb (UNDER_ATTACK2, &SelectAlienZOQ); + NPCPhrase_cb (UNDER_ATTACK3, &SelectAlienPIK); + NPCPhrase_cb (UNDER_ATTACK4, &SelectAlienZOQ); + NPCPhrase_cb (UNDER_ATTACK5, &SelectAlienPIK); + NPCPhrase_cb (UNDER_ATTACK6, &SelectAlienZOQ); + NPCPhrase_cb (UNDER_ATTACK7, &SelectAlienPIK); + NPCPhrase_cb (UNDER_ATTACK8, &SelectAlienZOQ); + NPCPhrase_cb (UNDER_ATTACK9, &SelectAlienPIK); + NPCPhrase_cb (UNDER_ATTACK10, &SelectAlienZOQ); + NPCPhrase_cb (UNDER_ATTACK11, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); DISABLE_PHRASE (what_emergency); } else if (PLAYER_SAID (R, tough_luck)) { - NPCPhrase (NOT_HELPFUL0); - NPCPhrase (NOT_HELPFUL1); - NPCPhrase (NOT_HELPFUL2); - NPCPhrase (NOT_HELPFUL3); - NPCPhrase (NOT_HELPFUL4); - NPCPhrase (NOT_HELPFUL5); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (NOT_HELPFUL0, &SelectAlienZOQ); + NPCPhrase_cb (NOT_HELPFUL1, &SelectAlienPIK); + NPCPhrase_cb (NOT_HELPFUL2, &SelectAlienZOQ); + NPCPhrase_cb (NOT_HELPFUL3, &SelectAlienPIK); + NPCPhrase_cb (NOT_HELPFUL4, &SelectAlienZOQ); + NPCPhrase_cb (NOT_HELPFUL5, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); DISABLE_PHRASE (tough_luck); } else if (PLAYER_SAID (R, what_look_like)) { - NPCPhrase (LOOK_LIKE0); - NPCPhrase (LOOK_LIKE1); - NPCPhrase (LOOK_LIKE2); - NPCPhrase (LOOK_LIKE3); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (LOOK_LIKE0, &SelectAlienZOQ); + NPCPhrase_cb (LOOK_LIKE1, &SelectAlienPIK); + NPCPhrase_cb (LOOK_LIKE2, &SelectAlienZOQ); + NPCPhrase_cb (LOOK_LIKE3, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); DISABLE_PHRASE (what_look_like); } @@ -417,43 +347,29 @@ AquaintZoqFot (RESPONSE_REF R) { if (PLAYER_SAID (R, which_fot)) { - NPCPhrase (HE_IS0); - NPCPhrase (HE_IS1); - NPCPhrase (HE_IS2); - NPCPhrase (HE_IS3); - NPCPhrase (HE_IS4); - NPCPhrase (HE_IS5); - NPCPhrase (HE_IS6); - NPCPhrase (HE_IS7); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien (6, PIK_ALIEN); - SelectAlien (7, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (HE_IS0, &SelectAlienZOQ); + NPCPhrase_cb (HE_IS1, &SelectAlienPIK); + NPCPhrase_cb (HE_IS2, &SelectAlienZOQ); + NPCPhrase_cb (HE_IS3, &SelectAlienPIK); + NPCPhrase_cb (HE_IS4, &SelectAlienZOQ); + NPCPhrase_cb (HE_IS5, &SelectAlienPIK); + NPCPhrase_cb (HE_IS6, &SelectAlienZOQ); + NPCPhrase_cb (HE_IS7, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); DISABLE_PHRASE (which_fot); } else if (PLAYER_SAID (R, quiet_toadies)) { - NPCPhrase (TOLD_YOU0); - NPCPhrase (TOLD_YOU1); - NPCPhrase (TOLD_YOU2); - NPCPhrase (TOLD_YOU3); - NPCPhrase (TOLD_YOU4); - NPCPhrase (TOLD_YOU5); - NPCPhrase (TOLD_YOU6); - NPCPhrase (TOLD_YOU7); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien (6, PIK_ALIEN); - SelectAlien (7, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (TOLD_YOU0, &SelectAlienZOQ); + NPCPhrase_cb (TOLD_YOU1, &SelectAlienPIK); + NPCPhrase_cb (TOLD_YOU2, &SelectAlienZOQ); + NPCPhrase_cb (TOLD_YOU3, &SelectAlienPIK); + NPCPhrase_cb (TOLD_YOU4, &SelectAlienZOQ); + NPCPhrase_cb (TOLD_YOU5, &SelectAlienPIK); + NPCPhrase_cb (TOLD_YOU6, &SelectAlienZOQ); + NPCPhrase_cb (TOLD_YOU7, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); DISABLE_PHRASE (quiet_toadies); } @@ -493,117 +409,79 @@ ZoqFotInfo (RESPONSE_REF R) if (PLAYER_SAID (R, want_specific_info)) { - NPCPhrase (WHAT_SPECIFIC_INFO0); - NPCPhrase (WHAT_SPECIFIC_INFO1); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (WHAT_SPECIFIC_INFO0, &SelectAlienZOQ); + NPCPhrase_cb (WHAT_SPECIFIC_INFO1, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); } else if (PLAYER_SAID (R, what_about_others)) { - NPCPhrase (ABOUT_OTHERS0); - NPCPhrase (ABOUT_OTHERS1); - NPCPhrase (ABOUT_OTHERS2); - NPCPhrase (ABOUT_OTHERS3); - NPCPhrase (ABOUT_OTHERS4); - NPCPhrase (ABOUT_OTHERS5); - NPCPhrase (ABOUT_OTHERS6); - NPCPhrase (ABOUT_OTHERS7); - NPCPhrase (ABOUT_OTHERS8); - NPCPhrase (ABOUT_OTHERS9); - NPCPhrase (ABOUT_OTHERS10); - NPCPhrase (ABOUT_OTHERS11); - NPCPhrase (ABOUT_OTHERS12); - NPCPhrase (ABOUT_OTHERS13); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien (6, PIK_ALIEN); - SelectAlien (7, ZOQ_ALIEN); - SelectAlien (8, PIK_ALIEN); - SelectAlien (9, ZOQ_ALIEN); - SelectAlien (10, PIK_ALIEN); - SelectAlien (11, ZOQ_ALIEN); - SelectAlien (12, PIK_ALIEN); - SelectAlien (13, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (ABOUT_OTHERS0, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_OTHERS1, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_OTHERS2, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_OTHERS3, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_OTHERS4, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_OTHERS5, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_OTHERS6, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_OTHERS7, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_OTHERS8, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_OTHERS9, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_OTHERS10, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_OTHERS11, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_OTHERS12, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_OTHERS13, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); DISABLE_PHRASE (what_about_others); } else if (PLAYER_SAID (R, what_about_zebranky)) { - NPCPhrase (ABOUT_ZEBRANKY0); - NPCPhrase (ABOUT_ZEBRANKY1); - NPCPhrase (ABOUT_ZEBRANKY2); - NPCPhrase (ABOUT_ZEBRANKY3); - NPCPhrase (ABOUT_ZEBRANKY4); - NPCPhrase (ABOUT_ZEBRANKY5); - NPCPhrase (ABOUT_ZEBRANKY6); - NPCPhrase (ABOUT_ZEBRANKY7); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien (6, PIK_ALIEN); - SelectAlien (7, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (ABOUT_ZEBRANKY0, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_ZEBRANKY1, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_ZEBRANKY2, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_ZEBRANKY3, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_ZEBRANKY4, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_ZEBRANKY5, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_ZEBRANKY6, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_ZEBRANKY7, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); DISABLE_PHRASE (what_about_zebranky); } else if (PLAYER_SAID (R, what_about_stinger)) { - NPCPhrase (ABOUT_STINGER0); - NPCPhrase (ABOUT_STINGER1); - NPCPhrase (ABOUT_STINGER2); - NPCPhrase (ABOUT_STINGER3); - NPCPhrase (ABOUT_STINGER4); - NPCPhrase (ABOUT_STINGER5); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (ABOUT_STINGER0, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_STINGER1, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_STINGER2, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_STINGER3, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_STINGER4, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_STINGER5, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); DISABLE_PHRASE (what_about_stinger); } else if (PLAYER_SAID (R, what_about_guy_in_back)) { - NPCPhrase (ABOUT_GUY0); - NPCPhrase (ABOUT_GUY1); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (ABOUT_GUY0, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_GUY1, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); DISABLE_PHRASE (what_about_guy_in_back); } else if (PLAYER_SAID (R, what_about_past)) { - NPCPhrase (ABOUT_PAST0); - NPCPhrase (ABOUT_PAST1); - NPCPhrase (ABOUT_PAST2); - NPCPhrase (ABOUT_PAST3); - NPCPhrase (ABOUT_PAST4); - NPCPhrase (ABOUT_PAST5); - NPCPhrase (ABOUT_PAST6); - NPCPhrase (ABOUT_PAST7); - NPCPhrase (ABOUT_PAST8); - NPCPhrase (ABOUT_PAST9); - NPCPhrase (ABOUT_PAST10); - NPCPhrase (ABOUT_PAST11); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien (6, PIK_ALIEN); - SelectAlien (7, ZOQ_ALIEN); - SelectAlien (8, PIK_ALIEN); - SelectAlien (9, ZOQ_ALIEN); - SelectAlien (10, PIK_ALIEN); - SelectAlien (11, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (ABOUT_PAST0, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_PAST1, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_PAST2, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_PAST3, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_PAST4, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_PAST5, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_PAST6, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_PAST7, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_PAST8, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_PAST9, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_PAST10, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_PAST11, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); DISABLE_PHRASE (what_about_past); } @@ -653,72 +531,46 @@ ZoqFotHome (RESPONSE_REF R) switch (NumVisits++) { case 0: - NPCPhrase (GENERAL_INFO_10); - NPCPhrase (GENERAL_INFO_11); - NPCPhrase (GENERAL_INFO_12); - NPCPhrase (GENERAL_INFO_13); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (GENERAL_INFO_10, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_11, &SelectAlienPIK); + NPCPhrase_cb (GENERAL_INFO_12, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_13, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); break; case 1: - NPCPhrase (GENERAL_INFO_20); - NPCPhrase (GENERAL_INFO_21); - NPCPhrase (GENERAL_INFO_22); - NPCPhrase (GENERAL_INFO_23); - NPCPhrase (GENERAL_INFO_24); - NPCPhrase (GENERAL_INFO_25); - NPCPhrase (GENERAL_INFO_26); - NPCPhrase (GENERAL_INFO_27); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien (6, PIK_ALIEN); - SelectAlien (7, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (GENERAL_INFO_20, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_21, &SelectAlienPIK); + NPCPhrase_cb (GENERAL_INFO_22, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_23, &SelectAlienPIK); + NPCPhrase_cb (GENERAL_INFO_24, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_25, &SelectAlienPIK); + NPCPhrase_cb (GENERAL_INFO_26, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_27, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); break; case 2: - NPCPhrase (GENERAL_INFO_30); - NPCPhrase (GENERAL_INFO_31); - NPCPhrase (GENERAL_INFO_32); - NPCPhrase (GENERAL_INFO_33); - NPCPhrase (GENERAL_INFO_34); - NPCPhrase (GENERAL_INFO_35); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (GENERAL_INFO_30, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_31, &SelectAlienPIK); + NPCPhrase_cb (GENERAL_INFO_32, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_33, &SelectAlienPIK); + NPCPhrase_cb (GENERAL_INFO_34, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_35, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); break; case 3: - NPCPhrase (GENERAL_INFO_40); - NPCPhrase (GENERAL_INFO_41); - NPCPhrase (GENERAL_INFO_42); - NPCPhrase (GENERAL_INFO_43); - NPCPhrase (GENERAL_INFO_44); - NPCPhrase (GENERAL_INFO_45); - NPCPhrase (GENERAL_INFO_46); - NPCPhrase (GENERAL_INFO_47); - NPCPhrase (GENERAL_INFO_48); - NPCPhrase (GENERAL_INFO_49); - NPCPhrase (GENERAL_INFO_410); - NPCPhrase (GENERAL_INFO_411); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien (6, PIK_ALIEN); - SelectAlien (7, ZOQ_ALIEN); - SelectAlien (8, PIK_ALIEN); - SelectAlien (9, ZOQ_ALIEN); - SelectAlien (10, PIK_ALIEN); - SelectAlien (11, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (GENERAL_INFO_40, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_41, &SelectAlienPIK); + NPCPhrase_cb (GENERAL_INFO_42, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_43, &SelectAlienPIK); + NPCPhrase_cb (GENERAL_INFO_44, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_45, &SelectAlienPIK); + NPCPhrase_cb (GENERAL_INFO_46, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_47, &SelectAlienPIK); + NPCPhrase_cb (GENERAL_INFO_48, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_49, &SelectAlienPIK); + NPCPhrase_cb (GENERAL_INFO_410, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_411, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); --NumVisits; break; } @@ -739,64 +591,40 @@ ZoqFotHome (RESPONSE_REF R) KnowMask = GET_GAME_STATE (ZOQFOT_KNOW_MASK); if (!(KnowMask & KOHR_AH_KILL) && GET_GAME_STATE (KOHR_AH_FRENZY)) { - NPCPhrase (KOHRAH_FRENZY0); - NPCPhrase (KOHRAH_FRENZY1); - NPCPhrase (KOHRAH_FRENZY2); - NPCPhrase (KOHRAH_FRENZY3); - NPCPhrase (KOHRAH_FRENZY4); - NPCPhrase (KOHRAH_FRENZY5); - NPCPhrase (KOHRAH_FRENZY6); - NPCPhrase (KOHRAH_FRENZY7); - NPCPhrase (KOHRAH_FRENZY8); - NPCPhrase (KOHRAH_FRENZY9); - NPCPhrase (KOHRAH_FRENZY10); - NPCPhrase (KOHRAH_FRENZY11); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien (6, PIK_ALIEN); - SelectAlien (7, ZOQ_ALIEN); - SelectAlien (8, PIK_ALIEN); - SelectAlien (9, ZOQ_ALIEN); - SelectAlien (10, PIK_ALIEN); - SelectAlien (11, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (KOHRAH_FRENZY0, &SelectAlienZOQ); + NPCPhrase_cb (KOHRAH_FRENZY1, &SelectAlienPIK); + NPCPhrase_cb (KOHRAH_FRENZY2, &SelectAlienZOQ); + NPCPhrase_cb (KOHRAH_FRENZY3, &SelectAlienPIK); + NPCPhrase_cb (KOHRAH_FRENZY4, &SelectAlienZOQ); + NPCPhrase_cb (KOHRAH_FRENZY5, &SelectAlienPIK); + NPCPhrase_cb (KOHRAH_FRENZY6, &SelectAlienZOQ); + NPCPhrase_cb (KOHRAH_FRENZY7, &SelectAlienPIK); + NPCPhrase_cb (KOHRAH_FRENZY8, &SelectAlienZOQ); + NPCPhrase_cb (KOHRAH_FRENZY9, &SelectAlienPIK); + NPCPhrase_cb (KOHRAH_FRENZY10, &SelectAlienZOQ); + NPCPhrase_cb (KOHRAH_FRENZY11, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); KnowMask = KNOW_ALL; } else if (!(KnowMask & UTWIG_BUY_TIME) && NumVisits > 0 && NumVisits < 5) { - NPCPhrase (UTWIG_DELAY0); - NPCPhrase (UTWIG_DELAY1); - NPCPhrase (UTWIG_DELAY2); - NPCPhrase (UTWIG_DELAY3); - NPCPhrase (UTWIG_DELAY4); - NPCPhrase (UTWIG_DELAY5); - NPCPhrase (UTWIG_DELAY6); - NPCPhrase (UTWIG_DELAY7); - NPCPhrase (UTWIG_DELAY8); - NPCPhrase (UTWIG_DELAY9); - NPCPhrase (UTWIG_DELAY10); - NPCPhrase (UTWIG_DELAY11); - NPCPhrase (UTWIG_DELAY12); - NPCPhrase (UTWIG_DELAY13); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien (6, PIK_ALIEN); - SelectAlien (7, ZOQ_ALIEN); - SelectAlien (8, PIK_ALIEN); - SelectAlien (9, ZOQ_ALIEN); - SelectAlien (10, PIK_ALIEN); - SelectAlien (11, ZOQ_ALIEN); - SelectAlien (12, PIK_ALIEN); - SelectAlien (13, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (UTWIG_DELAY0, &SelectAlienZOQ); + NPCPhrase_cb (UTWIG_DELAY1, &SelectAlienPIK); + NPCPhrase_cb (UTWIG_DELAY2, &SelectAlienZOQ); + NPCPhrase_cb (UTWIG_DELAY3, &SelectAlienPIK); + NPCPhrase_cb (UTWIG_DELAY4, &SelectAlienZOQ); + NPCPhrase_cb (UTWIG_DELAY5, &SelectAlienPIK); + NPCPhrase_cb (UTWIG_DELAY6, &SelectAlienZOQ); + NPCPhrase_cb (UTWIG_DELAY7, &SelectAlienPIK); + NPCPhrase_cb (UTWIG_DELAY8, &SelectAlienZOQ); + NPCPhrase_cb (UTWIG_DELAY9, &SelectAlienPIK); + NPCPhrase_cb (UTWIG_DELAY10, &SelectAlienZOQ); + NPCPhrase_cb (UTWIG_DELAY11, &SelectAlienPIK); + NPCPhrase_cb (UTWIG_DELAY12, &SelectAlienZOQ); + NPCPhrase_cb (UTWIG_DELAY13, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); KnowMask |= UTWIG_BUY_TIME; } @@ -812,52 +640,37 @@ ZoqFotHome (RESPONSE_REF R) i = 0; if (!(KnowMask & URQUAN_LOSE) && i <= 0) { - NPCPhrase (URQUAN_NEARLY_GONE0); - NPCPhrase (URQUAN_NEARLY_GONE1); - NPCPhrase (URQUAN_NEARLY_GONE2); - NPCPhrase (URQUAN_NEARLY_GONE3); - NPCPhrase (URQUAN_NEARLY_GONE4); - NPCPhrase (URQUAN_NEARLY_GONE5); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (URQUAN_NEARLY_GONE0, &SelectAlienZOQ); + NPCPhrase_cb (URQUAN_NEARLY_GONE1, &SelectAlienPIK); + NPCPhrase_cb (URQUAN_NEARLY_GONE2, &SelectAlienZOQ); + NPCPhrase_cb (URQUAN_NEARLY_GONE3, &SelectAlienPIK); + NPCPhrase_cb (URQUAN_NEARLY_GONE4, &SelectAlienZOQ); + NPCPhrase_cb (URQUAN_NEARLY_GONE5, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); KnowMask |= KOHR_AH_WIN | URQUAN_LOSE; } else if (!(KnowMask & KOHR_AH_WIN) && i == 1) { - NPCPhrase (KOHRAH_WINNING0); - NPCPhrase (KOHRAH_WINNING1); - NPCPhrase (KOHRAH_WINNING2); - NPCPhrase (KOHRAH_WINNING3); - NPCPhrase (KOHRAH_WINNING4); - NPCPhrase (KOHRAH_WINNING5); - NPCPhrase (KOHRAH_WINNING6); - NPCPhrase (KOHRAH_WINNING7); - NPCPhrase (KOHRAH_WINNING8); - NPCPhrase (KOHRAH_WINNING9); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien (6, PIK_ALIEN); - SelectAlien (7, ZOQ_ALIEN); - SelectAlien (8, PIK_ALIEN); - SelectAlien (9, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (KOHRAH_WINNING0, &SelectAlienZOQ); + NPCPhrase_cb (KOHRAH_WINNING1, &SelectAlienPIK); + NPCPhrase_cb (KOHRAH_WINNING2, &SelectAlienZOQ); + NPCPhrase_cb (KOHRAH_WINNING3, &SelectAlienPIK); + NPCPhrase_cb (KOHRAH_WINNING4, &SelectAlienZOQ); + NPCPhrase_cb (KOHRAH_WINNING5, &SelectAlienPIK); + NPCPhrase_cb (KOHRAH_WINNING6, &SelectAlienZOQ); + NPCPhrase_cb (KOHRAH_WINNING7, &SelectAlienPIK); + NPCPhrase_cb (KOHRAH_WINNING8, &SelectAlienZOQ); + NPCPhrase_cb (KOHRAH_WINNING9, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); KnowMask |= KOHR_AH_WIN; } else { - NPCPhrase (NO_WAR_NEWS0); - NPCPhrase (NO_WAR_NEWS1); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (NO_WAR_NEWS0, &SelectAlienZOQ); + NPCPhrase_cb (NO_WAR_NEWS1, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); } } SET_GAME_STATE (ZOQFOT_KNOW_MASK, KnowMask); @@ -866,34 +679,25 @@ ZoqFotHome (RESPONSE_REF R) } else if (PLAYER_SAID (R, i_want_alliance)) { - NPCPhrase (GOOD0); - NPCPhrase (GOOD1); - NPCPhrase (GOOD2); - NPCPhrase (GOOD3); - NPCPhrase (GOOD4); - NPCPhrase (GOOD5); - NPCPhrase (GOOD6); - NPCPhrase (GOOD7); - NPCPhrase (GOOD8); - NPCPhrase (GOOD9); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien (6, PIK_ALIEN); - SelectAlien (7, ZOQ_ALIEN); - SelectAlien (8, PIK_ALIEN); - SelectAlien (9, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (GOOD0, &SelectAlienZOQ); + NPCPhrase_cb (GOOD1, &SelectAlienPIK); + NPCPhrase_cb (GOOD2, &SelectAlienZOQ); + NPCPhrase_cb (GOOD3, &SelectAlienPIK); + NPCPhrase_cb (GOOD4, &SelectAlienZOQ); + NPCPhrase_cb (GOOD5, &SelectAlienPIK); + NPCPhrase_cb (GOOD6, &SelectAlienZOQ); + NPCPhrase_cb (GOOD7, &SelectAlienPIK); + NPCPhrase_cb (GOOD8, &SelectAlienZOQ); + NPCPhrase_cb (GOOD9, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); ActivateStarShip (ZOQFOTPIK_SHIP, 0); AddEvent (RELATIVE_EVENT, 3, 0, 0, ZOQFOT_DISTRESS_EVENT); } else if (PLAYER_SAID (R, enough_info)) { - NPCPhrase (OK_ENOUGH_INFO); - SelectAlien ((COUNT)~0, ZOQ_ALIEN); + NPCPhrase_cb (OK_ENOUGH_INFO, &SelectAlienZOQ); + AlienTalkSegue ((COUNT)~0); } if (PHRASE_ENABLED (whats_up_homeworld)) @@ -917,60 +721,35 @@ Intro (void) if (LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE) { #ifdef NOT_YET - NPCPhrase (OUT_TAKES0); - NPCPhrase (OUT_TAKES1); - NPCPhrase (OUT_TAKES2); - NPCPhrase (OUT_TAKES3); - NPCPhrase (OUT_TAKES4); - NPCPhrase (OUT_TAKES5); - NPCPhrase (OUT_TAKES6); - NPCPhrase (OUT_TAKES7); - NPCPhrase (OUT_TAKES8); - NPCPhrase (OUT_TAKES9); - NPCPhrase (OUT_TAKES10); - NPCPhrase (OUT_TAKES11); - NPCPhrase (OUT_TAKES12); - NPCPhrase (OUT_TAKES13); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien (6, PIK_ALIEN); - SelectAlien (7, ZOQ_ALIEN); - SelectAlien (8, PIK_ALIEN); - SelectAlien (9, ZOQ_ALIEN); - SelectAlien (10, PIK_ALIEN); - SelectAlien (11, ZOQ_ALIEN); - SelectAlien (12, PIK_ALIEN); - SelectAlien (13, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (OUT_TAKES0, &SelectAlienZOQ); + NPCPhrase_cb (OUT_TAKES1, &SelectAlienPIK); + NPCPhrase_cb (OUT_TAKES2, &SelectAlienZOQ); + NPCPhrase_cb (OUT_TAKES3, &SelectAlienPIK); + NPCPhrase_cb (OUT_TAKES4, &SelectAlienZOQ); + NPCPhrase_cb (OUT_TAKES5, &SelectAlienPIK); + NPCPhrase_cb (OUT_TAKES6, &SelectAlienZOQ); + NPCPhrase_cb (OUT_TAKES7, &SelectAlienPIK); + NPCPhrase_cb (OUT_TAKES8, &SelectAlienZOQ); + NPCPhrase_cb (OUT_TAKES9, &SelectAlienPIK); + NPCPhrase_cb (OUT_TAKES10, &SelectAlienZOQ); + NPCPhrase_cb (OUT_TAKES11, &SelectAlienPIK); + NPCPhrase_cb (OUT_TAKES12, &SelectAlienZOQ); + NPCPhrase_cb (OUT_TAKES13, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); #else /* YET */ - NPCPhrase (WE_ARE0); - NPCPhrase (WE_ARE1); - NPCPhrase (WE_ARE2); - NPCPhrase (WE_ARE3); - NPCPhrase (WE_ARE4); - NPCPhrase (WE_ARE5); - NPCPhrase (WE_ARE6); - NPCPhrase (WE_ARE7); - NPCPhrase (SCOUT_HELLO0); - NPCPhrase (SCOUT_HELLO1); - NPCPhrase (SCOUT_HELLO2); - NPCPhrase (SCOUT_HELLO3); - - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien (6, PIK_ALIEN); - SelectAlien (7, ZOQ_ALIEN); - SelectAlien (8, PIK_ALIEN); - SelectAlien (9, ZOQ_ALIEN); - SelectAlien (10, PIK_ALIEN); - SelectAlien (11, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (WE_ARE0, &SelectAlienZOQ); + NPCPhrase_cb (WE_ARE1, &SelectAlienPIK); + NPCPhrase_cb (WE_ARE2, &SelectAlienZOQ); + NPCPhrase_cb (WE_ARE3, &SelectAlienPIK); + NPCPhrase_cb (WE_ARE4, &SelectAlienZOQ); + NPCPhrase_cb (WE_ARE5, &SelectAlienPIK); + NPCPhrase_cb (WE_ARE6, &SelectAlienZOQ); + NPCPhrase_cb (WE_ARE7, &SelectAlienPIK); + NPCPhrase_cb (SCOUT_HELLO0, &SelectAlienZOQ); + NPCPhrase_cb (SCOUT_HELLO1, &SelectAlienPIK); + NPCPhrase_cb (SCOUT_HELLO2, &SelectAlienZOQ); + NPCPhrase_cb (SCOUT_HELLO3, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); #endif /* NOT_YET */ SET_GAME_STATE (BATTLE_SEGUE, 0); goto ExitIntro; @@ -982,36 +761,28 @@ Intro (void) switch (NumVisits++) { case 0: - NPCPhrase (HOSTILE_HELLO_10); - NPCPhrase (HOSTILE_HELLO_11); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (HOSTILE_HELLO_10, &SelectAlienZOQ); + NPCPhrase_cb (HOSTILE_HELLO_11, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); break; case 1: - NPCPhrase (HOSTILE_HELLO_20); - NPCPhrase (HOSTILE_HELLO_21); - NPCPhrase (HOSTILE_HELLO_22); - NPCPhrase (HOSTILE_HELLO_23); - NPCPhrase (HOSTILE_HELLO_24); - NPCPhrase (HOSTILE_HELLO_25); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (HOSTILE_HELLO_20, &SelectAlienZOQ); + NPCPhrase_cb (HOSTILE_HELLO_21, &SelectAlienPIK); + NPCPhrase_cb (HOSTILE_HELLO_22, &SelectAlienZOQ); + NPCPhrase_cb (HOSTILE_HELLO_23, &SelectAlienPIK); + NPCPhrase_cb (HOSTILE_HELLO_24, &SelectAlienZOQ); + NPCPhrase_cb (HOSTILE_HELLO_25, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); break; case 2: - NPCPhrase (HOSTILE_HELLO_30); - NPCPhrase (HOSTILE_HELLO_31); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (HOSTILE_HELLO_30, &SelectAlienZOQ); + NPCPhrase_cb (HOSTILE_HELLO_31, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); break; case 3: - NPCPhrase (HOSTILE_HELLO_40); - NPCPhrase (HOSTILE_HELLO_41); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (HOSTILE_HELLO_40, &SelectAlienZOQ); + NPCPhrase_cb (HOSTILE_HELLO_41, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); --NumVisits; break; } @@ -1023,42 +794,31 @@ Intro (void) { SET_GAME_STATE (MET_ZOQFOT, 1); - NPCPhrase (WE_ARE0); - NPCPhrase (WE_ARE1); - NPCPhrase (WE_ARE2); - NPCPhrase (WE_ARE3); - NPCPhrase (WE_ARE4); - NPCPhrase (WE_ARE5); - NPCPhrase (WE_ARE6); - NPCPhrase (WE_ARE7); + NPCPhrase_cb (WE_ARE0, &SelectAlienZOQ); + NPCPhrase_cb (WE_ARE1, &SelectAlienPIK); + NPCPhrase_cb (WE_ARE2, &SelectAlienZOQ); + NPCPhrase_cb (WE_ARE3, &SelectAlienPIK); + NPCPhrase_cb (WE_ARE4, &SelectAlienZOQ); + NPCPhrase_cb (WE_ARE5, &SelectAlienPIK); + NPCPhrase_cb (WE_ARE6, &SelectAlienZOQ); + NPCPhrase_cb (WE_ARE7, &SelectAlienPIK); if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7)) { - NPCPhrase (INIT_HOME_HELLO0); - NPCPhrase (INIT_HOME_HELLO1); - NPCPhrase (INIT_HOME_HELLO2); - NPCPhrase (INIT_HOME_HELLO3); + NPCPhrase_cb (INIT_HOME_HELLO0, &SelectAlienZOQ); + NPCPhrase_cb (INIT_HOME_HELLO1, &SelectAlienPIK); + NPCPhrase_cb (INIT_HOME_HELLO2, &SelectAlienZOQ); + NPCPhrase_cb (INIT_HOME_HELLO3, &SelectAlienPIK); } else { - NPCPhrase (SCOUT_HELLO0); - NPCPhrase (SCOUT_HELLO1); - NPCPhrase (SCOUT_HELLO2); - NPCPhrase (SCOUT_HELLO3); + NPCPhrase_cb (SCOUT_HELLO0, &SelectAlienZOQ); + NPCPhrase_cb (SCOUT_HELLO1, &SelectAlienPIK); + NPCPhrase_cb (SCOUT_HELLO2, &SelectAlienZOQ); + NPCPhrase_cb (SCOUT_HELLO3, &SelectAlienPIK); } - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien (6, PIK_ALIEN); - SelectAlien (7, ZOQ_ALIEN); - SelectAlien (8, PIK_ALIEN); - SelectAlien (9, ZOQ_ALIEN); - SelectAlien (10, PIK_ALIEN); - SelectAlien (11, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + AlienTalkSegue ((COUNT)~0); AquaintZoqFot (0); } @@ -1067,30 +827,19 @@ Intro (void) if (GET_GAME_STATE (ZOQFOT_DISTRESS)) { #define MAX_ZFP_SHIPS 4 - NPCPhrase (THANKS_FOR_RESCUE0); - NPCPhrase (THANKS_FOR_RESCUE1); - NPCPhrase (THANKS_FOR_RESCUE2); - NPCPhrase (THANKS_FOR_RESCUE3); - NPCPhrase (THANKS_FOR_RESCUE4); - NPCPhrase (THANKS_FOR_RESCUE5); - NPCPhrase (THANKS_FOR_RESCUE6); - NPCPhrase (THANKS_FOR_RESCUE7); - NPCPhrase (THANKS_FOR_RESCUE8); - NPCPhrase (THANKS_FOR_RESCUE9); - NPCPhrase (THANKS_FOR_RESCUE10); - NPCPhrase (THANKS_FOR_RESCUE11); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien (6, PIK_ALIEN); - SelectAlien (7, ZOQ_ALIEN); - SelectAlien (8, PIK_ALIEN); - SelectAlien (9, ZOQ_ALIEN); - SelectAlien (10, PIK_ALIEN); - SelectAlien (11, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (THANKS_FOR_RESCUE0, &SelectAlienZOQ); + NPCPhrase_cb (THANKS_FOR_RESCUE1, &SelectAlienPIK); + NPCPhrase_cb (THANKS_FOR_RESCUE2, &SelectAlienZOQ); + NPCPhrase_cb (THANKS_FOR_RESCUE3, &SelectAlienPIK); + NPCPhrase_cb (THANKS_FOR_RESCUE4, &SelectAlienZOQ); + NPCPhrase_cb (THANKS_FOR_RESCUE5, &SelectAlienPIK); + NPCPhrase_cb (THANKS_FOR_RESCUE6, &SelectAlienZOQ); + NPCPhrase_cb (THANKS_FOR_RESCUE7, &SelectAlienPIK); + NPCPhrase_cb (THANKS_FOR_RESCUE8, &SelectAlienZOQ); + NPCPhrase_cb (THANKS_FOR_RESCUE9, &SelectAlienPIK); + NPCPhrase_cb (THANKS_FOR_RESCUE10, &SelectAlienZOQ); + NPCPhrase_cb (THANKS_FOR_RESCUE11, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); SET_GAME_STATE (ZOQFOT_DISTRESS, 0); ActivateStarShip (ZOQFOTPIK_SHIP, MAX_ZFP_SHIPS); @@ -1103,67 +852,52 @@ Intro (void) switch (NumVisits++) { case 0: - NPCPhrase (NEUTRAL_HOME_HELLO_10); - NPCPhrase (NEUTRAL_HOME_HELLO_11); - NPCPhrase (NEUTRAL_HOME_HELLO_12); - NPCPhrase (NEUTRAL_HOME_HELLO_13); + NPCPhrase_cb (NEUTRAL_HOME_HELLO_10, &SelectAlienZOQ); + NPCPhrase_cb (NEUTRAL_HOME_HELLO_11, &SelectAlienPIK); + NPCPhrase_cb (NEUTRAL_HOME_HELLO_12, &SelectAlienZOQ); + NPCPhrase_cb (NEUTRAL_HOME_HELLO_13, &SelectAlienPIK); break; case 1: - NPCPhrase (NEUTRAL_HOME_HELLO_20); - NPCPhrase (NEUTRAL_HOME_HELLO_21); - NPCPhrase (NEUTRAL_HOME_HELLO_22); - NPCPhrase (NEUTRAL_HOME_HELLO_23); + NPCPhrase_cb (NEUTRAL_HOME_HELLO_20, &SelectAlienZOQ); + NPCPhrase_cb (NEUTRAL_HOME_HELLO_21, &SelectAlienPIK); + NPCPhrase_cb (NEUTRAL_HOME_HELLO_22, &SelectAlienZOQ); + NPCPhrase_cb (NEUTRAL_HOME_HELLO_23, &SelectAlienPIK); --NumVisits; break; } - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + AlienTalkSegue ((COUNT)~0); } else { switch (NumVisits++) { case 0: - NPCPhrase (ALLIED_HOME_HELLO_10); - NPCPhrase (ALLIED_HOME_HELLO_11); - NPCPhrase (ALLIED_HOME_HELLO_12); - NPCPhrase (ALLIED_HOME_HELLO_13); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (ALLIED_HOME_HELLO_10, &SelectAlienZOQ); + NPCPhrase_cb (ALLIED_HOME_HELLO_11, &SelectAlienPIK); + NPCPhrase_cb (ALLIED_HOME_HELLO_12, &SelectAlienZOQ); + NPCPhrase_cb (ALLIED_HOME_HELLO_13, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); break; case 1: - NPCPhrase (ALLIED_HOME_HELLO_20); - NPCPhrase (ALLIED_HOME_HELLO_21); - NPCPhrase (ALLIED_HOME_HELLO_22); - NPCPhrase (ALLIED_HOME_HELLO_23); - NPCPhrase (ALLIED_HOME_HELLO_24); - NPCPhrase (ALLIED_HOME_HELLO_25); - NPCPhrase (ALLIED_HOME_HELLO_26); - NPCPhrase (ALLIED_HOME_HELLO_27); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien (2, PIK_ALIEN); - SelectAlien (3, ZOQ_ALIEN); - SelectAlien (4, PIK_ALIEN); - SelectAlien (5, ZOQ_ALIEN); - SelectAlien (6, PIK_ALIEN); - SelectAlien (7, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (ALLIED_HOME_HELLO_20, &SelectAlienZOQ); + NPCPhrase_cb (ALLIED_HOME_HELLO_21, &SelectAlienPIK); + NPCPhrase_cb (ALLIED_HOME_HELLO_22, &SelectAlienZOQ); + NPCPhrase_cb (ALLIED_HOME_HELLO_23, &SelectAlienPIK); + NPCPhrase_cb (ALLIED_HOME_HELLO_24, &SelectAlienZOQ); + NPCPhrase_cb (ALLIED_HOME_HELLO_25, &SelectAlienPIK); + NPCPhrase_cb (ALLIED_HOME_HELLO_26, &SelectAlienZOQ); + NPCPhrase_cb (ALLIED_HOME_HELLO_27, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); break; case 2: - NPCPhrase (ALLIED_HOME_HELLO_30); - NPCPhrase (ALLIED_HOME_HELLO_31); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (ALLIED_HOME_HELLO_30, &SelectAlienZOQ); + NPCPhrase_cb (ALLIED_HOME_HELLO_31, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); break; case 3: - NPCPhrase (ALLIED_HOME_HELLO_40); - NPCPhrase (ALLIED_HOME_HELLO_41); - SelectAlien (1, ZOQ_ALIEN); - SelectAlien ((COUNT)~0, PIK_ALIEN); + NPCPhrase_cb (ALLIED_HOME_HELLO_40, &SelectAlienZOQ); + NPCPhrase_cb (ALLIED_HOME_HELLO_41, &SelectAlienPIK); + AlienTalkSegue ((COUNT)~0); --NumVisits; break; } diff --git a/sc2/src/sc2code/commglue.c b/sc2/src/sc2code/commglue.c index 3864e7aea..26dd67f94 100644 --- a/sc2/src/sc2code/commglue.c +++ b/sc2/src/sc2code/commglue.c @@ -25,7 +25,7 @@ int NPCNumberPhrase (int number, UNICODE **ptrack); void -NPCPhrase (int index) +NPCPhrase_cb (int index, void (*cb) ()) { UNICODE *pStr, numbuf[100]; void *pClip, *pTimeStamp; @@ -60,6 +60,10 @@ NPCPhrase (int index) pTimeStamp = 0; break; } + case 0: + { + return; + } default: if (index < 0) { @@ -104,7 +108,7 @@ NPCPhrase (int index) break; } - SpliceTrack (pClip, pStr, pTimeStamp); + SpliceTrack (pClip, pStr, pTimeStamp, cb); } int diff --git a/sc2/src/sc2code/commglue.h b/sc2/src/sc2code/commglue.h index 72ba1a726..eea845c58 100644 --- a/sc2/src/sc2code/commglue.h +++ b/sc2/src/sc2code/commglue.h @@ -55,7 +55,8 @@ extern void DoResponsePhrase (RESPONSE_REF R, RESPONSE_FUNC response_func, UNICODE *ContstructStr); extern void DoNPCPhrase (UNICODE *pStr); -extern void NPCPhrase (int index); +extern void NPCPhrase_cb (int index, void (*cb) ()); +#define NPCPhrase(index) NPCPhrase_cb ((index), NULL) extern void GetAllianceName (UNICODE *buf, RESPONSE_REF name_1); diff --git a/sc2/src/sc2code/libs/sound/sound.h b/sc2/src/sc2code/libs/sound/sound.h index 5c69c3b71..9f438d01f 100644 --- a/sc2/src/sc2code/libs/sound/sound.h +++ b/sc2/src/sc2code/libs/sound/sound.h @@ -39,6 +39,7 @@ typedef struct TFBSound_Object buf_name; int type; void *value; + void (*callback) (); } TFB_SoundTag; enum diff --git a/sc2/src/sc2code/libs/sound/stream.c b/sc2/src/sc2code/libs/sound/stream.c index 3d63c4ad1..5b80b7100 100644 --- a/sc2/src/sc2code/libs/sound/stream.c +++ b/sc2/src/sc2code/libs/sound/stream.c @@ -17,8 +17,6 @@ #include #include "sound.h" -bool speech_advancetrack = FALSE; - void PlayStream (TFB_SoundSample *sample, uint32 source, bool looping, bool scope, bool rewind) { @@ -184,7 +182,6 @@ StreamDecoderTaskFunc (void *data) { TFBSound_IntVal processed, queued; TFBSound_IntVal state; - bool do_speech_advancetrack = false; LockMutex (soundSource[i].stream_mutex); @@ -213,8 +210,6 @@ StreamDecoderTaskFunc (void *data) { soundSource[i].sample->decoder = NULL; soundSource[i].sample->read_chain_ptr = NULL; - if (speech_advancetrack) - do_speech_advancetrack = true; } } else @@ -404,16 +399,6 @@ StreamDecoderTaskFunc (void *data) } UnlockMutex (soundSource[i].stream_mutex); - - if (i == SPEECH_SOURCE) - { - if (do_speech_advancetrack) - { - fprintf (stderr, "StreamDecoderTaskFunc(): calling advance_track\n"); - do_speech_advancetrack = false; - advance_track (0); - } - } } } diff --git a/sc2/src/sc2code/libs/sound/trackplayer.c b/sc2/src/sc2code/libs/sound/trackplayer.c index 0339eb7ae..3248fb68a 100644 --- a/sc2/src/sc2code/libs/sound/trackplayer.c +++ b/sc2/src/sc2code/libs/sound/trackplayer.c @@ -29,18 +29,21 @@ static int track_pos_changed = 0; // set whenever ff, frev is enabled #define MAX_CLIPS 50 - +#define is_sample_playing(samp) (((samp)->read_chain_ptr && (samp)->play_chain_ptr) ||\ + (!(samp)->read_chain_ptr && (samp)->decoder)) static TFB_SoundSample *sound_sample = NULL; static TFB_SoundChain *first_chain = NULL; //first decoder in linked list static TFB_SoundChain *last_chain = NULL; //last decoder in linked list static UNICODE *TrackTextArray[MAX_CLIPS]; //storage for subtitlle text static Mutex track_mutex; //protects tcur and tct +//JumpTrack currently aborts the current track. However, it doesn't clear the +//data-structures as StopTrack does. this allows for rewind even after the +//track has finished playing +//Question: Should 'abort' call StopTrack? void JumpTrack (int abort) { - speech_advancetrack = FALSE; - if (sound_sample) { LockMutex (soundSource[SPEECH_SOURCE].stream_mutex); @@ -64,51 +67,50 @@ JumpTrack (int abort) } } +//advance to the next track and start playing +// we no longer support advancing tracks this way. Instead this should just start playing +// a stream. void -advance_track (int channel_finished) +PlayTrack (void) { - if (channel_finished <= 0) + if (sound_sample && (sound_sample->read_chain_ptr || sound_sample->decoder)) { - if (sound_sample->read_chain_ptr || sound_sample->decoder) - { - LockMutex (soundSource[SPEECH_SOURCE].stream_mutex); - PlayStream (sound_sample, - SPEECH_SOURCE, false, - speechVolumeScale != 0.0f, !track_pos_changed); - track_pos_changed = 0; - UnlockMutex (soundSource[SPEECH_SOURCE].stream_mutex); - } - else if (channel_finished == 0) - { - no_voice = 1; - } + LockMutex (soundSource[SPEECH_SOURCE].stream_mutex); + PlayStream (sound_sample, + SPEECH_SOURCE, false, + speechVolumeScale != 0.0f, !track_pos_changed); + track_pos_changed = 0; + UnlockMutex (soundSource[SPEECH_SOURCE].stream_mutex); + } + else + { + no_voice = 1; } } +// ResumeTrack should resume a paused track, or start a stopped track, and do nothing +// for a playing track void ResumeTrack () { - if (sound_sample && sound_sample->read_chain_ptr) + if (sound_sample && (sound_sample->read_chain_ptr || sound_sample->decoder)) { + // Only try to start the track if there is something to play TFBSound_IntVal state; + BOOLEAN playing; LockMutex (soundSource[SPEECH_SOURCE].stream_mutex); TFBSound_GetSourcei (soundSource[SPEECH_SOURCE].handle, TFBSOUND_SOURCE_STATE, &state); - - if (!track_pos_changed && !soundSource[SPEECH_SOURCE].stream_should_be_playing && - state == TFBSOUND_PAUSED) + playing = PlayingStream (SPEECH_SOURCE); + if (!track_pos_changed && !playing && state == TFBSOUND_PAUSED) { ResumeStream (SPEECH_SOURCE); UnlockMutex (soundSource[SPEECH_SOURCE].stream_mutex); } - else if (!no_voice) + else if (!no_voice && ! playing) { - if (tcur == 0) - { - speech_advancetrack = TRUE; - } UnlockMutex (soundSource[SPEECH_SOURCE].stream_mutex); - advance_track (-1); + PlayTrack (); } else { @@ -120,7 +122,9 @@ ResumeTrack () COUNT PlayingTrack () { - if (sound_sample->decoder) + // this is not a great way to detect whether the track is playing, + // but as it should work during fast-forward/rewind, 'PlayingStream' can't be used + if (is_sample_playing (sound_sample)) { int last_track, last_page; LockMutex (track_mutex); @@ -150,7 +154,6 @@ void StopTrack () { int i; - speech_advancetrack = FALSE; LockMutex (soundSource[SPEECH_SOURCE].stream_mutex); StopStream (SPEECH_SOURCE); UnlockMutex (soundSource[SPEECH_SOURCE].stream_mutex); @@ -186,6 +189,8 @@ DoTrackTag (TFB_SoundTag *tag) if (tag->type == MIX_BUFFER_TAG_TEXT) { LockMutex (track_mutex); + if (tag->callback) + tag->callback (); tcur = ((int)tag->value) >> 8; cur_page = ((int)tag->value) & 0xFF; UnlockMutex (track_mutex); @@ -308,7 +313,7 @@ SpliceMultiTrack (UNICODE *TrackNames[], UNICODE *TrackText) } void -SpliceTrack (UNICODE *TrackName, UNICODE *TrackText, UNICODE *TimeStamp) +SpliceTrack (UNICODE *TrackName, UNICODE *TrackText, UNICODE *TimeStamp, void (*cb) ()) { unsigned long startTime; if (TrackText) @@ -372,6 +377,7 @@ SpliceTrack (UNICODE *TrackName, UNICODE *TrackText, UNICODE *TimeStamp) sound_sample->decoder = decoder; first_chain = last_chain = sound_sample->read_chain_ptr; sound_sample->length = 0; + sound_sample->play_chain_ptr = 0; } else { @@ -395,6 +401,7 @@ SpliceTrack (UNICODE *TrackName, UNICODE *TrackText, UNICODE *TimeStamp) { last_chain->tag.type = MIX_BUFFER_TAG_TEXT; last_chain->tag.value = (void *)(((tct - 1) << 8) | page_counter); + last_chain->tag.callback = cb; } no_page_break = 0; } @@ -428,6 +435,8 @@ void recompute_track_pos (TFB_SoundSample *sample, TFB_SoundChain *first_chain, sint32 offset) { TFB_SoundChain *cur_chain = first_chain; + if (! sample) + return; while (cur_chain->next && (sint32)(cur_chain->next->start_time * (float)ONE_SECOND) < offset) cur_chain = cur_chain->next; diff --git a/sc2/src/sc2code/libs/sound/trackplayer.h b/sc2/src/sc2code/libs/sound/trackplayer.h index 5e0e187e3..8f5ea9851 100644 --- a/sc2/src/sc2code/libs/sound/trackplayer.h +++ b/sc2/src/sc2code/libs/sound/trackplayer.h @@ -30,7 +30,7 @@ void FastForward_Page(); void FastReverse_Smooth(); void FastReverse_Page(); void StopTrack(); -void SpliceTrack(UNICODE *filespec, UNICODE *textspec, UNICODE *TimeStamp); +void SpliceTrack(UNICODE *filespec, UNICODE *textspec, UNICODE *TimeStamp, void (*cb) ()); void SpliceMultiTrack (UNICODE *TrackNames[], UNICODE *TrackText); int GetSoundData (void *data); int GetSoundInfo (int max_len);