On Thu, 17 Aug 1995, Daniel W. Burke wrote: > same for detect invis potions also.... appears to be a general bug with > durations...... > > hmm..... what's the number range for sh_int? if it's not that high, > the when it hits the limit it will go negative..... maybe for > duration's a MAX duration has to be defined somewhere.... sh_int is typedef'ed as an unsigned short integer. I'm no C guru so I don't know exactly what this will look like in practice, but if you assume an integer is 16 bits, then a short int would be 8 bts. The unsigned part has me a little puzzled, but since negative values are used in the code, that sign has to come from somewhere, so knock off one more bit for the sign. What you've got left is 7 bits for a maximum value of 127 before you run into negative values. Solution? Setting a max duration as stated above seems to be the best way to handle it. You could also make duration a regular int, though this may cause problems (I believe you'd have to change the pfiles...ugh). Setting a limit wouldn't be tough. Just add a little routine in like: if (duration < -1) duration = 127; That would take advantage of the fact that 127 + 1 = -128 if my theory is correct. Sam
This archive was generated by hypermail 2b30 : 12/18/00 PST