[rec.games.misc] Omega: Why you can't run from ghosts **SPOILER**

pwing@apple.UUCP (Philip L. Wing) (02/05/88)

I've finally figured out why ghosts are a TCM death trap in Omega.

Hit 'n' now if you don't want to see a spoiler.

Ok.  I cheated.  I took a look at the "disengaging" code and the data for
ghosts.  It seems that your ability to disengage is dependent on your
agility and your level plus a random number.  This is compared to the
monster's speed and level plus a random number.  If you have a greater
total, you escape.  The monster's number are increased by a factor to
determine this.  Unfortunately, the numbers for ghost requires that you
must be greater than 75th level to disengage from a ghost.
	It might be nice to warn a user before you accidentally engage in
TCM mode something you can never disengage from and have no hope of
defeating.  Remember, with ghosts your spells are also inactive because of
your fear.  Dieing 3 hit points at a time is like Chinese water torture!
	Oh, BTW, you can only harm ghosts with magic weapons.  Kind of
tough with only +0 weapons...

-- 
Live Long And Prosper and May The Force Be With You(And The Carrier, Too...)

				Philip L. Wing

mikep@ism780c.UUCP (Michael A. Petonic) (02/06/88)

Spoiler warning:

In article <7328@apple.UUCP> pwing@apple.UUCP (Philip L. Wing) writes:
>	It might be nice to warn a user before you accidentally engage in
>TCM mode something you can never disengage from and have no hope of
>defeating.  Remember, with ghosts your spells are also inactive because of
>your fear.  Dieing 3 hit points at a time is like Chinese water torture!

A way to disengage from anything is to hit Ctrl-\ and quit the
game.  It'll ask you to save and you give the affirmative.  Then
when you restart the saved game, you will be disengaged.

-MikeP

ajcd@its63b.ed.ac.uk (Angus Duggan, Department of Computer Science, University of Edinburgh,) (02/11/88)

[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