Path: utzoo!mnetor!uunet!seismo!sundc!pitstop!sun!decwrl!decvax!tektronix!tekgen!tekred!games-request From: games-request@tekred.TEK.COM Newsgroups: comp.sources.games Subject: v03i053: omega - rogue like dungeon exploration, Part06/15 Message-ID: <2075@tekred.TEK.COM> Date: 20 Jan 88 03:18:47 GMT Sender: billr@tekred.TEK.COM Lines: 1984 Approved: billr@tekred.TEK.COM Submitted by: "Laurence R. Brothers" Comp.sources.games: Volume 3, Issue 53 Archive-name: omega/Part06 #! /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 Makefile.orig <<'END_OF_Makefile.orig' X# This makefile works on a Sun, but may not work on some other machines X# It is pretty obviou what it does, though, just runs cc. X# I use the -g flag for debugging info; if you don't intend to X# hack omega you might change the -g's to -O's for optimization X Xobjects = o.o oaux1.o oaux2.o ochar.o ocity.o ocom.o odepths.o\ X oeffect1.o oeffect2.o\ X oetc.o ofile.o ogen.o oguild.o oinititem1.o oinititem2.o\ X oinitmon0to3.o oinitmon4to7.o oinitmon8to10.o\ X oinv.o oitem.o oitemf.o olev.o omon.o omonf.o omove.o\ X oscr.o osite.o ospell.o otime.o outil.o X Xsourceflags = -g -c X Xobjectflags = -g X Xlibraries = -lcurses -ltermlib X Xomega: $(objects) X cc -o $@ $(objectflags) $(objects) $(libraries) X X$(objects): odefs.h oglob.h $(@:.o=.c) X cc $(sourceflags) $(@:.o=.c) END_OF_Makefile.orig if test 760 -ne `wc -c oinitmon0to3.c <<'END_OF_oinitmon0to3.c' X X/* oinitmon0to3.c */ X X X#include X#include X#include "oglob.h" X X X/* from oitem */ Xextern void make_weapon(); X X/* from omon */ Xextern void m_pickup(); X Xvoid initmon0to3(); X Xvoid initmon0to3() X{ X int i; X char filestring[80]; X FILE *fd; X pob tob; X X for(i=0;iospell.c <<'END_OF_ospell.c' X/* omega copyright (C) by Laurence Raphael Brothers, 1987 */ X/* ospell.c */ X/* functions having to do with spellcasting */ X X#include X#include "oglob.h" X X/* from outil */ Xextern int strprefix(); X X X/* from oscr */ Xextern void menuspellprint(),mprint(),printm(),menuclear(),dobackspace(); Xextern void maddch(),xredraw(),menuprint(); Xextern char mgetc(); X X/* from oaux */ Xextern void findspace(),setspot(); X X/* from oeffect 1 or 2*/ Xextern void identify(),mondet(),objdet(),fbolt(),lball(),nbolt(); Xextern void sleep_monster(),disintegrate(),heal(),enchant(),cure(); Xextern void disrupt(),knowledge(),regenerate(),displace(),truesight(); Xextern void augment(),invisible(),warp(),alert(),flux(),haste(); Xextern void recover_stat(),breathe(),apport(),clairvoyance(),sanctuary(); Xextern void bless(),summon(),p_teleport(),hero(),levitate(),accuracy(); Xextern void sanctify(),dispel(),polymorph(),hellfire(); Xextern void invulnerable(),shadowform(); 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(),drain(); 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(); X X Xvoid initspells(),expandspellabbrevs(); Xint getspell(),expandspell(); Xchar *spellid(); X Xvoid s_firebolt() X{ X int x=Player.x,y=Player.y; X setspot(&x,&y); X fbolt(Player.x,Player.y,x,y,Player.dex*2+Player.level,Player.level*10+10); X} X Xvoid s_missile() X{ X int x=Player.x,y=Player.y; X setspot(&x,&y); X nbolt(Player.x,Player.y,x,y,Player.dex*2+Player.level,Player.level*3+3); X} X Xvoid s_teleport() X{ X p_teleport(0); X} X/* disrupt */ Xvoid s_disrupt() X{ X int x=Player.x,y=Player.y; X setspot(&x,&y); X disrupt(x,y,Player.level*10+25); X} X X/* disintegrate */ Xvoid s_disintegrate() X{ X int x=Player.x,y=Player.y; X setspot(&x,&y); X disintegrate(x,y); X} X X/* sleep spell */ Xvoid s_sleep() X{ X sleep_monster(0); X} X Xvoid s_heal() X{ X heal(3); X} X Xvoid s_dispel() X{ X dispel((Player.level+Player.maxpow)/10); X} X Xvoid s_breathe() X{ X breathe(0); X} X Xvoid s_invisible() X{ X invisible(0); X} X X Xvoid s_warp() X{ X warp(1); X} X Xvoid s_enchant() X{ X enchant(1); X} X X Xvoid s_bless() X{ X bless(0); X} X X Xvoid s_restore() X{ X recover_stat(0); X} X X Xvoid s_cure() X{ X cure(0); X} X X Xvoid s_truesight() X{ X truesight(0); X} X X Xvoid s_hellfire() X{ X int x=Player.x,y=Player.y; X setspot(&x,&y); X hellfire(x,y,0); X} X X Xvoid s_knowledge() X{ X knowledge(0); X} X X Xvoid s_hero() X{ X hero(0); X} X X/* spell works immediately only from city level */ Xvoid s_return() X{ X if (Dlevel == NUMLEVELS-1) X mprint("Your spell doesn't seem to work."); X else { X mprint("You hear a whine as your spell begins to charge up."); X Player.status[RETURNING] = X (Dlevel == 0 ? 3 : 200-(Player.level+Player.pow)); X } X} X Xvoid s_desecrate() X{ X sanctify(-1); X} X X Xvoid s_haste() X{ X haste(0); X} X X Xvoid s_summon() X{ X summon(1,-1); X} X X Xvoid s_sanctuary() X{ X sanctuary(); X} X Xvoid s_sanctify() X{ X sanctify(1); X} X X Xvoid s_accuracy() X{ X accuracy(0); X} X X/* Has all kinds of effects in different circumstances. X Eventually will be more interesting */ Xvoid s_ritual() X{ X static int ritualhour = -1; /* only 1 ritual per hour */ X static int lastroom = -100; X pob symbol; X int i,j,roomno; X mprint("You begin your ritual...."); X mprint("You enter a deep trance. Time Passes..."); X Skipplayer = TRUE; X time_clock(); X Skipplayer = TRUE; X time_clock(); X Skipplayer = TRUE; X time_clock(); X Skipplayer = TRUE; X time_clock(); X Skipplayer = TRUE; X time_clock(); X if (ritualhour == hour()) X mprint("Your mental fatigue prevents from completing the ritual!"); X else if (random_range(100) > Player.iq+Player.pow+Player.level) X mprint("Your concentration was broken -- the ritual fails!"); X else { X mprint("You charge the ritual with magical energy and focus your will."); X mprint("Time Passes..."); X Skipplayer = TRUE; X time_clock(); X Skipplayer = TRUE; X time_clock(); X Skipplayer = TRUE; X time_clock(); X Skipplayer = TRUE; X time_clock(); X Skipplayer = TRUE; X time_clock(); X ritualhour = hour(); X /* set of random conditions for different ritual effects */ X if (Dlevel == 0) { X mprint("Flowing waves of mystical light congeal all around you."); X mprint("'Like wow, man! Colors!'"); X mprint("Appreciative citizens throw you spare change."); X Player.cash +=random_range(50); X } X else if ((roomno=Dungeon[Dlevel][Player.x][Player.y].roomnumber) >= 0) { X if (lastroom == Leveldata[Dlevel].rooms[roomno].rsi) X mprint("For some reason the ritual doesn't work this time..."); X else { X lastroom = Leveldata[Dlevel].rooms[roomno].rsi; X switch (lastroom) { X case 6: /* charred wall room */ X mprint("Blasts of fire fill the room!!!"); X for(i=Leveldata[Dlevel].rooms[roomno].left+1; X im,MOBILE); X break; X case 28: /* blue omega room */ X mprint("The Lords of Destiny look upon you...."); X if (Player.patron == DESTINY) { X mprint("Your patrons take pity on you."); X if ((Player.rank[PRIESTHOOD]charge = 17; X add_item_to_pack(symbol); X mprint("You feel uplifted."); X } X else gain_experience(min(1000,Player.xp)); X } X else if (random_range(3)==1) { X mprint("You feel Fated."); X gain_experience(Player.level*Player.level*10); X Player.hp = Player.maxhp; X } X else if (random_range(2)) { X mprint("You feel Doomed."); X Player.hp = 1; X Player.mana = 0; X Player.xp = 0; X } X else mprint("The Lords of Destiny laugh at you!"); X break; X default: X mprint("Well, not much effect. Chalk it up to experience."); X gain_experience(Player.level*5); X break; X } X } X } X else { X if (lastroom == Dungeon[Dlevel][Player.x][Player.y].roomnumber) X mprint("The ritual fails for some unexplainable reason."); X else { X lastroom = Dungeon[Dlevel][Player.x][Player.y].roomnumber; X switch (lastroom) { X case RS_WALLSPACE: X shadowform(); X break; X case RS_CORRIDOR: X haste(0); X break; X case RS_PONDS: X breathe(0); X break; X case RS_ADEPT: X hero(1); X break; X default: X mprint("The ritual doesn't seem to produce any tangible results..."); X gain_experience(Player.level*6); X } X } X } X } X} X X Xvoid s_invulnerable() X{ X invulnerable(); X} X Xvoid s_apport() X{ X apport(0); X} X Xvoid s_shadowform() X{ X shadowform(); X} X Xvoid s_alert() X{ X alert(0); X} X Xvoid s_regenerate() X{ X regenerate(0); X} X Xvoid s_clairvoyance() X{ X clairvoyance(10); X} X Xvoid s_drain() X{ X drain(0); X} X Xvoid s_levitate() X{ X levitate(0); X} X Xvoid s_polymorph() X{ X polymorph(0); X} X X X/* lball spell */ Xvoid s_lball() X{ X int x=Player.x,y=Player.y; X setspot(&x,&y); X lball(Player.x,Player.y,x,y,Player.level*10+10); X} X Xvoid s_identify() X{ X identify(0); X} X Xvoid s_objdet() X{ X objdet(0); X} X Xvoid s_mondet() X{ X mondet(0); X} X X X/* select a spell to cast */ Xint getspell() X{ X int spell= -2; X do { X mprint("\nCast Spell: [type spell abbrev, ?, or ESCAPE]: "); X spell = spellparse(); X } while (spell < ABORT); X return(spell); X} X X Xchar *spellid(id) Xint id; X{ X switch(id) { X case S_MON_DET:return("monster detection");break; X case S_OBJ_DET:return("object detection");break; X case S_IDENTIFY:return("identification");break; X case S_FIREBOLT:return("firebolt");break; X case S_LBALL:return("ball lightning");break; X case S_SLEEP:return("sleep");break; X case S_DISRUPT:return("disrupt");break; X case S_DISINTEGRATE:return("disintegrate");break; X case S_TELEPORT:return("teleport");break; X case S_MISSILE:return("magic missile"); break; X case S_HEAL:return("healing"); break; X case S_DISPEL:return("dispelling"); break; X case S_BREATHE:return("breathing"); break; X case S_INVISIBLE:return("invisibility"); break; X case S_WARP:return("the warp"); break; X case S_ENCHANT:return("enchantment"); break; X case S_BLESS:return("blessing"); break; X case S_RESTORE:return("restoration"); break; X case S_CURE:return("curing"); break; X case S_TRUESIGHT:return("true sight"); break; X case S_HELLFIRE:return("hellfire"); break; X case S_KNOWLEDGE:return("self knowledge"); break; X case S_HERO:return("heroism"); break; X case S_RETURN:return("return"); break; X case S_DESECRATE:return("desecration"); break; X case S_HASTE:return("haste"); break; X case S_SUMMON:return("summoning"); break; X case S_SANCTUARY:return("sanctuary"); break; X case S_ACCURACY:return("accuracy"); break; X case S_RITUAL:return("ritual magic"); break; X case S_INVULNERABLE:return("invulnerability"); break; X case S_APPORT:return("apportation"); break; X case S_SHADOWFORM:return("shadow form"); break; X case S_ALERT:return("alertness"); break; X case S_REGENERATE:return("regeneration"); break; X case S_SANCTIFY:return("sanctification"); break; X case S_CLAIRVOYANCE:return("clairvoyance"); break; X case S_DRAIN:return("energy drain"); break; X case S_LEVITATE:return("levitate"); break; X case S_POLYMORPH:return("polymorph"); break; X default:return("???"); break; X } X} X X X Xvoid initspells() X{ X int i; X X for (i=0; i= 'A') && (byte <= 'Z')) { X maddch(byte+'a'-'A'); X prefix[place] = byte+'a'-'A'; X prefix[place+1] = 0; X place++; X } X else if ((byte == ' ') || ((byte >= 'a') && (byte <= 'z'))) { X maddch(byte); X prefix[place] = byte; X prefix[place+1] = 0; X place++; X } X else if ((byte == 8) || (byte == 127)) { /* ^h or delete */ X prefix[place]=0; X if (place > 0) { X place--; X dobackspace(); X } X } X else if (byte == '?') { X maddch(byte); X expandspellabbrevs(prefix); X dobackspace(); X } X else if (byte == '\n') X spell = expandspell(prefix); X else if (byte == ESCAPE) X spell = ABORT; X } while (spell == -3); X xredraw(); X return(spell); X} X Xvoid expandspellabbrevs(prefix) Xchar prefix[80]; X{ X int i,printed=FALSE; X X menuclear(); X menuprint("\nPossible Spells:\n"); X for (i=0;i 1) { X mprint("That is an ambiguous abbreviation!"); X return(-2); X } X else return(spell); X} X END_OF_ospell.c if test 17364 -ne `wc -c