[comp.sources.games.bugs] Yet *MORE* Omega Bugs

jdjsnsr@nmtsun.nmt.edu (John Jenks) (02/05/88)

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:   When the character returns with the Badge of Morgan
                     the Justiciar, the Guild will not take it (no matter
                     how many badges he has:-), and the character cannot
                     advance.

2)  Collegium Magii: Requires the Heart of the Eater of Magic.  After the
                     heart is retrieved, the game hangs.  Occasionaly,
                     just summoning the monster (^xe) causes the message:

                     A strange numbing sensation comes over you...

                     and proceeds to hang.

3)  Circle of Sorcerers:  After retrieving the Crown of the LawBringer and
                     returning it to Circle HQ, the game once again *HANGS*

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)

----------------------------------
---Nwogsyau, Nwogsyau, Nwogsyau---
----------------------------------

shefter-bret@CS.YALE.EDU (Bret A. Shefter) (02/08/88)

*** REPLACE THIS LINE WITH YOUR MEmunch, munch, smack gulp <burp>

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."