[comp.sources.games] v05i024: omega2 - rogue like dungeon exploration

games@tekred.TEK.COM (07/26/88)

Submitted by: "Laurence R. Brothers" <brothers@paul.rutgers.edu>
Comp.sources.games: Volume 5, Issue 24
Archive-name: omega2/Part14



#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 14 (of 19)."
# Contents:  oextern.h oguild1.c oitemf3.c ommove.c
# Wrapped by billr@saab on Wed Jul 13 10:46:56 1988
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'oextern.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'oextern.h'\"
else
echo shar: Extracting \"'oextern.h'\" \(15633 characters\)
sed "s/^X//" >'oextern.h' <<'END_OF_FILE'
X/* o.c functions */
Xvoid initrand(),inititem(),init_world();
Xint game_restore(),signalexit(),main();
X
X
X/* oabyss functions */
Xvoid load_abyss();
X
X
X/* oaux1 and oaux3 functions */
Xvoid pickup_at(),setspot(),foodcheck(),p_death(),hourly_check();
Xvoid calc_melee(),gain_experience(),p_damage(),minute_check();
Xvoid p_process(),p_teleport(),tacplayer(),roomcheck(),tunnelcheck();
Xvoid searchat(),showroom(),weapon_use(),damage_item(),tacmode();
Xvoid hand_wield(),optionset(),optionreset(),describe_player();
Xvoid lightroom(),surrender(),threaten(),darkenroom(),fight_monster();
Xvoid indoors_random_event(),outdoors_random_event(),tenminute_check();
Xchar getlocation(),*itemid(),*mstatus_string(),*trapid(),*levelname();
Xint p_moveable(),cursed(),getdir(),optionp(),goberserk();
Xint player_on_sanctuary(),maneuvers();
X
X
X/* oaux2 and oaux3 functions */
Xchar *actionlocstr();
Xvoid break_weapon(),drop_weapon(),moon_check(),toggle_item_use();
Xvoid p_fumble(),p_win(),p_hit(),player_miss(),addring(),torch_check();
Xvoid top_level(),printactions(),movecursor(),p_drown(),enter_site();
Xvoid tacexecute(),weapon_use(),minute_status_check(),tenminute_status_check();
Xvoid expandsiteabbrev(),gain_level(),terrain_check();
Xvoid countrysearch(),default_maneuvers(),alert_guards();
Xint expval(),player_hit(),statmod(),item_value(),true_item_value();
Xint parsecitysite(),expandsite(),hostilemonstersnear(),magic_resist();
Xchar *countryid(),*citysiteid();
X
X/* ochar functions */
Xvoid initplayer(),initstats(),save_omegarc(),omegan_character_stats();
Xvoid user_character_stats();
Xint calcmana(),fixnpc(),competence_check();
XFILE *omegarc_check();
X
X
X/* ocity functions */
Xvoid load_city(),randommazesite(),assign_city_function(),make_justiciar();
Xvoid resurrect_guards(),mazesite(),make_minor_undead(),make_major_undead();
Xvoid repair_jail();
X
X/* ocom1 functions */
Xvoid p_country_process(),p_process();
X
X/* ocom3 and ocom2 functions */
Xvoid pickup(),drop(),magic(),disarm(),save(),restore();
Xvoid inventory(),opendoor(),closedoor(),fire(),fight(),city_move();
Xvoid eat(),version(),nap(),vault(),bash_item(),frobgamestatus();
Xvoid search(),peruse(),quaff(),talk(),bash_location(),wizard();
Xvoid give(),rest(),examine(),help();
Xvoid zapwand(),floor_inv(),callitem(), charid();
Xvoid moveplayer(),upstairs(),downstairs(),setoptions(),activate();
Xvoid pickpocket(),rename_player(),abortshadowform(),tunnel();
Xvoid change_environment();
Xvoid movepincountry(),tacoptions(),hunt(),dismount_steed();
Xint quit();
X
X/* oeffect1 functions */
Xvoid bless(),identify(),bolt(),ball(),amnesia(),p_poison();
Xvoid heal(),mondet(),objdet(),enchant(),wish(),manastorm();
Xvoid acquire(),cleanse(),annihilate(),sleep_monster(),apport();
Xvoid sleep_player(),summon(),hide(),clairvoyance(),aggravate();
Xvoid fbolt(),lbolt(),lball(),fball(),nbolt(),learnspell(),level_drain();
Xvoid disintegrate(),disrupt(),snowball(),p_teleport(),acid_cloud();
Xvoid strategic_teleport();
Xint random_item(),itemlist(),monsterlist();
X
X
X/* oeffect2 functions */
Xvoid knowledge(),flux(),displace(),breathe(),invisible(),warp(),alert();
Xvoid haste(),regenerate(),recover_stat(),augment(),truesight(),disease();
Xvoid i_chaos(),i_law(),sanctify(),hero(),level_return(),cure(),dispel();
Xvoid polymorph(),hellfire(),illuminate(),drain_life(),drain();
Xvoid inflict_fear(),levitate(),accuracy(),sanctuary(),shadowform();
Xvoid invulnerable(),deflection();
X
X/* oetc functions */
Xvoid hint(),learnclericalspells(),add_new_npc();
Xchar *slotstr(),*wordnum(),*nameprint();
X
X
X/* ofile functions */
Xvoid commandlist(),helpfile(),showfile(),showscores(),showmotd();
Xvoid extendlog(),filescanstring(),checkhigh(),user_intro();
Xvoid theologyfile(),cityguidefile(),combat_help(),inv_help();
Xvoid abyss_file(),wishfile(),adeptfile(),copyfile(),displayfile();
Xint filecheck();
XFILE *checkfopen();
X
X
X/* ogen functions */
Xint loc_statusp(),mazeok();
Xvoid lset(),lreset(),load_arena(),make_country_screen(),room_corridor();
Xvoid clear_level(),create_level(),build_square_room(),build_diamond_room();
Xvoid connect_room(),corridor_crawl(),build_room(),sewer_corridor();
Xvoid clear_dungeon(),init_dungeon(),install_traps(),straggle_corridor();
Xvoid room_connect_corridor(),sewer_level(),room_level(),make_prime();
Xvoid change_level(),cavern_level(),makedoor(),make_archmage();
Xvoid maze_level(),maze_corridor();
Xvoid install_specials(),make_stairs();
Xvoid make_plains(),make_road(),make_forest(),make_jungle();
Xvoid make_river(),make_swamp(),make_mountains(),load_circle(),load_court();
Xvoid find_stairs();
Xchar *roomname();
Xplv findlevel();
X
X/* outil functions */
Xint inbounds(),random_range(),hitp(),sign(),max(),min(),distance();
Xint unblocked(),los_p(),screenmod(),offscreen(),calc_points();
Xint bitp(),nighttime(),hour(),showhour(),day(),showminute();
Xint view_unblocked(),m_unblocked(),strmem();
Xint view_los_p(),confirmation(),gamestatusp();
Xchar inversedir(),*getarticle(),*ordinal(),*month(),*salloc();
Xvoid initdirs(),do_los(),do_object_los(),bitset(),bitreset();
Xvoid findspace(),setgamestatus(),resetgamestatus(),calc_weight();
X
X
X/* otime functions */
Xvoid time_clock();
X
X
X/* ospell functions */
Xvoid s_firebolt(),s_lball(),s_sleep(),s_objdet(),s_mondet(),s_identify();
Xvoid s_teleport(),s_disrupt(),s_disintegrate(),s_missile();
Xvoid s_heal(),s_dispel(),s_breathe(),s_invisible(),s_warp(),s_enchant();
Xvoid s_bless(),s_truesight(),s_hellfire(),s_knowledge(),s_hero();
Xvoid s_restore(),s_cure(),s_return(),s_desecrate(),s_summon();
Xvoid s_accuracy(),s_ritual(),s_apport(),s_shadowform(),s_alert();
Xvoid s_regenerate(),s_sanctify(),s_clairvoyance(),s_drain(),s_polymorph();
Xvoid s_invulnerable(),cast_spell(),s_fear(),s_wish();
Xvoid initspells(),expandspellabbrevs();
Xint getspell(),expandspell();
Xchar *spellid();
X
X
X/* osite functions */
Xvoid l_temple(),l_armorer(),l_club(),l_gym(),sign_print(),l_castle();
Xvoid l_healer(),statue_random(),l_statue_wake(),l_casino(),l_bank();
Xvoid l_sewer(),l_tavern(),l_alchemist(),l_vault(),l_oracle(),l_commandant();
Xvoid l_countryside(),l_dpw(),l_library(),l_pawn_shop(),l_diner();
Xvoid l_condo(),l_cemetary(),l_garden(),l_house(),l_hovel(),l_mansion();
Xvoid l_jail(),l_adept(),l_trifid(),l_warning(),l_brothel(),l_crap();
Xvoid l_safe(),l_cartographer(),l_charity(),l_mindstone();
Xvoid healforpay(),cureforpay(),gymtrain(),buyfromstock(),wake_statue();
Xvoid send_to_jail();
X
X
X/* oscr functions */     
Xvoid redraw(),drawspot(),drawvision(),morewait(),drawmonsters(),locprint();
Xvoid mprint(),title(),sitclear(),initgraf(),xredraw(),erase_monster();
Xvoid plotchar(),show_screen(),blankoutspot(),show_license(),phaseprint();
Xvoid menuclear(),showcursor(),mnumprint(),menunumprint(),display_pack();
Xvoid clearmsg(),menuprint(),print3(),nprint3(),print1(),print2(),nprint1();
Xvoid clearmsg1(),clearmsg3(),commanderror(),nprint2(),deathprint();
Xvoid stdmorewait(),draw_explosion(),dataprint(),comwinprint(),timeprint();
Xvoid erase_level(),levelrefresh(),display_options(),display_option_slot();
Xvoid refreshmsg(),menuaddch(),drawscreen(),maddch(),putspot(),checkclear();
Xvoid display_quit(),showflags(),spreadroomdark(),display_win();
Xvoid drawplayer(),displaystats(),display_death(),plotmon(),display_bigwin();
Xvoid dobackspace(),drawandrefreshspot(),spreadroomlight(),bufferprint();
Xvoid drawomega(),screencheck(),blotspot(),plotspot(),dodrawspot();
Xvoid display_inventory_slot(),endgraf(),menuspellprint(),hide_line();
Xvoid display_possessions(),clear_if_necessary(),buffercycle(),lightspot();
Xint parsenum(),getnumber(),litroom(),move_slot(),stillonblock();
Xchar getspot(),mgetc(),lgetc(),menugetc(),*msgscanstring();
Xchar mcigetc(),ynq(),ynq1(),ynq2();
X
X
X/* omove functions */
Xvoid p_movefunction();
Xvoid l_water(),l_hedge(),l_lava(),l_lift(),l_magic_pool(),l_whirlwind();
Xvoid l_abyss(),l_no_op(),l_tactical_exit(),l_rubble(),l_raise_portcullis();
Xvoid l_portcullis(),l_portcullis_trap(),l_arena_exit(),l_house_exit();
Xvoid l_drop_every_portcullis(),l_earth_station(),l_water_station();
Xvoid l_fire_station(),l_air_station(),l_void(),stationcheck(),l_whirlwind();
Xvoid l_voice1(),l_voice2(),l_voice3(),l_whirlwind(),l_void_station();
Xvoid l_chaos(),l_tome1(),l_tome2(),l_enter_circle(),l_circle_library();
Xvoid l_temple_warning(),l_throne(),l_enter_court(),l_escalator(),l_fire();
Xvoid l_voidstone(),l_chaostone(),l_lawstone(),l_balancestone();
Xvoid l_sacrificestone();
X
X/* otrap functions */
Xvoid l_trap_dart(),l_trap_pit(),l_trap_door(),l_trap_snare(),l_trap_siren();
Xvoid l_trap_blade(),l_trap_fire(),l_trap_disintegrate(),l_trap_teleport();
Xvoid l_trap_acid(),l_trap_manadrain(),l_trap_sleepgas(),l_trap_abyss();
X
X
X
X/* ohouse functions */
Xvoid load_house(),make_dog(),make_automaton(),make_house_npc();
Xvoid make_mansion_npc();
X
X/* omonf functions */
Xvoid m_normal_move(),m_no_op();
Xvoid m_smart_move(),m_simple_move(),m_spirit_move(),m_vanish();
Xvoid m_firebolt(),m_talk_guard(),m_random_move(),m_sp_morgon();
Xvoid m_flutter_move(),m_nbolt(),m_sp_surprise(),m_talk_druid();
Xvoid m_talk_stupid(),m_talk_hungry(),m_talk_silent(),m_talk_greedy();
Xvoid m_talk_mp(),m_follow_move(),m_sp_mp(),m_talk_evil(),m_talk_prime();
Xvoid m_lball(),m_fireball(),m_talk_titter(),m_talk_thief();
Xvoid m_sp_ng(),m_sp_poison_cloud(),m_huge_sounds(),m_talk_robot();
Xvoid m_blind_strike(),m_talk_im(),m_confused_move(),m_talk_beg();
Xvoid m_thief_f(),m_talk_man(),m_summon(),m_animal_talk(),m_move_animal();
Xvoid m_teleport(),m_illusion(),m_aggravate(),m_talk_hint();
Xvoid m_sp_explode(),m_sp_acid_cloud(),m_sp_bogthing(),m_talk_animal();
Xvoid m_sp_whirl(),m_sp_escape(),m_sp_ghost(),m_sp_demonlover();
Xvoid m_talk_mimsy(),m_talk_slithy(),m_talk_burble(),m_sp_spell();
Xvoid m_scaredy_move(),m_talk_gf(),m_talk_ef(),m_sp_demon(),m_sp_av();
Xvoid m_sp_seductor(),m_talk_demonlover(),m_talk_seductor(),m_sp_lw();
Xvoid m_sp_eater(),m_sp_dragonlord(),m_talk_ninja(),m_talk_assassin();
Xvoid m_sp_blackout(),m_sp_leash(),m_sp_were(),m_sp_angel(),m_sp_servant();
Xvoid m_sp_swarm(),m_talk_servant(),m_talk_horse(),m_snowball(),m_sp_prime();
Xvoid m_sp_mb(),m_sp_mirror(),m_sp_raise(),m_talk_scream(),m_strike_sonic();
Xvoid m_talk_parrot(),m_talk_hyena(),m_talk_archmage(),m_talk_merchant();
Xvoid m_sp_merchant(),m_sp_court(),m_sp_lair(),m_sp_whistleblower();
X
Xchar *mantype();
X
X/* omon functions */
Xint m_statusp(),m_immunityp(),tacticalp();
Xvoid m_pulse(),m_status_set(),m_damage(),monster_action();
Xvoid m_death(),m_hit(),m_miss(),m_pickup(),m_dropstuff();
Xvoid m_status_reset(),monster_strike(),tacmonster(),free_mlist();
Xvoid monster_talk(),monster_melee(),monster_move(),monster_special();
Xvoid movemonster(),make_log_npc(),m_abyss(),transcribe_monster_actions();
Xvoid m_movefunction(),trasnscribe_monster_actions(),determine_npc_behavior();
Xvoid m_water(),m_lava(),m_altar(),m_whirlwind(),m_fire(),make_hiscore_npc();
Xvoid m_trap_dart(),m_trap_pit(),m_trap_door(),m_trap_snare();
Xvoid m_trap_blade(),m_trap_fire(),m_trap_disintegrate(),m_trap_teleport();
Xvoid m_trap_manadrain(),m_trap_acid(),m_trap_sleepgas(),m_trap_abyss();
Xvoid strengthen_death(),fix_phantom(),destroy_order();
Xchar random_loc();
Xint corpsevalue(),monster_hit();
X
X
X/* olev functions */
Xvoid populate_level(),stock_level(),wandercheck(),make_site_monster();
Xvoid free_dungeon(),tactical_map(),make_country_monsters();
Xvoid make_site_treasure(),make_specific_treasure();
Xint difficulty();
Xpmt m_create(),make_creature();
X
X/* osave functions */
Xint save_game(),restore_game(), signalsave();
Xvoid save_player(),save_player_items(),save_player_spells();
Xvoid save_player_item_knowledge(),save_monsters(),save_country();
Xvoid save_level(),save_item(),save_itemlist();
Xvoid restore_player(),restore_player_items(),restore_player_spells();
Xvoid restore_player_item_knowledge(),restore_monsters();
Xvoid restore_level(),restore_country();
Xpob restore_item();
Xpol restore_itemlist();
X
X
X
X
X/* oitemf functions (1 to 3)*/
Xvoid weapon_bare_hands(),weapon_normal_hit(),weapon_demonblade();
Xvoid weapon_lightsabre(),weapon_mace_disrupt(),weapon_tangle();
Xvoid weapon_vorpal(),weapon_desecrate(),weapon_firestar(),weapon_defend();
Xvoid weapon_victrix(),weapon_bolt(),weapon_arrow(),weapon_scythe();
Xvoid weapon_acidwhip();
Xvoid i_no_op(),i_nothing(),i_stargem(),i_sceptre(),i_deflect();
Xvoid i_spells(),i_bless(),i_enchant(),i_acquire(),i_jane_t();
Xvoid i_flux(),i_breathing(),i_invisible(),i_perm_invisible();
Xvoid i_teleport(),i_wish(),i_clairvoyance(),i_displace(),i_id(),i_augment();
Xvoid i_heal(),i_objdet(),i_mondet(),i_sleep_self(),i_neutralize_poison();
Xvoid i_speed(),i_restore(),i_azoth(),i_regenerate(),i_demonblade();
Xvoid i_firebolt(),i_lbolt(),i_missile(),i_fireball(),i_lball(),i_snowball();
Xvoid i_sleep_other(),i_summon(),i_hide(),i_disrupt(),i_disintegrate();
Xvoid i_perm_vision(),i_perm_burden(),i_perm_fire_resist(),i_charge();
Xvoid i_perm_poison_resist(),i_perm_strength(),i_perm_gaze_immune();
Xvoid i_perm_energy_resist(), i_perm_speed(),i_perm_breathing();
Xvoid i_perm_displace(),i_perm_negimmune(),i_mace_disrupt(),i_warp();
Xvoid i_food(),i_poison_food(),i_stim(),i_immune(),i_lembas(),i_pow();
Xvoid i_orbfire(),i_orbwater(),i_orbair(),i_orbearth(),i_orbdead();
Xvoid i_orbmastery(),i_lightsabre(),i_alert(),i_knowledge(),i_pick();
Xvoid i_perm_knowledge(),i_fear_resist(),i_perm_fear_resist(),i_key();
Xvoid i_defend(),i_victrix(),i_apport(),i_corpse(),i_accuracy();
Xvoid i_perm_accuracy(),i_hero(),i_perm_hero(),i_levitate();
Xvoid i_perm_regenerate(),i_perm_levitate(),i_perm_protection();
Xvoid i_perm_agility(),i_truesight(),i_perm_truesight(),i_cure();
Xvoid i_dispel(),i_pepper_food(),i_enchantment(),polymorph();
Xvoid i_crystal(),i_kolwynia(),i_death(),i_life(),i_helm(),i_antioch();
Xvoid i_illuminate(),i_perm_illuminate(),i_desecrate();
Xvoid i_trap(),i_juggernaut(),i_raise_portcullis(),i_planes();
Xvoid i_fear(),i_polymorph(),i_symbol(),i_perm_deflect();
Xvoid i_normal_armor(),i_normal_weapon(),i_normal_shield();
X
X/* oitem functions */
Xvoid item_use();
Xpob create_object();
Xvoid make_shield(),make_armor(),make_weapon();
Xvoid make_scroll(),make_potion(),make_food();
Xvoid make_thing(),make_ring(),make_artifact(),make_corpse();
Xvoid make_boots(),make_cloak(),make_stick(),make_cash();
Xint itemplus(),itemcharge(),itemblessing(),twohandedp();
Xchar *scrollname(),*potionname(),*stickname(),*ringname(),*cloakname();
Xchar *bootname(),*grotname();
X
X
X/* oinv functions */
Xvoid pickup_at(),drop_at(),givemonster(),conform_lost_object();
Xvoid conform_unused_object(),gain_item(),drop_money(),add_to_pack();
Xvoid setplustr(),setchargestr(), setnumstr(),p_drop_at(),give_money();
Xvoid conform_lost_objects(),itemlist_inventory(),take_from_pack();
Xvoid merge_item(),take_from_slot(),inventory_control(),item_inventory();
Xvoid drop_from_slot(),put_to_pack(),switch_to_slot(),top_inventory_control();
Xvoid lose_all_items(),dispose_lost_objects(),pack_extra_items(),fixpack();
Xint get_inventory_slot(),getitem();
Xint objequal(),slottable(),item_useable(),find_and_remove_item();
Xint getitem(),badobject(),cursed(),get_money(),get_item_number(),find_item();
Xpob detach_money(),split_item();
Xchar *itemid(),*cashstr();
X
X/* oguild functions */
Xvoid l_druid(),l_thieves_guild(),l_college(),l_merc_guild(),l_sorcerors();
Xvoid l_altar(),l_arena(),l_order();
X
X/* opriest functions */
Xvoid make_hp(),hp_req_test(),hp_req_print(),increase_priest_rank();
Xvoid answer_prayer();
Xint check_sacrilege();
X
X/* ocountry functions */
Xvoid load_country(),load_dlair(),load_speak(),load_misle(),load_temple();
Xvoid make_high_priest(),random_temple_site();
X
X/* ovillage functions */
Xvoid load_village(),make_horse(),make_sheep();
Xvoid make_guard(),make_sheep(),make_merchant(),make_food_bin();
Xvoid assign_village_function(),special_village_site();
X
X
END_OF_FILE
if test 15633 -ne `wc -c <'oextern.h'`; then
    echo shar: \"'oextern.h'\" unpacked with wrong size!
