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