diff options
Diffstat (limited to 'src/uqm/comm/urquan')
-rw-r--r-- | src/uqm/comm/urquan/Makeinfo | 2 | ||||
-rw-r--r-- | src/uqm/comm/urquan/resinst.h | 9 | ||||
-rw-r--r-- | src/uqm/comm/urquan/strings.h | 101 | ||||
-rw-r--r-- | src/uqm/comm/urquan/urquanc.c | 555 |
4 files changed, 667 insertions, 0 deletions
diff --git a/src/uqm/comm/urquan/Makeinfo b/src/uqm/comm/urquan/Makeinfo new file mode 100644 index 0000000..7b756fa --- /dev/null +++ b/src/uqm/comm/urquan/Makeinfo @@ -0,0 +1,2 @@ +uqm_CFILES="urquanc.c" +uqm_HFILES="resinst.h strings.h" diff --git a/src/uqm/comm/urquan/resinst.h b/src/uqm/comm/urquan/resinst.h new file mode 100644 index 0000000..5b69860 --- /dev/null +++ b/src/uqm/comm/urquan/resinst.h @@ -0,0 +1,9 @@ +/* This file was auto-generated by the gen_resfiles utility and + should not be edited directly. Modify the master resource list + instead and regenerate. */ + +#define URQUAN_COLOR_MAP "comm.urquan.colortable" +#define URQUAN_CONVERSATION_PHRASES "comm.urquan.dialogue" +#define URQUAN_FONT "comm.urquan.font" +#define URQUAN_MUSIC "comm.urquan.music" +#define URQUAN_PMAP_ANIM "comm.urquan.graphics" diff --git a/src/uqm/comm/urquan/strings.h b/src/uqm/comm/urquan/strings.h new file mode 100644 index 0000000..18ca86c --- /dev/null +++ b/src/uqm/comm/urquan/strings.h @@ -0,0 +1,101 @@ +//Copyright Paul Reiche, Fred Ford. 1992-2002 +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +#ifndef URQUAN_STRINGS_H +#define URQUAN_STRINGS_H + +enum +{ + NULL_PHRASE, + HELLO_SAMATRA, + SENSE_EVIL, + INIT_URQUAN_WAKE_UP, + where_am_i, + YOU_ARE_HERE, + why_does_my_head_hurt, + HURTS_BECAUSE, + what_about_2_weeks, + ABOUT_2_WEEKS, + compulsion, + WHAT_COMPULSION, + wascally_little_guy, + WHAT_IT_LOOK_LIKE, + terran_amphibian, + talking_pet_on_steroids, + BAD_NEWS, + turd_and_toad, + WHAT_IS_TURD_AND_TOAD, + alien_mind_control, + WHAT_FELT_LIKE, + possessed_by_devil, + STUPID_DEVIL, + falling_asleep, + someone_else_controlled, + SOUNDS_FAMILIAR, + before_coffee, + EXPLAIN, + why_explain, + MUST_EXPLAIN, + bye_init_hypno, + GOODBYE_AND_DIE_INIT_HYPNO, + SUBSEQUENT_URQUAN_WAKE_UP, + uh_oh, + NO_UH_OH, + stop_meeting, + NO_STOP_MEETING, + bye_sub_hypno, + GOODBYE_AND_DIE_SUB_HYPNO, + CAUGHT_YA, + INIT_FLEE_HUMAN, + SUBSEQUENT_FLEE_HUMAN, + why_flee, + FLEE_BECAUSE, + what_happens_now, + HAPPENS_NOW, + what_about_you, + ABOUT_US, + bye_wars_over, + GOODBYE_WARS_OVER, + SEND_MESSAGE, + INIT_HELLO, + SUBSEQUENT_HELLO_1, + SUBSEQUENT_HELLO_2, + SUBSEQUENT_HELLO_3, + SUBSEQUENT_HELLO_4, + you_must_surrender, + NOPE, + i_surrender, + DISOBEDIENCE_PUNISHED, + i_wont_surrender, + BAD_CHOICE, + i_will_surrender, + GOOD_CHOICE, + key_phrase, + URQUAN_STORY, + like_to_leave, + INDEPENDENCE_IS_BAD, + whats_up_1, + GENERAL_INFO_1, + whats_up_2, + GENERAL_INFO_2, + whats_up_3, + GENERAL_INFO_3, + whats_up_4, + GENERAL_INFO_4, + OUT_TAKES, +}; + +#endif /* _STRINGS_H */ diff --git a/src/uqm/comm/urquan/urquanc.c b/src/uqm/comm/urquan/urquanc.c new file mode 100644 index 0000000..efdf710 --- /dev/null +++ b/src/uqm/comm/urquan/urquanc.c @@ -0,0 +1,555 @@ +//Copyright Paul Reiche, Fred Ford. 1992-2002 + +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "../commall.h" +#include "resinst.h" +#include "strings.h" + +static LOCDATA urquan_desc = +{ + NULL, /* init_encounter_func */ + NULL, /* post_encounter_func */ + NULL, /* uninit_encounter_func */ + URQUAN_PMAP_ANIM, /* AlienFrame */ + URQUAN_FONT, /* AlienFont */ + WHITE_COLOR_INIT, /* AlienTextFColor */ + BLACK_COLOR_INIT, /* AlienTextBColor */ + {0, 0}, /* AlienTextBaseline */ + 0, /* SIS_TEXT_WIDTH - 16, */ /* AlienTextWidth */ + ALIGN_CENTER, /* AlienTextAlign */ + VALIGN_TOP, /* AlienTextValign */ + URQUAN_COLOR_MAP, /* AlienColorMap */ + URQUAN_MUSIC, /* AlienSong */ + NULL_RESOURCE, /* AlienAltSong */ + 0, /* AlienSongFlags */ + URQUAN_CONVERSATION_PHRASES, /* PlayerPhrases */ + 7, /* NumAnimations */ + { /* AlienAmbientArray (ambient animations) */ + { + 7, /* StartIndex */ + 6, /* NumFrames */ + CIRCULAR_ANIM, /* AnimFlags */ + ONE_SECOND / 10, 0, /* FrameRate */ + ONE_SECOND / 10, 0, /* RestartRate */ + 0, /* BlockMask */ + }, + { + 13, /* StartIndex */ + 3, /* NumFrames */ + YOYO_ANIM, /* AnimFlags */ + ONE_SECOND / 20, 0, /* FrameRate */ + ONE_SECOND, ONE_SECOND * 3, /* RestartRate */ + 0, /* BlockMask */ + }, + { + 16, /* StartIndex */ + 3, /* NumFrames */ + YOYO_ANIM, /* AnimFlags */ + ONE_SECOND / 20, 0, /* FrameRate */ + ONE_SECOND, ONE_SECOND * 3, /* RestartRate */ + 0, /* BlockMask */ + }, + { + 19, /* StartIndex */ + 3, /* NumFrames */ + YOYO_ANIM, /* AnimFlags */ + ONE_SECOND / 20, 0, /* FrameRate */ + ONE_SECOND, ONE_SECOND * 3, /* RestartRate */ + 0, /* BlockMask */ + }, + { + 22, /* StartIndex */ + 7, /* NumFrames */ + CIRCULAR_ANIM, /* AnimFlags */ + ONE_SECOND / 15, 0, /* FrameRate */ + ONE_SECOND, ONE_SECOND * 3, /* RestartRate */ + 0, /* BlockMask */ + }, + { + 29, /* StartIndex */ + 7, /* NumFrames */ + CIRCULAR_ANIM, /* AnimFlags */ + ONE_SECOND / 15, 0, /* FrameRate */ + ONE_SECOND, ONE_SECOND * 3, /* RestartRate */ + 0, /* BlockMask */ + }, + { + 36, /* StartIndex */ + 8, /* NumFrames */ + CIRCULAR_ANIM, /* AnimFlags */ + ONE_SECOND / 15, 0, /* FrameRate */ + ONE_SECOND, ONE_SECOND * 3, /* RestartRate */ + 0, /* BlockMask */ + }, + }, + { /* AlienTransitionDesc */ + 1, /* StartIndex */ + 2, /* NumFrames */ + 0, /* AnimFlags */ + ONE_SECOND / 6, 0, /* FrameRate */ + 0, 0, /* RestartRate */ + 0, /* BlockMask */ + }, + { /* AlienTalkDesc */ + 2, /* StartIndex */ + 5, /* NumFrames */ + 0, /* AnimFlags */ + ONE_SECOND / 15, 0, /* FrameRate */ + ONE_SECOND / 12, 0, /* RestartRate */ + 0, /* BlockMask */ + }, + NULL, /* AlienNumberSpeech - none */ + /* Filler for loaded resources */ + NULL, NULL, NULL, + NULL, + NULL, +}; + +static void +CombatIsInevitable (RESPONSE_REF R) +{ + setSegue (Segue_hostile); + + if (PLAYER_SAID (R, you_must_surrender)) + NPCPhrase (NOPE); + else if (PLAYER_SAID (R, whats_up_1) + || PLAYER_SAID (R, whats_up_2) + || PLAYER_SAID (R, whats_up_3) + || PLAYER_SAID (R, whats_up_4)) + { + BYTE NumVisits; + + NumVisits = GET_GAME_STATE (URQUAN_INFO); + switch (NumVisits++) + { + case 0: + NPCPhrase (GENERAL_INFO_1); + break; + case 1: + NPCPhrase (GENERAL_INFO_2); + break; + case 2: + NPCPhrase (GENERAL_INFO_3); + break; + case 3: + NPCPhrase (GENERAL_INFO_4); + --NumVisits; + break; + } + SET_GAME_STATE (URQUAN_INFO, NumVisits); + } + else if (PLAYER_SAID (R, i_wont_surrender)) + NPCPhrase (BAD_CHOICE); + else if (PLAYER_SAID (R, i_will_surrender)) + { + NPCPhrase (GOOD_CHOICE); + + setSegue (Segue_defeat); + } + else if (PLAYER_SAID (R, like_to_leave)) + NPCPhrase (INDEPENDENCE_IS_BAD); + else if (PLAYER_SAID (R, bye_wars_over)) + { + NPCPhrase (GOODBYE_WARS_OVER); + + setSegue (Segue_peace); + } + else if (PLAYER_SAID (R, bye_sub_hypno)) + NPCPhrase (GOODBYE_AND_DIE_SUB_HYPNO); + else if (PLAYER_SAID (R, bye_init_hypno)) + { + NPCPhrase (GOODBYE_AND_DIE_INIT_HYPNO); + + SET_GAME_STATE (URQUAN_HYPNO_VISITS, 1); + } + else if (PLAYER_SAID (R, terran_amphibian) + || PLAYER_SAID (R, talking_pet_on_steroids)) + { + NPCPhrase (BAD_NEWS); + + setSegue (Segue_peace); + SET_GAME_STATE (URQUAN_HYPNO_VISITS, 1); + } + else if (PLAYER_SAID (R, falling_asleep) + || PLAYER_SAID (R, someone_else_controlled)) + { + NPCPhrase (SOUNDS_FAMILIAR); + + setSegue (Segue_peace); + SET_GAME_STATE (URQUAN_HYPNO_VISITS, 1); + } +} + +static void +DescribePet (RESPONSE_REF R) +{ + if (PLAYER_SAID (R, wascally_little_guy)) + NPCPhrase (WHAT_IT_LOOK_LIKE); + else if (PLAYER_SAID (R, turd_and_toad)) + { + NPCPhrase (WHAT_IS_TURD_AND_TOAD); + + DISABLE_PHRASE (turd_and_toad); + } + + Response (terran_amphibian, CombatIsInevitable); + Response (talking_pet_on_steroids, CombatIsInevitable); + if (PHRASE_ENABLED (turd_and_toad)) + { + Response (turd_and_toad, DescribePet); + } +} + +static void +DescribeCompulsion (RESPONSE_REF R) +{ + if (PLAYER_SAID (R, alien_mind_control)) + NPCPhrase (WHAT_FELT_LIKE); + else if (PLAYER_SAID (R, before_coffee)) + { + NPCPhrase (EXPLAIN); + + DISABLE_PHRASE (before_coffee); + } + + Response (falling_asleep, CombatIsInevitable); + Response (someone_else_controlled, CombatIsInevitable); + if (PHRASE_ENABLED (before_coffee)) + { + Response (before_coffee, DescribeCompulsion); + } +} + +static void +MentionCompulsion (RESPONSE_REF R) +{ + if (PLAYER_SAID (R, compulsion)) + { + NPCPhrase (WHAT_COMPULSION); + + SET_GAME_STATE (MENTIONED_PET_COMPULSION, 1); + } + else if (PLAYER_SAID (R, possessed_by_devil)) + { + NPCPhrase (STUPID_DEVIL); + + DISABLE_PHRASE (possessed_by_devil); + } + else if (PLAYER_SAID (R, why_explain)) + { + NPCPhrase (MUST_EXPLAIN); + + DISABLE_PHRASE (why_explain); + } + + Response (wascally_little_guy, DescribePet); + Response (alien_mind_control, DescribeCompulsion); + if (PHRASE_ENABLED (possessed_by_devil)) + Response (possessed_by_devil, MentionCompulsion); + if (PHRASE_ENABLED (why_explain)) + Response (why_explain, MentionCompulsion); +} + +static void +UrquanHypno (RESPONSE_REF R) +{ + if (GET_GAME_STATE (URQUAN_HYPNO_VISITS) == 0) + { + if (R == 0) + NPCPhrase (INIT_URQUAN_WAKE_UP); + else if (PLAYER_SAID (R, where_am_i)) + { + NPCPhrase (YOU_ARE_HERE); + + DISABLE_PHRASE (where_am_i); + } + else if (PLAYER_SAID (R, why_does_my_head_hurt)) + { + NPCPhrase (HURTS_BECAUSE); + + DISABLE_PHRASE (why_does_my_head_hurt); + } + else if (PLAYER_SAID (R, what_about_2_weeks)) + { + NPCPhrase (ABOUT_2_WEEKS); + + DISABLE_PHRASE (what_about_2_weeks); + } + + if (PHRASE_ENABLED (where_am_i)) + Response (where_am_i, UrquanHypno); + if (PHRASE_ENABLED (why_does_my_head_hurt)) + Response (why_does_my_head_hurt, UrquanHypno); + if (PHRASE_ENABLED (what_about_2_weeks)) + Response (what_about_2_weeks, UrquanHypno); + Response (compulsion, MentionCompulsion); + Response (bye_init_hypno, CombatIsInevitable); + } + else + { + if (R == 0) + NPCPhrase (SUBSEQUENT_URQUAN_WAKE_UP); + else if (PLAYER_SAID (R, uh_oh)) + { + NPCPhrase (NO_UH_OH); + + DISABLE_PHRASE (uh_oh); + } + else if (PLAYER_SAID (R, stop_meeting)) + { + NPCPhrase (NO_STOP_MEETING); + + DISABLE_PHRASE (stop_meeting); + } + + if (PHRASE_ENABLED (uh_oh)) + Response (uh_oh, UrquanHypno); + if (PHRASE_ENABLED (stop_meeting)) + Response (stop_meeting, UrquanHypno); + if (!GET_GAME_STATE (MENTIONED_PET_COMPULSION)) + { + Response (compulsion, MentionCompulsion); + } + Response (bye_sub_hypno, CombatIsInevitable); + } +} + +static void +NormalUrquan (RESPONSE_REF R) +{ + if (PLAYER_SAID (R, i_surrender)) + { + NPCPhrase (DISOBEDIENCE_PUNISHED); + + Response (i_wont_surrender, CombatIsInevitable); + Response (i_will_surrender, CombatIsInevitable); + } + else + { + if (PLAYER_SAID (R, key_phrase)) + { + NPCPhrase (URQUAN_STORY); + + SET_GAME_STATE (KNOW_URQUAN_STORY, 2); + } + + Response (you_must_surrender, CombatIsInevitable); + if (GET_GAME_STATE (KNOW_URQUAN_STORY) == 1) + { + Response (key_phrase, NormalUrquan); + } + switch (GET_GAME_STATE (URQUAN_INFO)) + { + case 0: + Response (whats_up_1, CombatIsInevitable); + break; + case 1: + Response (whats_up_2, CombatIsInevitable); + break; + case 2: + Response (whats_up_3, CombatIsInevitable); + break; + case 3: + Response (whats_up_4, CombatIsInevitable); + break; + } + Response (i_surrender, NormalUrquan); + Response (like_to_leave, CombatIsInevitable); + } +} + +static void +LoserUrquan (RESPONSE_REF R) +{ + if (PLAYER_SAID (R, why_flee)) + { + NPCPhrase (FLEE_BECAUSE); + + DISABLE_PHRASE (why_flee); + } + else if (PLAYER_SAID (R, what_happens_now)) + { + NPCPhrase (HAPPENS_NOW); + + DISABLE_PHRASE (what_happens_now); + } + else if (PLAYER_SAID (R, what_about_you)) + { + NPCPhrase (ABOUT_US); + + DISABLE_PHRASE (what_about_you); + } + + if (PHRASE_ENABLED (why_flee)) + Response (why_flee, LoserUrquan); + if (PHRASE_ENABLED (what_happens_now)) + Response (what_happens_now, LoserUrquan); + if (PHRASE_ENABLED (what_about_you)) + Response (what_about_you, LoserUrquan); + Response (bye_wars_over, CombatIsInevitable); +} + +static void +Intro (void) +{ + DWORD GrpOffs; + + if (LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE) + { + NPCPhrase (OUT_TAKES); + + setSegue (Segue_peace); + return; + } + + GrpOffs = GET_GAME_STATE_32 (URQUAN_PROBE_GRPOFFS0); + if (LOBYTE (GLOBAL (CurrentActivity)) == IN_INTERPLANETARY + && GLOBAL (BattleGroupRef) + && GLOBAL (BattleGroupRef) == GrpOffs) + { + NPCPhrase (SEND_MESSAGE); + SET_GAME_STATE (PROBE_MESSAGE_DELIVERED, 1); + } + else if (GET_GAME_STATE (PLAYER_HYPNOTIZED)) + { + SetCommIntroMode (CIM_FADE_IN_SCREEN, ONE_SECOND * 5); + UrquanHypno ((RESPONSE_REF)0); + } + else + { + BYTE NumVisits; + + if (!GET_GAME_STATE (URQUAN_SENSES_EVIL) + && GET_GAME_STATE (TALKING_PET_ON_SHIP)) + { + NPCPhrase (SENSE_EVIL); + SET_GAME_STATE (URQUAN_SENSES_EVIL, 1); + } + + GrpOffs = GET_GAME_STATE_32 (COLONY_GRPOFFS0); + if (LOBYTE (GLOBAL (CurrentActivity)) == IN_INTERPLANETARY + && GLOBAL (BattleGroupRef) + && GLOBAL (BattleGroupRef) == GrpOffs) + { + NPCPhrase (CAUGHT_YA); + + setSegue (Segue_hostile); + return; + } + + GrpOffs = GET_GAME_STATE_32 (SAMATRA_GRPOFFS0); + if (LOBYTE (GLOBAL (CurrentActivity)) == IN_INTERPLANETARY + && GLOBAL (BattleGroupRef) + && GLOBAL (BattleGroupRef) == GrpOffs) + { + NPCPhrase (HELLO_SAMATRA); + + SET_GAME_STATE (AWARE_OF_SAMATRA, 1); + setSegue (Segue_hostile); + } + else + { + NumVisits = GET_GAME_STATE (URQUAN_VISITS); + if (!GET_GAME_STATE (KOHR_AH_FRENZY)) + { + switch (NumVisits++) + { + case 0: + NPCPhrase (INIT_HELLO); + break; + case 1: + NPCPhrase (SUBSEQUENT_HELLO_1); + break; + case 2: + NPCPhrase (SUBSEQUENT_HELLO_2); + break; + case 3: + NPCPhrase (SUBSEQUENT_HELLO_3); + break; + case 4: + NPCPhrase (SUBSEQUENT_HELLO_4); + --NumVisits; + break; + } + + NormalUrquan ((RESPONSE_REF)0); + } + else + { + switch (NumVisits++) + { + case 0: + NPCPhrase (INIT_FLEE_HUMAN); + LoserUrquan ((RESPONSE_REF)0); + break; + case 1: + NPCPhrase (SUBSEQUENT_FLEE_HUMAN); + setSegue (Segue_peace); + --NumVisits; + break; + } + } + SET_GAME_STATE (URQUAN_VISITS, NumVisits); + } + } +} + +static COUNT +uninit_urquan (void) +{ + return (0); +} + +static void +post_urquan_enc (void) +{ + SET_GAME_STATE (PLAYER_HYPNOTIZED, 0); +} + +LOCDATA* +init_urquan_comm (void) +{ + LOCDATA *retval; + + DWORD GrpOffs; + + urquan_desc.init_encounter_func = Intro; + urquan_desc.post_encounter_func = post_urquan_enc; + urquan_desc.uninit_encounter_func = uninit_urquan; + + urquan_desc.AlienTextBaseline.x = TEXT_X_OFFS + (SIS_TEXT_WIDTH >> 1); + urquan_desc.AlienTextBaseline.y = 0; + urquan_desc.AlienTextWidth = SIS_TEXT_WIDTH - 16; + + GrpOffs = GET_GAME_STATE_32 (URQUAN_PROBE_GRPOFFS0); + if (GET_GAME_STATE (PLAYER_HYPNOTIZED) + || LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE + || (LOBYTE (GLOBAL (CurrentActivity)) == IN_INTERPLANETARY + && GLOBAL (BattleGroupRef) + && GLOBAL (BattleGroupRef) == GrpOffs)) + { + setSegue (Segue_peace); + } + else + { + setSegue (Segue_hostile); + } + retval = &urquan_desc; + + return (retval); +} |