fi
# end of 'oextern.h'
fi
if test -f 'oguild1.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'oguild1.c'\"
else
echo shar: Extracting \"'oguild1.c'\" \(14561 characters\)
sed "s/^X//" >'oguild1.c' <<'END_OF_FILE'
X/* omega copyright (C) by Laurence Raphael Brothers, 1987,1988 */
X/* oguild1.c */
X/* L_ functions  */ 
X
X/* These functions implement the various guilds. */
X/* They are all l_ functions since they are basically activated*/
X/* at some site or other. */
X
X#include "oglob.h"
X
X
Xvoid l_merc_guild()
X{
X  pob newitem;
X
X  print1("Legion of Destiny, Mercenary Guild, Inc.");
X  if (nighttime())
X    print2("The barracks are under curfew right now."); 
X  else {
X    print2("You enter Legion HQ, ");
X    if (Player.rank[LEGION] == COMMANDANT) {
X      nprint2("Your aide follows you to the staff room.");
X      morewait();
X      clearmsg();
X    }
X    if (Player.rank[LEGION] > 0) {
X      nprint2("and report to your commander.");
X      morewait();
X    }
X    switch(Player.rank[LEGION]) {
X    case 0:
X      nprint2("and see the Recruiting Centurion.");
X      morewait();
X      print2("Do you wish to join the Legion? [yn] ");
X      if (ynq2()=='y') {
X	clearmsg();
X	if (Player.rank[ARENA]>0) {
X	  print1("The Centurion checks your record, and gets angry:");
X	  print2("'The legion don't need any Arena Jocks. Git!'");
X	}
X	else if (Player.rank[ORDER] > 0) {
X	  print1("The Centurion checks your record, and is amused:");
X	  print2("'A paladin in the ranks? You must be joking.'");
X	}
X	else if (Player.con < 12) {
X	  print1("The Centurion looks you over, sadly.");
X	  print2("You are too fragile to join the legion.");
X	}
X	else if (Player.str < 10) {
X	  print1("The Centurion looks at you contemptuously.");
X	  print2("Your strength is too low to pass the physical!");
X	}
X	else {
X	  print1("You are tested for strength and stamina...");
X	  morewait();
X	  nprint1(" and you pass!");
X	  print2("Commandant ");
X	  nprint2(Commandant);
X	  nprint2(" shakes your hand.");
X	  morewait();
X	  print2("The Legion pays you a 500Au induction fee.");
X	  morewait();
X	  print1("You are also issued a shortsword and leather.");
X	  print2("You are now a Legionaire.");
X	  morewait();
X	  clearmsg();
X	  newitem = ((pob) malloc(sizeof(objtype)));
X	  *newitem = Objects[WEAPONID+1]; /* shortsword */
X	  gain_item(newitem);
X	  newitem = ((pob) malloc(sizeof(objtype)));
X	  *newitem = Objects[ARMORID+1]; /* leather */
X	  gain_item(newitem);
X	  Player.cash += 500;
X	  Player.rank[LEGION] = LEGIONAIRE;
X	  Player.guildxp[LEGION] = 1;
X	  Player.str++; Player.con++;
X	  Player.maxstr++; Player.maxcon++;
X	}
X      }
X      break;
X    case COMMANDANT:
X      print1("You find the disposition of your forces satisfactory.");
X      break;
X    case COLONEL:
X      if ((Player.level > Commandantlevel) &&
X	  find_and_remove_item(CORPSEID+0,ML10+4)) {  
X	print1("You liberated the Demon Emperor's Regalia!");
X	morewait();
X	clearmsg();
X	print1("The Legion is assembled in salute to you!");
X	print2("The Regalia is held high for all to see and admire.");
X	morewait();
X	clearmsg(); 
X	print1("Commandant ");
X	nprint1(Commandant);
X	nprint1(" promotes you to replace him,");
X	print2("and announces his own overdue retirement.");
X	morewait();
X	clearmsg();
X	print1("You are the new Commandant of the Legion!");
X	print2("The Emperor's Regalia is sold for a ridiculous sum.");
X	strcpy(Commandant,Player.name);
X	Commandantlevel = Player.level;
X	morewait();
X	clearmsg();
X	print1("You now know the Spell of Regeneration.");
X	Spells[S_REGENERATE].known = TRUE;
X	Player.rank[LEGION]=COMMANDANT;
X	Player.maxstr += 2;
X	Player.str += 2;
X	Player.maxcon += 2;
X	Player.con += 2;
X	print2("Your training is complete. You get top salary.");
X	Player.cash += 20000;
X      }
X      else if (Player.level <= Commandantlevel) {
X	clearmsg();
X	print1("Your CO expresses satisfaction with your progress.");
X	print2("But your service record does not yet permit promotion.");
X      }
X      else {
X	clearmsg();
X	print1("Why do you come empty handed?"); 
X	print2("You must return with the Regalia of the Demon Emperor!");
X      }
X      break;
X    case FORCE_LEADER:
X      clearmsg();
X      print1("Your CO expresses satisfaction with your progress.");
X      if (Player.guildxp[LEGION] < 4000)
X	print2("But your service record does not yet permit promotion.");
X      else  {
X	print2("You have been promoted to Legion Colonel!");
X	morewait();
X	print1("Your next promotion is contingent on the return of");
X	print2("the Regalia of the Demon Emperor.");
X	morewait();
X	print1("The Demon Emperor holds court at the base of a volcano");
X	print2("to the far south, in the heart of a swamp.");
X	morewait();
X	clearmsg();
X	print1("You have been taught the spell of heroism!");
X	Spells[S_HERO].known = TRUE;
X	Player.rank[LEGION]=COLONEL;
X	Player.maxstr++;
X	Player.str++;
X	Player.maxcon++;
X	Player.con++;
X	print2("You are given advanced training, and a raise.");
X	Player.cash += 10000;
X      }
X      break;
X    case CENTURION:
X      clearmsg();
X      print1("Your CO expresses satisfaction with your progress.");
X      if (Player.guildxp[LEGION] < 1500)
X	print2("But your service record does not yet permit promotion.");
X      else {
X	print2("You are now a Legion Force-Leader!");
X	Player.rank[LEGION]=FORCE_LEADER;
X	Player.maxstr++;
X	Player.str++;
X	morewait();
X	clearmsg();
X	print1("You receive more training, and bonus pay.");
X	Player.cash += 5000;
X      }
X      break;
X      case LEGIONAIRE:
X      clearmsg();
X      print1("Your CO expresses satisfaction with your progress.");
X      if (Player.guildxp[LEGION] < 400)
X	print2("But your service record does not yet permit promotion.");
X      else {
X	print2("You are promoted to Legion Centurion!");
X	morewait();
X	clearmsg();
X	print1("You get advanced training, and a higher salary.");
X	Player.rank[LEGION] = CENTURION;
X	Player.maxcon++;
X	Player.con++;
X	Player.cash += 2000;
X      }
X      break;
X    }
X  }
X}
X
Xvoid l_castle()
X{
X  pob o;
X  if (Player.level < 3) {
X    print1("You can't possibly enter the castle, you nobody!");
X    print2("Come back when you are famous.");
X  }
X  else {
X    print1("You are ushered into the castle.");
X    if (Player.rank[NOBILITY]<DUKE) {
X      print2("His Grace, ");
X      nprint2(Duke);
X      nprint2("-- Duke of Rampart! <fanfare>");
X      morewait();
X      clearmsg();
X    }
X    if (Player.rank[NOBILITY]==0) {
X      print1("Well, sirrah, wouldst embark on a quest? [yn] ");
X      if (ynq1() == 'y') {
X	print2("Splendid. Bring me the head of the Goblin King.");
X	Player.rank[NOBILITY]=COMMONER;
X      }
X      else {
X	print1("You scoundrel! Guards! Take this blackguard away!");
X	morewait();
X	p_damage(25,UNSTOPPABLE,"castle guards for lese majeste");
X	send_to_jail();
X      }
X    }
X    else if (Player.rank[NOBILITY]==COMMONER) {
X      if (find_and_remove_item(CORPSEID,ML3+5)) {
X	print1("Good job, sirrah! I promote you to the rank of esquire.");
X	Player.rank[NOBILITY]=ESQUIRE;
X	gain_experience(100);
X	print2("Now that you have proved yourself true, another quest!");
X	morewait();
X	print1("Bring to me a Holy Defender!");
X	print2("One is said to be in the possession of the Great Wyrm");
X	morewait();
X	clearmsg();
X	print1("in the depths of the sewers below the city.");
X      }
X      else print2("Do not return until you achieve the quest, caitiff!");
X    }
X    else if (Player.rank[NOBILITY]==ESQUIRE) {
X      if (find_and_remove_item(WEAPONID+34,-1)) {
X	print1("My thanks, squire. In return, I dub thee knight!");
X	Player.rank[NOBILITY]=KNIGHT;
X	gain_experience(1000);
X	print2("If thou wouldst please me further...");
X	morewait();
X	print1("Bring me a suit of dragonscale armor.");
X	print2("You might have to kill a dragon to get one....");
X      }
X      else print2("Greetings, squire. My sword? What, you don't have it?");
X    }
X    else if (Player.rank[NOBILITY]==KNIGHT) {
X      if (find_and_remove_item(ARMORID+12,-1)) {
X	print1("Thanks, good sir knight.");
X	print2("Here are letters patent to a peerage!");
X	Player.rank[NOBILITY]=LORD;
X	gain_experience(10000);
X	morewait();
X	print1("If you would do me a final service...");
X	print2("I require the Orb of Mastery. If you would be so kind...");
X	morewait();
X	print1("By the way, you might find the Orb in the possession");
X	print2("Of the Elemental Master on the Astral Plane");
X      }
X      else print2("Your quest is not yet complete, sir knight.");
X    }
X    else if (Player.rank[NOBILITY]==LORD) {
X      if (find_item(&o,ARTIFACTID+0,-1)) {
X	print1("My sincerest thanks, my lord.");
X	print2("You have proved yourself a true paragon of chivalry");
X	morewait();
X	print1("I abdicate the Duchy in your favor....");
X	print2("Oh, you can keep the Orb, by the way....");
X	Player.rank[NOBILITY]=DUKE;
X	gain_experience(10000);
X	strcpy(Duke,Player.name);
X      }
X      else print2("I didn't really think you were up to the task....");
X    }
X  }
X}
X
X
Xvoid l_arena()
X{
X  char response;
X  pob newitem;
X  int i,prize,monsterlevel;
X  print1("Rampart Coliseum");
X  if (Player.rank[ARENA] == 0) {
X    print2("Enter the games, or Register as a Gladiator? [e,r,ESCAPE] ");
X    do response = mcigetc();
X    while ((response != 'e') && (response != 'r') && (response != ESCAPE));
X  }
X  else {
X    print2("Enter the games? [yn] ");
X    response = ynq2();
X    if (response == 'y') response = 'e';
X    else response = ESCAPE;
X  }
X  if (response == 'r') {
X    if (Player.rank[ARENA]>0)
X      print2("You're already a gladiator....");
X    else if (Player.rank[ORDER]>0)
X      print2("We don't let Paladins into our Guild.");
X    else if (Player.rank[LEGION]>0)
X      print2("We don't train no stinkin' mercs!");
X    else if (Player.str < 13)
X      print2("Yer too weak to train!");
X    else if (Player.agi < 12)
X      print2("Too clumsy to be a gladiator!");
X    else {
X      print1("Ok, yer now an Arena Trainee.");
X      print2("Here's a wooden sword, and a shield");
X      morewait();
X      clearmsg();
X      newitem = ((pob) malloc(sizeof(objtype)));
X      *newitem = Objects[WEAPONID+17]; /* club */
X      gain_item(newitem);
X      newitem = ((pob) malloc(sizeof(objtype)));
X      *newitem = Objects[SHIELDID+2]; /* shield */
X      gain_item(newitem);
X      Player.rank[ARENA] = TRAINEE;
X      Arena_Opponent = 3;
X      morewait();
X      clearmsg();
X      print1("You've got 5000Au credit at the Gym.");
X      Gymcredit+=5000;
X    }
X  }
X  else if (response == 'e') {
X    print1("OK, we're arranging a match....");
X    morewait();
X    Arena_Monster = ((pmt) malloc(sizeof(montype)));
X    switch(Arena_Opponent) {
X    case 0: 
X      *Arena_Monster = Monsters[ML1+9];
X      break;
X    case 1:
X      *Arena_Monster = Monsters[ML0+0];
X      break;
X    case 2:
X      *Arena_Monster = Monsters[ML1+21];
X      break;
X    case 3:
X      *Arena_Monster = Monsters[ML1+6];
X      break;
X    case 4:
X      *Arena_Monster = Monsters[ML1+0];
X      break;
X    case 5:
X      *Arena_Monster = Monsters[ML2+4];
X      break;      
X    case 6:
X      *Arena_Monster = Monsters[ML2+0];
X      break;
X    case 7:
X      *Arena_Monster = Monsters[ML3+0];
X      break;
X    case 8:
X      *Arena_Monster = Monsters[ML2+11];
X      break;
X    case 9:
X      *Arena_Monster = Monsters[ML4+0];
X      break;
X    case 10:
X      *Arena_Monster = Monsters[ML5+5];
X      break;
X    case 11:
X      *Arena_Monster = Monsters[ML6+4];
X      break;
X    case 12:
X      *Arena_Monster = Monsters[ML6+5];
X      break;
X    case 13: 
X      *Arena_Monster = Monsters[ML8+2];
X      break;
X    case 14:
X      *Arena_Monster = Monsters[ML8+4];
X      break;
X    case 15:
X      *Arena_Monster = Monsters[ML9+0];
X      break;
X    default:
X      if ((Player.rank[ARENA] < 5) && (Player.rank[ARENA] > 0)) {
X	strcpy(Str1,Champion);
X	strcat(Str1,", the arena champion");
X	*Arena_Monster = Monsters[ML0+8];
X	Arena_Monster->monstring = salloc(Str1);
X	strcpy(Str2,"The corpse of ");
X	strcat(Str2,Str1);
X	Arena_Monster->corpsestr = salloc(Str2);
X	Arena_Monster->level = 20;
X	Arena_Monster->hp = Championlevel*Championlevel*5;
X	Arena_Monster->hit = Championlevel*4;
X	Arena_Monster->ac = Championlevel*3;
X	Arena_Monster->dmg = 100+Championlevel*2;
X	Arena_Monster->xpv = Championlevel*Championlevel*5;
X	Arena_Monster->speed = 3;
X	Arena_Monster->meleestr = calloc(30,sizeof(char));
X	strcpy(Arena_Monster->meleestr,"");
X	for(i=0;i<Championlevel/5;i++)
X	  strcat(Arena_Monster->meleestr,"L?R?");
X      }
X      else {
X	do 
X	  *Arena_Monster = Monsters[random_range(ML9-ML0)+ML0];
X	while ((Arena_Monster->uniqueness != COMMON) || 
X	       (Arena_Monster->dmg == 0));
X      }
X      break;
X    }
X    
X    
X    
X    monsterlevel = Arena_Monster->level;
X    
X    if (Arena_Monster->level != 20) {
X      strcpy(Str1,nameprint());
X      strcat(Str1," the ");
X      strcat(Str1,Arena_Monster->monstring);
X      Arena_Monster->monstring = salloc(Str1);
X      strcpy(Str2,"The corpse of ");
X      strcat(Str2,Str1);
X      Arena_Monster->corpsestr = salloc(Str2);
X    }
X    Arena_Monster->uniqueness = UNIQUE_MADE;
X    print1("You have a challenger: ");
X    print2(Arena_Monster->monstring);
X    Arena_Monster->attacked = TRUE;
X    m_status_set(Arena_Monster,HOSTILE);
X    morewait();
X    clearmsg();
X    print1("Let the battle begin....");
X    change_environment(E_ARENA);
X
X    time_clock(TRUE);
X    while (Current_Environment == E_ARENA) 
X      time_clock(FALSE);
X
X    if (! Arena_Victory) {
X      print1("The crowd boos your craven behavior!!!");
X      print2("You are thrown out of the Gladiator's Guild!");
X      morewait();
X      clearmsg();
X      if (Gymcredit > 0) print1("Your credit at the gym is cut off!");
X      Gymcredit = 0;
X      Player.rank[ARENA] = -1;
X    }      
X    else {
X      Arena_Opponent++;
X      if (monsterlevel == 20) {
X	print1("The crowd roars its approval!");
X	if (Player.rank[ARENA]) {
X	  print2("You are the new Arena Champion!");
X	  Championlevel = Player.level;
X	  strcpy(Champion,Player.name);
X	  Player.rank[ARENA] = 5;
X	  morewait();
X	  print1("You are awarded the Champion's Spear: Victrix!");
X	  morewait();
X	  newitem = ((pob) malloc(sizeof(objtype)));
X	  *newitem = Objects[WEAPONID+35];
X	  gain_item(newitem);
X	  
X	}
X	else {
X	  print1("As you are not an official gladiator,");
X	  nprint1("you are not made Champion.");
X	  morewait();
X	}
X      }
X      morewait();
X      clearmsg();
X      print1("Good fight! ");
X      nprint1("Your prize is: ");
X      prize = max(25,monsterlevel * 50);
X      if (Player.rank[ARENA] > 0) prize *= 2;
X      mnumprint(prize);
X      nprint1("Au.");
X      Player.cash+=prize;
X      if ((Player.rank[ARENA]<4) &&
X	  (Arena_Opponent>5) &&
X	  (Arena_Opponent % 3 == 0)) {
X	if (Player.rank[ARENA]>0) {
X	  Player.rank[ARENA]++;
X	  morewait();
X	  print1("You've been promoted to a stronger class!");
X	  print2("You are also entitled to additional training.");
X	  Gymcredit+=Arena_Opponent*1000;
X	}
X      }
X    }
X    xredraw();
X  }
X  else clearmsg();
X}
X
END_OF_FILE
if test 14561 -ne `wc -c <'oguild1.c'`; then
    echo shar: \"'oguild1.c'\" unpacked with wrong size!
