Path: utzoo!mnetor!uunet!husc6!cmcl2!yale!shefter-bret From: shefter-bret@CS.YALE.EDU (Bret A. Shefter) Newsgroups: comp.sources.games.bugs Subject: Re: Yet *MORE* Omega Bugs Message-ID: <22671@yale-celray.yale.UUCP> Date: 8 Feb 88 02:30:18 GMT References: <7319@apple.UUCP> <1346@nmtsun.nmt.edu> Sender: root@yale.UUCP Reply-To: shefter-bret@CS.YALE.EDU (Bret A. Shefter) Followup-To: comp.sources.games.bugs Organization: Yale University Computer Science Dept, New Haven CT Lines: 250 Keywords: omega bugs Summary: And a solution!!! (Might be SPOILERS) Distribution: *** REPLACE THIS LINE WITH YOUR MEmunch, munch, smack gulp In article <1346@nmtsun.nmt.edu> jdjsnsr@nmtsun.UUCP (John Jenks) writes: >This is my first time posting on the net, so please excuse any goofs >that I make. I detected more omega bugs concerning high-level >(ie. Wizard mode) characters. Characters can not advance completely >in any of the following areas: > >1) Thieves Guild >2) Collegium Magii >3) Circle of Sorcerers > >It's so much easier for the Gods to have fun when the game doesnt kill their >"Godlike characters" due to hangups! > >-jdjsnsr@nmtsun.UUCP (John Jenks) The solution is remarkably silly. There's a couple of typos in some of the places in oguild.c, and so conform_lost_object gets called with an incorrect (and occasionally invalid) value, depending on where in your pack the item is. For the Thieves' Guild, the problem is even sillier: there's a missing 'else'. Also none of the items get melted down or sacrificed or whatever. The fixes are below, along with some typo fixes, and contain some spoilers, so beware! ocom.c 1095c1095 < mprint("you shouldn't of ought to have done that...."); --- > mprint("You shouldn't ought to have done that...."); oguild.c 119,184c119,184 < if (Player.rank[THIEVES]==0) < mprint("You are not even a member!"); < else if (Player.rank[THIEVES]==SHADOWLORD) < mprint("You can't get any higher than this!"); < 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."); < conform_lost_object(Player.possessions[i]); < mprint("You are now the Shadowlord of the Thieves' Guild!"); < strcpy(Shadowlord,Player.name); < Shadowlordlevel = Player.level; < mprint("You now know the Spell of Shadowform."); < Spells[S_SHADOWFORM].known = TRUE; < Player.rank[THIEVES]=SHADOWLORD; < Player.maxagi += 2; < Player.maxdex += 2; < Player.agi += 2; < Player.dex += 2; < } < } --- > if (Player.rank[THIEVES]==0) > mprint("You are not even a member!"); > else if (Player.rank[THIEVES]==SHADOWLORD) > mprint("You can't get any higher than this!"); > else if (Player.rank[THIEVES]==TMASTER) { > if (Player.level-Thieflevel <= Shadowlordlevel) > mprint("You are not experienced enough to advance."); > else 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."); > conform_lost_object(Player.possessions[i]); > mprint("You are now the Shadowlord of the Thieves' Guild!"); > strcpy(Shadowlord,Player.name); > Shadowlordlevel = Player.level; > mprint("You now know the Spell of Shadowform."); > Spells[S_SHADOWFORM].known = TRUE; > Player.rank[THIEVES]=SHADOWLORD; > Player.maxagi += 2; > Player.maxdex += 2; > Player.agi += 2; > Player.dex += 2; > } > } 289,354c289,354 < if (Player.rank[COLLEGE] == 0) < mprint("You have not even been initiated, yet!"); < else if (Player.rank[COLLEGE]==ARCHMAGE) < mprint("You are at the pinnacle of mastery in the Collegium."); < 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."); < conform_lost_object(Player.possessions[i]); < mprint("You are now Archmage of the Collegium Magii!"); < strcpy(Archmage,Player.name); < Archmagelevel = Player.level-Collegelevel; < Player.rank[COLLEGE] = ARCHMAGE; < Player.maxiq += 5; < Player.iq += 5; < Player.maxpow += 5; < Player.pow += 5; < } < } --- > if (Player.rank[COLLEGE] == 0) > mprint("You have not even been initiated, yet!"); > else if (Player.rank[COLLEGE]==ARCHMAGE) > mprint("You are at the pinnacle of mastery in the Collegium."); > 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."); > conform_lost_object(Player.possessions[i]); > mprint("You are now Archmage of the Collegium Magii!"); > strcpy(Archmage,Player.name); > Archmagelevel = Player.level-Collegelevel; > Player.rank[COLLEGE] = ARCHMAGE; > Player.maxiq += 5; > Player.iq += 5; > Player.maxpow += 5; > Player.pow += 5; > } > } 445,460c445,460 < 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."); < conform_lost_object(Player.possessions[i]); < mprint("You are now the Prime Sorceror of the Inner Circle!"); < strcpy(Prime,Player.name); < Primelevel = Player.level-Sorcerorlevel; < mprint("You learn the Spell of Disintegration!"); < Spells[S_DISINTEGRATE].known = TRUE; < Player.rank[CIRCLE] = PRIME; < Player.maxpow += 10; < Player.pow += 10; < } --- > 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."); > conform_lost_object(Player.possessions[i]); > mprint("You are now the Prime Sorceror of the Inner Circle!"); > strcpy(Prime,Player.name); > Primelevel = Player.level-Sorcerorlevel; > mprint("You learn the Spell of Disintegration!"); > Spells[S_DISINTEGRATE].known = TRUE; > Player.rank[CIRCLE] = PRIME; > Player.maxpow += 10; > Player.pow += 10; > } 581,692c581,692 < done = TRUE; < if (Player.rank[LEGION]==0) < mprint("You have not even enlisted, yet!"); < else if (Player.rank[LEGION]==COMMANDANT) < mprint("You can't be promoted any further!"); < 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...."); < conform_lost_object(Player.possessions[i]); < mprint("You have been promoted to Commandant of the Legion!"); < strcpy(Commandant,Player.name); < Commandantlevel = Player.level-Merclevel; < mprint("You now know the Spell of Regeneration."); < Spells[S_REGENERATE].known = TRUE; < Player.rank[LEGION]=COMMANDANT; < Player.maxstr += 2; < Player.str += 2; < Player.maxcon += 2; < Player.con += 2; < mprint("You are awarded a vorpal sword, and mithril plate."); < newitem = ((pob) calloc(1,sizeof(objtype))); < *newitem = Objects[WEAPONID+31]; /* vorpal sword */ < newitem->known = 2; < add_item_to_pack(newitem); < newitem = ((pob) calloc(1,sizeof(objtype))); < *newitem = Objects[ARMORID+11]; /* mithril plate */ < newitem->known = 2; < mprint("You also receive a salary upgrade."); < add_item_to_pack(newitem); < Player.cash += 1000; < } < } --- > done = TRUE; > if (Player.rank[LEGION]==0) > mprint("You have not even enlisted, yet!"); > else if (Player.rank[LEGION]==COMMANDANT) > mprint("You can't be promoted any further!"); > 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...."); > conform_lost_object(Player.possessions[i]); > mprint("You have been promoted to Commandant of the Legion!"); > strcpy(Commandant,Player.name); > Commandantlevel = Player.level-Merclevel; > mprint("You now know the Spell of Regeneration."); > Spells[S_REGENERATE].known = TRUE; > Player.rank[LEGION]=COMMANDANT; > Player.maxstr += 2; > Player.str += 2; > Player.maxcon += 2; > Player.con += 2; > mprint("You are awarded a vorpal sword, and mithril plate."); > newitem = ((pob) calloc(1,sizeof(objtype))); > *newitem = Objects[WEAPONID+31]; /* vorpal sword */ > newitem->known = 2; > add_item_to_pack(newitem); > newitem = ((pob) calloc(1,sizeof(objtype))); > *newitem = Objects[ARMORID+11]; /* mithril plate */ > newitem->known = 2; > mprint("You also receive a salary upgrade."); > add_item_to_pack(newitem); > Player.cash += 1000; > } > } oinititem1.c 278c278 < strcpy(Objects[FOODID+13].objstr,"pecal twirl"); --- > strcpy(Objects[FOODID+13].objstr,"pecan twirl"); This game is bloody addictive... Spectre -- From the only slightly twisted mind of... shefter-bret@yale.ARPA * DISCLAIMER * shefter@yalecs.BITNET It's not my fault! ...!ihnp4!hsi!yale!shefter ...!decvax!yale!shefter "Elementary, my dear Riker...sir."