/* omega copyright (C) by Laurence Raphael Brothers, 1987,1988,1989 */ /* site2.c */ /* 2nd half of site functions and aux functions to them */ #include "glob.h" void l_condo(void) { pol ol,prev=NULL; int i,done=FALSE,over=FALSE,weeksleep=FALSE; char response; if (! gamestatusp(SOLD_CONDO)) { response = cinema_interact ("rp","Rampart Arms. Weekly Condo Rentals and Purchases", "Which are you interested in [r,p, or ESCAPE] ", NULL); if (response == 'p') { print2("Only 50,000Au. Buy it? [yn] "); if (ynq2()=='y') { if (Player.cash < 50000) print3("No mortgages, buddy."); else { setgamestatus(SOLD_CONDO); Player.cash-=50000; dataprint(); print2("You are the proud owner of a luxurious condo penthouse."); Condoitems = NULL; } } } else if (response == 'r') { print2("Weekly Rental, 1000Au. Pay for it? [yn] "); if (ynq2()=='y') { if (Player.cash < 1000) print2("Hey, pay the rent or out you go...."); else { weeksleep = TRUE; Player.cash -=1000; dataprint(); } } } else print2("Please keep us in mind for your housing needs."); } else { while (! done) { menuclear(); menuprint("Home Sweet Home\n"); menuprint("a: Leave items in your safe.\n"); menuprint("b: Retrieve items.\n"); menuprint("c: Take a week off to rest.\n"); menuprint("d: Retire permanently.\n"); menuprint("ESCAPE: Leave this place.\n"); showmenu(); response = (char) mcigetc(); if (response == 'a') { i = getitem(NULL_ITEM); if (i != ABORT) { if (Player.possessions[i]->blessing < 0) print2("The item just doesn't want to be stored away..."); else { ol = ((pol) checkmalloc(sizeof(oltype))); ol->thing = Player.possessions[i]; ol->next = Condoitems; Condoitems = ol; conform_unused_object(Player.possessions[i]); Player.possessions[i] = NULL; } } } else if (response == 'b') { ol = Condoitems; while ((ol != NULL) && (! over)) { print1("Retrieve "); nprint1(itemid(ol->thing)); nprint1(" [ynq] "); response = (char) mcigetc(); /* DAG -- fix memory leak where object list nodes weren't deleted */ if (response == 'y') { gain_item(ol->thing); if (ol == Condoitems) { ol = ol->next; free( Condoitems ); Condoitems = ol; } else { ol=ol->next; free( prev->next ); prev->next = ol; } } else if (response == 'q') over = TRUE; else { prev = ol; ol = ol->next; } } } else if (response == 'c') { weeksleep = TRUE; print1("You take a week off to rest..."); morewait(); } else if (response == 'd') { clearmsg(); if (cinema_confirm("You ponder settling down here for good.") == 'y') { p_win(); } } else if (response == ESCAPE) done = TRUE; } xredraw(); } if (weeksleep) { clearmsg(); print1("Taking a week off to rest..."); morewait(); toggle_item_use(TRUE); Player.hp = Player.maxhp; Player.str = Player.maxstr; Player.agi = Player.maxagi; Player.con = Player.maxcon; Player.dex = Player.maxdex; Player.iq = Player.maxiq; Player.pow = Player.maxpow; for (i=0;i 2000) Gymcredit -= 2000; else { Player.cash -= (2000-Gymcredit); Gymcredit = 0; } print2("Sweat. Sweat. "); if ((*maxstat < 30) && ((*maxstat < random_range(30)) || (random_range(3)==1))){ nprint2("The training pays off!"); (*maxstat)++; (*stat)++; } else { nprint2("You feel the healthy glow of a good workout."); if (*stat < *maxstat) { (*stat)++; print3("A feeling of rehabilitation washes through you."); } } } dataprint(); } void healforpay(void) { if (Player.cash < 50) print2("You can't afford to be healed!"); else { Player.cash -= 50; if (Player.hp < Player.maxhp ) { Player.hp += 20+random_range(20); if (Player.hp > Player.maxhp) Player.hp = Player.maxhp; } print2("Another medical marvel...."); } dataprint(); } void cureforpay(void) { if (Player.cash < 250) print2("You can't afford to be cured!"); else { Player.cash -= 250; Player.status[DISEASED] = 0; print2("Quarantine lifted...."); showflags(); } } void pacify_guards(void) { pml ml; for(ml=Level->mlist;ml!=NULL;ml=ml->next) if ((ml->m->id == GUARD) || /*guard*/ ((ml->m->id == HISCORE_NPC) && (ml->m->aux2 == 15))) {/* justiciar */ m_status_reset(ml->m,HOSTILE); ml->m->specialf = M_NO_OP; if (ml->m->id == GUARD && ml->m->hp > 0 && ml->m->aux1 > 0) { if (Level->site[ml->m->x][ml->m->y].creature == ml->m) Level->site[ml->m->x][ml->m->y].creature = NULL; ml->m->x = ml->m->aux1; ml->m->y = ml->m->aux2; Level->site[ml->m->x][ml->m->y].creature = ml->m; } else if (ml->m->id == HISCORE_NPC && ml->m->hp > 0 && Current_Environment == E_CITY) { if (Level->site[ml->m->x][ml->m->y].creature == ml->m) Level->site[ml->m->x][ml->m->y].creature = NULL; ml->m->x = 40; ml->m->y = 62; Level->site[ml->m->x][ml->m->y].creature = ml->m; } } if (Current_Environment == E_CITY) Level->site[40][60].p_locf = L_ORDER; /* undoes action in alert_guards */ } void send_to_jail(void) { if (Player.rank[ORDER] > 0) { print1("A member of the Order of Paladins sent to jail!"); print2("It cannot be!"); morewait(); print1("You are immediately expelled permanently from the Order!"); print2("Your name is expunged from the records...."); Player.rank[ORDER] = -1; } else if (gamestatusp(DESTROYED_ORDER)) print1("The destruction of the Order of Paladins has negated the law!"); else if ((Current_Environment != E_CITY) && (Last_Environment != E_CITY)) print1("Fortunately, there is no jail around here, so you are freed!"); else { pacify_guards(); if (((Current_Environment == E_HOUSE) || (Current_Environment == E_MANSION) || (Current_Environment == E_HOVEL)) && (Last_Environment == E_CITY)) { setgamestatus(SUPPRESS_PRINTING); change_environment(E_CITY); resetgamestatus(SUPPRESS_PRINTING); } if (Current_Environment == E_CITY) { if (gamestatusp(UNDEAD_GUARDS)) { print1("You are taken to a weirdly deserted chamber where an undead"); print2("Magistrate presides over a court of ghosts and haunts."); morewait(); print1("'Mr. Foreman, what is the verdict?'"); print2("'Guilty as charged, your lordship.'"); morewait(); clearmsg(); print1("'Guilty..."); morewait(); nprint1("Guilty..."); morewait(); nprint1("Guilty..."); morewait(); nprint1("Guilty...'"); clearmsg(); print1("The members of the court close in around, fingers pointing."); print2("You feel insubstantial hands closing around your throat...."); print3("You feel your life draining away!"); while(Player.level > 0) { Player.level--; Player.xp /= 2; Player.hp /= 2; dataprint(); } Player.maxhp = Player.maxcon; morewait(); print1("You are finally released, a husk of your former self...."); Player.x = 58; Player.y = 40; screencheck(Player.x,Player.y); } /* Hmm... The sorcerors ought to be able to get you free, too, * although of course they should have their *own* price. */ else if (Player.alignment + random_range(200) < 0) { print1("Luckily for you, a smooth-tongued advocate from the"); print2("Rampart Chaotic Liberties Union gets you off!"); Player.x = 58; Player.y = 40; screencheck(Player.x,Player.y); } else switch(Imprisonment++) { case 0: print1("The Magistrate sternly reprimands you."); print2("As a first-time offender, you are given probation."); Player.y = 58; Player.x = 40; screencheck(Player.x,Player.y); break; case 1: print1("The Magistrate expresses shame for your conduct."); print2("You are thrown in jail!"); morewait(); repair_jail(); Player.y = 54; Player.x = 37 + (2*random_range(4)); screencheck(Player.x,Player.y); l_portcullis_trap(); break; default: print1("The Magistrate renders summary judgement."); print2("You are sentenced to prison!"); morewait(); print1("The guards recognize you as a 'three-time-loser'"); print2("...and beat you up a little to teach you a lesson."); p_damage(random_range(Imprisonment * 10), UNSTOPPABLE, "police brutality"); morewait(); repair_jail(); Player.y = 54; Player.x = 37 + (2*random_range(4)); screencheck(Player.x,Player.y); l_portcullis_trap(); } } } } void l_adept(void) { print1("You see a giant shimmering gate in the form of an omega."); if (! gamestatusp(ATTACKED_ORACLE)) { if (Player.str+Player.con+Player.iq+Player.pow < 100) print2("A familiar female voice says: I would not advise this now...."); else print2("A familiar female voice says: Go for it!"); } morewait(); clearmsg(); if (cinema_confirm("You're about to step into the mystic portal.")!='y') { if (Player.level > 100) { print1("The Lords of Destiny spurn your cowardice and indecision..."); Player.xp = 0; Player.level = 0; Player.hp = Player.maxhp = Player.con; Player.mana = calcmana(); print2("You suddenly feel very inexperienced."); dataprint(); morewait(); clearmsg(); } print1("You edge away from the challenge."); } else { clearmsg(); print1("You pass through the portal."); morewait(); drawomega(); print1("Like wow man! Colors! "); if (Player.patron != DESTINY) { print2("Strange forces try to tear you apart!"); p_damage(random_range(200),UNSTOPPABLE,"a vortex of chaos"); } else print2("Some strange force shields you from a chaos vortex!"); morewait(); print1("Your head spins for a moment...."); print2("and clears...."); morewait(); Player.hp = Player.maxhp; Player.mana = calcmana(); change_environment(E_ABYSS); } } void l_trifid(void) { int damage=0,stuck=TRUE; print1("The hedge comes alive with a surge of alien growth!"); while (stuck) { dataprint(); damage += Level->depth/2+1; print2("Razor-edged vines covered in suckers attach themselves to you."); morewait(); if (find_and_remove_item(OB_SALT_WATER,-1)) { print1("Thinking fast, you toss salt water on the trifid..."); print2("The trifid disintegrates with a frustrated sigh."); Level->site[Player.x][Player.y].locchar = FLOOR; Level->site[Player.x][Player.y].p_locf = L_NO_OP; lset(Player.x, Player.y, CHANGED); gain_experience(1000); stuck = FALSE; } else { p_damage(damage,UNSTOPPABLE,"a trifid"); morewait(); print1("You are entangled in tendrils..."); menuclear(); menuprint("a: Try to break free.\n"); menuprint("b: Hang limp and hope the tendrils uncoil.\n"); menuprint("c: Pray for assistance.\n"); menuprint("d: Attempt to bargain with the hedge.\n"); menuprint("e: Click your heels together and wish for escape.\n"); menuprint("ANYTHING ELSE: writhe and scream hopelessly.\n"); showmenu(); switch(menugetc()) { case 'a': if (Player.str > random_range(200)) { print1("Amazing! You're now free."); print2("The trifid writhes hungrily at you."); stuck = FALSE; } else print1("Well, THAT didn't work."); break; case 'b': print1("Well, at least you're facing your fate with dignity."); break; case 'c': if ((Player.patron == DRUID) && (Player.rank[PRIESTHOOD] > random_range(5))) { print1("A shaft of golden light bathes the alien plant"); print2("which grudginly lets you go...."); stuck = FALSE; } else print1("You receive no divine aid as yet."); break; case 'd': print1("The hedge doesn't answer your entreaties."); break; case 'e': print1("You forgot your ruby slippers, stupid."); break; default: print1("The hedge enjoys your camp play-acting...."); break; } } } xredraw(); } void l_vault(void) { print1("You come to a thick vault door with a complex time lock."); if ((hour()==23)) { print2("The door is open."); Level->site[12][56].locchar = FLOOR; } else { print2("The door is closed."); Level->site[12][56].locchar = WALL; morewait(); clearmsg(); if (cinema_confirm("You're about to try to crack the safe.")=='y') { if (random_range(100) < Player.rank[THIEVES]*Player.rank[THIEVES]) { print2("The lock clicks open!!!"); gain_experience(5000); Level->site[12][56].locchar = FLOOR; } else { print2("Uh, oh, set off the alarm.... The castle guard arrives...."); morewait(); if (Player.rank[NOBILITY] == DUKE) { clearmsg(); print1("\"Ah, just testing us, your Grace? I hope we're up to scratch.\""); morewait(); } else send_to_jail(); } } else print2("Good move."); } } void l_brothel(void) { char response; print1("You come to a heavily reinforced inner door."); print2("A sign reads `The House of the Eclipse'"); morewait(); clearmsg(); if (cinema_confirm("You are about to open the door.")=='y') { menuclear(); menuprint("a:knock on the door.\n"); menuprint("b:try to pick the lock.\n"); menuprint("c:bash down the door.\n"); menuprint("ESCAPE: Leave this house of ill repute.\n"); showmenu(); do response = menugetc(); while ((response != 'a') && (response != 'b') && (response != 'c') && (response != ESCAPE)); xredraw(); if (response == 'a') { if (!nighttime()) print2("There is no reponse."); else { print1("A window opens in the door."); print2("`500Au, buddy. For the night.' pay it? [yn] "); if (ynq2()=='y') { if (Player.cash < 500) { print1("`What, no roll?!'"); print2("The bouncer bounces you a little and lets you go."); p_damage(25,UNSTOPPABLE,"da bouncer"); } else { Player.cash -= 500; print1("You are ushered into an opulently appointed hall."); print2("After an expensive dinner (takeout from Les Crapuleux)"); morewait(); if (Player.preference == 'n') { switch(random_range(4)) { case 0: print1("you spend the evening playing German Whist with"); break; case 1: print1("you spend the evening discussing philosophy with"); break; case 2: print1("you spend the evening playing chess against"); break; case 3: print1("you spend the evening telling your adventures to"); } print2("various employees of the House of the Eclipse."); } else { print1("you spend an enjoyable and educational evening with"); if (Player.preference == 'm' || (Player.preference == 'y' && random_range(2))) switch(random_range(4)) { case 0: print2("Skarn the Insatiable, a satyr."); break; case 1: print2("Dryden the Defanged, an incubus."); break; case 2: print2("Gorgar the Equipped, a centaur."); break; case 3: print2("Hieronymus, the mendicant priest of Eros."); break; } else switch(random_range(4)) { case 0: print2("Noreen the Nymph (omaniac)"); break; case 1: print2("Angelface, a recanted succubus."); break; case 2: print2("Corporal Sue of the City Guard (moonlighting)."); break; case 3: print2("Sheena the Queena the Jungle, a wereleopard."); break; } } morewait(); if (hour() > 12) Time += ((24-hour())+8) * 60; else { Time += ((9-hour())*60); Date++; } Player.food = 40; Player.status[DISEASED] = 0; Player.status[POISONED] = 0; Player.hp = Player.maxhp; /* reduce temporary stat gains to max stat levels */ toggle_item_use(TRUE); Player.str = min(Player.str,Player.maxstr); Player.con = min(Player.con,Player.maxcon); Player.agi = min(Player.agi,Player.maxagi); Player.dex = min(Player.dex,Player.maxdex); Player.iq = min(Player.iq,Player.maxiq); Player.pow = min(Player.pow,Player.maxpow); toggle_item_use(FALSE); if (Player.preference == 'n') Player.iq++; /* whatever :-) */ else Player.con++; gain_experience(100); timeprint(); dataprint(); showflags(); morewait(); clearmsg(); if (Player.preference == 'n') print1("You arise refreshed the next morning..."); else print1("You arise, tired but happy, the next morning..."); } } else print2("What are you, some kinda prude?"); } } else if (response == 'b') { if (nighttime()) { print1("As you fumble at the lock, the door opens...."); print2("The bouncer tosses you into the street."); } else print1("The door appears to be bolted and barred from behind."); } else if (response == 'c') { if (nighttime()) { print1("As you charge toward the door it opens...."); print2("Yaaaaah! Thud!"); morewait(); print1("You run past the startled bouncer into a wall."); p_damage(20,UNSTOPPABLE,"a move worthy of Clouseau"); print2("The bouncer tosses you into the street."); } else { print1("Ouch! The door resists your efforts."); p_damage(1,UNSTOPPABLE,"a sturdy door"); morewait(); print1("You hear an irritated voice from inside:"); print2("'Keep it down out there! Some of us are trying to sleep!'"); } } } } #ifndef MSDOS_SUPPORTED_ANTIQUE /* if signp is true, always print message, otherwise do so only sometimes */ void sign_print(int x, int y, int signp) { if ((Level->site[x][y].p_locf >= CITYSITEBASE) && (Level->site[x][y].p_locf < CITYSITEBASE+NUMCITYSITES)) CitySiteList[Level->site[x][y].p_locf - CITYSITEBASE][0] = TRUE; switch(Level->site[x][y].p_locf) { case L_CHARITY: print1("You notice a sign: The Rampart Orphanage and Hospice For The Needy."); break; case L_MANSION: print1("You notice a sign:"); print2("This edifice protected by DeathWatch Devices, Ltd."); morewait(); break; case L_GRANARY: print1("You notice a sign:"); print2("Public Granary: Entrance Strictly Forbidden."); break; case L_PORTCULLIS: if (Level->site[x][y].locchar == FLOOR) print1("You see a groove in the floor and slots above you."); break; case L_STABLES: print1("You notice a sign:"); print2("Village Stables"); break; case L_COMMONS: print1("You notice a sign:"); print2("Village Commons: No wolves allowed."); break; case L_MAZE: print1("You notice a sign:"); print2("Hedge maze closed for trifid extermination."); break; case L_BANK: if (signp) { print1("You notice a sign:"); print2("First Bank of Omega: Autoteller Carrel."); } break; case L_TEMPLE: print1("You see the ornate portico of the Rampart Pantheon"); break; case L_ARMORER: if (signp) { print1("You notice a sign:"); print2("Julie's Armor of Proof and Weapons of Quality"); } break; case L_CLUB: if (signp) { print1("You notice a sign:"); print2("Rampart Explorers' Club."); } break; case L_GYM: if (signp) { print1("You notice a sign:"); print2("The Rampart Gymnasium, (affil. Rampart Coliseum)."); } break; case L_HEALER: if (signp) { print1("You notice a sign:"); print2("Rampart Healers. Member RMA."); } break; case L_CASINO: if (signp) { print1("You notice a sign:"); print2("Rampart Mithril Nugget Casino."); } break; case L_SEWER: print1("A sewer entrance. You don't want to go down THERE, do you?"); break; case L_COMMANDANT: if (signp) { print1("You notice a sign:"); print2("Commandant Sonder's Rampart-fried Lyzzard partes. Open 24 hrs."); } break; case L_DINER: if (signp) { print1("You notice a sign:"); print2("The Rampart Diner. All you can eat, 25Au."); } break; case L_CRAP: if (signp) { print1("You notice a sign:"); print2("Les Crapeuleaux. (****)"); } break; case L_TAVERN: if (signp) { print1("You notice a sign:"); print2("The Centaur and Nymph -- J. Riley, prop."); } break; case L_ALCHEMIST: if (signp) { print1("You notice a sign:"); print2("Ambrosias' Potions et cie."); } break; case L_DPW: if (signp) { print1("You notice a sign:"); print2("Rampart Department of Public Works."); } break; case L_LIBRARY: if (signp) { print1("You notice a sign:"); print2("Rampart Public Library."); } break; case L_CONDO: if (signp) { print1("You notice a sign:"); if (gamestatusp(SOLD_CONDO)) print2("Home Sweet Home"); else print2("Luxury Condominium For Sale; Inquire Within"); } break; case L_PAWN_SHOP: if (signp) { print1("You notice a sign:"); print2("Knight's Pawn Shop."); } break; case L_CEMETARY: print1("You notice a sign:"); print2("Rampart City Cemetary. Closed -- Full."); break; case L_GARDEN: print1("You notice a sign:"); print2("Rampart Botanical Gardens---Do not deface statues."); break; case L_JAIL: print1("You notice a sign:"); print2("Rampart City Gaol -- always room for more."); break; #ifdef INCLUDE_MONKS case L_MONASTERY: print1("You notice a sign:"); print2("Tholian Monastery. Truthseekers Welcome."); break; #endif case L_ORACLE: print1("You notice a sign:"); print2("The Oracle of the Cyan Flames"); morewait(); break; case L_TOURIST: if (signp) { print1("You notice a sign:"); print2("Rampart Department of Tourism."); } break; } } #endif void l_countryside(void) { if (optionp(CONFIRM)) { if (cinema_confirm("You're about to return to the countryside.") != 'y') return; } change_environment(E_COUNTRYSIDE); } void l_oracle(void) { char response; if (gamestatusp(ATTACKED_ORACLE) && (! gamestatusp(COMPLETED_ASTRAL))) { print1("You come before a blue crystal dais. You see a broken mirror."); print2("Look in the mirror? [yn] "); if (ynq2()=='y') { print1("A strange force rips you from your place...."); Player.hp = 1; print2("You feel drained...."); dataprint(); print3("You find yourself in a weird flickery maze."); change_environment(E_ASTRAL); } } else { print1("You come before a blue crystal dais. There is a bell and a mirror."); print2("Ring the bell [b], look in the mirror [m], or leave [ESCAPE] "); do response = (char) mcigetc(); while ((response != 'b') && (response != 'm') && (response != ESCAPE)); if (response == 'b') { print1("The ringing note seems to last forever."); print2("You notice a robed figure in front of you...."); morewait(); print1("The oracle doffs her cowl. Her eyes glitter with blue fire!"); print2("Attack her? [yn] "); if (ynq2() == 'y') { setgamestatus(ATTACKED_ORACLE); print1("The oracle deftly avoids your attack."); print2("She sneers at you and vanishes."); } else { print2("She stares at you...and speaks:"); if (!gamestatusp(SPOKE_TO_DRUID)) { print3("'The ArchDruid speaks wisdom in his forest shrine.'"); } else if (!gamestatusp(COMPLETED_CAVES)) { print3("'Thou mayest find aught of interest in the caves to the South.'"); } else if (!gamestatusp(COMPLETED_SEWERS)) { print3("'Turn thy attention to the abyssal depths of the city.'"); } else if (!gamestatusp(COMPLETED_CASTLE)) { print3("'Explorest thou the depths of the Castle of the ArchMage.'"); } else if (!gamestatusp(COMPLETED_ASTRAL)) { morewait(); print1("'Journey to the Astral Plane and meet the Gods' servants.'"); print2("The oracle holds out her hand. Do you take it? [yn] "); if (ynq2()=='y') { print1("'Beware: Only the Star Gem can escape the Astral Plane.'"); print2("A magic portal opens behind the oracle. She leads you"); morewait(); print1("through a sequence of special effects that would have"); print2("IL&M technicians cursing in awe and deposits you in an"); morewait(); clearmsg(); print1("odd looking room whose walls seem strangely insubstantial."); gain_experience(5000); change_environment(E_ASTRAL); } else print3("You detect the hint of a sneer from the oracle."); } else if (!gamestatusp(COMPLETED_VOLCANO)) { print3("'The infernal maw may yield its secrets to thee now.'"); } else if (!gamestatusp(COMPLETED_CHALLENGE)) { print3("'The challenge of adepthood yet awaits thee.'"); } else { morewait(); print1("'My lord: Thou hast surpassed my tutelage forever."); print2("Fare thee well.'"); print3("The oracle replaces her hood and seems to fade away...."); } } } else if (response == 'm') { print1("You seem to see yourself. Odd...."); knowledge(1); } else print2("You leave this immanent place."); } } void l_mansion(void) { if (cinema_confirm("You're about to enter a palatial mansion.")=='y') change_environment(E_MANSION); } void l_house(void) { if (cinema_confirm("You're about to walk into someone's house.")=='y') change_environment(E_HOUSE); } void l_hovel(void) { if (cinema_confirm("You're about to duck into a hovel.")=='y') change_environment(E_HOVEL); } void l_safe(void) { char response; pob newitem; int attempt = 0; response = cinema_interact("pfqi", "You have discovered a safe!", "Pick the lock [p], Force the door [f], or ignore [ESCAPE]", NULL); if (response == 'p') attempt = (2*Player.dex + Player.rank[THIEVES]*10 - random_range(100))/10; else if (response == 'f') attempt = (Player.dmg - random_range(100))/10; if (attempt > 0) { Player.alignment -= 4; gain_experience(50); print2("The door springs open!"); Level->site[Player.x][Player.y].locchar = FLOOR; Level->site[Player.x][Player.y].p_locf = L_NO_OP; lset(Player.x, Player.y, CHANGED); if (random_range(2) == 1) { print1("You find:"); do { newitem = create_object(difficulty()); print2(itemid(newitem)); morewait(); gain_item(newitem); } while (random_range(3) == 1); } else print2("The safe was empty (awwwww....)"); } else { print3("Your attempt at burglary failed!"); if (attempt == -1) { print1("A siren goes off! You see flashing red lights everywhere!"); morewait(); if (Last_Environment == E_CITY) { print2("The city guard shows up! They collar you in no time flat!"); change_environment(E_CITY); morewait(); send_to_jail(); } } else if (attempt == -2) { print1("There is a sudden flash!"); p_damage(random_range(25),FLAME,"a safe"); print2("The safe has self-destructed."); Level->site[Player.x][Player.y].locchar = RUBBLE; Level->site[Player.x][Player.y].p_locf = L_RUBBLE; lset(Player.x, Player.y, CHANGED); } else if (attempt == -3) { print1("The safe jolts you with electricity!"); lball(Player.x,Player.y,Player.x,Player.y,30); } else if (attempt < -3) { print1("You are hit by an acid spray!"); if (Player.possessions[O_CLOAK] != NULL) { print2("Your cloak is destroyed!"); conform_lost_object(Player.possessions[O_CLOAK]); p_damage(10,ACID,"a safe"); } else if (Player.possessions[O_ARMOR] != NULL) { print2("Your armor corrodes!"); Player.possessions[O_ARMOR]->dmg-=3; Player.possessions[O_ARMOR]->hit-=3; Player.possessions[O_ARMOR]->aux-=3; p_damage(10,ACID,"a safe"); } else { print2("The acid hits your bare flesh!"); p_damage(random_range(100),ACID,"a safe"); } } } } void l_cartographer(void) { int i,j,x,y; print1("Ye Olde Mappe Shoppe."); print2("Map of the local area: 500Au. Buy it? [yn] "); if (ynq2()=='y') { if (Player.cash < 500) print3("Cursed be cheapskates! May you never find an aid station...."); else { print3("You now have the local area mapped."); Player.cash -= 500; dataprint(); switch(Villagenum) { case 1: x = 56; y = 5; break; default: case 2: x = 35; y = 11; break; case 3: x = 10; y = 40; break; case 4: x = 7; y = 6; break; case 5: x = 40; y = 43; break; case 6: x = 20; y = 41; break; } for(i=x-15;i<=x+15;i++) for(j=y-15;j<=y+15;j++) if ((i>=0)&&(i<64)&&(j>=0)&&(j<64)) { if (Country[i][j].current_terrain_type != Country[i][j].base_terrain_type) { c_set(i, j, CHANGED); Country[i][j].current_terrain_type = Country[i][j].base_terrain_type; } c_set(i, j, SEEN); } } } else print3("Don't blame me if you get lost...."); } void l_charity(void) { long donation; print2("'Greetings, friend. Do you wish to make a donation?' [yn] "); if (ynq2()!='y') print3("'Pinchpurse!'"); else { clearmsg(); // print1("How much can you give? "); donation = parsenum("How much can you give?"); if (donation < 1) print2("'Go stick your head in a pig.'"); else if (donation > Player.cash) print2("'I'm afraid you're charity is bigger than your purse!'"); else if (donation < max(100,Player.level*Player.level*100)) { print2("'Oh, can't you do better than that?'"); print3("'Well, I guess we'll take it....'"); if (Player.alignment < 10) Player.alignment++; Player.cash -= donation; } else { print2("'Oh thank you kindly, friend, and bless you!'"); Player.cash -= donation; Player.alignment += 5; } } dataprint(); } void l_tourist(void) { print1("Greetings and welcome to Rampart."); print2("Would you like the tourist guide to the city? [yn]"); if( ynq2() == 'y' ) { menuclear(); menuprint("You now know how to find:\n\n"); if (! CitySiteList[L_ARMORER-CITYSITEBASE][0]) menuprint("Julie's Armor of Proof and Weapons of Quality\n"); CitySiteList[L_ARMORER-CITYSITEBASE][0] = TRUE; if (! CitySiteList[L_CLUB-CITYSITEBASE][0]) menuprint("Rampart Explorers' Club\n"); CitySiteList[L_CLUB-CITYSITEBASE][0] = TRUE; if (! CitySiteList[L_GYM-CITYSITEBASE][0]) menuprint("The Rampart Gymnasium\n"); CitySiteList[L_GYM-CITYSITEBASE][0] = TRUE; if (! CitySiteList[L_HEALER-CITYSITEBASE][0]) menuprint("Rampart Healers\n"); CitySiteList[L_HEALER-CITYSITEBASE][0] = TRUE; if (! CitySiteList[L_CASINO-CITYSITEBASE][0]) menuprint("Rampart Mithril Nugget Casino\n"); CitySiteList[L_CASINO-CITYSITEBASE][0] = TRUE; if (! CitySiteList[L_DINER-CITYSITEBASE][0]) menuprint("The Rampart Diner\n"); CitySiteList[L_DINER-CITYSITEBASE][0] = TRUE; if (! CitySiteList[L_CRAP-CITYSITEBASE][0]) menuprint("Les Crapeuleaux, fine dining\n"); CitySiteList[L_CRAP-CITYSITEBASE][0] = TRUE; if (! CitySiteList[L_COMMANDANT-CITYSITEBASE][0]) menuprint("Commandant Sonder's Rampart-fried Lyzzard partes\n"); CitySiteList[L_COMMANDANT-CITYSITEBASE][0] = TRUE; if (! CitySiteList[L_TAVERN-CITYSITEBASE][0]) menuprint("The Centaur and Nymph tavern\n"); CitySiteList[L_TAVERN-CITYSITEBASE][0] = TRUE; if (! CitySiteList[L_ALCHEMIST-CITYSITEBASE][0]) menuprint("Ambrosias' Potions et cie\n"); CitySiteList[L_ALCHEMIST-CITYSITEBASE][0] = TRUE; if (! CitySiteList[L_DPW-CITYSITEBASE][0]) menuprint("Rampart Department of Public Works\n"); CitySiteList[L_DPW-CITYSITEBASE][0] = TRUE; if (! CitySiteList[L_LIBRARY-CITYSITEBASE][0]) menuprint("Rampart Public Library\n"); CitySiteList[L_LIBRARY-CITYSITEBASE][0] = TRUE; if (! CitySiteList[L_PAWN_SHOP-CITYSITEBASE][0]) menuprint("Knight's Pawn Shop\n"); CitySiteList[L_PAWN_SHOP-CITYSITEBASE][0] = TRUE; if (! CitySiteList[L_CONDO-CITYSITEBASE][0]) menuprint("Luxury Condominiums\n"); CitySiteList[L_CONDO-CITYSITEBASE][0] = TRUE; showmenu(); morewait(); clearmsg(); xredraw(); print1("Have a nice day."); } else { clearmsg(); print1("Have a nice day then."); } }