fi
# end of 'oguild1.c'
fi
if test -f 'oitemf3.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'oitemf3.c'\"
else
echo shar: Extracting \"'oitemf3.c'\" \(15783 characters\)
sed "s/^X//" >'oitemf3.c' <<'END_OF_FILE'
X/* omega copyright (C) 1987,1988 by Laurence Raphael Brothers */
X/* oitemf3.c */
X
X/* mostly artifact and stick functions */
X
X#include "oglob.h"
X
X/* amulet of the planes */
Xvoid i_planes(o)
Xpob o;
X{
X  if (Player.mana < 1) print1("The amulet spits some multicolored sparks.");
X  else {
X    print1("You focus mana into the amulet....");
X    Player.mana = max(0,Player.mana-100);
X    dataprint();
X    morewait();
X    strategic_teleport(1);
X  }
X}
X
X
X/* the sceptre of high magic */
Xvoid i_sceptre(o)
Xpob o;
X{
X  if (HiMagicUse == Date) 
X    print1("The Sceptre makes a sort of dull 'thut' noise.");
X  else {
X    HiMagicUse = Date;
X    print1("With a shriek of tearing aether, a magic portal appears!");
X    print2("Step through? [yn] ");
X    if (ynq()=='y') change_environment(E_COURT);
X  }
X  print1("The sceptre seems to subside. You hear a high whine, as of");
X  print2("capacitors beginning to recharge.");
X}
X
X
X/* the star gem */
Xvoid i_stargem(o)
Xpob o;
X{
X  if (StarGemUse == Date) {
X    print1("The Star Gem glints weakly as if to say:");
X    print2("'You have used me overmuch.'");
X    print3("and it vanishes a puff of regret.");
X    dispose_lost_objects(1,o);
X  }
X  else {
X    StarGemUse = Date;
X    if (o->blessing < 1) {
X      print1("The Star Gem shines brightly and emits a musical tone.");
X      print2("You see a dark cloud roil away from it.");
X      morewait();
X      o->blessing = 10;
X    }
X    print1("The star gem flares with golden light!");
X    morewait();
X    if (Player.status[ILLUMINATION] < 1000) {
X      print1("Interesting, you seem to be permanently accompanied");
X      print2("by a friendly lambent glow....");
X      morewait();
X      Player.status[ILLUMINATION] = 1500;
X    }
X    print1("You suddenly find yourself whisked away by some unknown force!");
X    morewait();
X    setgamestatus(COMPLETED_ASTRAL);
X    change_environment(E_COUNTRYSIDE);
X    Player.x = 61;
X    Player.y = 3;
X    screencheck(3);
X    drawvision(Player.x,Player.y);
X    locprint("Star Peak");
X    print2("The Star Gem's brilliance seems to fade.");
X  }
X}
X
X
X/* wand of fear */
Xvoid i_fear(o)
Xpob o;
X{
X  int x=Player.x,y=Player.y;
X  Objects[o->id].known = 1;
X  o->known = max(1,o->known);
X  setspot(&x,&y);
X  if (o->blessing < 0) {
X    x = Player.x;
X    y = Player.y;
X  }
X  inflict_fear(x,y);
X}
X
X	
X
Xvoid i_juggernaut(o)
Xpob o;
X{
X  int d,x=Player.x,y=Player.y;
X  print1("You activate the Juggernaut of Karnak!");
X  if (! o->known) {
X    print2("Uh, oh, it's coming this way!");
X    p_death("The Juggernaut of Karnak");
X  }
X  else {
X    d = getdir();
X    if (d == ABORT)
X      print2("You deactivate the Juggernaut before it escapes.");
X    else {
X      print2("Vroom!");
X      while (inbounds(x+Dirs[0][d],y+Dirs[1][d])) {
X	x+=Dirs[0][d];
X	y+=Dirs[1][d];
X	Level->site[x][y].locchar = FLOOR;
X	Level->site[x][y].p_locf = L_NO_OP;
X	if (Level->site[x][y].creature != NULL) {
X	  mprint("You hear a distant scream....");
X	  m_death(Level->site[x][y].creature);
X	}
X      }
X      gain_experience(1000);
X    }
X  }
X  dispose_lost_objects(1,o);
X}
X
X
Xvoid i_symbol(o)
Xpob o;
X{
X  int i;
X  if (! o->known)
X    print1("Nothing seems to happen.");
X  /* if o->charge != 17, then symbol was stolen from own high priest! */
X  else if ((o->aux != Player.patron) || (o->charge != 17)){
X    print1("You invoke the deity...");
X    print2("...who for some reason seems rather annoyed at you...");
X    print3("You are enveloped in Godsfire!");
X    morewait();
X    for(;Player.hp>1;Player.hp--) {
X      dataprint();
X      morewait();
X      for(i=0;i<MAXITEMS;i++)
X	if (Player.possessions[i] != NULL)
X	  dispose_lost_objects(Player.possessions[i]->number,
X			       Player.possessions[i]);
X      Player.mana = 0;
X    }
X  }
X  else if (SymbolUseHour == hour()) {
X    print1("Your deity frowns upon this profligate use of power...");
X    print2("Shazam! A bolt of Godsfire! Your symbol shatters!");
X    dispose_lost_objects(1,o);
X    Player.hp = 1;
X    dataprint();
X  }
X  else {
X    print1("A mystic flow of theurgic energy courses through your body!");
X    SymbolUseHour = hour();
X    cleanse(1);
X    heal(10);
X    Player.mana = max(Player.mana,calcmana());
X  }
X}
X
X
X
Xvoid i_crystal(o)
Xpob o;
X{
X  if (!o->known) print1("You can't figure out how to activate this orb.");
X  else {
X    print1("You gaze into your crystal ball.");
X    if (ViewHour == hour()) print2("All you get is Gilligan's Island reruns.");
X    else if ((o->blessing<0) || (Player.iq+Player.level < random_range(30))) {
X      ViewHour = hour();
X      print2("Weird interference patterns from the crystal fog your mind....");
X      amnesia();
X    }
X    else {
X      ViewHour = hour();
X      print2("You sense the presence of life...");
X      mondet(1);
X      morewait();
X      print2("You sense the presence of objects...");
X      objdet(1);
X      morewait();
X      print2("You begin to see visions of things beyond your ken....");
X      hint();
X    }
X  }
X}
X    
Xvoid i_antioch(o)
Xpob o;
X{
X  int x=Player.x,y=Player.y;
X  int count;
X  if (!o->known){
X    print1("Ka-Boom!");
X    print2("You seem to have annihilated yourself.");
X    p_death("The Holy Hand-Grenade of Antioch");
X  }
X  else {
X    print1("Bring out the Holy Hand-Grenade of Antioch!");
X    setspot(&x,&y);
X    print2("Ok, you pull the pin.....");
X    morewait();
X    print1("What do you count up to? ");
X    count = parsenum();
X    if ((count < 3)&&(Level->site[x][y].creature!=NULL)) {
X      print1("`Three shall be the number of thy counting....");
X      print2("And the number of thy counting shall be three.'");
X      print3("Your target picks up the grenade and throws it back!");
X      morewait();
X      clearmsg();
X      print1("Ka-Boom!");
X      p_death("The Holy Hand-Grenade of Antioch");
X    }
X    else if (count>3) {
X      print1("`Three shall be the number of thy counting.");
X      print2("And the number of thy counting shall be three.'");
X      morewait();
X      clearmsg();
X      print1("Ka-Boom!");
X      p_death("The Holy Hand-Grenade of Antioch");
X    }
X    else {
X      print1("Ka-Boom!");
X      gain_experience(1000);
X      Level->site[x][y].locchar = TRAP;
X      Level->site[x][y].p_locf = L_TRAP_DOOR;
X      if (Level->site[x][y].creature != NULL) {
X	m_death(Level->site[x][y].creature);
X	print2("You are covered with gore.");
X      }
X      Level->site[x][y].things = NULL;
X    }
X  }
X  dispose_lost_objects(1,o);
X}
X
Xvoid i_kolwynia(o)
Xpob o;
X{
X  int i;
X  if (! o->known) {
X    print1("You destroy youself with a mana storm. How sad.");
X    p_death("Kolwynia, The Key That Was Lost");
X  }
X  else {
X    gain_experience(5000);
X    print1("You seem to have gained complete mastery of magic.");
X    Player.pow = Player.maxpow = 2*Player.maxpow;
X    for(i=0;i<NUMSPELLS;i++)
X      Spells[i].known = TRUE;
X  }
X  dispose_lost_objects(1,o);
X}
X
Xvoid i_enchantment(o)
Xpob o;
X{
X  char response;
X  if (ZapHour == hour()) 
X    print1("The staff doesn't seem to have recharged yet.");
X  else if (! o->known) {
X    ZapHour = hour();
X    print1("You blast the staff backwards....");
X    dispel(-1);
X  }
X  else {
X    ZapHour = hour();
X    print1("Zap with white or black end [wb] ");
X    do response = mcigetc(); while ((response != 'w') && (response != 'b'));
X    print2("The staff discharges!");
X    if (response = 'w') enchant(o->blessing*2+1);
X    else dispel(o->blessing);
X  }
X}
X
Xvoid i_helm(o)
Xpob o;
X{
X  if (HelmHour == hour()) 
X    print1("The helm doesn't seem to have recharged yet.");
X  else if (! o->known) {
X    HelmHour = hour();
X    print1("You put the helm on backwards....");
X    p_teleport(-1);
X  }
X  else {
X    HelmHour = hour();
X    print1("Your environment fades.... and rematerializes.");
X    p_teleport(o->blessing);
X  }
X}
X 
X
Xvoid i_death(o)
Xpob o;
X{
X  clearmsg();
X  print1("Bad move...");
X  p_death("The Potion of Death");
X}
X
Xvoid i_life(o)
Xpob o;
X{
X  clearmsg();
X  print1("Good move.");
X  Player.hp = Player.maxhp = 2 * Player.maxhp;
X  dispose_lost_objects(1,o);
X}
X
X
X
X/* f = fire, w = water, e = earth, a = air, m = mastery */
Xint orbcheck(element)
Xchar element;
X{
X  char response;
X  print1("The orb begins to glow with increasing intensity!");
X  print2("You have the feeling you need to do something more....");
X  morewait();
X  print1("Burn it in fire [f] ");
X  print2("Douse it with water [w] ");
X  morewait();
X  print1("Smash it against the earth [e] ");
X  print2("Toss is through the air [a] ");
X  morewait();
X  print1("Mix the above actions, doing them in sequence [m] ");
X  do {
X    print2("Which one [f,w,e,a,m] ");
X    response = mcigetc();
X  } while ((response != 'f') &&
X	   (response != 'w') &&
X	   (response != 'e') &&
X	   (response != 'a') &&
X	   (response != 'm'));
X  return(response == element);
X}
X
X/* orb functions */
Xvoid i_orbfire(o)
Xpob o;
X{
X  if (! orbcheck('f')) {
X    print1("Bad choice!");
X    print2("The Orb of Fire blasts you!");
X    fball(Player.x,Player.y,Player.x,Player.y,250);
X    o->known = 1;
X  }
X  else {
X    print1("The Orb of Fire flares a brilliant red!");
X    Spells[S_FIREBOLT].known = TRUE;
X    gain_experience(10000);
X    Player.immunity[FLAME]+=100;
X    print2("You feel fiery!");
X    o->plus = 100;
X    o->blessing = 100;
X    i_firebolt(o);
X  }
X  *o = Objects[ARTIFACTID+5];
X}
X
X
Xvoid i_orbwater(o)
Xpob o;
X{
X  if (! orbcheck('w')) {
X    print1("A serious mistake!");
X    print2("The Orb of Water blasts you!");
X    heal(-250);
X    o->known = 1;
X  }
X  else {
X    print1("The Orb of Water pulses a deep green!");
X    Spells[S_DISRUPT].known = TRUE;
X    Player.immunity[POISON]+=100;
X    gain_experience(10000);
X    print2("You feel wet!");
X    o->plus = 100;
X    o->blessing = 100;
X    i_disrupt(o);
X  }
X  *o = Objects[ARTIFACTID+5];
X}
X
X
X
X
X
X
Xvoid i_orbearth(o)
Xpob o;
X{
X  int i;
X  if (! orbcheck('e')) {
X    print1("What a maroon!");
X    print2("The Orb of Earth blasts you!");
X    Player.con -= 10;
X    if (Player.con < 3)
X      p_death("congestive heart failure");
X    else {
X      print3("Your possessions disintegrate!");
X      for (i=0;i<MAXITEMS;i++)
X	if (Player.possessions[i] != NULL) 
X	  dispose_lost_objects(Player.possessions[i]->number,
X			       Player.possessions[i]);
X      for (i=0;i<MAXPACK;i++) 
X	if (Player.pack[i] != NULL) {
X	  free((char *) Player.pack[i]);
X	  Player.pack[i] = NULL;
X	}
X      Player.packptr = 0;
X      o->known = 1;
X    }
X  }
X  else {
X    print1("The Orb of Earth emanates a brownish aura!");
X    Spells[S_DISINTEGRATE].known = TRUE;
X    gain_experience(10000);
X    Player.immunity[NEGENERGY]+=100;
X    print2("You feel earthy!");
X    o->plus = 100;
X    o->blessing = 100;
X    i_disintegrate(o);
X  }
X  *o = Objects[ARTIFACTID+5];
X}
X
X
Xvoid i_orbair(o)
Xpob o;
X{
X  if (! orbcheck('a')) {
X    print1("You lose!");
X    print2("The Orb of Air blasts you!");
X    lball(Player.x,Player.y,Player.x,Player.y,100);
X    o->known = 1;
X  }
X  else {
X    print1("The Orb of Air flashes blue!");
X    Spells[S_LBALL].known = TRUE; /* lball */
X    gain_experience(10000);
X    print2("You feel airy!");
X    Player.immunity[ELECTRICITY]+=100;
X    o->plus = 100;
X    o->blessing = 100;
X    i_invisible(o);
X    i_lbolt(o);
X  }
X  *o = Objects[ARTIFACTID+5];
X}
X
X
Xvoid i_orbmastery(o)
Xpob o;
X{
X
X  if (! orbcheck('m')) {
X    print1("A fatal error!");
X    print2("The Orb of Mastery blasts you to cinders!");
X    p_death("playing with the Orb of Mastery");
X    o->known = 1;
X  }
X  else if ((find_and_remove_item(ARTIFACTID+1,-1)) &&
X	   (find_and_remove_item(ARTIFACTID+2,-1)) &&
X	   (find_and_remove_item(ARTIFACTID+3,-1)) &&
X	   (find_and_remove_item(ARTIFACTID+4,-1))) {
X    print1("The Orb of Mastery radiates rainbow colors!");
X    print2("You feel godlike.");
X    Player.iq = Player.maxiq = 2 * Player.maxiq;
X    Player.pow = Player.maxpow = 2 * Player.maxpow;
X    Player.str = Player.maxstr = 2 * Player.maxstr;
X    Player.dex = Player.maxdex = 2 * Player.maxdex;
X    Player.con = Player.maxcon = 2 * Player.maxcon;
X    Player.agi = Player.maxagi = 2 * Player.maxagi;
X    dataprint();
X    morewait();
X    print1("You have been imbued with a cosmic power....");
X    morewait();
X    wish(1);
X    morewait();
X    clearmsg();
X    print2("You feel much more experienced.");
X    gain_experience(20000);
X    *o = Objects[ARTIFACTID+5];
X  }
X  else {
X    print1("The Orb of Mastery's power is unbalanced!");
X    print2("The Orb of Mastery blasts you to cinders!");
X    p_death("playing with the Orb of Mastery");
X  }  
X}
X
X
Xvoid i_orbdead(o)
Xpob o;
X{
X  int i;
X  print1("The burnt-out orb drains all your energy!");
X  for(i=0;i<NUMSPELLS;i++)
X    Spells[i].known = FALSE;
X  print2("You feel not at all like a mage.");
X  for(i=0;i<MAXITEMS;i++) {
X    if (Player.possessions[i] != NULL) {
X      Player.possessions[i]->plus = 0;
X      if (Player.possessions[i]->usef > 100)
X	Player.possessions[i]->usef = I_NOTHING;
X    }
X  }
X  print3("A storm of mundanity surounds you!");
X  level_drain(Player.level-1,"a Burnt-out Orb");
X  Player.mana = 0;
X  Player.pow -= 10;
X}
X
X
X
Xvoid i_dispel(o)
Xpob o;
X{
X  dispel((o->blessing > -1) ? o->blessing+random_range(3): o->blessing);
X}
X
X
X/* stick functions * /
X
X
X/* wand of apportation */
Xvoid i_apport(o)
Xpob o;
X{
X  o->known = max(1,o->known);
X  Objects[o->id].known = 1;
X  apport(o->blessing);
X}
X
X/* staff of firebolts */
Xvoid i_firebolt(o)
Xpob o;
X{
X  int x=Player.x,y=Player.y;
X  o->known = max(1,o->known);
X  Objects[o->id].known = 1;
X  setspot(&x,&y);
X  if (o->blessing < 0) {
X    x = Player.x;
X    y = Player.y;
X  }
X  fbolt(Player.x,Player.y,x,y,Player.dex*2+Player.level,75);
X}
X
X
Xvoid i_disintegrate(o)
Xpob o;
X{
X  int x=Player.x,y=Player.y;
X  o->known = max(1,o->known);
X  Objects[o->id].known = 1;
X  setspot(&x,&y);
X  if (o->blessing < 0) {
X    x = Player.x;
X    y = Player.y;
X  }
X  disintegrate(x,y);
X}
X
Xvoid i_disrupt(o)
Xpob o;
X{
X  int x=Player.x,y=Player.y;
X  o->known = max(1,o->known);
X  Objects[o->id].known = 1;
X  setspot(&x,&y);
X  if (o->blessing < 0) {
X    x = Player.x;
X    y = Player.y;
X  }
X  disrupt(x,y,100);
X}
X
X
X/* staff of lightning bolts */
Xvoid i_lbolt(o)
Xpob o;
X{
X  int x=Player.x,y=Player.y;
X  o->known = max(1,o->known);
X  Objects[o->id].known = 1;
X  setspot(&x,&y);
X  if (o->blessing < 0) {
X    x = Player.x;
X    y = Player.y;
X  }
X  lbolt(Player.x,Player.y,x,y,Player.dex*2+Player.level,75);
X}
X
X/* wand of magic missiles */
Xvoid i_missile(o)
Xpob o;
X{
X  int x=Player.x,y=Player.y;
X  o->known = max(1,o->known);
X  Objects[o->id].known = 1;
X  setspot(&x,&y);
X  if (o->blessing < 0) {
X    x = Player.x;
X    y = Player.y;
X  }
X  nbolt(Player.x,Player.y,x,y,Player.dex*2+Player.level,20);
X}
X
X/* wand of fire balls */
Xvoid i_fireball(o)
Xpob o;
X{
X  int x=Player.x,y=Player.y;
X  Objects[o->id].known = 1;
X  o->known = max(1,o->known);
X  setspot(&x,&y);
X  if (o->blessing < 0) {
X    x = Player.x;
X    y = Player.y;
X  }
X  fball(Player.x,Player.y,x,y,35);
X}
X
X
X/* wand of snowballs */
Xvoid i_snowball(o)
Xpob o;
X{
X  int x=Player.x,y=Player.y;
X  Objects[o->id].known = 1;
X  o->known = max(1,o->known);
X  setspot(&x,&y);
X  if (o->blessing < 0) {
X    x = Player.x;
X    y = Player.y;
X  }
X  snowball(Player.x,Player.y,x,y,20);
X}
X
X/* wand of lightning balls */
Xvoid i_lball(o)
Xpob o;
X{
X  int x=Player.x,y=Player.y;
X  Objects[o->id].known = 1;
X  o->known = max(1,o->known);
X  setspot(&x,&y);
X  if (o->blessing < 0) {
X    x = Player.x;
X    y = Player.y;
X  }
X  lball(Player.x,Player.y,x,y,50);
X}
X
X/* staff of sleep */
Xvoid i_sleep_other(o)
Xpob o;
X{
X  Objects[o->id].known = 1;
X  o->known = max(1,o->known);
X  sleep_monster(o->blessing);
X}
X
X/* rod of summoning */
X/* rod of summoning now always summons as if cursed */
Xvoid i_summon(o)
Xpob o;
X{
X  Objects[o->id].known = 1;
X  o->known = max(1,o->known);
X  summon(-1,-1);
X}
X
Xvoid i_hide(o)
Xpob o;
X{
X  int x=Player.x,y=Player.y;
X  Objects[o->id].known = 1;
X  o->known = max(1,o->known);
X  setspot(&x,&y);
X  hide(x,y);
X}
X
Xvoid i_polymorph(o)
Xpob o;
X{
X  Objects[o->id].known = 1;
X  o->known = max(1,o->known);
X  polymorph(o->blessing);
X}
END_OF_FILE
if test 15783 -ne `wc -c <'oitemf3.c'`; then
    echo shar: \"'oitemf3.c'\" unpacked with wrong size!
