… | |
… | |
723 | int i, j; |
723 | int i, j; |
724 | float f, max = 9, added_speed = 0, bonus_speed = 0, sp_tmp, speed_reduce_from_disease = 1; |
724 | float f, max = 9, added_speed = 0, bonus_speed = 0, sp_tmp, speed_reduce_from_disease = 1; |
725 | int weapon_weight = 0, weapon_speed = 0; |
725 | int weapon_weight = 0, weapon_speed = 0; |
726 | int best_wc = 0, best_ac = 0, wc = 0, ac = 0; |
726 | int best_wc = 0, best_ac = 0, wc = 0, ac = 0; |
727 | int prot[NROFATTACKS], vuln[NROFATTACKS], potion_resist[NROFATTACKS]; |
727 | int prot[NROFATTACKS], vuln[NROFATTACKS], potion_resist[NROFATTACKS]; |
728 | object *grace_obj = NULL, *mana_obj = NULL, *wc_obj = NULL, *tmp; |
728 | object *grace_obj = NULL, *mana_obj = NULL, *tmp; |
729 | float old_speed = speed; |
729 | float old_speed = speed; |
730 | |
730 | |
731 | /* First task is to clear all the values back to their original values */ |
731 | /* First task is to clear all the values back to their original values */ |
732 | if (type == PLAYER) |
732 | if (type == PLAYER) |
733 | { |
733 | { |
… | |
… | |
994 | /* for all skills and skill granting objects */ |
994 | /* for all skills and skill granting objects */ |
995 | case SKILL: |
995 | case SKILL: |
996 | if (!QUERY_FLAG (tmp, FLAG_APPLIED)) |
996 | if (!QUERY_FLAG (tmp, FLAG_APPLIED)) |
997 | break; |
997 | break; |
998 | |
998 | |
999 | if (IS_COMBAT_SKILL (tmp->subtype)) |
|
|
1000 | wc_obj = tmp; |
|
|
1001 | |
|
|
1002 | if (chosen_skill) |
999 | if (chosen_skill) |
1003 | LOG (llevDebug, "fix_player, op %s has multiple skills applied\n", &name); |
1000 | LOG (llevDebug, "fix_player, op %s has multiple skills applied\n", &name); |
1004 | |
1001 | |
1005 | chosen_skill = tmp; |
1002 | chosen_skill = tmp; |
1006 | |
1003 | |
… | |
… | |
1288 | * improvement every level, now its fighterlevel/5. So |
1285 | * improvement every level, now its fighterlevel/5. So |
1289 | * we give the player a bonus here in wc and dam |
1286 | * we give the player a bonus here in wc and dam |
1290 | * to make up for the change. Note that I left the |
1287 | * to make up for the change. Note that I left the |
1291 | * monster bonus the same as before. -b.t. |
1288 | * monster bonus the same as before. -b.t. |
1292 | */ |
1289 | */ |
|
|
1290 | object *wc_obj = chosen_skill; |
1293 | |
1291 | |
1294 | if (contr && wc_obj && wc_obj->level > 1) |
1292 | if (contr && wc_obj && wc_obj->level > 1) |
1295 | { |
1293 | { |
1296 | wc -= wc_obj->level + thaco_bonus[stats.Str]; |
1294 | wc -= wc_obj->level + thaco_bonus[stats.Str]; |
1297 | |
1295 | |
… | |
… | |
1319 | if (settings.search_items && contr->search_str[0]) |
1317 | if (settings.search_items && contr->search_str[0]) |
1320 | speed -= 1; |
1318 | speed -= 1; |
1321 | |
1319 | |
1322 | if (attacktype == 0) |
1320 | if (attacktype == 0) |
1323 | attacktype = arch->clone.attacktype; |
1321 | attacktype = arch->clone.attacktype; |
1324 | |
|
|
1325 | } /* End if player */ |
1322 | } /* End if player */ |
1326 | |
1323 | |
1327 | if (added_speed >= 0) |
1324 | if (added_speed >= 0) |
1328 | speed += added_speed / 10.f; |
1325 | speed += added_speed / 10.f; |
1329 | else /* Something wrong here...: */ |
1326 | else /* Something wrong here...: */ |
… | |
… | |
1587 | if (!skill_obj) |
1584 | if (!skill_obj) |
1588 | { |
1585 | { |
1589 | LOG (llevError, "add_player_exp: couldn't find skill %s\n", skill_name); |
1586 | LOG (llevError, "add_player_exp: couldn't find skill %s\n", skill_name); |
1590 | return NULL; |
1587 | return NULL; |
1591 | } |
1588 | } |
|
|
1589 | |
1592 | /* clear the flag - exp goes into this bucket, but player |
1590 | /* clear the flag - exp goes into this bucket, but player |
1593 | * still doesn't know it. |
1591 | * still doesn't know it. |
1594 | */ |
1592 | */ |
1595 | CLEAR_FLAG (skill_obj, FLAG_CAN_USE_SKILL); |
1593 | CLEAR_FLAG (skill_obj, FLAG_CAN_USE_SKILL); |
1596 | skill_obj->stats.exp = 0; |
1594 | skill_obj->stats.exp = 0; |
… | |
… | |
1980 | player_lvl_adj (op, tmp); |
1978 | player_lvl_adj (op, tmp); |
1981 | } |
1979 | } |
1982 | |
1980 | |
1983 | percentage_loss = op->stats.exp * settings.death_penalty_ratio / 100; |
1981 | percentage_loss = op->stats.exp * settings.death_penalty_ratio / 100; |
1984 | level_loss = op->stats.exp - levels[MAX (0, op->level - settings.death_penalty_level)]; |
1982 | level_loss = op->stats.exp - levels[MAX (0, op->level - settings.death_penalty_level)]; |
|
|
1983 | |
1985 | if (level_loss < 0) |
1984 | if (level_loss < 0) |
1986 | level_loss = 0; |
1985 | level_loss = 0; |
1987 | loss = check_exp_loss (op, MIN (level_loss, percentage_loss)); |
1986 | loss = check_exp_loss (op, MIN (level_loss, percentage_loss)); |
1988 | |
1987 | |
1989 | op->stats.exp -= loss; |
1988 | op->stats.exp -= loss; |