Xref: utzoo comp.sources.games.bugs:66 rec.games.misc:1594 Path: utzoo!utgpu!water!watmath!clyde!bellcore!decvax!decwrl!sun!pitstop!sundc!seismo!uunet!mcvax!ukc!its63b!ajcd From: ajcd@its63b.ed.ac.uk (Angus Duggan, Department of Computer Science, University of Edinburgh,) Newsgroups: comp.sources.games.bugs,rec.games.misc Subject: Re: Omega: Why you can't run from ghosts **SPOILER** Summary: omega disengaging bug + thieves' guild bug Keywords: ghost auto-death death-trap Message-ID: <980@its63b.ed.ac.uk> Date: 11 Feb 88 13:03:14 GMT References: <7328@apple.UUCP> Reply-To: ajcd@its63b.ed.ac.uk (Angus Duggan) Organization: I.T. School, Univ. of Edinburgh, U.K. Lines: 115 [warning - line eater at work] I'm sure that the disengaging code is wrong. The higher a monster's speed rating, the slower it is, so this code means that you can escape from fast monsters easier! I got into a stalemate with a phantom because I had a cloak of negimmunity & no way of killing it, so neither could do the other any harm. To avoid situations like this, I changed the code to include a 1% chance of disengaging from ANY fight, whatever the relative speeds & levels. Here's a context diff of the new code - *** oaux2.c~ Mon Feb 8 12:01:35 1988 --- oaux2.c Wed Feb 10 12:00:49 1988 *************** *** 675,682 **** switch(p_actions[i]-(p_actions[i]%10)){ case DISENGAGE: menuprint("\nYou try to disengage..."); ! if (Player.agi+Player.level + random_range(20) > ! m->level*2+m->speed*5+random_range(20)) { menuprint("\nYou get away!"); Tacmode = FALSE; Skipmonsters = TRUE; --- 675,683 ---- switch(p_actions[i]-(p_actions[i]%10)){ case DISENGAGE: menuprint("\nYou try to disengage..."); ! if ((Player.agi+Player.level + random_range(20) > ! m->level*3+(25-m->speed)+random_range(20)) || ! (random_range(100) == 1)) { menuprint("\nYou get away!"); Tacmode = FALSE; Skipmonsters = TRUE; There's also a bug in the code for becoming a guildmaster - in some cases when you have brought back the objects requested, you are still not promoted to guildmaster. Here's a diff which fixes these bugs. *** oguild.c~ Mon Feb 8 11:56:14 1988 --- oguild.c Wed Feb 10 10:37:06 1988 *************** *** 123,129 **** else if (Player.rank[THIEVES]==TMASTER) { if (Player.level-Thieflevel <= Shadowlordlevel) mprint("You are not experienced enough to advance."); ! if (! (i=inpack(THINGID+16,-1))+1) mprint("You must bring back Morgon's Badge!"); else { mprint("The Badge is put in a place of honor in the Guild Hall."); --- 123,129 ---- else if (Player.rank[THIEVES]==TMASTER) { if (Player.level-Thieflevel <= Shadowlordlevel) mprint("You are not experienced enough to advance."); ! if (! ((i=inpack(THINGID+16,-1))+1)) mprint("You must bring back Morgon's Badge!"); else { mprint("The Badge is put in a place of honor in the Guild Hall."); *************** *** 293,299 **** else if (Player.rank[COLLEGE]==MAGE) { if (Player.level-Collegelevel <= Archmagelevel) mprint("You are not experienced enough to advance."); ! else if (! (i=(inpack(CORPSEID,ML10+1)+1))) mprint("You must return with the heart of the Eater of Magic!"); else { mprint("The Heart is sent to the labs for analysis."); --- 293,299 ---- else if (Player.rank[COLLEGE]==MAGE) { if (Player.level-Collegelevel <= Archmagelevel) mprint("You are not experienced enough to advance."); ! else if (! ((i=inpack(CORPSEID,ML10+1))+1)) mprint("You must return with the heart of the Eater of Magic!"); else { mprint("The Heart is sent to the labs for analysis."); *************** *** 444,450 **** else if (Player.rank[CIRCLE]==HIGHSORCEROR) { if (Player.level-Sorcerorlevel <= Primelevel) mprint("You are not experienced enough to advance."); ! else if (! (i=(inpack(CORPSEID,ML10+2)+1))) mprint("You must return with the Crown of the LawBringer!"); else { mprint("The Crown is ritually sacrificed to the Lords of Chaos."); --- 444,450 ---- else if (Player.rank[CIRCLE]==HIGHSORCEROR) { if (Player.level-Sorcerorlevel <= Primelevel) mprint("You are not experienced enough to advance."); ! else if (! ((i=inpack(CORPSEID,ML10+2))+1)) mprint("You must return with the Crown of the LawBringer!"); else { mprint("The Crown is ritually sacrificed to the Lords of Chaos."); *************** *** 586,592 **** else if (Player.rank[LEGION]==COLONEL) { if (Player.level-Merclevel <= Commandantlevel) mprint("Your record does not yet permit promotion."); ! else if (! (i=inpack(WEAPONID+37,-1)+1)) mprint("You must return with the Sword of the Dark Emperor!"); else { mprint("The Sword of Empire is melted down...."); --- 586,592 ---- else if (Player.rank[LEGION]==COLONEL) { if (Player.level-Merclevel <= Commandantlevel) mprint("Your record does not yet permit promotion."); ! else if (! ((i=inpack(WEAPONID+37,-1))+1)) mprint("You must return with the Sword of the Dark Emperor!"); else { mprint("The Sword of Empire is melted down...."); -- Angus Duggan, Department of Computer Science, University of Edinburgh, James Clerk Maxwell Building, The King's Buildings, Mayfield Road, Edinburgh, EH9 3JZ, Scotland, U.K. JANET: ajcd@uk.ac.ed.ecsvax ARPA: ajcd%ed.ecsvax@nss.cs.ucl.ac.uk USENET: ajcd@ecsvax.ed.ac.uk UUCP: ...!mcvax!ukc!ed.ecsvax!ajcd BITNET: ukacrl.earn!ed.ecsvax!ajcd or ajcd%ed.ecsvax@uk.ac