fi
# end of 'oitemf3.c'
fi
if test -f 'ommove.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'ommove.c'\"
else
echo shar: Extracting \"'ommove.c'\" \(5355 characters\)
sed "s/^X//" >'ommove.c' <<'END_OF_FILE'
X/* omega copyright (c) 1987,1988 by Laurence Raphael Brothers */
X/* ommove.c */
X/* monster move functions */
X
X#include "oglob.h"
X
X
X/* like m_normal_move, but can open doors */
Xvoid m_smart_move(m)
Xstruct monster *m;
X{
X  m_simple_move(m);
X}
X
X/* not very smart, but not altogether stupid movement */
Xvoid m_normal_move(m)
Xstruct monster *m;
X{
X  m_simple_move(m);
X}
X
X
X/* used by both m_normal_move and m_smart_move */
Xvoid m_simple_move(m)
Xstruct monster *m;
X{
X  int dx = sign(Player.x - m->x);
X  int dy = sign(Player.y - m->y);
X  erase_monster(m);
X  if (m->hp < Monsters[m->id].hp/4) {
X    dx = - dx;
X    dy = - dy;
X    m->movef = M_MOVE_SCAREDY;
X    if (m->uniqueness == COMMON) {
X      strcpy(Str2,"The ");
X      strcat(Str2,m->monstring);
X    }
X    else strcpy(Str2,m->monstring);
X    if (m->possessions != NULL) {
X      strcat(Str2," drops its treasure and flees!");
X      m_dropstuff(m);
X    }
X    else strcat(Str2," flees!");
X    mprint(Str2);
X    m->speed = min(2,m->speed-1);
X  }
X  if ((! m_statusp(m,HOSTILE)) || 
X      (Player.status[INVISIBLE] > 0)) m_random_move(m);
X  else {
X    if (m_unblocked(m,m->x+dx,m->y+dy))
X      movemonster(m,m->x+dx,m->y+dy);
X    else if (dx == 0) {
X      if (m_unblocked(m,m->x+1,m->y+dy))
X	movemonster(m,m->x+1,m->y+dy);
X      else if (m_unblocked(m,m->x-1,m->y+dy))
X	movemonster(m,m->x-1,m->y+dy);
X    }
X    
X    else if (dy == 0) {
X      if (m_unblocked(m,m->x+dx,m->y+1))
X	movemonster(m,m->x+dx,m->y+1);
X      else if (m_unblocked(m,m->x+dx,m->y-1))
X	movemonster(m,m->x+dx,m->y-1);
X    }
X    
X    else {
X      if (m_unblocked(m,m->x+dx,m->y))
X	movemonster(m,m->x+dx,m->y);
X      else if (m_unblocked(m,m->x,m->y+dy))
X	movemonster(m,m->x,m->y+dy);
X    }
X  }
X}
X
X
X
X
Xvoid m_move_animal(m)
Xstruct monster *m;
X{
X  if (m_statusp(m,HOSTILE))
X    m_normal_move(m);
X  else m_scaredy_move(m);
X}
X
X
X
X
X/* same as simple move except run in opposite direction */
Xvoid m_scaredy_move(m)
Xstruct monster *m;
X{
X  int dx = -sign(Player.x - m->x);
X  int dy = -sign(Player.y - m->y);
X  erase_monster(m);
X  if (Player.status[INVISIBLE]) m_random_move(m);
X  else {
X    if (m_unblocked(m,m->x+dx,m->y+dy))
X      movemonster(m,m->x+dx,m->y+dy);
X    else if (dx == 0) {
X      if (m_unblocked(m,m->x+1,m->y+dy))
X	movemonster(m,m->x+1,m->y+dy);
X      else if (m_unblocked(m,m->x-1,m->y+dy))
X	movemonster(m,m->x-1,m->y+dy);
X    }
X    
X    else if (dy == 0) {
X      if (m_unblocked(m,m->x+dx,m->y+1))
X	movemonster(m,m->x+dx,m->y+1);
X      else if (m_unblocked(m,m->x+dx,m->y-1))
X	movemonster(m,m->x+dx,m->y-1);
X    }
X    
X    else {
X      if (m_unblocked(m,m->x+dx,m->y))
X	movemonster(m,m->x+dx,m->y);
X      else if (m_unblocked(m,m->x,m->y+dy))
X	movemonster(m,m->x,m->y+dy);
X    }
X  }
X}
X
X
X
X
X
X
X/* for spirits (and earth creatures) who can ignore blockages because
X   either they are noncorporeal or they can move through stone */
Xvoid m_spirit_move(m)
Xstruct monster *m;
X{
X  int dx = sign(Player.x - m->x);
X  int dy = sign(Player.y - m->y);
X  erase_monster(m);
X  if (m->hp < Monsters[m->id].hp/6) {
X    dx = -dx;
X    dy = -dy;
X  }
X
X  if (Player.status[INVISIBLE] > 0) m_random_move(m);
X  else movemonster(m,m->x+dx,m->y+dy);
X}
X
X
X  
X/* fluttery dumb movement */
Xvoid m_flutter_move(m)
Xstruct monster *m;
X{
X  int trange,range = distance(m->x,m->y,Player.x,Player.y);
X  int i,tx,ty,nx=m->x,ny=m->y;
X  erase_monster(m);
X  if (Player.status[INVISIBLE] > 0) m_random_move(m);
X  else {
X    for (i=0;i<8;i++) {
X      tx = m->x+Dirs[0][i];
X      ty = m->y+Dirs[1][i];
X      trange = distance(tx,ty,Player.x,Player.y);
X      if (m->hp < Monsters[m->id].hp/6) {
X	if ((trange > range) && m_unblocked(m,tx,ty)) {
X	  range = trange;
X	  nx = tx;
X	  ny = ty;
X	}
X      }
X      else if ((trange <= range) && m_unblocked(m,tx,ty)) {
X	range = trange;
X	nx = tx;
X	ny = ty;
X      }
X    }
X    movemonster(m,nx,ny);
X  }
X}
X
X
Xvoid m_follow_move(m)
Xstruct monster *m;
X{
X  if (! m_statusp(m,HOSTILE))
X    m_normal_move(m);
X  else m_scaredy_move(m);
X}
X
X
X
X/* allows monsters to fall into pools, revealed traps, etc */
Xvoid m_confused_move(m)
Xstruct monster *m;
X{
X  int i,nx,ny,done=FALSE;
X  erase_monster(m);
X  for (i=0;((i<8)&&(! done));i++) {
X    nx = m->x+random_range(3)-1;
X    ny = m->y+random_range(3)-1;
X    if (unblocked(nx,ny) && 
X	((nx != Player.x) || 
X	 (ny != Player.y))) {
X      done = TRUE;
X      movemonster(m,nx,ny);
X    }
X  }
X}
X
Xvoid m_random_move(m)
Xstruct monster *m;
X{
X  int i,nx,ny,done=FALSE;
X  erase_monster(m);
X  for (i=0;((i<8)&&(! done));i++) {
X    nx = m->x+random_range(3)-1;
X    ny = m->y+random_range(3)-1;
X    if (m_unblocked(m,nx,ny) && 
X	((nx != Player.x) || 
X	 (ny != Player.y))) {
X      done = TRUE;
X      movemonster(m,nx,ny);
X    }
X  }
X}
X
X    
X/* monster removed from play */
Xvoid m_vanish(m)
Xstruct monster *m;
X{
X  if (m->uniqueness == COMMON) {
X    strcpy(Str2,"The ");
X    strcat(Str2,m->monstring);
X  }
X  else strcpy(Str2,m->monstring);
X  strcat(Str2," vanishes in the twinkling of an eye!");
X  mprint(Str2);
X  Level->site[m->x][m->y].creature = NULL;
X  erase_monster(m);
X  m->hp = -1; /* signals "death" -- no credit to payer, though */
X}
X
X/* monster still in play */
Xvoid m_teleport(m)
Xstruct monster *m;
X{
X  erase_monster(m);
X  if (m_statusp(m,AWAKE)) {
X    Level->site[m->x][m->y].creature = NULL;
X    putspot(m->x,m->y,getspot(m->x,m->y,FALSE));
X    findspace(&(m->x),&(m->y),-1);
X    Level->site[m->x][m->y].creature = m;
X  }
X}
END_OF_FILE
if test 5355 -ne `wc -c <'ommove.c'`; then
    echo shar: \"'ommove.c'\" unpacked with wrong size!
fi
# end of 'ommove.c'
fi
echo shar: End of archive 14 \(of 19\).
cp /dev/null ark14isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 19 archives.
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0