… | |
… | |
281 | |
281 | |
282 | /* For all the stacked objects at this point, attempt a steal */ |
282 | /* For all the stacked objects at this point, attempt a steal */ |
283 | for (; tmp; tmp = next) |
283 | for (; tmp; tmp = next) |
284 | { |
284 | { |
285 | next = tmp->below; |
285 | next = tmp->below; |
286 | /* Minor hack--for multi square beings - make sure we get |
286 | /* Minor hack--for multi square beings - make sure we get |
287 | * the 'head' coz 'tail' objects have no inventory! - b.t. |
287 | * the 'head' coz 'tail' objects have no inventory! - b.t. |
288 | */ |
288 | */ |
289 | if (tmp->head) |
289 | if (tmp->head) |
290 | tmp = tmp->head; |
290 | tmp = tmp->head; |
291 | |
291 | |
292 | if (tmp->type != PLAYER && !tmp->flag [FLAG_MONSTER]) |
292 | if (tmp->type != PLAYER && !tmp->flag [FLAG_MONSTER]) |
293 | continue; |
|
|
294 | |
|
|
295 | /* do not reveal hidden DMs */ |
|
|
296 | if (tmp->type == PLAYER && tmp->flag [FLAG_WIZ] && tmp->contr->hidden) |
|
|
297 | continue; |
293 | continue; |
298 | |
294 | |
299 | if (attempt_steal (tmp, op, skill)) |
295 | if (attempt_steal (tmp, op, skill)) |
300 | { |
296 | { |
301 | if (tmp->type == PLAYER) /* no xp for stealing from another player */ |
297 | if (tmp->type == PLAYER) /* no xp for stealing from another player */ |
… | |
… | |
519 | } |
515 | } |
520 | |
516 | |
521 | for (tmp = GET_MAP_OB (m, x, y); tmp; tmp = tmp->above) |
517 | for (tmp = GET_MAP_OB (m, x, y); tmp; tmp = tmp->above) |
522 | { |
518 | { |
523 | /* Jump into creature */ |
519 | /* Jump into creature */ |
524 | if (tmp->flag [FLAG_MONSTER] |
520 | if (tmp->flag [FLAG_MONSTER] || tmp->type == PLAYER) |
525 | || (tmp->type == PLAYER && (!tmp->flag [FLAG_WIZ] || !tmp->contr->hidden))) |
|
|
526 | { |
521 | { |
527 | new_draw_info_format (NDI_UNIQUE, 0, pl, "You jump into %s%s.", tmp->type == PLAYER ? "" : "the ", &tmp->name); |
522 | new_draw_info_format (NDI_UNIQUE, 0, pl, "You jump into %s%s.", tmp->type == PLAYER ? "" : "the ", &tmp->name); |
528 | |
523 | |
529 | stop_jump (pl, i, spaces); |
524 | stop_jump (pl, i, spaces); |
530 | |
525 | |
… | |
… | |
587 | } |
582 | } |
588 | |
583 | |
589 | return attempt_jump (pl, dir, spaces, skill); |
584 | return attempt_jump (pl, dir, spaces, skill); |
590 | } |
585 | } |
591 | |
586 | |
592 | /* skill_ident() - this code is supposed to allow players to identify |
587 | /* skill_ident() - this code is supposed to allow players to identify |
593 | * classes of objects with the various "auto-ident" skills. Player must |
588 | * classes of objects with the various "auto-ident" skills. Player must |
594 | * have unidentified objects of the right type in order for the skill |
589 | * have unidentified objects of the right type in order for the skill |
595 | * to work. While multiple classes of objects may be identified, |
590 | * to work. While multiple classes of objects may be identified, |
596 | * this code is kind of yucky -- it would be nice to make it a bit |
591 | * this code is kind of yucky -- it would be nice to make it a bit |
597 | * more generalized. Right now, skill indices are embedded in this routine. |
592 | * more generalized. Right now, skill indices are embedded in this routine. |
598 | * Returns amount of experience gained (on successful ident). |
593 | * Returns amount of experience gained (on successful ident). |
599 | * - b.t. (thomas@astro.psu.edu) |
594 | * - b.t. (thomas@astro.psu.edu) |
600 | */ |
595 | */ |
601 | static int |
596 | static int |
602 | do_skill_detect_curse (object *pl, object *skill) |
597 | do_skill_detect_curse (object *pl, object *skill) |
603 | { |
598 | { |
604 | int success = 0; |
599 | int success = 0; |
… | |
… | |
1213 | |
1208 | |
1214 | /* ok let's meditate! Spell points are regained first, then once |
1209 | /* ok let's meditate! Spell points are regained first, then once |
1215 | * they are maxed we get back hp. Actual incrementing of values |
1210 | * they are maxed we get back hp. Actual incrementing of values |
1216 | * is handled by the do_some_living() (in player.c). This way magical |
1211 | * is handled by the do_some_living() (in player.c). This way magical |
1217 | * bonuses for healing/sp regeneration are included properly |
1212 | * bonuses for healing/sp regeneration are included properly |
1218 | * No matter what, we will eat up some playing time trying to |
1213 | * No matter what, we will eat up some playing time trying to |
1219 | * meditate. (see 'factor' variable for what sets the amount of time) |
1214 | * meditate. (see 'factor' variable for what sets the amount of time) |
1220 | */ |
1215 | */ |
1221 | |
1216 | |
1222 | new_draw_info (NDI_BLACK, 0, pl, "You meditate."); |
1217 | new_draw_info (NDI_BLACK, 0, pl, "You meditate."); |
1223 | |
1218 | |
1224 | if (pl->stats.sp < pl->stats.maxsp) |
1219 | if (pl->stats.sp < pl->stats.maxsp) |
… | |
… | |
1231 | pl->stats.hp++; |
1226 | pl->stats.hp++; |
1232 | pl->last_heal = -1; |
1227 | pl->last_heal = -1; |
1233 | } |
1228 | } |
1234 | } |
1229 | } |
1235 | |
1230 | |
1236 | /* write_note() - this routine allows players to inscribe messages in |
1231 | /* write_note() - this routine allows players to inscribe messages in |
1237 | * ordinary inscribable 'books' (anything that is not a SPELL). b.t. |
1232 | * ordinary inscribable 'books' (anything that is not a SPELL). b.t. |
1238 | */ |
1233 | */ |
1239 | static int |
1234 | static int |
1240 | write_note (object *pl, object *item, const char *msg, object *skill) |
1235 | write_note (object *pl, object *item, const char *msg, object *skill) |
1241 | { |
1236 | { |
… | |
… | |
1286 | return 0; |
1281 | return 0; |
1287 | } |
1282 | } |
1288 | |
1283 | |
1289 | /* write_scroll() - this routine allows players to inscribe spell scrolls |
1284 | /* write_scroll() - this routine allows players to inscribe spell scrolls |
1290 | * of spells which they know. Backfire effects are possible with the |
1285 | * of spells which they know. Backfire effects are possible with the |
1291 | * severity of the backlash correlated with the difficulty of the scroll |
1286 | * severity of the backlash correlated with the difficulty of the scroll |
1292 | * that is attempted. -b.t. thomas@astro.psu.edu |
1287 | * that is attempted. -b.t. thomas@astro.psu.edu |
1293 | */ |
1288 | */ |
1294 | static int |
1289 | static int |
1295 | write_scroll (object *pl, object *scroll, object *skill) |
1290 | write_scroll (object *pl, object *scroll, object *skill) |
1296 | { |
1291 | { |
… | |
… | |
1328 | if (random_roll (0, chosen_spell->level * 4 - 1, pl, PREFER_LOW) < skill->level) |
1323 | if (random_roll (0, chosen_spell->level * 4 - 1, pl, PREFER_LOW) < skill->level) |
1329 | { |
1324 | { |
1330 | object *newscroll = scroll->other_arch->instance (); |
1325 | object *newscroll = scroll->other_arch->instance (); |
1331 | scroll->decrease (); |
1326 | scroll->decrease (); |
1332 | newscroll->nrof = 1; |
1327 | newscroll->nrof = 1; |
|
|
1328 | newscroll->randomitems = 0; // make sure randomitems doesn't destroy the scroll |
1333 | |
1329 | |
1334 | pl->contr->play_sound (sound_find ("inscribe_success")); |
1330 | pl->contr->play_sound (sound_find ("inscribe_success")); |
1335 | |
1331 | |
1336 | if (!confused) |
1332 | if (!confused) |
1337 | { |
1333 | { |
… | |
… | |
1348 | newscroll->level = max (skill->level, chosen_spell->level); |
1344 | newscroll->level = max (skill->level, chosen_spell->level); |
1349 | new_draw_info (NDI_UNIQUE, 0, pl, "In your confused state, you write down some odd spell."); |
1345 | new_draw_info (NDI_UNIQUE, 0, pl, "In your confused state, you write down some odd spell."); |
1350 | } |
1346 | } |
1351 | |
1347 | |
1352 | object *tmp = chosen_spell->clone (); |
1348 | object *tmp = chosen_spell->clone (); |
|
|
1349 | tmp->flag [FLAG_APPLIED] = false; |
1353 | insert_ob_in_ob (tmp, newscroll); |
1350 | insert_ob_in_ob (tmp, newscroll); |
1354 | |
1351 | |
1355 | /* Same code as from treasure.C - so they can better merge. |
1352 | /* Same code as from treasure.C - so they can better merge. |
1356 | * if players want to sell them, so be it. |
1353 | * if players want to sell them, so be it. |
1357 | */ |
1354 | */ |