795 lines
21 KiB
C
795 lines
21 KiB
C
/* omega copyright (c) 1987,1988,1989 by Laurence Raphael Brothers */
|
|
/* mtalk.c */
|
|
/* monster talk functions */
|
|
|
|
#include "glob.h"
|
|
|
|
|
|
/* The druid's altar is in the northern forest */
|
|
void m_talk_druid(pmt m)
|
|
{
|
|
int i;
|
|
pml curr;
|
|
|
|
if (! m_statusp(m,HOSTILE)) {
|
|
print1("The Archdruid raises a hand in greeting.");
|
|
if (! gamestatusp(SPOKE_TO_DRUID)) {
|
|
setgamestatus(SPOKE_TO_DRUID);
|
|
morewait();
|
|
print1("The Archdruid congratulates you on reaching his sanctum.");
|
|
print2("You feel competent.");
|
|
/* DAG gain_experience starts with a morewait as well... */
|
|
/* morewait(); */
|
|
gain_experience(300);
|
|
if (Player.patron == DRUID) {
|
|
print1("The Archdruid conveys to you the wisdom of nature....");
|
|
print2("You feel like a sage.");
|
|
morewait();
|
|
for(i=0;i<NUMRANKS;i++) {
|
|
if (Player.guildxp[i] > 0)
|
|
Player.guildxp[i] += 300;
|
|
}
|
|
}
|
|
}
|
|
mprint("Do you request a ritual of neutralization? [yn] ");
|
|
if (ynq() == 'y') {
|
|
if (Phase/2 == 6 || Phase/2 == 0) { /* full or new moon */
|
|
mprint("\"Unfortunately, I cannot perform a ritual of balance on");
|
|
if (Phase/2 == 6)
|
|
mprint("this lawful day.\"");
|
|
else
|
|
mprint("this chaotic day.\"");
|
|
}
|
|
else if (Phase/2 == 3 || Phase/2 == 9) { /* half moon */
|
|
mprint("You take part in today's holy celebration of balance...");
|
|
Player.alignment = 0;
|
|
Player.mana = calcmana();
|
|
if (Player.patron == DRUID)
|
|
gain_experience(200); /* if a druid wants to spend 2 days */
|
|
Time+=60; /* celebrating for 1600 xp, why not? */
|
|
hourly_check();
|
|
Time+=60;
|
|
hourly_check();
|
|
Time+=60;
|
|
hourly_check();
|
|
Time+=60;
|
|
hourly_check();
|
|
Time+=60;
|
|
hourly_check();
|
|
Time+=60;
|
|
hourly_check();
|
|
}
|
|
else {
|
|
mprint("The ArchDruid conducts a sacred rite of balance...");
|
|
if (Player.patron == DRUID) {
|
|
Player.alignment = 0;
|
|
Player.mana = calcmana();
|
|
}
|
|
else
|
|
Player.alignment -= Player.alignment*max(0, 10 - Player.level)/10;
|
|
/* the higher level the character is, the more set in his/her ways */
|
|
Time+=60;
|
|
hourly_check();
|
|
}
|
|
dataprint();
|
|
}
|
|
}
|
|
else {
|
|
mprint("The ArchDruid looks at you and cries: 'Unclean! Unclean!'");
|
|
disrupt(Player.x,Player.y,100);
|
|
mprint("This seems to have satiated his desire for vengeance.");
|
|
mprint("'Have you learned your lesson?' The ArchDruid asks. [yn] ");
|
|
/* WDT: this didn't used to have a 'y'. I'm not sure what was
|
|
* intended. */
|
|
if (ynq() != 'n') {
|
|
mprint("'I certainly hope so!' says the ArchDruid.");
|
|
for (curr = Level->mlist; curr; curr = curr->next)
|
|
m_status_reset(curr->m, HOSTILE);
|
|
m_vanish(m);
|
|
}
|
|
else {
|
|
mprint("'Idiot.' mutters the ArchDruid.");
|
|
p_damage(500,UNSTOPPABLE,"the ArchDruid's Vengeance");
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void m_talk_silent(pmt m)
|
|
{
|
|
#ifdef NEW_QUOTES
|
|
int reply = random_range(8);
|
|
#else
|
|
int reply = random_range(4);
|
|
#endif
|
|
if (m->uniqueness == COMMON) {
|
|
strcpy(Str2,"The ");
|
|
strcat(Str2,m->monstring);
|
|
}
|
|
else strcpy(Str2,m->monstring);
|
|
switch (reply) {
|
|
case 0:strcat(Str2," does not reply. "); break;
|
|
case 1:strcat(Str2," shrugs silently. "); break;
|
|
case 2:strcat(Str2," holds a finger to his mouth. "); break;
|
|
case 3:strcat(Str2," glares at you but says nothing. "); break;
|
|
case 4:strcat(Str2," is not going to answer you. "); break;
|
|
case 5:strcat(Str2," has taken a vow of silence. "); break;
|
|
case 6:strcat(Str2," attempts sign language. "); break;
|
|
case 7:strcat(Str2," fails to respond."); break;
|
|
}
|
|
mprint(Str2);
|
|
}
|
|
|
|
void m_talk_stupid(pmt m)
|
|
{
|
|
|
|
int reply = random_range(4);
|
|
if (m->uniqueness == COMMON) {
|
|
strcpy(Str2,"The ");
|
|
strcat(Str2,m->monstring);
|
|
}
|
|
else strcpy(Str2,m->monstring);
|
|
switch (reply) {
|
|
case 0:strcat(Str2," looks at you with mute incomprehension."); break;
|
|
case 1:strcat(Str2," growls menacingly and ignores you."); break;
|
|
case 2:strcat(Str2," does not seem to have heard you."); break;
|
|
case 3:strcat(Str2," tries to pretend it didn't hear you."); break;
|
|
}
|
|
mprint(Str2);
|
|
}
|
|
|
|
void m_talk_greedy(pmt m)
|
|
{
|
|
|
|
int reply = random_range(4);
|
|
if (m->uniqueness == COMMON) {
|
|
strcpy(Str2,"The ");
|
|
strcat(Str2,m->monstring);
|
|
}
|
|
else strcpy(Str2,m->monstring);
|
|
switch (reply) {
|
|
case 0:strcat(Str2," says: Give me a treasure.... ");break;
|
|
case 1:strcat(Str2," says: Stand and deliver, knave! "); break;
|
|
case 2:strcat(Str2," says: Your money or your life! "); break;
|
|
case 3:strcat(Str2," says: Yield or Die! "); break;
|
|
}
|
|
mprint(Str2);
|
|
}
|
|
|
|
void m_talk_hungry(pmt m)
|
|
{
|
|
|
|
int reply = random_range(4);
|
|
if (m->uniqueness == COMMON) {
|
|
strcpy(Str2,"The ");
|
|
strcat(Str2,m->monstring);
|
|
}
|
|
else strcpy(Str2,m->monstring);
|
|
switch (reply) {
|
|
case 0:strcat(Str2," says: I hunger, foolish adventurer! "); break;
|
|
case 1:strcat(Str2," drools menacingly at you. "); break;
|
|
case 2:strcat(Str2," says: You're invited to be lunch! "); break;
|
|
case 3:strcat(Str2," says: Feeed Meee! "); break;
|
|
}
|
|
mprint(Str2);
|
|
}
|
|
|
|
|
|
void m_talk_guard(pmt m)
|
|
{
|
|
if (m_statusp(m,HOSTILE)) {
|
|
print1("'Surrender in the name of the Law!'");
|
|
print2("Do it? [yn] ");
|
|
if (ynq2()=='y') {
|
|
Player.alignment++;
|
|
if (Current_Environment == E_CITY) {
|
|
print1("Go directly to jail. Do not pass go, do not collect 200Au.");
|
|
print2("You are taken to the city gaol.");
|
|
morewait();
|
|
send_to_jail();
|
|
drawvision(Player.x,Player.y);
|
|
}
|
|
else {
|
|
clearmsg();
|
|
print1("Mollified, the guard disarms you and sends you away.");
|
|
dispose_lost_objects(1,Player.possessions[O_WEAPON_HAND]);
|
|
pacify_guards();
|
|
}
|
|
}
|
|
else {
|
|
clearmsg();
|
|
print1("All right, you criminal scum, you asked for it!");
|
|
}
|
|
}
|
|
else /* not hostile */
|
|
{
|
|
if ( (!CitySiteList[L_TOURIST-CITYSITEBASE][0]) &&
|
|
(Current_Environment == E_CITY) )
|
|
{
|
|
print1("You should visit the tourist information booth and get their guidebook.");
|
|
print2("The booth is located near the entrance to the city.");
|
|
morewait();
|
|
CitySiteList[L_TOURIST-CITYSITEBASE][0] = TRUE;
|
|
}
|
|
else
|
|
if (Player.rank[ORDER]>0)
|
|
print1("'Greetings comrade! May you always tread the paths of Law.'");
|
|
#ifdef NEW_QUOTES
|
|
else {
|
|
if (random_range(2))
|
|
print1("Move it right along, stranger!");
|
|
else print1("Nothing to see here.");
|
|
}
|
|
#else
|
|
else print1("Move it right along, stranger!");
|
|
#endif
|
|
}
|
|
}
|
|
|
|
|
|
void m_talk_mp(pmt m)
|
|
{
|
|
mprint("The mendicant priest asks you to spare some treasure for the needy");
|
|
}
|
|
|
|
|
|
void m_talk_titter(pmt m)
|
|
{
|
|
|
|
if (m->uniqueness == COMMON) {
|
|
strcpy(Str2,"The ");
|
|
strcat(Str2,m->monstring);
|
|
}
|
|
else strcpy(Str2,m->monstring);
|
|
strcat(Str2," titters obscenely at you.");
|
|
mprint(Str2);
|
|
}
|
|
|
|
|
|
void m_talk_ninja(pmt m)
|
|
{
|
|
mprint("The black-garbed figure says apologetically:");
|
|
mprint("'Situree simasita, wakarimasen.'");
|
|
}
|
|
|
|
|
|
|
|
|
|
void m_talk_thief(pmt m)
|
|
{
|
|
if (Player.rank[THIEVES]) {
|
|
if (m->level == 2)
|
|
m->monstring = "sneak thief";
|
|
else m->monstring = "master thief";
|
|
print1("The cloaked figure makes a gesture which you recognize...");
|
|
print2("...the thieves' guild recognition signal!");
|
|
print3("'Sorry, mate, thought you were a mark....'");
|
|
morewait();
|
|
m_vanish(m);
|
|
}
|
|
else m_talk_man(m);
|
|
|
|
}
|
|
|
|
|
|
|
|
void m_talk_assassin(pmt m)
|
|
{
|
|
m->monstring = "master assassin";
|
|
print1("The ominous figure does not reply, but hands you an embossed card:");
|
|
print2("'Guild of Assassins Ops are forbidden to converse with targets.'");
|
|
}
|
|
|
|
|
|
void m_talk_im(pmt m)
|
|
{
|
|
pol tmp;
|
|
|
|
if (strcmp(m->monstring,"itinerant merchant") != 0) {
|
|
m->monstring = "itinerant merchant";
|
|
}
|
|
if (m->possessions == NULL)
|
|
mprint("The merchant says: Alas! I have nothing to sell!");
|
|
else {
|
|
m->possessions->thing->known = 2;
|
|
clearmsg();
|
|
mprint("I have a fine");
|
|
mprint(itemid(m->possessions->thing));
|
|
mprint("for only");
|
|
mlongprint(max(10,4*true_item_value(m->possessions->thing)));
|
|
mprint("Au.");
|
|
mprint("Want it? [yn] ");
|
|
if (ynq()=='y') {
|
|
if (Player.cash < (max(10,4*true_item_value(m->possessions->thing)))) {
|
|
if (Player.alignment > 10) {
|
|
mprint("Well, I'll let you have it for what you've got.");
|
|
Player.cash = 0;
|
|
gain_item(m->possessions->thing);
|
|
}
|
|
else mprint("Beat it, you deadbeat!");
|
|
}
|
|
else {
|
|
mprint("Here you are. Have a good day.");
|
|
Player.cash -= max(10,(4*item_value(m->possessions->thing)));
|
|
gain_item(m->possessions->thing);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
mprint("Sorry I couldn't help you.");
|
|
free_obj( m->possessions->thing, TRUE );
|
|
}
|
|
tmp = m->possessions;
|
|
m->possessions = tmp->next;
|
|
free( tmp );
|
|
if (NULL != m->possessions)
|
|
{
|
|
mprint("Well then, I must be off. Good day.");
|
|
m_vanish(m);
|
|
}
|
|
}
|
|
}
|
|
|
|
void m_talk_man(pmt m)
|
|
{
|
|
|
|
if (m->uniqueness == COMMON) {
|
|
strcpy(Str2,"The ");
|
|
strcat(Str2,m->monstring);
|
|
}
|
|
else strcpy(Str2,m->monstring);
|
|
switch (random_range(5)) {
|
|
case 0:strcat(Str2," asks you for the way home."); break;
|
|
case 1:strcat(Str2," wishes you a pleasant day."); break;
|
|
case 2:strcat(Str2," sneers at you contemptuously."); break;
|
|
case 3:strcat(Str2," smiles and nods."); break;
|
|
case 4:strcat(Str2," tells you a joke."); break;
|
|
}
|
|
mprint(Str2);
|
|
}
|
|
|
|
|
|
void m_talk_evil(pmt m)
|
|
{
|
|
|
|
if (m->uniqueness == COMMON) {
|
|
strcpy(Str2,"The ");
|
|
strcat(Str2,m->monstring);
|
|
}
|
|
else strcpy(Str2,m->monstring);
|
|
switch (random_range(14)) {
|
|
case 0:strcat(Str2," says: 'THERE CAN BE ONLY ONE!'"); break;
|
|
case 1:strcat(Str2," says: 'Prepare to die, Buckwheat!'"); break;
|
|
case 2:strcat(Str2," says: 'Time to die!'"); break;
|
|
case 3:strcat(Str2," says: 'There will be no mercy.'"); break;
|
|
case 4:strcat(Str2," insults your mother-in-law."); break;
|
|
case 5:strcat(Str2," says: 'Kurav tu ando mul!'"); break;
|
|
case 6:strcat(Str2," says: '!va al infierno!'"); break;
|
|
case 7:strcat(Str2," says: 'dame desu, nee.'"); break;
|
|
case 8:strcat(Str2," spits on your rug and calls your cat a bastard.");
|
|
break;
|
|
case 9:strcat(Str2," snickers malevolently and draws a weapon."); break;
|
|
case 10:strcat(Str2," sends 'rm -r *' to your shell!"); break;
|
|
case 11:strcat(Str2," tweaks your nose and cackles evilly."); break;
|
|
case 12:strcat(Str2," thumbs you in the eyes."); break;
|
|
case 13:strcat(Str2," kicks you in the groin."); break;
|
|
}
|
|
mprint(Str2);
|
|
}
|
|
|
|
|
|
void m_talk_robot(pmt m)
|
|
{
|
|
if (m->uniqueness == COMMON) {
|
|
strcpy(Str2,"The ");
|
|
strcat(Str2,m->monstring);
|
|
}
|
|
else strcpy(Str2,m->monstring);
|
|
switch (random_range(4)) {
|
|
case 0:strcat(Str2," says: 'exterminate...Exterminate...EXTERMINATE!!!'");
|
|
break;
|
|
case 1:strcat(Str2," says: 'Kill ... Crush ... Destroy'");
|
|
break;
|
|
case 2:strcat(Str2," says: 'Danger -- Danger'");
|
|
break;
|
|
case 3:strcat(Str2," says: 'Yo Mama -- core dumped.'");
|
|
break;
|
|
}
|
|
mprint(Str2);
|
|
}
|
|
|
|
void m_talk_slithy(pmt m)
|
|
{
|
|
mprint("It can't talk -- it's too slithy!");
|
|
}
|
|
|
|
|
|
void m_talk_mimsy(pmt m)
|
|
{
|
|
mprint("It can't talk -- it's too mimsy!");
|
|
}
|
|
|
|
|
|
|
|
void m_talk_burble(pmt m)
|
|
{
|
|
|
|
if (m->uniqueness == COMMON) {
|
|
strcpy(Str2,"The ");
|
|
strcat(Str2,m->monstring);
|
|
}
|
|
else strcpy(Str2,m->monstring);
|
|
strcat(Str2," burbles hatefully at you.");
|
|
mprint(Str2);
|
|
}
|
|
|
|
|
|
void m_talk_beg(pmt m)
|
|
{
|
|
if (m->uniqueness == COMMON) {
|
|
strcpy(Str2,"The ");
|
|
strcat(Str2,m->monstring);
|
|
}
|
|
else strcpy(Str2,m->monstring);
|
|
strcat(Str2," asks you for alms.");
|
|
mprint(Str2);
|
|
}
|
|
|
|
|
|
void m_talk_hint(pmt m)
|
|
{
|
|
if (m->uniqueness == COMMON) {
|
|
strcpy(Str2,"The ");
|
|
strcat(Str2,m->monstring);
|
|
}
|
|
else strcpy(Str2,m->monstring);
|
|
if (m_statusp(m,HOSTILE)) {
|
|
strcat(Str2," only sneers at you. ");
|
|
mprint(Str2);
|
|
}
|
|
else {
|
|
strcat(Str2," whispers in your ear: ");
|
|
mprint(Str2);
|
|
hint();
|
|
m->talkf = M_TALK_SILENT;
|
|
}
|
|
}
|
|
|
|
void m_talk_gf(pmt m)
|
|
{
|
|
mprint("The good fairy glints: Would you like a wish?");
|
|
if (ynq()=='y') {
|
|
mprint("The good fairy glows: Are you sure?");
|
|
if (ynq()=='y') {
|
|
mprint("The good fairy radiates: Really really sure?");
|
|
if (ynq()=='y') {
|
|
mprint("The good fairy beams: I mean, like, sure as sure can be?");
|
|
if (ynq()=='y') {
|
|
mprint("The good fairy dazzles: You don't want a wish, right?");
|
|
if (ynq()=='y') mprint("The good fairy laughs: I thought not.");
|
|
else wish(0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
mprint("In a flash of sweet-smelling light, the fairy vanishes....");
|
|
Player.hp = max(Player.hp,Player.maxhp);
|
|
Player.mana = max(Player.mana,calcmana());
|
|
mprint("You feel mellow.");
|
|
m_vanish(m);
|
|
}
|
|
|
|
void m_talk_ef(pmt m)
|
|
{
|
|
mprint("The evil fairy roils: Eat my pixie dust!");
|
|
mprint("She waves her black-glowing wand, which screams thinly....");
|
|
m->movef=M_MOVE_SMART;
|
|
m->meleef=M_MELEE_POISON;
|
|
m->specialf=M_SP_THIEF;
|
|
m_status_set(m,HOSTILE);
|
|
acquire(-1);
|
|
bless(-1);
|
|
sleep_player(m->level/2);
|
|
summon(-1,-1);
|
|
summon(-1,-1);
|
|
summon(-1,-1);
|
|
summon(-1,-1);
|
|
}
|
|
|
|
|
|
void m_talk_seductor(pmt m)
|
|
{
|
|
if (m->uniqueness == COMMON) {
|
|
strcpy(Str2,"The ");
|
|
strcat(Str2,m->monstring);
|
|
}
|
|
else strcpy(Str2,m->monstring);
|
|
if (Player.preference == 'n')
|
|
{
|
|
strcat(Str2, " notices your disinterest and leaves with a pout.");
|
|
mprint(Str2);
|
|
}
|
|
else
|
|
{
|
|
strcat(Str2," beckons seductively...");
|
|
mprint(Str2);
|
|
mprint("Flee? [yn] ");
|
|
if (ynq()=='y') {
|
|
mprint("You feel stupid.");
|
|
}
|
|
else {
|
|
strcpy(Str2,"The ");
|
|
strcat(Str2,m->monstring);
|
|
strcat(Str2," shows you a good time....");
|
|
mprint(Str2);
|
|
gain_experience(500);
|
|
Player.con++;
|
|
}
|
|
}
|
|
m_vanish(m);
|
|
}
|
|
|
|
|
|
void m_talk_demonlover(pmt m)
|
|
{
|
|
if (m->uniqueness == COMMON) {
|
|
strcpy(Str2,"The ");
|
|
strcat(Str2,m->monstring);
|
|
}
|
|
else strcpy(Str2,m->monstring);
|
|
if (Player.preference == 'n')
|
|
{
|
|
strcat(Str2, " notices your disinterest and changes with a snarl...");
|
|
mprint(Str2);
|
|
morewait();
|
|
}
|
|
else
|
|
{
|
|
strcat(Str2," beckons seductively...");
|
|
mprint(Str2);
|
|
mprint("Flee? [yn] ");
|
|
if (ynq()=='y')
|
|
mprint("You feel fortunate....");
|
|
else {
|
|
if (m->uniqueness == COMMON) {
|
|
strcpy(Str2,"The ");
|
|
strcat(Str2,m->monstring);
|
|
}
|
|
else strcpy(Str2,m->monstring);
|
|
strcat(Str2," shows you a good time....");
|
|
mprint(Str2);
|
|
morewait();
|
|
mprint("You feel your life energies draining...");
|
|
level_drain(random_range(3)+1,"a demon's kiss");
|
|
morewait();
|
|
}
|
|
}
|
|
m->talkf = M_TALK_EVIL;
|
|
m->meleef = M_MELEE_SPIRIT;
|
|
m->specialf = M_SP_DEMON;
|
|
m_status_reset(m,NEEDY);
|
|
m_status_set(m,HOSTILE);
|
|
|
|
if ((m->monchar&0xff) == 's') {
|
|
m->monchar = 'I'|CLR(RED);
|
|
m->monstring = "incubus";
|
|
}
|
|
else {
|
|
m->monchar = 'S'|CLR(RED);
|
|
m->monstring = "succubus";
|
|
}
|
|
if (m->uniqueness == COMMON) {
|
|
strcpy(Str2,"The ");
|
|
strcat(Str2,m->monstring);
|
|
}
|
|
else strcpy(Str2,m->monstring);
|
|
strcat(Str2," laughs insanely.");
|
|
mprint(Str2);
|
|
mprint("You now notice the fangs, claws, batwings...");
|
|
}
|
|
|
|
|
|
void m_talk_horse(pmt m)
|
|
{
|
|
if (m_statusp(m,HOSTILE))
|
|
mprint("The horse neighs angrily at you.");
|
|
else if (m_statusp(m,HUNGRY))
|
|
mprint("The horse noses curiously at your pack.");
|
|
else if (gamestatusp(MOUNTED))
|
|
mprint("The horse and your steed don't seem to get along.");
|
|
else if (Current_Environment == Current_Dungeon)
|
|
mprint("The horse shies; maybe he doesn't like the dungeon air....");
|
|
else {
|
|
mprint("The horse lets you pat his nose. Want to ride him? [yn] ");
|
|
if (ynq()=='y') {
|
|
m_remove(m);
|
|
setgamestatus(MOUNTED);
|
|
calc_melee();
|
|
mprint("You are now equitating!");
|
|
}
|
|
}
|
|
}
|
|
|
|
void m_talk_hyena(pmt m)
|
|
{
|
|
mprint("The hyena only laughs at you...");
|
|
}
|
|
|
|
void m_talk_parrot(pmt m)
|
|
{
|
|
mprint("Polly wanna cracker?");
|
|
}
|
|
|
|
|
|
void m_talk_servant(pmt m)
|
|
{
|
|
int target,x=Player.x,y=Player.y;
|
|
if (m->id == SERV_LAW) {
|
|
target = SERV_CHAOS;
|
|
mprint("The Servant of Law pauses in thought for a moment.");
|
|
mprint("You are asked: Are there any Servants of Chaos hereabouts? [yn] ");
|
|
}
|
|
else {
|
|
target = SERV_LAW;
|
|
mprint("The Servant of Chaos grins mischievously at you.");
|
|
mprint("You are asked: Are there any Servants of Law hereabouts? [yn] ");
|
|
}
|
|
if (ynq()=='y') {
|
|
print1("Show me.");
|
|
show_screen();
|
|
drawmonsters(TRUE);
|
|
setspot(&x,&y);
|
|
if (Level->site[x][y].creature != NULL) {
|
|
if (Level->site[x][y].creature->id == target) {
|
|
mprint("The Servant launches itself towards its enemy.");
|
|
mprint("In a blaze of combat, the Servants annihilate each other!");
|
|
gain_experience(m->xpv);
|
|
m_death(Level->site[x][y].creature);
|
|
Level->site[m->x][m->y].creature = NULL;
|
|
m->x = x;
|
|
m->y = y;
|
|
Level->site[x][y].creature = m;
|
|
m_death(Level->site[x][y].creature);
|
|
}
|
|
else mprint("Right. Tell me about it. Idiot!");
|
|
}
|
|
else mprint("Right. Tell me about it. Idiot!");
|
|
}
|
|
else mprint("The servant shrugs and turns away.");
|
|
}
|
|
|
|
|
|
void m_talk_animal(pmt m)
|
|
{
|
|
if (m->uniqueness == COMMON) {
|
|
strcpy(Str2,"The ");
|
|
strcat(Str2,m->monstring);
|
|
}
|
|
else strcpy(Str2,m->monstring);
|
|
mprint(Str2);
|
|
mprint("shows you a scholarly paper by Dolittle, D. Vet.");
|
|
mprint("which demonstrates that animals don't have speech centers");
|
|
mprint("complex enough to communicate in higher languages.");
|
|
mprint("It giggles softly to itself and takes back the paper.");
|
|
}
|
|
|
|
|
|
void m_talk_scream(pmt m)
|
|
{
|
|
mprint("A thinly echoing scream reaches your ears....");
|
|
morewait();
|
|
mprint("You feel doomed....");
|
|
morewait();
|
|
mprint("A bird appears and flies three times widdershins around your head.");
|
|
summon(-1,QUAIL);
|
|
m->talkf = M_TALK_EVIL;
|
|
}
|
|
|
|
|
|
void m_talk_archmage(pmt m)
|
|
{
|
|
if (m_statusp(m,HOSTILE)) {
|
|
mprint("The Archmage ignores your attempt at conversation");
|
|
mprint("and concentrates on his spellcasting....");
|
|
}
|
|
else if (Current_Environment == E_COURT) {
|
|
mprint("The Archmage congratulates you on getting this far.");
|
|
mprint("He invites you to attempt the Throne of High Magic");
|
|
mprint("but warns you that it is important to wield the Sceptre");
|
|
mprint("before sitting on the throne.");
|
|
if (Level->site[m->x][m->y].p_locf == L_THRONE) {
|
|
mprint("The Archmage smiles and makes an arcane gesture....");
|
|
m_vanish(m);
|
|
}
|
|
}
|
|
else {
|
|
mprint("The Archmage tells you to find him again in his");
|
|
mprint("Magical Court at the base of his castle in the mountains");
|
|
mprint("of the far North-East; if you do he will give you some");
|
|
mprint("important information.");
|
|
}
|
|
}
|
|
|
|
void m_talk_maharaja(pmt m)
|
|
{
|
|
if (m_statusp(m,HOSTILE)) {
|
|
switch (random_range(4)) {
|
|
case 0: mprint("The Maharaja says: 'So Mote it be!'");
|
|
break;
|
|
case 1: mprint("The Maharaja says: 'Let it be written!'");
|
|
break;
|
|
case 2: mprint("The Maharaja says: 'Let it be done!'");
|
|
break;
|
|
case 3: mprint("The Maharaja offers you goat-eyeball soup.'");
|
|
break;
|
|
}
|
|
}
|
|
else if (Current_Environment == E_PALACE) {
|
|
mprint("The Maharaja insists that you leave. Or die.");
|
|
}
|
|
else {
|
|
mprint("Where did I put those dungeons?");
|
|
}
|
|
}
|
|
|
|
|
|
void m_talk_merchant(pmt m)
|
|
{
|
|
if (! m_statusp(m,HOSTILE)) {
|
|
if (Current_Environment == E_VILLAGE) {
|
|
mprint("The merchant asks you if you want to buy a horse for 250GP.");
|
|
mprint("Pay the merchant? [yn] ");
|
|
if (ynq()=='y') {
|
|
if (Player.cash < 250)
|
|
mprint("The merchant says: 'Come back when you've got the cash!'");
|
|
else {
|
|
Player.cash -= 250;
|
|
mprint("The merchant takes your money and tells you to select");
|
|
mprint("any horse you want in the stables.");
|
|
mprint("He says: 'You'll want to get to know him before trying to");
|
|
mprint("ride him. By the way, food for the horse is not included.'");
|
|
mprint("The merchant runs off toward the bank, cackling gleefully.");
|
|
m_vanish(m);
|
|
}
|
|
}
|
|
else mprint("The merchant tells you to stop wasting his time.");
|
|
}
|
|
else {
|
|
mprint("The merchant tells you to visit his stables at his village");
|
|
mprint("for a great deal on a horse.");
|
|
}
|
|
}
|
|
else {
|
|
mprint("The merchant ignores you and screams:");
|
|
mprint("'Help! Help! I'm being oppressed!'");
|
|
}
|
|
}
|
|
|
|
|
|
void m_talk_prime(pmt m)
|
|
{
|
|
if (!m_statusp(m,HOSTILE)) {
|
|
if (Current_Environment == E_CIRCLE) {
|
|
print1("The Prime nods brusquely at you, removes a gem from his");
|
|
print2("sleeve, places it on the floor, and vanishes wordlessly.");
|
|
morewait();
|
|
m_dropstuff(m);
|
|
m_vanish(m);
|
|
}
|
|
else {
|
|
print1("The Prime makes an intricate gesture, which leaves behind");
|
|
print2("glowing blue sparks... He winks mischievously at you....");
|
|
if (Player.rank[CIRCLE] > 0) {
|
|
morewait();
|
|
print1("The blue sparks strike you! You feel enhanced!");
|
|
print2("You feel more experienced....");
|
|
Player.pow+=Player.rank[CIRCLE];
|
|
Player.mana += calcmana();
|
|
gain_experience(1000);
|
|
m_vanish(m);
|
|
}
|
|
}
|
|
}
|
|
else m_talk_evil(m);
|
|
}
|