/* ************************************************************************ * File: class.c Part of CircleMUD * * Usage: Source file for class-specific code * * * * All rights reserved. See license.doc for complete information. * * * * Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University * * CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991. * ************************************************************************ */ /* * This file attempts to concentrate most of the code which must be changed * in order for new classes to be added. If you're adding a new class, * you should go through this entire file from beginning to end and add * the appropriate new special cases for your new class. */ #include "conf.h" #include "sysdep.h" #include "structs.h" #include "db.h" #include "utils.h" #include "spells.h" #include "interpreter.h" extern struct wis_app_type wis_app[]; extern struct con_app_type con_app[]; extern struct int_app_type int_app[]; extern int siteok_everyone; /* local functions */ int parse_class(char arg); long find_class_bitvector(char arg); byte saving_throws(int class_num, int type, int level); int thaco(int class_num, int level); void roll_real_abils(struct char_data * ch); void do_start(struct char_data * ch); int backstab_mult(int level); int invalid_class(struct char_data *ch, struct obj_data *obj); long long level_exp(int chclass, long long level); const char *title_male(int chclass, int level); const char *title_female(int chclass, int level); /* Names first */ const char *class_abbrevs[] = { "&14H&00&06u&14m&00&06a&14n&00 ", "&10N&00&02a&10m&00&02e&10k&00 ", "&14I&00&06c&15e&00&07r&00 ", "&11S&00&03a&11i&00&03y&11a&00&03n&00 ", "&13M&00&05a&13j&00&05i&13n&00 ", "&16A&15n&00&07dro&15i&16d&00 ", "&12K&14a&00&06i&00 ", "&14H&00&06a&14l&00&06f&12B&00&04r&12e&00&04e&12d &00", "&10B&00&02i&10o&00&06-&16A&15n&00&07dro&15i&16d&00", "&00&07K&15on&16a&15ts&00&07u&00 ", "&13Changeling&00 ", "&09D&00&01e&09m&00&01o&09n&00 ", "&12T&14r&00&06u&00&04f&00&06f&14l&12e&00 ", "&09M&00&01u&00&05ta&00&01n&09t&00 ", "&12K&00&04a&00&06n&14as&00&06s&00&04a&12n&00 ", "\n" }; const char *class_abbrevs2[] = { "&14H&00&06u&14m&00&06a&14n&00 ", "&10N&00&02a&10m&00&02e&10k&00 ", "&14I&00&06c&15e&00&07r&00 ", "&11S&00&03a&11i&00&03y&11a&00&03n&00 ", "&13M&00&05a&13j&00&05i&13n&00 ", "&16A&15n&00&07dro&15i&16d&00 ", "&12K&14a&00&06i&00 ", "&14H&00&06a&14l&00&06f&12B&00&04r&12e&00&04e&12d &00", "&10B&00&02i&10o&00&06-&16A&15n&00&07dro&15i&16d&00 ", "&00&07K&15on&16a&15ts&00&07u&00 ", "&13Changeling&00 ", "&09D&00&01e&09m&00&01o&09n&00 ", "&12T&14r&00&06u&00&04f&00&06f&14l&12e&00 ", "&09M&00&01u&00&05ta&00&01n&09t&00 ", "&12K&00&04a&00&06n&14as&00&06s&00&04a&12n&00 ", "\n" }; const char *pc_class_types[] = { "Human", "Namek", "Icer", "Saiyan", "Majin", "Android", "Kai", "Half-Breed", "Bio-Android", "Konatsu", "Changeling", "Demon", "Truffle", "Mutant", "Kanassan", "\n" }; /* The menu for choosing a class in interpreter.c: */ const char *class_menu = "\r\nSaiyans are restricted, read help request to find how to request one.\r\n" "\x1B[1;37mo\x1b[1;34m-----------------------------------------------------\x1B[1;37mo\x1B[0;0m\r\n" "\x1b[1;34m| \x1b[1;34m(\x1b[0;32m1\x1b[1;34m)\x1B[0;0m Human \x1b[1;34m(\x1b[0;32m6\x1b[1;34m)\x1B[0;0m Android \x1b[1;34m(\x1b[0;32mA\x1b[1;34m)\x1B[0;0m Mutant \x1B[1;31m\r\n" "\x1b[1;34m| \x1b[1;34m(\x1b[0;32m2\x1b[1;34m)\x1B[0;0m Namek \x1b[1;34m(\x1b[0;32m7\x1b[1;34m)\x1B[0;0m Kai \x1b[1;34m(\x1b[0;32mB\x1b[1;34m)\x1B[0;0m Demon \x1B[1;31m\r\n" "\x1b[1;34m| \x1b[1;34m(\x1b[0;32m*\x1b[1;34m)\x1B[0;0m Saiyan \x1b[1;34m(\x1b[0;32m8\x1b[1;34m)\x1B[0;0m Half-Breed \x1b[1;34m(\x1b[0;32mC\x1b[1;34m)\x1B[0;0m Kanassan \x1B[1;31m\r\n" "\x1b[1;34m| \x1b[1;34m(\x1b[0;32m4\x1b[1;34m)\x1B[0;0m Icer \x1b[1;34m(\x1b[0;32m9\x1b[1;34m)\x1B[0;0m Bio-Android \x1b[1;34m(\x1b[0;32mE\x1b[1;34m)\x1B[0;0m Truffle \x1B[1;31m\r\n" "\x1b[1;34m| \x1b[1;34m(\x1b[0;32m5\x1b[1;34m)\x1B[0;0m Majin \x1b[1;34m(\x1b[0;32m0\x1b[1;34m)\x1B[0;0m Konatsu \x1B[1;31m\r\n " "\x1B[1;37mo\x1b[1;34m-----------------------------------------------------\x1B[1;37mo\x1B[0;0m\r\n"; /* * The code to interpret a class letter -- used in interpreter.c when a * new character is selecting a class and by 'set class' in act.wizard.c. */ int parse_class(char arg) { arg = LOWER(arg); switch (arg) { case '1': return CLASS_Human; case '2': return CLASS_Namek; case '^': return CLASS_saiyan; case '4': return CLASS_icer; case '5': return CLASS_MAJIN; case '6': return CLASS_ANDROID; case '7': return CLASS_KAI; case '8': return CLASS_HALF_BREED; case '9': return CLASS_BIODROID; case '0': return CLASS_KONATSU; case 'A': return CLASS_MUTANT; case 'a': return CLASS_MUTANT; case 'B': return CLASS_demon; case 'b': return CLASS_demon; case 'C': return CLASS_KANASSAN; case 'c': return CLASS_KANASSAN; case 'E': return CLASS_TRUFFLE; case 'e': return CLASS_TRUFFLE; default: return CLASS_UNDEFINED; } } /* * bitvectors (i.e., powers of two) for each class, mainly for use in * do_who and do_users. Add new classes at the end so that all classes * use sequential powers of two (1 << 0, 1 << 1, 1 << 2, 1 << 3, 1 << 4, * 1 << 5, etc. */ long find_class_bitvector(char arg) { arg = LOWER(arg); switch (arg) { case '1': return (1 << CLASS_Human); case '2': return (1 << CLASS_Namek); case '3': return (1 << CLASS_icer); case '4': return (1 << CLASS_saiyan); case '5': return (1 << CLASS_MAJIN); case '6': return (1 << CLASS_ANDROID); case '7': return (1 << CLASS_KAI); case '8': return (1 << CLASS_HALF_BREED); case '9': return (1 << CLASS_BIODROID); case '0': return (1 << CLASS_KONATSU); case 'A': return (1 << CLASS_MUTANT); case 'a': return (1 << CLASS_MUTANT); case 'B': return (1 << CLASS_demon); case 'b': return (1 << CLASS_demon); case 'C': return (1 << CLASS_KANASSAN); case 'c': return (1 << CLASS_KANASSAN); case 'E': return (1 << CLASS_TRUFFLE); case 'e': return (1 << CLASS_TRUFFLE); default: return 0; } } /* * These are definitions which control the guildmasters for each class. * * The first field (top line) controls the highest percentage skill level * a character of the class is allowed to attain in any skill. (After * this level, attempts to practice will say "You are already learned in * this area." * * The second line controls the maximum percent gain in learnedness a * character is allowed per practice -- in other words, if the random * die throw comes out higher than this number, the gain will only be * this number instead. * * The third line controls the minimu percent gain in learnedness a * character is allowed per practice -- in other words, if the random * die throw comes out below this number, the gain will be set up to * this number. * * The fourth line simply sets whether the character knows 'spells' * or 'skills'. This does not affect anything except the message given * to the character when trying to practice (i.e. "You know of the * following spells" vs. "You know of the following skills" */ #define SPELL 0 #define SKILL 1 /* #define LEARNED_LEVEL 0 % known which is considered "learned" */ /* #define MAX_PER_PRAC 1 max percent gain in skill per practice */ /* #define MIN_PER_PRAC 2 min percent gain in skill per practice */ /* #define PRAC_TYPE 3 should it say 'spell' or 'skill'? */ int prac_params[4][NUM_CLASSES] = { /* MAG CLE THE WAR */ {100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100}, /* learned level */ {100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100}, /* max per prac */ {25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,}, /* min per pac */ {SPELL, SPELL, SPELL, SPELL, SPELL, SPELL, SPELL, SPELL, SPELL, SPELL, SPELL, SPELL, SPELL, SPELL, SPELL} /* prac name */ }; /* * ...And the appropriate rooms for each guildmaster/guildguard; controls * which types of people the various guildguards let through. i.e., the * first line shows that from room 3017, only HumanS are allowed * to go south. */ int guild_info[][3] = { /* Midgaard */ /* this must go last -- add new guards above! */ {-1, -1, -1}}; /* * Saving throws for: * MCTW * PARA, ROD, PETRI, BREATH, SPELL * Levels 0-40 * * Do not forget to change extern declaration in magic.c if you add to this. */ byte saving_throws(int class_num, int type, int level) { switch (class_num) { case CLASS_Human: switch (type) { case SAVING_PARA: /* Paralyzation */ switch (level) { case 0: return 90; case 1: return 70; case 2: return 69; case 3: return 68; case 4: return 67; case 5: return 66; case 6: return 65; case 7: return 63; case 8: return 61; case 9: return 60; case 10: return 59; case 11: return 57; case 12: return 55; case 13: return 54; case 14: return 53; case 15: return 53; case 16: return 52; case 17: return 51; case 18: return 50; case 19: return 48; case 20: return 46; case 21: return 45; case 22: return 44; case 23: return 42; case 24: return 40; case 25: return 38; case 26: return 36; case 27: return 34; case 28: return 32; case 29: return 30; case 30: return 28; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_ROD: /* Rods */ switch (level) { case 0: return 90; case 1: return 55; case 2: return 53; case 3: return 51; case 4: return 49; case 5: return 47; case 6: return 45; case 7: return 43; case 8: return 41; case 9: return 40; case 10: return 39; case 11: return 37; case 12: return 35; case 13: return 33; case 14: return 31; case 15: return 30; case 16: return 29; case 17: return 27; case 18: return 25; case 19: return 23; case 20: return 21; case 21: return 20; case 22: return 19; case 23: return 17; case 24: return 15; case 25: return 14; case 26: return 13; case 27: return 12; case 28: return 11; case 29: return 10; case 30: return 9; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_PETRI: /* Petrification */ switch (level) { case 0: return 90; case 1: return 65; case 2: return 63; case 3: return 61; case 4: return 59; case 5: return 57; case 6: return 55; case 7: return 53; case 8: return 51; case 9: return 50; case 10: return 49; case 11: return 47; case 12: return 45; case 13: return 43; case 14: return 41; case 15: return 40; case 16: return 39; case 17: return 37; case 18: return 35; case 19: return 33; case 20: return 31; case 21: return 30; case 22: return 29; case 23: return 27; case 24: return 25; case 25: return 23; case 26: return 21; case 27: return 19; case 28: return 17; case 29: return 15; case 30: return 13; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_BREATH: /* Breath weapons */ switch (level) { case 0: return 90; case 1: return 75; case 2: return 73; case 3: return 71; case 4: return 69; case 5: return 67; case 6: return 65; case 7: return 63; case 8: return 61; case 9: return 60; case 10: return 59; case 11: return 57; case 12: return 55; case 13: return 53; case 14: return 51; case 15: return 50; case 16: return 49; case 17: return 47; case 18: return 45; case 19: return 43; case 20: return 41; case 21: return 40; case 22: return 39; case 23: return 37; case 24: return 35; case 25: return 33; case 26: return 31; case 27: return 29; case 28: return 27; case 29: return 25; case 30: return 23; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_SPELL: /* Generic spells */ switch (level) { case 0: return 90; case 1: return 60; case 2: return 58; case 3: return 56; case 4: return 54; case 5: return 52; case 6: return 50; case 7: return 48; case 8: return 46; case 9: return 45; case 10: return 44; case 11: return 42; case 12: return 40; case 13: return 38; case 14: return 36; case 15: return 35; case 16: return 34; case 17: return 32; case 18: return 30; case 19: return 28; case 20: return 26; case 21: return 25; case 22: return 24; case 23: return 22; case 24: return 20; case 25: return 18; case 26: return 16; case 27: return 14; case 28: return 12; case 29: return 10; case 30: return 8; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } default: break; } break; case CLASS_Namek: switch (type) { case SAVING_PARA: /* Paralyzation */ switch (level) { case 0: return 90; case 1: return 60; case 2: return 59; case 3: return 48; case 4: return 46; case 5: return 45; case 6: return 43; case 7: return 40; case 8: return 37; case 9: return 35; case 10: return 34; case 11: return 33; case 12: return 31; case 13: return 30; case 14: return 29; case 15: return 27; case 16: return 26; case 17: return 25; case 18: return 24; case 19: return 23; case 20: return 22; case 21: return 21; case 22: return 20; case 23: return 18; case 24: return 15; case 25: return 14; case 26: return 12; case 27: return 10; case 28: return 9; case 29: return 8; case 30: return 7; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_ROD: /* Rods */ switch (level) { case 0: return 90; case 1: return 70; case 2: return 69; case 3: return 68; case 4: return 66; case 5: return 65; case 6: return 63; case 7: return 60; case 8: return 57; case 9: return 55; case 10: return 54; case 11: return 53; case 12: return 51; case 13: return 50; case 14: return 49; case 15: return 47; case 16: return 46; case 17: return 45; case 18: return 44; case 19: return 43; case 20: return 42; case 21: return 41; case 22: return 40; case 23: return 38; case 24: return 35; case 25: return 34; case 26: return 32; case 27: return 30; case 28: return 29; case 29: return 28; case 30: return 27; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_PETRI: /* Petrification */ switch (level) { case 0: return 90; case 1: return 65; case 2: return 64; case 3: return 63; case 4: return 61; case 5: return 60; case 6: return 58; case 7: return 55; case 8: return 53; case 9: return 50; case 10: return 49; case 11: return 48; case 12: return 46; case 13: return 45; case 14: return 44; case 15: return 43; case 16: return 41; case 17: return 40; case 18: return 39; case 19: return 38; case 20: return 37; case 21: return 36; case 22: return 35; case 23: return 33; case 24: return 31; case 25: return 29; case 26: return 27; case 27: return 25; case 28: return 24; case 29: return 23; case 30: return 22; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_BREATH: /* Breath weapons */ switch (level) { case 0: return 90; case 1: return 80; case 2: return 79; case 3: return 78; case 4: return 76; case 5: return 75; case 6: return 73; case 7: return 70; case 8: return 67; case 9: return 65; case 10: return 64; case 11: return 63; case 12: return 61; case 13: return 60; case 14: return 59; case 15: return 57; case 16: return 56; case 17: return 55; case 18: return 54; case 19: return 53; case 20: return 52; case 21: return 51; case 22: return 50; case 23: return 48; case 24: return 45; case 25: return 44; case 26: return 42; case 27: return 40; case 28: return 39; case 29: return 38; case 30: return 37; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_SPELL: /* Generic spells */ switch (level) { case 0: return 90; case 1: return 75; case 2: return 74; case 3: return 73; case 4: return 71; case 5: return 70; case 6: return 68; case 7: return 65; case 8: return 63; case 9: return 60; case 10: return 59; case 11: return 58; case 12: return 56; case 13: return 55; case 14: return 54; case 15: return 53; case 16: return 51; case 17: return 50; case 18: return 49; case 19: return 48; case 20: return 47; case 21: return 46; case 22: return 45; case 23: return 43; case 24: return 41; case 25: return 39; case 26: return 37; case 27: return 35; case 28: return 34; case 29: return 33; case 30: return 32; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } default: break; } break; case CLASS_BIODROID: switch (type) { case SAVING_PARA: /* Paralyzation */ switch (level) { case 0: return 90; case 1: return 60; case 2: return 59; case 3: return 48; case 4: return 46; case 5: return 45; case 6: return 43; case 7: return 40; case 8: return 37; case 9: return 35; case 10: return 34; case 11: return 33; case 12: return 31; case 13: return 30; case 14: return 29; case 15: return 27; case 16: return 26; case 17: return 25; case 18: return 24; case 19: return 23; case 20: return 22; case 21: return 21; case 22: return 20; case 23: return 18; case 24: return 15; case 25: return 14; case 26: return 12; case 27: return 10; case 28: return 9; case 29: return 8; case 30: return 7; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_ROD: /* Rods */ switch (level) { case 0: return 90; case 1: return 70; case 2: return 69; case 3: return 68; case 4: return 66; case 5: return 65; case 6: return 63; case 7: return 60; case 8: return 57; case 9: return 55; case 10: return 54; case 11: return 53; case 12: return 51; case 13: return 50; case 14: return 49; case 15: return 47; case 16: return 46; case 17: return 45; case 18: return 44; case 19: return 43; case 20: return 42; case 21: return 41; case 22: return 40; case 23: return 38; case 24: return 35; case 25: return 34; case 26: return 32; case 27: return 30; case 28: return 29; case 29: return 28; case 30: return 27; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_PETRI: /* Petrification */ switch (level) { case 0: return 90; case 1: return 65; case 2: return 64; case 3: return 63; case 4: return 61; case 5: return 60; case 6: return 58; case 7: return 55; case 8: return 53; case 9: return 50; case 10: return 49; case 11: return 48; case 12: return 46; case 13: return 45; case 14: return 44; case 15: return 43; case 16: return 41; case 17: return 40; case 18: return 39; case 19: return 38; case 20: return 37; case 21: return 36; case 22: return 35; case 23: return 33; case 24: return 31; case 25: return 29; case 26: return 27; case 27: return 25; case 28: return 24; case 29: return 23; case 30: return 22; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_BREATH: /* Breath weapons */ switch (level) { case 0: return 90; case 1: return 80; case 2: return 79; case 3: return 78; case 4: return 76; case 5: return 75; case 6: return 73; case 7: return 70; case 8: return 67; case 9: return 65; case 10: return 64; case 11: return 63; case 12: return 61; case 13: return 60; case 14: return 59; case 15: return 57; case 16: return 56; case 17: return 55; case 18: return 54; case 19: return 53; case 20: return 52; case 21: return 51; case 22: return 50; case 23: return 48; case 24: return 45; case 25: return 44; case 26: return 42; case 27: return 40; case 28: return 39; case 29: return 38; case 30: return 37; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_SPELL: /* Generic spells */ switch (level) { case 0: return 90; case 1: return 75; case 2: return 74; case 3: return 73; case 4: return 71; case 5: return 70; case 6: return 68; case 7: return 65; case 8: return 63; case 9: return 60; case 10: return 59; case 11: return 58; case 12: return 56; case 13: return 55; case 14: return 54; case 15: return 53; case 16: return 51; case 17: return 50; case 18: return 49; case 19: return 48; case 20: return 47; case 21: return 46; case 22: return 45; case 23: return 43; case 24: return 41; case 25: return 39; case 26: return 37; case 27: return 35; case 28: return 34; case 29: return 33; case 30: return 32; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } default: break; } break; case CLASS_KONATSU: switch (type) { case SAVING_PARA: /* Paralyzation */ switch (level) { case 0: return 90; case 1: return 60; case 2: return 59; case 3: return 48; case 4: return 46; case 5: return 45; case 6: return 43; case 7: return 40; case 8: return 37; case 9: return 35; case 10: return 34; case 11: return 33; case 12: return 31; case 13: return 30; case 14: return 29; case 15: return 27; case 16: return 26; case 17: return 25; case 18: return 24; case 19: return 23; case 20: return 22; case 21: return 21; case 22: return 20; case 23: return 18; case 24: return 15; case 25: return 14; case 26: return 12; case 27: return 10; case 28: return 9; case 29: return 8; case 30: return 7; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_ROD: /* Rods */ switch (level) { case 0: return 90; case 1: return 70; case 2: return 69; case 3: return 68; case 4: return 66; case 5: return 65; case 6: return 63; case 7: return 60; case 8: return 57; case 9: return 55; case 10: return 54; case 11: return 53; case 12: return 51; case 13: return 50; case 14: return 49; case 15: return 47; case 16: return 46; case 17: return 45; case 18: return 44; case 19: return 43; case 20: return 42; case 21: return 41; case 22: return 40; case 23: return 38; case 24: return 35; case 25: return 34; case 26: return 32; case 27: return 30; case 28: return 29; case 29: return 28; case 30: return 27; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_PETRI: /* Petrification */ switch (level) { case 0: return 90; case 1: return 65; case 2: return 64; case 3: return 63; case 4: return 61; case 5: return 60; case 6: return 58; case 7: return 55; case 8: return 53; case 9: return 50; case 10: return 49; case 11: return 48; case 12: return 46; case 13: return 45; case 14: return 44; case 15: return 43; case 16: return 41; case 17: return 40; case 18: return 39; case 19: return 38; case 20: return 37; case 21: return 36; case 22: return 35; case 23: return 33; case 24: return 31; case 25: return 29; case 26: return 27; case 27: return 25; case 28: return 24; case 29: return 23; case 30: return 22; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_BREATH: /* Breath weapons */ switch (level) { case 0: return 90; case 1: return 80; case 2: return 79; case 3: return 78; case 4: return 76; case 5: return 75; case 6: return 73; case 7: return 70; case 8: return 67; case 9: return 65; case 10: return 64; case 11: return 63; case 12: return 61; case 13: return 60; case 14: return 59; case 15: return 57; case 16: return 56; case 17: return 55; case 18: return 54; case 19: return 53; case 20: return 52; case 21: return 51; case 22: return 50; case 23: return 48; case 24: return 45; case 25: return 44; case 26: return 42; case 27: return 40; case 28: return 39; case 29: return 38; case 30: return 37; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_SPELL: /* Generic spells */ switch (level) { case 0: return 90; case 1: return 75; case 2: return 74; case 3: return 73; case 4: return 71; case 5: return 70; case 6: return 68; case 7: return 65; case 8: return 63; case 9: return 60; case 10: return 59; case 11: return 58; case 12: return 56; case 13: return 55; case 14: return 54; case 15: return 53; case 16: return 51; case 17: return 50; case 18: return 49; case 19: return 48; case 20: return 47; case 21: return 46; case 22: return 45; case 23: return 43; case 24: return 41; case 25: return 39; case 26: return 37; case 27: return 35; case 28: return 34; case 29: return 33; case 30: return 32; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } default: break; } break; case CLASS_CHANGELING: switch (type) { case SAVING_PARA: /* Paralyzation */ switch (level) { case 0: return 90; case 1: return 60; case 2: return 59; case 3: return 48; case 4: return 46; case 5: return 45; case 6: return 43; case 7: return 40; case 8: return 37; case 9: return 35; case 10: return 34; case 11: return 33; case 12: return 31; case 13: return 30; case 14: return 29; case 15: return 27; case 16: return 26; case 17: return 25; case 18: return 24; case 19: return 23; case 20: return 22; case 21: return 21; case 22: return 20; case 23: return 18; case 24: return 15; case 25: return 14; case 26: return 12; case 27: return 10; case 28: return 9; case 29: return 8; case 30: return 7; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_ROD: /* Rods */ switch (level) { case 0: return 90; case 1: return 70; case 2: return 69; case 3: return 68; case 4: return 66; case 5: return 65; case 6: return 63; case 7: return 60; case 8: return 57; case 9: return 55; case 10: return 54; case 11: return 53; case 12: return 51; case 13: return 50; case 14: return 49; case 15: return 47; case 16: return 46; case 17: return 45; case 18: return 44; case 19: return 43; case 20: return 42; case 21: return 41; case 22: return 40; case 23: return 38; case 24: return 35; case 25: return 34; case 26: return 32; case 27: return 30; case 28: return 29; case 29: return 28; case 30: return 27; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_PETRI: /* Petrification */ switch (level) { case 0: return 90; case 1: return 65; case 2: return 64; case 3: return 63; case 4: return 61; case 5: return 60; case 6: return 58; case 7: return 55; case 8: return 53; case 9: return 50; case 10: return 49; case 11: return 48; case 12: return 46; case 13: return 45; case 14: return 44; case 15: return 43; case 16: return 41; case 17: return 40; case 18: return 39; case 19: return 38; case 20: return 37; case 21: return 36; case 22: return 35; case 23: return 33; case 24: return 31; case 25: return 29; case 26: return 27; case 27: return 25; case 28: return 24; case 29: return 23; case 30: return 22; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_BREATH: /* Breath weapons */ switch (level) { case 0: return 90; case 1: return 80; case 2: return 79; case 3: return 78; case 4: return 76; case 5: return 75; case 6: return 73; case 7: return 70; case 8: return 67; case 9: return 65; case 10: return 64; case 11: return 63; case 12: return 61; case 13: return 60; case 14: return 59; case 15: return 57; case 16: return 56; case 17: return 55; case 18: return 54; case 19: return 53; case 20: return 52; case 21: return 51; case 22: return 50; case 23: return 48; case 24: return 45; case 25: return 44; case 26: return 42; case 27: return 40; case 28: return 39; case 29: return 38; case 30: return 37; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_SPELL: /* Generic spells */ switch (level) { case 0: return 90; case 1: return 75; case 2: return 74; case 3: return 73; case 4: return 71; case 5: return 70; case 6: return 68; case 7: return 65; case 8: return 63; case 9: return 60; case 10: return 59; case 11: return 58; case 12: return 56; case 13: return 55; case 14: return 54; case 15: return 53; case 16: return 51; case 17: return 50; case 18: return 49; case 19: return 48; case 20: return 47; case 21: return 46; case 22: return 45; case 23: return 43; case 24: return 41; case 25: return 39; case 26: return 37; case 27: return 35; case 28: return 34; case 29: return 33; case 30: return 32; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } default: break; } break; case CLASS_demon: switch (type) { case SAVING_PARA: /* Paralyzation */ switch (level) { case 0: return 90; case 1: return 60; case 2: return 59; case 3: return 48; case 4: return 46; case 5: return 45; case 6: return 43; case 7: return 40; case 8: return 37; case 9: return 35; case 10: return 34; case 11: return 33; case 12: return 31; case 13: return 30; case 14: return 29; case 15: return 27; case 16: return 26; case 17: return 25; case 18: return 24; case 19: return 23; case 20: return 22; case 21: return 21; case 22: return 20; case 23: return 18; case 24: return 15; case 25: return 14; case 26: return 12; case 27: return 10; case 28: return 9; case 29: return 8; case 30: return 7; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_ROD: /* Rods */ switch (level) { case 0: return 90; case 1: return 70; case 2: return 69; case 3: return 68; case 4: return 66; case 5: return 65; case 6: return 63; case 7: return 60; case 8: return 57; case 9: return 55; case 10: return 54; case 11: return 53; case 12: return 51; case 13: return 50; case 14: return 49; case 15: return 47; case 16: return 46; case 17: return 45; case 18: return 44; case 19: return 43; case 20: return 42; case 21: return 41; case 22: return 40; case 23: return 38; case 24: return 35; case 25: return 34; case 26: return 32; case 27: return 30; case 28: return 29; case 29: return 28; case 30: return 27; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_PETRI: /* Petrification */ switch (level) { case 0: return 90; case 1: return 65; case 2: return 64; case 3: return 63; case 4: return 61; case 5: return 60; case 6: return 58; case 7: return 55; case 8: return 53; case 9: return 50; case 10: return 49; case 11: return 48; case 12: return 46; case 13: return 45; case 14: return 44; case 15: return 43; case 16: return 41; case 17: return 40; case 18: return 39; case 19: return 38; case 20: return 37; case 21: return 36; case 22: return 35; case 23: return 33; case 24: return 31; case 25: return 29; case 26: return 27; case 27: return 25; case 28: return 24; case 29: return 23; case 30: return 22; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_BREATH: /* Breath weapons */ switch (level) { case 0: return 90; case 1: return 80; case 2: return 79; case 3: return 78; case 4: return 76; case 5: return 75; case 6: return 73; case 7: return 70; case 8: return 67; case 9: return 65; case 10: return 64; case 11: return 63; case 12: return 61; case 13: return 60; case 14: return 59; case 15: return 57; case 16: return 56; case 17: return 55; case 18: return 54; case 19: return 53; case 20: return 52; case 21: return 51; case 22: return 50; case 23: return 48; case 24: return 45; case 25: return 44; case 26: return 42; case 27: return 40; case 28: return 39; case 29: return 38; case 30: return 37; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_SPELL: /* Generic spells */ switch (level) { case 0: return 90; case 1: return 75; case 2: return 74; case 3: return 73; case 4: return 71; case 5: return 70; case 6: return 68; case 7: return 65; case 8: return 63; case 9: return 60; case 10: return 59; case 11: return 58; case 12: return 56; case 13: return 55; case 14: return 54; case 15: return 53; case 16: return 51; case 17: return 50; case 18: return 49; case 19: return 48; case 20: return 47; case 21: return 46; case 22: return 45; case 23: return 43; case 24: return 41; case 25: return 39; case 26: return 37; case 27: return 35; case 28: return 34; case 29: return 33; case 30: return 32; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } default: break; } break; case CLASS_TRUFFLE: switch (type) { case SAVING_PARA: /* Paralyzation */ switch (level) { case 0: return 90; case 1: return 60; case 2: return 59; case 3: return 48; case 4: return 46; case 5: return 45; case 6: return 43; case 7: return 40; case 8: return 37; case 9: return 35; case 10: return 34; case 11: return 33; case 12: return 31; case 13: return 30; case 14: return 29; case 15: return 27; case 16: return 26; case 17: return 25; case 18: return 24; case 19: return 23; case 20: return 22; case 21: return 21; case 22: return 20; case 23: return 18; case 24: return 15; case 25: return 14; case 26: return 12; case 27: return 10; case 28: return 9; case 29: return 8; case 30: return 7; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_ROD: /* Rods */ switch (level) { case 0: return 90; case 1: return 70; case 2: return 69; case 3: return 68; case 4: return 66; case 5: return 65; case 6: return 63; case 7: return 60; case 8: return 57; case 9: return 55; case 10: return 54; case 11: return 53; case 12: return 51; case 13: return 50; case 14: return 49; case 15: return 47; case 16: return 46; case 17: return 45; case 18: return 44; case 19: return 43; case 20: return 42; case 21: return 41; case 22: return 40; case 23: return 38; case 24: return 35; case 25: return 34; case 26: return 32; case 27: return 30; case 28: return 29; case 29: return 28; case 30: return 27; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_PETRI: /* Petrification */ switch (level) { case 0: return 90; case 1: return 65; case 2: return 64; case 3: return 63; case 4: return 61; case 5: return 60; case 6: return 58; case 7: return 55; case 8: return 53; case 9: return 50; case 10: return 49; case 11: return 48; case 12: return 46; case 13: return 45; case 14: return 44; case 15: return 43; case 16: return 41; case 17: return 40; case 18: return 39; case 19: return 38; case 20: return 37; case 21: return 36; case 22: return 35; case 23: return 33; case 24: return 31; case 25: return 29; case 26: return 27; case 27: return 25; case 28: return 24; case 29: return 23; case 30: return 22; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_BREATH: /* Breath weapons */ switch (level) { case 0: return 90; case 1: return 80; case 2: return 79; case 3: return 78; case 4: return 76; case 5: return 75; case 6: return 73; case 7: return 70; case 8: return 67; case 9: return 65; case 10: return 64; case 11: return 63; case 12: return 61; case 13: return 60; case 14: return 59; case 15: return 57; case 16: return 56; case 17: return 55; case 18: return 54; case 19: return 53; case 20: return 52; case 21: return 51; case 22: return 50; case 23: return 48; case 24: return 45; case 25: return 44; case 26: return 42; case 27: return 40; case 28: return 39; case 29: return 38; case 30: return 37; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_SPELL: /* Generic spells */ switch (level) { case 0: return 90; case 1: return 75; case 2: return 74; case 3: return 73; case 4: return 71; case 5: return 70; case 6: return 68; case 7: return 65; case 8: return 63; case 9: return 60; case 10: return 59; case 11: return 58; case 12: return 56; case 13: return 55; case 14: return 54; case 15: return 53; case 16: return 51; case 17: return 50; case 18: return 49; case 19: return 48; case 20: return 47; case 21: return 46; case 22: return 45; case 23: return 43; case 24: return 41; case 25: return 39; case 26: return 37; case 27: return 35; case 28: return 34; case 29: return 33; case 30: return 32; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } default: break; } break; case CLASS_MUTANT: switch (type) { case SAVING_PARA: /* Paralyzation */ switch (level) { case 0: return 90; case 1: return 60; case 2: return 59; case 3: return 48; case 4: return 46; case 5: return 45; case 6: return 43; case 7: return 40; case 8: return 37; case 9: return 35; case 10: return 34; case 11: return 33; case 12: return 31; case 13: return 30; case 14: return 29; case 15: return 27; case 16: return 26; case 17: return 25; case 18: return 24; case 19: return 23; case 20: return 22; case 21: return 21; case 22: return 20; case 23: return 18; case 24: return 15; case 25: return 14; case 26: return 12; case 27: return 10; case 28: return 9; case 29: return 8; case 30: return 7; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_ROD: /* Rods */ switch (level) { case 0: return 90; case 1: return 70; case 2: return 69; case 3: return 68; case 4: return 66; case 5: return 65; case 6: return 63; case 7: return 60; case 8: return 57; case 9: return 55; case 10: return 54; case 11: return 53; case 12: return 51; case 13: return 50; case 14: return 49; case 15: return 47; case 16: return 46; case 17: return 45; case 18: return 44; case 19: return 43; case 20: return 42; case 21: return 41; case 22: return 40; case 23: return 38; case 24: return 35; case 25: return 34; case 26: return 32; case 27: return 30; case 28: return 29; case 29: return 28; case 30: return 27; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_PETRI: /* Petrification */ switch (level) { case 0: return 90; case 1: return 65; case 2: return 64; case 3: return 63; case 4: return 61; case 5: return 60; case 6: return 58; case 7: return 55; case 8: return 53; case 9: return 50; case 10: return 49; case 11: return 48; case 12: return 46; case 13: return 45; case 14: return 44; case 15: return 43; case 16: return 41; case 17: return 40; case 18: return 39; case 19: return 38; case 20: return 37; case 21: return 36; case 22: return 35; case 23: return 33; case 24: return 31; case 25: return 29; case 26: return 27; case 27: return 25; case 28: return 24; case 29: return 23; case 30: return 22; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_BREATH: /* Breath weapons */ switch (level) { case 0: return 90; case 1: return 80; case 2: return 79; case 3: return 78; case 4: return 76; case 5: return 75; case 6: return 73; case 7: return 70; case 8: return 67; case 9: return 65; case 10: return 64; case 11: return 63; case 12: return 61; case 13: return 60; case 14: return 59; case 15: return 57; case 16: return 56; case 17: return 55; case 18: return 54; case 19: return 53; case 20: return 52; case 21: return 51; case 22: return 50; case 23: return 48; case 24: return 45; case 25: return 44; case 26: return 42; case 27: return 40; case 28: return 39; case 29: return 38; case 30: return 37; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_SPELL: /* Generic spells */ switch (level) { case 0: return 90; case 1: return 75; case 2: return 74; case 3: return 73; case 4: return 71; case 5: return 70; case 6: return 68; case 7: return 65; case 8: return 63; case 9: return 60; case 10: return 59; case 11: return 58; case 12: return 56; case 13: return 55; case 14: return 54; case 15: return 53; case 16: return 51; case 17: return 50; case 18: return 49; case 19: return 48; case 20: return 47; case 21: return 46; case 22: return 45; case 23: return 43; case 24: return 41; case 25: return 39; case 26: return 37; case 27: return 35; case 28: return 34; case 29: return 33; case 30: return 32; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } default: break; } break; case CLASS_KANASSAN: switch (type) { case SAVING_PARA: /* Paralyzation */ switch (level) { case 0: return 90; case 1: return 60; case 2: return 59; case 3: return 48; case 4: return 46; case 5: return 45; case 6: return 43; case 7: return 40; case 8: return 37; case 9: return 35; case 10: return 34; case 11: return 33; case 12: return 31; case 13: return 30; case 14: return 29; case 15: return 27; case 16: return 26; case 17: return 25; case 18: return 24; case 19: return 23; case 20: return 22; case 21: return 21; case 22: return 20; case 23: return 18; case 24: return 15; case 25: return 14; case 26: return 12; case 27: return 10; case 28: return 9; case 29: return 8; case 30: return 7; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_ROD: /* Rods */ switch (level) { case 0: return 90; case 1: return 70; case 2: return 69; case 3: return 68; case 4: return 66; case 5: return 65; case 6: return 63; case 7: return 60; case 8: return 57; case 9: return 55; case 10: return 54; case 11: return 53; case 12: return 51; case 13: return 50; case 14: return 49; case 15: return 47; case 16: return 46; case 17: return 45; case 18: return 44; case 19: return 43; case 20: return 42; case 21: return 41; case 22: return 40; case 23: return 38; case 24: return 35; case 25: return 34; case 26: return 32; case 27: return 30; case 28: return 29; case 29: return 28; case 30: return 27; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_PETRI: /* Petrification */ switch (level) { case 0: return 90; case 1: return 65; case 2: return 64; case 3: return 63; case 4: return 61; case 5: return 60; case 6: return 58; case 7: return 55; case 8: return 53; case 9: return 50; case 10: return 49; case 11: return 48; case 12: return 46; case 13: return 45; case 14: return 44; case 15: return 43; case 16: return 41; case 17: return 40; case 18: return 39; case 19: return 38; case 20: return 37; case 21: return 36; case 22: return 35; case 23: return 33; case 24: return 31; case 25: return 29; case 26: return 27; case 27: return 25; case 28: return 24; case 29: return 23; case 30: return 22; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_BREATH: /* Breath weapons */ switch (level) { case 0: return 90; case 1: return 80; case 2: return 79; case 3: return 78; case 4: return 76; case 5: return 75; case 6: return 73; case 7: return 70; case 8: return 67; case 9: return 65; case 10: return 64; case 11: return 63; case 12: return 61; case 13: return 60; case 14: return 59; case 15: return 57; case 16: return 56; case 17: return 55; case 18: return 54; case 19: return 53; case 20: return 52; case 21: return 51; case 22: return 50; case 23: return 48; case 24: return 45; case 25: return 44; case 26: return 42; case 27: return 40; case 28: return 39; case 29: return 38; case 30: return 37; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_SPELL: /* Generic spells */ switch (level) { case 0: return 90; case 1: return 75; case 2: return 74; case 3: return 73; case 4: return 71; case 5: return 70; case 6: return 68; case 7: return 65; case 8: return 63; case 9: return 60; case 10: return 59; case 11: return 58; case 12: return 56; case 13: return 55; case 14: return 54; case 15: return 53; case 16: return 51; case 17: return 50; case 18: return 49; case 19: return 48; case 20: return 47; case 21: return 46; case 22: return 45; case 23: return 43; case 24: return 41; case 25: return 39; case 26: return 37; case 27: return 35; case 28: return 34; case 29: return 33; case 30: return 32; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } default: break; } break; case CLASS_HALF_BREED: switch (type) { case SAVING_PARA: /* Paralyzation */ switch (level) { case 0: return 90; case 1: return 60; case 2: return 59; case 3: return 48; case 4: return 46; case 5: return 45; case 6: return 43; case 7: return 40; case 8: return 37; case 9: return 35; case 10: return 34; case 11: return 33; case 12: return 31; case 13: return 30; case 14: return 29; case 15: return 27; case 16: return 26; case 17: return 25; case 18: return 24; case 19: return 23; case 20: return 22; case 21: return 21; case 22: return 20; case 23: return 18; case 24: return 15; case 25: return 14; case 26: return 12; case 27: return 10; case 28: return 9; case 29: return 8; case 30: return 7; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_ROD: /* Rods */ switch (level) { case 0: return 90; case 1: return 70; case 2: return 69; case 3: return 68; case 4: return 66; case 5: return 65; case 6: return 63; case 7: return 60; case 8: return 57; case 9: return 55; case 10: return 54; case 11: return 53; case 12: return 51; case 13: return 50; case 14: return 49; case 15: return 47; case 16: return 46; case 17: return 45; case 18: return 44; case 19: return 43; case 20: return 42; case 21: return 41; case 22: return 40; case 23: return 38; case 24: return 35; case 25: return 34; case 26: return 32; case 27: return 30; case 28: return 29; case 29: return 28; case 30: return 27; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_PETRI: /* Petrification */ switch (level) { case 0: return 90; case 1: return 65; case 2: return 64; case 3: return 63; case 4: return 61; case 5: return 60; case 6: return 58; case 7: return 55; case 8: return 53; case 9: return 50; case 10: return 49; case 11: return 48; case 12: return 46; case 13: return 45; case 14: return 44; case 15: return 43; case 16: return 41; case 17: return 40; case 18: return 39; case 19: return 38; case 20: return 37; case 21: return 36; case 22: return 35; case 23: return 33; case 24: return 31; case 25: return 29; case 26: return 27; case 27: return 25; case 28: return 24; case 29: return 23; case 30: return 22; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_BREATH: /* Breath weapons */ switch (level) { case 0: return 90; case 1: return 80; case 2: return 79; case 3: return 78; case 4: return 76; case 5: return 75; case 6: return 73; case 7: return 70; case 8: return 67; case 9: return 65; case 10: return 64; case 11: return 63; case 12: return 61; case 13: return 60; case 14: return 59; case 15: return 57; case 16: return 56; case 17: return 55; case 18: return 54; case 19: return 53; case 20: return 52; case 21: return 51; case 22: return 50; case 23: return 48; case 24: return 45; case 25: return 44; case 26: return 42; case 27: return 40; case 28: return 39; case 29: return 38; case 30: return 37; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_SPELL: /* Generic spells */ switch (level) { case 0: return 90; case 1: return 75; case 2: return 74; case 3: return 73; case 4: return 71; case 5: return 70; case 6: return 68; case 7: return 65; case 8: return 63; case 9: return 60; case 10: return 59; case 11: return 58; case 12: return 56; case 13: return 55; case 14: return 54; case 15: return 53; case 16: return 51; case 17: return 50; case 18: return 49; case 19: return 48; case 20: return 47; case 21: return 46; case 22: return 45; case 23: return 43; case 24: return 41; case 25: return 39; case 26: return 37; case 27: return 35; case 28: return 34; case 29: return 33; case 30: return 32; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } default: break; } break; case CLASS_KAI: switch (type) { case SAVING_PARA: /* Paralyzation */ switch (level) { case 0: return 90; case 1: return 60; case 2: return 59; case 3: return 48; case 4: return 46; case 5: return 45; case 6: return 43; case 7: return 40; case 8: return 37; case 9: return 35; case 10: return 34; case 11: return 33; case 12: return 31; case 13: return 30; case 14: return 29; case 15: return 27; case 16: return 26; case 17: return 25; case 18: return 24; case 19: return 23; case 20: return 22; case 21: return 21; case 22: return 20; case 23: return 18; case 24: return 15; case 25: return 14; case 26: return 12; case 27: return 10; case 28: return 9; case 29: return 8; case 30: return 7; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_ROD: /* Rods */ switch (level) { case 0: return 90; case 1: return 70; case 2: return 69; case 3: return 68; case 4: return 66; case 5: return 65; case 6: return 63; case 7: return 60; case 8: return 57; case 9: return 55; case 10: return 54; case 11: return 53; case 12: return 51; case 13: return 50; case 14: return 49; case 15: return 47; case 16: return 46; case 17: return 45; case 18: return 44; case 19: return 43; case 20: return 42; case 21: return 41; case 22: return 40; case 23: return 38; case 24: return 35; case 25: return 34; case 26: return 32; case 27: return 30; case 28: return 29; case 29: return 28; case 30: return 27; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_PETRI: /* Petrification */ switch (level) { case 0: return 90; case 1: return 65; case 2: return 64; case 3: return 63; case 4: return 61; case 5: return 60; case 6: return 58; case 7: return 55; case 8: return 53; case 9: return 50; case 10: return 49; case 11: return 48; case 12: return 46; case 13: return 45; case 14: return 44; case 15: return 43; case 16: return 41; case 17: return 40; case 18: return 39; case 19: return 38; case 20: return 37; case 21: return 36; case 22: return 35; case 23: return 33; case 24: return 31; case 25: return 29; case 26: return 27; case 27: return 25; case 28: return 24; case 29: return 23; case 30: return 22; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_BREATH: /* Breath weapons */ switch (level) { case 0: return 90; case 1: return 80; case 2: return 79; case 3: return 78; case 4: return 76; case 5: return 75; case 6: return 73; case 7: return 70; case 8: return 67; case 9: return 65; case 10: return 64; case 11: return 63; case 12: return 61; case 13: return 60; case 14: return 59; case 15: return 57; case 16: return 56; case 17: return 55; case 18: return 54; case 19: return 53; case 20: return 52; case 21: return 51; case 22: return 50; case 23: return 48; case 24: return 45; case 25: return 44; case 26: return 42; case 27: return 40; case 28: return 39; case 29: return 38; case 30: return 37; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_SPELL: /* Generic spells */ switch (level) { case 0: return 90; case 1: return 75; case 2: return 74; case 3: return 73; case 4: return 71; case 5: return 70; case 6: return 68; case 7: return 65; case 8: return 63; case 9: return 60; case 10: return 59; case 11: return 58; case 12: return 56; case 13: return 55; case 14: return 54; case 15: return 53; case 16: return 51; case 17: return 50; case 18: return 49; case 19: return 48; case 20: return 47; case 21: return 46; case 22: return 45; case 23: return 43; case 24: return 41; case 25: return 39; case 26: return 37; case 27: return 35; case 28: return 34; case 29: return 33; case 30: return 32; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } default: break; } break; case CLASS_icer: switch (type) { case SAVING_PARA: /* Paralyzation */ switch (level) { case 0: return 90; case 1: return 65; case 2: return 64; case 3: return 63; case 4: return 62; case 5: return 61; case 6: return 60; case 7: return 59; case 8: return 58; case 9: return 57; case 10: return 56; case 11: return 55; case 12: return 54; case 13: return 53; case 14: return 52; case 15: return 51; case 16: return 50; case 17: return 49; case 18: return 48; case 19: return 47; case 20: return 46; case 21: return 45; case 22: return 44; case 23: return 43; case 24: return 42; case 25: return 41; case 26: return 40; case 27: return 39; case 28: return 38; case 29: return 37; case 30: return 36; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_ROD: /* Rods */ switch (level) { case 0: return 90; case 1: return 70; case 2: return 68; case 3: return 66; case 4: return 64; case 5: return 62; case 6: return 60; case 7: return 58; case 8: return 56; case 9: return 54; case 10: return 52; case 11: return 50; case 12: return 48; case 13: return 46; case 14: return 44; case 15: return 42; case 16: return 40; case 17: return 38; case 18: return 36; case 19: return 34; case 20: return 32; case 21: return 30; case 22: return 28; case 23: return 26; case 24: return 24; case 25: return 22; case 26: return 20; case 27: return 18; case 28: return 16; case 29: return 14; case 30: return 13; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_PETRI: /* Petrification */ switch (level) { case 0: return 90; case 1: return 60; case 2: return 59; case 3: return 58; case 4: return 58; case 5: return 56; case 6: return 55; case 7: return 54; case 8: return 53; case 9: return 52; case 10: return 51; case 11: return 50; case 12: return 49; case 13: return 48; case 14: return 47; case 15: return 46; case 16: return 45; case 17: return 44; case 18: return 43; case 19: return 42; case 20: return 41; case 21: return 40; case 22: return 39; case 23: return 38; case 24: return 37; case 25: return 36; case 26: return 35; case 27: return 34; case 28: return 33; case 29: return 32; case 30: return 31; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_BREATH: /* Breath weapons */ switch (level) { case 0: return 90; case 1: return 80; case 2: return 79; case 3: return 78; case 4: return 77; case 5: return 76; case 6: return 75; case 7: return 74; case 8: return 73; case 9: return 72; case 10: return 71; case 11: return 70; case 12: return 69; case 13: return 68; case 14: return 67; case 15: return 66; case 16: return 65; case 17: return 64; case 18: return 63; case 19: return 62; case 20: return 61; case 21: return 60; case 22: return 59; case 23: return 58; case 24: return 57; case 25: return 56; case 26: return 55; case 27: return 54; case 28: return 53; case 29: return 52; case 30: return 51; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_SPELL: /* Generic spells */ switch (level) { case 0: return 90; case 1: return 75; case 2: return 73; case 3: return 71; case 4: return 69; case 5: return 67; case 6: return 65; case 7: return 63; case 8: return 61; case 9: return 59; case 10: return 57; case 11: return 55; case 12: return 53; case 13: return 51; case 14: return 49; case 15: return 47; case 16: return 45; case 17: return 43; case 18: return 41; case 19: return 39; case 20: return 37; case 21: return 35; case 22: return 33; case 23: return 31; case 24: return 29; case 25: return 27; case 26: return 25; case 27: return 23; case 28: return 21; case 29: return 19; case 30: return 17; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } default: break; } break; case CLASS_ANDROID: switch (type) { case SAVING_PARA: /* Paralyzation */ switch (level) { case 0: return 90; case 1: return 65; case 2: return 64; case 3: return 63; case 4: return 62; case 5: return 61; case 6: return 60; case 7: return 59; case 8: return 58; case 9: return 57; case 10: return 56; case 11: return 55; case 12: return 54; case 13: return 53; case 14: return 52; case 15: return 51; case 16: return 50; case 17: return 49; case 18: return 48; case 19: return 47; case 20: return 46; case 21: return 45; case 22: return 44; case 23: return 43; case 24: return 42; case 25: return 41; case 26: return 40; case 27: return 39; case 28: return 38; case 29: return 37; case 30: return 36; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_ROD: /* Rods */ switch (level) { case 0: return 90; case 1: return 70; case 2: return 68; case 3: return 66; case 4: return 64; case 5: return 62; case 6: return 60; case 7: return 58; case 8: return 56; case 9: return 54; case 10: return 52; case 11: return 50; case 12: return 48; case 13: return 46; case 14: return 44; case 15: return 42; case 16: return 40; case 17: return 38; case 18: return 36; case 19: return 34; case 20: return 32; case 21: return 30; case 22: return 28; case 23: return 26; case 24: return 24; case 25: return 22; case 26: return 20; case 27: return 18; case 28: return 16; case 29: return 14; case 30: return 13; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_PETRI: /* Petrification */ switch (level) { case 0: return 90; case 1: return 60; case 2: return 59; case 3: return 58; case 4: return 58; case 5: return 56; case 6: return 55; case 7: return 54; case 8: return 53; case 9: return 52; case 10: return 51; case 11: return 50; case 12: return 49; case 13: return 48; case 14: return 47; case 15: return 46; case 16: return 45; case 17: return 44; case 18: return 43; case 19: return 42; case 20: return 41; case 21: return 40; case 22: return 39; case 23: return 38; case 24: return 37; case 25: return 36; case 26: return 35; case 27: return 34; case 28: return 33; case 29: return 32; case 30: return 31; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_BREATH: /* Breath weapons */ switch (level) { case 0: return 90; case 1: return 80; case 2: return 79; case 3: return 78; case 4: return 77; case 5: return 76; case 6: return 75; case 7: return 74; case 8: return 73; case 9: return 72; case 10: return 71; case 11: return 70; case 12: return 69; case 13: return 68; case 14: return 67; case 15: return 66; case 16: return 65; case 17: return 64; case 18: return 63; case 19: return 62; case 20: return 61; case 21: return 60; case 22: return 59; case 23: return 58; case 24: return 57; case 25: return 56; case 26: return 55; case 27: return 54; case 28: return 53; case 29: return 52; case 30: return 51; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_SPELL: /* Generic spells */ switch (level) { case 0: return 90; case 1: return 75; case 2: return 73; case 3: return 71; case 4: return 69; case 5: return 67; case 6: return 65; case 7: return 63; case 8: return 61; case 9: return 59; case 10: return 57; case 11: return 55; case 12: return 53; case 13: return 51; case 14: return 49; case 15: return 47; case 16: return 45; case 17: return 43; case 18: return 41; case 19: return 39; case 20: return 37; case 21: return 35; case 22: return 33; case 23: return 31; case 24: return 29; case 25: return 27; case 26: return 25; case 27: return 23; case 28: return 21; case 29: return 19; case 30: return 17; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } default: break; } break; case CLASS_MAJIN: switch (type) { case SAVING_PARA: /* Paralyzation */ switch (level) { case 0: return 90; case 1: return 65; case 2: return 64; case 3: return 63; case 4: return 62; case 5: return 61; case 6: return 60; case 7: return 59; case 8: return 58; case 9: return 57; case 10: return 56; case 11: return 55; case 12: return 54; case 13: return 53; case 14: return 52; case 15: return 51; case 16: return 50; case 17: return 49; case 18: return 48; case 19: return 47; case 20: return 46; case 21: return 45; case 22: return 44; case 23: return 43; case 24: return 42; case 25: return 41; case 26: return 40; case 27: return 39; case 28: return 38; case 29: return 37; case 30: return 36; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_ROD: /* Rods */ switch (level) { case 0: return 90; case 1: return 70; case 2: return 68; case 3: return 66; case 4: return 64; case 5: return 62; case 6: return 60; case 7: return 58; case 8: return 56; case 9: return 54; case 10: return 52; case 11: return 50; case 12: return 48; case 13: return 46; case 14: return 44; case 15: return 42; case 16: return 40; case 17: return 38; case 18: return 36; case 19: return 34; case 20: return 32; case 21: return 30; case 22: return 28; case 23: return 26; case 24: return 24; case 25: return 22; case 26: return 20; case 27: return 18; case 28: return 16; case 29: return 14; case 30: return 13; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_PETRI: /* Petrification */ switch (level) { case 0: return 90; case 1: return 60; case 2: return 59; case 3: return 58; case 4: return 58; case 5: return 56; case 6: return 55; case 7: return 54; case 8: return 53; case 9: return 52; case 10: return 51; case 11: return 50; case 12: return 49; case 13: return 48; case 14: return 47; case 15: return 46; case 16: return 45; case 17: return 44; case 18: return 43; case 19: return 42; case 20: return 41; case 21: return 40; case 22: return 39; case 23: return 38; case 24: return 37; case 25: return 36; case 26: return 35; case 27: return 34; case 28: return 33; case 29: return 32; case 30: return 31; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_BREATH: /* Breath weapons */ switch (level) { case 0: return 90; case 1: return 80; case 2: return 79; case 3: return 78; case 4: return 77; case 5: return 76; case 6: return 75; case 7: return 74; case 8: return 73; case 9: return 72; case 10: return 71; case 11: return 70; case 12: return 69; case 13: return 68; case 14: return 67; case 15: return 66; case 16: return 65; case 17: return 64; case 18: return 63; case 19: return 62; case 20: return 61; case 21: return 60; case 22: return 59; case 23: return 58; case 24: return 57; case 25: return 56; case 26: return 55; case 27: return 54; case 28: return 53; case 29: return 52; case 30: return 51; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } case SAVING_SPELL: /* Generic spells */ switch (level) { case 0: return 90; case 1: return 75; case 2: return 73; case 3: return 71; case 4: return 69; case 5: return 67; case 6: return 65; case 7: return 63; case 8: return 61; case 9: return 59; case 10: return 57; case 11: return 55; case 12: return 53; case 13: return 51; case 14: return 49; case 15: return 47; case 16: return 45; case 17: return 43; case 18: return 41; case 19: return 39; case 20: return 37; case 21: return 35; case 22: return 33; case 23: return 31; case 24: return 29; case 25: return 27; case 26: return 25; case 27: return 23; case 28: return 21; case 29: return 19; case 30: return 17; case 31: return 0; case 32: return 0; case 33: return 0; case 34: return 0; case 35: return 0; case 36: return 0; case 37: return 0; case 38: return 0; case 39: return 0; case 40: return 0; default: break; } default: break; } break; case CLASS_saiyan: switch (type) { case SAVING_PARA: /* Paralyzation */ switch (level) { case 0: return 90; case 1: return 70; case 2: return 68; case 3: return 67; case 4: return 65; case 5: return 62; case 6: return 58; case 7: return 55; case 8: return 53; case 9: return 52; case 10: return 50; case 11: return 47; case 12: return 43; case 13: return 40; case 14: return 38; case 15: return 37; case 16: return 35; case 17: return 32; case 18: return 28; case 19: return 25; case 20: return 24; case 21: return 23; case 22: return 22; case 23: return 20; case 24: return 19; case 25: return 17; case 26: return 16; case 27: return 15; case 28: return 14; case 29: return 13; case 30: return 12; case 31: return 11; case 32: return 10; case 33: return 9; case 34: return 8; case 35: return 7; case 36: return 6; case 37: return 5; case 38: return 4; case 39: return 3; case 40: return 2; default: break; } case SAVING_ROD: /* Rods */ switch (level) { case 0: return 90; case 1: return 80; case 2: return 78; case 3: return 77; case 4: return 75; case 5: return 72; case 6: return 68; case 7: return 65; case 8: return 63; case 9: return 62; case 10: return 60; case 11: return 57; case 12: return 53; case 13: return 50; case 14: return 48; case 15: return 47; case 16: return 45; case 17: return 42; case 18: return 38; case 19: return 35; case 20: return 34; case 21: return 33; case 22: return 32; case 23: return 30; case 24: return 29; case 25: return 27; case 26: return 26; case 27: return 25; case 28: return 24; case 29: return 23; case 30: return 22; case 31: return 20; case 32: return 18; case 33: return 16; case 34: return 14; case 35: return 12; case 36: return 10; case 37: return 8; case 38: return 6; case 39: return 5; case 40: return 4; default: break; } case SAVING_PETRI: /* Petrification */ switch (level) { case 0: return 90; case 1: return 75; case 2: return 73; case 3: return 72; case 4: return 70; case 5: return 67; case 6: return 63; case 7: return 60; case 8: return 58; case 9: return 57; case 10: return 55; case 11: return 52; case 12: return 48; case 13: return 45; case 14: return 43; case 15: return 42; case 16: return 40; case 17: return 37; case 18: return 33; case 19: return 30; case 20: return 29; case 21: return 28; case 22: return 26; case 23: return 25; case 24: return 24; case 25: return 23; case 26: return 21; case 27: return 20; case 28: return 19; case 29: return 18; case 30: return 17; case 31: return 16; case 32: return 15; case 33: return 14; case 34: return 13; case 35: return 12; case 36: return 11; case 37: return 10; case 38: return 9; case 39: return 8; case 40: return 7; default: break; } case SAVING_BREATH: /* Breath weapons */ switch (level) { case 0: return 90; case 1: return 85; case 2: return 83; case 3: return 82; case 4: return 80; case 5: return 75; case 6: return 70; case 7: return 65; case 8: return 63; case 9: return 62; case 10: return 60; case 11: return 55; case 12: return 50; case 13: return 45; case 14: return 43; case 15: return 42; case 16: return 40; case 17: return 37; case 18: return 33; case 19: return 30; case 20: return 29; case 21: return 28; case 22: return 26; case 23: return 25; case 24: return 24; case 25: return 23; case 26: return 21; case 27: return 20; case 28: return 19; case 29: return 18; case 30: return 17; case 31: return 16; case 32: return 15; case 33: return 14; case 34: return 13; case 35: return 12; case 36: return 11; case 37: return 10; case 38: return 9; case 39: return 8; case 40: return 7; default: break; } case SAVING_SPELL: /* Generic spells */ switch (level) { case 0: return 90; case 1: return 85; case 2: return 83; case 3: return 82; case 4: return 80; case 5: return 77; case 6: return 73; case 7: return 70; case 8: return 68; case 9: return 67; case 10: return 65; case 11: return 62; case 12: return 58; case 13: return 55; case 14: return 53; case 15: return 52; case 16: return 50; case 17: return 47; case 18: return 43; case 19: return 40; case 20: return 39; case 21: return 38; case 22: return 36; case 23: return 35; case 24: return 34; case 25: return 33; case 26: return 31; case 27: return 30; case 28: return 29; case 29: return 28; case 30: return 27; case 31: return 25; case 32: return 23; case 33: return 21; case 34: return 19; case 35: return 17; case 36: return 15; case 37: return 13; case 38: return 11; case 39: return 9; case 40: return 7; default: break; } default: break; } default: break; } /* Should not get here unless something is wrong. */ return 100; } int thaco(int class, int level) { if (level < 0 || level > 1000014) { log("SYSERR: Unknown class in thac0 chart."); return 100; } else { return 1; } } /* * Roll the 6 stats for a character... each stat is made of the sum of * the best 3 out of 4 rolls of a 6-sided die. Each class then decides * which priority will be given for the best to worst stats. */ void roll_real_abils(struct char_data * ch) { int i, j, k, temp; ubyte table[6]; ubyte rolls[4]; for (i = 0; i < 6; i++) table[i] = 0; for (i = 0; i < 6; i++) { for (j = 0; j < 4; j++) rolls[j] = number(1, 6); temp = rolls[0] + rolls[1] + rolls[2] + rolls[3] - MIN(rolls[0], MIN(rolls[1], MIN(rolls[2], rolls[3]))); for (k = 0; k < 6; k++) if (table[k] < temp) { temp ^= table[k]; table[k] ^= temp; temp ^= table[k]; } } ch->real_abils.str_add = 0; ch->player.god = 0; SET_BIT(PLR_FLAGS(ch), PLR_NOMAJIN); GET_ALIGNMENT(ch) = 0; switch (GET_CLASS(ch)) { case CLASS_Human: GET_MAX_HIT(ch) += number(200, 400); GET_MAX_MANA(ch) += number(150, 200); GET_MAX_MOVE(ch) = number(4, 4); GET_MOVE(ch) = 0; GET_MOVE(ch) = 0; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; ch->real_abils.str = number(15, 18); ch->real_abils.dex = number(10, 15); ch->real_abils.con = number(10, 15); ch->real_abils.intel = number(12, 16); ch->real_abils.wis = number(10, 16); ch->real_abils.cha = number(10, 15); break; case CLASS_Namek: GET_MAX_HIT(ch) += number(200, 400); GET_MAX_MANA(ch) += number(150, 200); GET_MAX_MOVE(ch) = number(4, 4); GET_MOVE(ch) = 0; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; GET_HOME(ch) += 1; ch->real_abils.str = number(15, 18); ch->real_abils.dex = number(10, 15); ch->real_abils.con = number(10, 15); ch->real_abils.intel = number(10, 15); ch->real_abils.wis = number(10, 14); ch->real_abils.cha = number(10, 15); break; case CLASS_icer: GET_MAX_HIT(ch) += number(250, 500); GET_MAX_MANA(ch) += number(100, 150); GET_MAX_MOVE(ch) = number(4, 4); GET_MOVE(ch) = 0; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; ch->real_abils.str = number(15, 18); ch->real_abils.dex = number(10, 14); ch->real_abils.con = number(10, 16); ch->real_abils.intel = number(10, 15); ch->real_abils.wis = number(10, 14); ch->real_abils.cha = number(10, 15); break; case CLASS_MAJIN: GET_MAX_HIT(ch) += number(200, 500); GET_MAX_MANA(ch) += number(120, 180); GET_MAX_MOVE(ch) = number(4, 4); GET_MOVE(ch) = 0; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; ch->real_abils.str = number(15, 18); ch->real_abils.dex = number(10, 14); ch->real_abils.con = number(11, 16); ch->real_abils.intel = number(10, 13); ch->real_abils.wis = number(10, 13); ch->real_abils.cha = number(10, 15); break; case CLASS_ANDROID: GET_MAX_HIT(ch) += number(200, 450); GET_MAX_MANA(ch) += number(150, 170); GET_MAX_MOVE(ch) = number(4, 4); GET_MOVE(ch) = 0; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; GET_HOME(ch) += 1; ch->real_abils.str = number(15, 18); ch->real_abils.dex = number(10, 14); ch->real_abils.con = number(10, 16); ch->real_abils.intel = number(10, 15); ch->real_abils.wis = number(10, 14); ch->real_abils.cha = number(4, 11); break; case CLASS_KANASSAN: GET_MAX_HIT(ch) += number(200, 350); GET_MAX_MANA(ch) += number(200, 250); GET_MAX_MOVE(ch) = number(4, 4); GET_MOVE(ch) = 0; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; ch->real_abils.str = number(15, 18); ch->real_abils.dex = number(10, 15); ch->real_abils.con = number(10, 12); ch->real_abils.intel = number(10, 16); ch->real_abils.wis = number(10, 16); ch->real_abils.cha = number(10, 15); break; case CLASS_KAI: GET_MAX_HIT(ch) += number(200, 350); GET_MAX_MANA(ch) += number(200, 250); GET_MAX_MOVE(ch) = number(4, 4); GET_MOVE(ch) = 0; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; GET_HOME(ch) += 1; ch->real_abils.str = number(15, 18); ch->real_abils.dex = number(10, 15); ch->real_abils.con = number(10, 14); ch->real_abils.intel = number(10, 16); ch->real_abils.wis = number(10, 16); ch->real_abils.cha = number(10, 15); break; case CLASS_HALF_BREED: GET_MAX_HIT(ch) += number(200, 500); GET_MAX_MANA(ch) += number(100, 200); GET_MAX_MOVE(ch) = number(4, 4); GET_MOVE(ch) = 0; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; ch->real_abils.str = number(15, 18); ch->real_abils.dex = number(10, 14); ch->real_abils.con = number(10, 16); ch->real_abils.intel = number(10, 16); ch->real_abils.wis = number(10, 16); ch->real_abils.cha = number(10, 15); break; case CLASS_BIODROID: GET_MAX_HIT(ch) += number(200, 400); GET_MAX_MANA(ch) += number(150, 200); GET_MAX_MOVE(ch) = number(4, 4); GET_MOVE(ch) = 0; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; ch->real_abils.str = number(15, 18); ch->real_abils.dex = number(10, 15); ch->real_abils.con = number(10, 16); ch->real_abils.intel = number(10, 14); ch->real_abils.wis = number(10, 14); ch->real_abils.cha = number(10, 15); break; case CLASS_KONATSU: GET_MAX_HIT(ch) += number(200, 300); GET_MAX_MANA(ch) += number(200, 250); GET_MAX_MOVE(ch) = number(4, 4); GET_MOVE(ch) = 0; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; ch->real_abils.str = number(15, 18); ch->real_abils.dex = number(13, 15); ch->real_abils.con = number(10, 13); ch->real_abils.intel = number(10, 14); ch->real_abils.wis = number(10, 15); ch->real_abils.cha = number(10, 15); break; case CLASS_CHANGELING: ch->real_abils.str = table[0]; ch->real_abils.dex = table[1]; ch->real_abils.con = table[2]; ch->real_abils.intel = table[3]; ch->real_abils.wis = table[4]; ch->real_abils.cha = number(10, 15); break; case CLASS_demon: GET_MAX_HIT(ch) += number(300, 400); GET_MAX_MANA(ch) += number(150, 200); GET_MAX_MOVE(ch) = number(4, 4); GET_MOVE(ch) = 0; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; ch->real_abils.str = number(15, 18); ch->real_abils.dex = number(10, 14); ch->real_abils.con = number(10, 16); ch->real_abils.intel = number(10, 14); ch->real_abils.wis = number(10, 15); ch->real_abils.cha = number(10, 15); break; case CLASS_TRUFFLE: GET_MAX_HIT(ch) += number(250, 400); GET_MAX_MANA(ch) += number(125, 200); GET_MAX_MOVE(ch) = number(4, 4); GET_MOVE(ch) = 0; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; ch->real_abils.str = number(15, 18); ch->real_abils.dex = number(10, 14); ch->real_abils.con = number(10, 14); ch->real_abils.intel = number(11, 16); ch->real_abils.wis = number(11, 16); ch->real_abils.cha = number(10, 15); break; case CLASS_MUTANT: GET_MAX_HIT(ch) += number(200, 400); GET_MAX_MANA(ch) += number(150, 200); GET_MAX_MOVE(ch) = number(4, 4); GET_MOVE(ch) = 0; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; ch->real_abils.str = number(15, 18); ch->real_abils.dex = number(10, 16); ch->real_abils.con = number(10, 16); ch->real_abils.intel = number(10, 14); ch->real_abils.wis = number(10, 13); ch->real_abils.cha = number(10, 15); break; case CLASS_saiyan: GET_MAX_HIT(ch) += number(200, 400); GET_MAX_MANA(ch) += number(150, 200); GET_MAX_MOVE(ch) = number(4, 4); GET_MOVE(ch) = 0; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; ch->real_abils.str = number(15, 18); ch->real_abils.dex = number(10, 16); ch->real_abils.con = number(12, 16); ch->real_abils.intel = number(10, 13); ch->real_abils.wis = number(10, 14); ch->real_abils.cha = number(10, 15); break; } ch->real_abils.rage = 1; ch->real_abils.ubs = ch->real_abils.lbs = 50; ch->aff_abils = ch->real_abils; } /* Some initializations for characters, including initial skills */ void do_start(struct char_data * ch) { GET_LEVEL(ch) = 1; GET_EXP(ch) = 1; set_title(ch, NULL); roll_real_abils(ch); ch->points.max_hit = 10; switch (GET_CLASS(ch)) { case CLASS_Human: GET_MAX_HIT(ch) = 70; GET_MAX_MANA(ch) = 150; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; GET_INT(ch) = 0 + number(11, 15); GET_CON(ch) = 0 + number(10, 13); GET_WIS(ch) = 0 + number(10, 14); GET_RAGE(ch) = 0 + number(1, 5); GET_DEX(ch) = 0 + number(1, 10); GET_STR(ch) = 0 + number(16, 18); break; case CLASS_Namek: GET_MAX_HIT(ch) = 80; GET_MAX_MANA(ch) = 100; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; GET_INT(ch) = 0 + number(10, 14); GET_CON(ch) = 0 + number(10, 13); GET_WIS(ch) = 0 + number(10, 15); GET_RAGE(ch) = 0 + number(1, 5); GET_DEX(ch) = 0 + number(1, 10); GET_STR(ch) = 0 + number(16, 18); break; case CLASS_KANASSAN: GET_MAX_HIT(ch) = 100; GET_MAX_MANA(ch) = 75; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; break; case CLASS_icer: GET_MAX_HIT(ch) = 100; GET_MAX_MANA(ch) = 75; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; GET_INT(ch) = 0 + number(10, 14); GET_CON(ch) = 0 + number(10, 15); GET_WIS(ch) = 0 + number(10, 13); GET_RAGE(ch) = 0 + number(2, 5); GET_DEX(ch) = 0 + number(1, 5); GET_STR(ch) = 0 + number(16, 18); break; case CLASS_saiyan: GET_MAX_HIT(ch) = 150; GET_MAX_MANA(ch) = 100; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; GET_INT(ch) = 0 + number(10, 13); GET_CON(ch) = 0 + number(11, 15); GET_WIS(ch) = 0 + number(10, 14); GET_RAGE(ch) = 0 + number(3, 6); GET_DEX(ch) = 0 + number(1, 10); GET_STR(ch) = 0 + number(18, 20); break; case CLASS_MAJIN: GET_MAX_HIT(ch) = 125; GET_MAX_MANA(ch) = 125; GET_AC(ch) += 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; GET_INT(ch) = 0 + number(10, 14); GET_CON(ch) = 0 + number(10, 14); GET_WIS(ch) = 0 + number(10, 14); GET_RAGE(ch) = 0 + number(2, 5); GET_DEX(ch) = 0 + number(1, 10); GET_STR(ch) = 0 + number(16, 18); break; case CLASS_ANDROID: GET_MAX_HIT(ch) = 100; GET_MAX_MANA(ch) = 100; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; GET_INT(ch) = 0 + number(10, 13); GET_CON(ch) = 0 + number(10, 14); GET_WIS(ch) = 0 + number(10, 14); GET_RAGE(ch) = 0 + number(1, 5); GET_DEX(ch) = 0 + number(1, 10); GET_STR(ch) = 0 + number(16, 18); break; case CLASS_KAI: GET_MAX_HIT(ch) = 75; GET_MAX_MANA(ch) = 150; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; GET_INT(ch) = 0 + number(10, 15); GET_CON(ch) = 0 + number(10, 13); GET_WIS(ch) = 0 + number(10, 15); GET_RAGE(ch) = 0 + number(1, 5); GET_DEX(ch) = 0 + number(1, 10); GET_STR(ch) = 0 + number(16, 18); break; case CLASS_HALF_BREED: GET_MAX_HIT(ch) = 120; GET_MAX_MANA(ch) = 120; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; GET_INT(ch) = 0 + number(10, 14); GET_CON(ch) = 0 + number(11, 14); GET_WIS(ch) = 0 + number(10, 14); GET_RAGE(ch) = 0 + number(3, 6); GET_DEX(ch) = 0 + number(1, 9); GET_STR(ch) = 0 + number(16, 18); break; case CLASS_BIODROID: GET_MAX_HIT(ch) = 175; GET_MAX_MANA(ch) = 60; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; GET_INT(ch) = 0 + number(10, 14); GET_CON(ch) = 0 + number(11, 14); GET_WIS(ch) = 0 + number(10, 14); GET_RAGE(ch) = 0 + number(2, 5); GET_DEX(ch) = 0 + number(1, 8); GET_STR(ch) = 0 + number(16, 18); break; case CLASS_KONATSU: GET_MAX_HIT(ch) = 100; GET_MAX_MANA(ch) = 100; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; GET_INT(ch) = 0 + number(10, 15); GET_CON(ch) = 0 + number(10, 12); GET_WIS(ch) = 0 + number(10, 15); GET_RAGE(ch) = 0 + number(1, 4); GET_DEX(ch) = 0 + number(5, 15); GET_STR(ch) = 0 + number(16, 18); break; case CLASS_CHANGELING: break; case CLASS_demon: GET_MAX_HIT(ch) = 200; GET_MAX_MANA(ch) = 50; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; GET_INT(ch) = 0 + number(11, 13); GET_CON(ch) = 0 + number(10, 15); GET_WIS(ch) = 0 + number(10, 13); GET_RAGE(ch) = 0 + number(2, 5); GET_DEX(ch) = 0 + number(1, 7); GET_STR(ch) = 0 + number(16, 18); break; case CLASS_TRUFFLE: GET_MAX_HIT(ch) = 130; GET_MAX_MANA(ch) = 80; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; GET_INT(ch) = 0 + number(10, 15); GET_CON(ch) = 0 + number(10, 13); GET_WIS(ch) = 0 + number(10, 14); GET_RAGE(ch) = 0 + number(2, 4); GET_DEX(ch) = 0 + number(1, 10); GET_STR(ch) = 0 + number(16, 18); break; case CLASS_MUTANT: GET_MAX_HIT(ch) = 115; GET_MAX_MANA(ch) = 115; GET_AC(ch) -= 99; GET_WEIGHT(ch) = 0; GET_HEIGHT(ch) = 0; GET_INT(ch) = 0 + number(10, 14); GET_CON(ch) = 0 + number(10, 14); GET_WIS(ch) = 0 + number(10, 15); GET_RAGE(ch) = 0 + number(2, 4); GET_DEX(ch) = 0 + number(1, 10); GET_STR(ch) = 0 + number(16, 18); break; } advance_level(ch); if (GET_LEVEL(ch) <= 1 && ch->player.build == BUILD_FAT) { GET_STR(ch) += 5; GET_CON(ch) += 2; } else if (GET_LEVEL(ch) <= 1 && ch->player.build == BUILD_MUSC) { GET_STR(ch) += 2; GET_CON(ch) += 3; } else if (GET_LEVEL(ch) <= 1 && ch->player.build == BUILD_LEAN) { GET_INT(ch) += 2; GET_WIS(ch) += 2; } else if (GET_LEVEL(ch) <= 1 && ch->player.build == BUILD_SKIN) { GET_DEX(ch) += 20; } else if (GET_LEVEL(ch) <= 1 && ch->player.build == BUILD_CHUB) { GET_INT(ch) += 1; GET_CON(ch) += 1; GET_WIS(ch) += 1; } GET_HIT(ch) = GET_MAX_HIT(ch); GET_MANA(ch) = GET_MAX_MANA(ch); GET_MOVE(ch) = 0; GET_COND(ch, FULL) = 24; GET_COND(ch, DRUNK) = 0; GET_COND(ch, THIRST) = 24; GET_RAGE(ch) = 1; GET_UBS(ch) = 50; GET_LBS(ch) = 50; if (IS_Namek(ch)) { GET_COND(ch, FULL) = -1; } if (IS_ANDROID(ch)) { GET_COND(ch, FULL) = -1; GET_COND(ch, THIRST) = -1; } ch->player.time.played = 0; ch->player.time.logon = time(0); ch->player_specials->saved.pc_attacks = 1; SET_BIT(PRF_FLAGS(ch), PRF_DISPHP); SET_BIT(PRF_FLAGS(ch), PRF_DISPMANA); SET_BIT(PRF_FLAGS(ch), PRF_AUTOEXIT); SET_BIT(PRF_FLAGS(ch), PRF_COLOR_1); SET_BIT(PRF_FLAGS(ch), PRF_COLOR_2); SET_BIT(PLR_FLAGS(ch), PLR_RARM); SET_BIT(PLR_FLAGS(ch), PLR_LARM); SET_BIT(PLR_FLAGS(ch), PLR_RLEG); SET_BIT(PLR_FLAGS(ch), PLR_LLEG); if (siteok_everyone) SET_BIT(PLR_FLAGS(ch), PLR_SITEOK); if (IS_MAJIN(ch)) { SET_BIT(PLR_FLAGS(ch), PLR_FORELOCK); } if (IS_saiyan(ch)) { SET_BIT(PLR_FLAGS(ch), PLR_STAIL); } if (IS_HALF_BREED(ch)) { SET_BIT(PLR_FLAGS(ch), PLR_STAIL); } if (IS_icer(ch)) { SET_BIT(PLR_FLAGS(ch), PLR_TAIL); } if (IS_BIODROID(ch)) { SET_BIT(PLR_FLAGS(ch), PLR_TAIL); } } /* * This function controls the change to maxmove, maxmana, and maxhp for * each class every time they gain a level. */ void advance_level(struct char_data * ch) { int add_hp = 0, add_mana = 0, add_lp = 0, add_speed, i; if (GET_AGE(ch) >= 50) { add_lp += 1; } if (GET_AGE(ch) >= 65) { add_lp += 1; add_mana += 100; add_hp += 100; } if ((IS_Namek(ch) || IS_KAI(ch) || IS_MAJIN(ch) || IS_ANDROID(ch)) && GET_HOME(ch) <= 19999) { GET_HOME(ch) += 1; } if (IS_HALF_BREED(ch)) { switch (number(1, 15)) { case 1: add_hp += number(30, 30); send_to_char("&15Your inner &11s&00&03a&11i&00&03y&11a&00&03n&15 strength grows&00!\r\n", ch); break; case 2: add_hp += number(55, 55); send_to_char("&15Your inner &11s&00&03a&11i&00&03y&11a&00&03n&15 strength grows&00!\r\n", ch); break; case 3: add_hp += number(80, 80); send_to_char("&15Your inner &11s&00&03a&11i&00&03y&11a&00&03n&15 strength grows&00!\r\n", ch); break; case 4: GET_MAX_HIT(ch) = GET_MAX_HIT(ch); break; case 5: GET_MAX_HIT(ch) = GET_MAX_HIT(ch); break; case 6: GET_MAX_HIT(ch) = GET_MAX_HIT(ch); break; case 7: add_mana += number(40, 40); send_to_char("&15Your inner &11s&00&03a&11i&00&03y&11a&00&03n&15 strength grows&00!\r\n", ch); break; case 8: add_mana += number(60, 60); send_to_char("&15Your inner &11s&00&03a&11i&00&03y&11a&00&03n&15 strength grows&00!\r\n", ch); break; case 9: GET_MAX_HIT(ch) = GET_MAX_HIT(ch); break; case 10: GET_MAX_HIT(ch) = GET_MAX_HIT(ch); break; case 11: case 12: case 13: case 14: case 15: break; } } if (IS_saiyan(ch)) { switch (number(1, 15)) { case 1: add_hp += number(50, 50); send_to_char("&15Your inner &11s&00&03a&11i&00&03y&11a&00&03n&15 strength grows&00!\r\n", ch); break; case 2: add_hp += number(85, 85); send_to_char("&15Your inner &11s&00&03a&11i&00&03y&11a&00&03n&15 strength grows&00!\r\n", ch); break; case 3: add_hp += number(125, 125); send_to_char("&15Your inner &11s&00&03a&11i&00&03y&11a&00&03n&15 strength grows&00!\r\n", ch); break; case 4: GET_MAX_HIT(ch) = GET_MAX_HIT(ch); break; case 5: GET_MAX_HIT(ch) = GET_MAX_HIT(ch); break; case 6: GET_MAX_HIT(ch) = GET_MAX_HIT(ch); break; case 7: add_mana += number(70, 70); send_to_char("&15Your inner &11s&00&03a&11i&00&03y&11a&00&03n&15 strength grows&00!\r\n", ch); break; case 8: add_mana += number(100, 100); send_to_char("&15Your inner &11s&00&03a&11i&00&03y&11a&00&03n&15 strength grows&00!\r\n", ch); break; case 9: GET_MAX_HIT(ch) = GET_MAX_HIT(ch); break; case 10: GET_MAX_HIT(ch) = GET_MAX_HIT(ch); break; case 11: case 12: case 13: case 14: case 15: break; } } switch (GET_WIS(ch)) { case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: add_lp += number(1, 1); break; case 10: add_lp += number(2, 2); break; case 11: add_lp += number(2, 2); break; case 12: add_lp += number(2, 2); break; case 13: add_lp += number(3, 3); break; case 14: add_lp += number(3, 3); break; case 15: add_lp += number(3, 3); break; case 16: add_lp += number(4, 4); break; case 17: add_lp += number(4, 4); break; case 18: add_lp += number(4, 4); break; case 19: add_lp += number(5, 5); break; case 20: add_lp += number(5, 5); break; case 21: add_lp += number(5, 5); break; case 22: add_lp += number(6, 6); break; case 23: add_lp += number(6, 6); break; case 24: add_lp += number(6, 6); break; case 25: add_lp += number(7, 7); break; case 26: add_lp += number(7, 7); break; case 27: add_lp += number(7, 7); break; case 28: add_lp += number(7, 7); break; case 29: add_lp += number(7, 7); break; case 30: add_lp += number(7, 7); break; case 31: add_lp += number(7, 7); break; case 32: add_lp += number(8, 8); break; case 33: add_lp += number(8, 8); break; case 34: add_lp += number(8, 8); break; case 35: add_lp += number(9, 9); break; case 36: add_lp += number(9, 9); break; case 37: add_lp += number(9, 9); break; case 38: add_lp += number(10, 10); break; case 39: add_lp += number(10, 10); break; case 40: case 41: case 42: case 43: case 44: case 45: case 46: case 47: case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: add_lp += number(10, 10); break; case 56: case 57: add_lp += number(12, 12); break; case 58: case 59: case 60: case 61: case 62: case 63: case 64: case 65: case 66: case 67: case 68: case 69: case 70: add_lp += number(15, 15); break; case 71: case 72: case 73: case 74: case 75: add_lp += number(16, 16); break; case 76: case 77: case 78: case 79: case 80: add_lp += number(17, 17); break; case 81: case 82: case 83: case 84: case 85: add_lp += number(18, 18); break; case 86: case 87: case 88: case 89: case 90: add_lp += number(19, 19); break; case 91: case 92: case 93: case 94: case 95: case 96: case 97: case 98: case 99: add_lp += number(20, 20); break; case 100: add_lp += number(25, 25); } switch (GET_INT(ch)) { case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: add_mana += number(30, 30); break; case 10: add_mana += number(45, 45); break; case 11: add_mana += number(55, 55); break; case 12: add_mana += number(65, 65); break; case 13: add_mana += number(80, 80); break; case 14: add_mana += number(100, 100); break; case 15: add_mana += number(125, 125); break; case 16: add_mana += number(150, 150); break; case 17: add_mana += number(175, 175); break; case 18: add_mana += number(200, 200); break; case 19: add_mana += number(225, 225); break; case 20: add_mana += number(250, 250); break; case 21: add_mana += number(275, 275); break; case 22: add_mana += number(300, 300); break; case 23: add_mana += number(325, 325); break; case 24: add_mana += number(350, 350); break; case 25: add_mana += number(375, 375); break; case 26: add_mana += number(400, 400); break; case 27: add_mana += number(425, 425); break; case 28: add_mana += number(450, 450); break; case 29: add_mana += number(475, 475); break; case 30: add_mana += number(500, 500); break; case 31: add_mana += number(525, 525); break; case 32: add_mana += number(550, 550); break; case 33: add_mana += number(575, 575); break; case 34: add_mana += number(600, 600); break; case 35: add_mana += number(625, 625); break; case 36: add_mana += number(650, 650); break; case 37: add_mana += number(675, 675); break; case 38: add_mana += number(700, 700); break; case 39: add_mana += number(725, 725); break; case 40: add_mana += number(750, 750); break; case 41: add_mana += number(775, 775); break; case 42: add_mana += number(800, 800); break; case 43: add_mana += number(825, 825); break; case 44: add_mana += number(875, 875); break; case 45: add_mana += number(880, 880); break; case 46: add_mana += number(890, 890); break; case 47: add_mana += number(900, 900); break; case 48: add_mana += number(910, 910); break; case 49: add_mana += number(920, 920); break; case 50: add_mana += number(930, 930); break; case 51: add_mana += number(935, 935); break; case 52: add_mana += number(940, 940); break; case 53: add_mana += number(945, 945); break; case 54: add_mana += number(950, 950); break; case 55: add_mana += number(955, 955); break; case 56: add_mana += number(965, 965); break; case 57: add_mana += number(975, 975); break; case 58: add_mana += number(1000, 1000); break; case 59: add_mana += number(1025, 1025); break; case 60: add_mana += number(1050, 1050); break; case 61: add_mana += number(1075, 1075); break; case 62: add_mana += number(1100, 1100); break; case 63: add_mana += number(1125, 1125); break; case 64: add_mana += number(1150, 1150); break; case 65: add_mana += number(1175, 1175); break; case 66: add_mana += number(1200, 1200); break; case 67: add_mana += number(1225, 1225); break; case 68: add_mana += number(1250, 1250); break; case 69: add_mana += number(1350, 1350); break; case 70: add_mana += number(1500, 1500); break; case 71: add_mana += number(1520, 1520); break; case 72: add_mana += number(1540, 1540); break; case 73: add_mana += number(1560, 1560); break; case 74: add_mana += number(1580, 1580); break; case 75: add_mana += number(1600, 1600); break; case 76: add_mana += number(1620, 1620); break; case 77: add_mana += number(1640, 1640); break; case 78: add_mana += number(1660, 1660); break; case 79: add_mana += number(1680, 1680); break; case 80: add_mana += number(1700, 1700); break; case 81: add_mana += number(1710, 1710); break; case 82: add_mana += number(1720, 1720); break; case 83: add_mana += number(1730, 1730); break; case 84: add_mana += number(1740, 1740); break; case 85: add_mana += number(1750, 1750); break; case 86: add_mana += number(1760, 1760); break; case 87: add_mana += number(1770, 1770); break; case 88: add_mana += number(1780, 1780); break; case 89: add_mana += number(1790, 1790); break; case 90: add_mana += number(1800, 1800); break; case 91: add_mana += number(1810, 1810); break; case 92: add_mana += number(1820, 1820); break; case 93: add_mana += number(1830, 1830); break; case 94: add_mana += number(1840, 1840); break; case 95: add_mana += number(1850, 1850); break; case 96: add_mana += number(1860, 1860); break; case 97: add_mana += number(1870, 1870); break; case 98: add_mana += number(1900, 1900); break; case 99: add_mana += number(1950, 1950); break; case 100: add_mana += number(2000, 2000); break; } switch (GET_CON(ch)) { case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: add_hp += number(30, 30); break; case 10: add_hp += number(55, 55); break; case 11: add_hp += number(65, 65); break; case 12: add_hp += number(80, 80); break; case 13: add_hp += number(100, 100); break; case 14: add_hp += number(125, 125); break; case 15: add_hp += number(150, 150); break; case 16: add_hp += number(175, 175); break; case 17: add_hp += number(200, 200); break; case 18: add_hp += number(250, 250); break; case 19: add_hp += number(275, 275); break; case 20: add_hp += number(300, 300); break; case 21: add_hp += number(325, 325); break; case 22: add_hp += number(350, 350); break; case 23: add_hp += number(375, 375); break; case 24: add_hp += number(400, 400); break; case 25: add_hp += number(425, 425); break; case 26: add_hp += number(450, 450); break; case 27: add_hp += number(475, 475); break; case 28: add_hp += number(500, 500); break; case 29: add_hp += number(525, 525); break; case 30: add_hp += number(550, 550); break; case 31: add_hp += number(575, 575); break; case 32: add_hp += number(600, 600); break; case 33: add_hp += number(625, 625); break; case 34: add_hp += number(650, 650); break; case 35: add_hp += number(675, 675); break; case 36: add_hp += number(700, 700); break; case 37: add_hp += number(725, 725); break; case 38: add_hp += number(750, 750); break; case 39: add_hp += number(775, 775); break; case 40: add_hp += number(800, 800); break; case 41: add_hp += number(825, 825); break; case 42: add_hp += number(850, 850); break; case 43: add_hp += number(875, 875); break; case 44: add_hp += number(900, 900); break; case 45: add_hp += number(910, 910); break; case 46: add_hp += number(920, 920); break; case 47: add_hp += number(930, 930); break; case 48: add_hp += number(940, 940); break; case 49: add_hp += number(950, 950); break; case 50: add_hp += number(960, 960); break; case 51: add_hp += number(970, 970); break; case 52: add_hp += number(980, 980); break; case 53: add_hp += number(990, 990); break; case 54: add_hp += number(1000, 1000); break; case 55: add_hp += number(1025, 1025); break; case 56: add_hp += number(1050, 1050); break; case 57: add_hp += number(1075, 1075); break; case 58: add_hp += number(1150, 1150); break; case 59: add_hp += number(1250, 1250); break; case 60: add_hp += number(1260, 1260); break; case 61: add_hp += number(1270, 1270); break; case 62: add_hp += number(1280, 1280); break; case 63: add_hp += number(1290, 1290); break; case 64: add_hp += number(1300, 1300); break; case 65: add_hp += number(1325, 1325); break; case 66: add_hp += number(1350, 1350); break; case 67: add_hp += number(1375, 1375); break; case 68: add_hp += number(1400, 1400); break; case 69: add_hp += number(1450, 1450); break; case 70: add_hp += number(1500, 1500); break; case 71: add_hp += number(1520, 1520); break; case 72: add_hp += number(1540, 1540); break; case 73: add_hp += number(1560, 1560); break; case 74: add_hp += number(1580, 1580); break; case 75: add_hp += number(1600, 1600); break; case 76: add_hp += number(1620, 1620); break; case 77: add_hp += number(1640, 1640); break; case 78: add_hp += number(1660, 1660); break; case 79: add_hp += number(1680, 1680); break; case 80: add_hp += number(1700, 1700); break; case 81: add_hp += number(1720, 1720); break; case 82: add_hp += number(1740, 1740); break; case 83: add_hp += number(1760, 1760); break; case 84: add_hp += number(1780, 1780); break; case 85: add_hp += number(1800, 1800); break; case 86: add_hp += number(1820, 1820); break; case 87: add_hp += number(1840, 1840); break; case 88: add_hp += number(1860, 1860); break; case 89: add_hp += number(1890, 1880); break; case 90: add_hp += number(1900, 1900); break; case 91: add_hp += number(1910, 1910); break; case 92: add_hp += number(1920, 1920); break; case 93: add_hp += number(1930, 1930); break; case 94: add_hp += number(1940, 1940); break; case 95: add_hp += number(1950, 1950); break; case 96: add_hp += number(1960, 1960); break; case 97: add_hp += number(1970, 1970); break; case 98: add_hp += number(1980, 1980); break; case 99: add_hp += number(1990, 1990); break; case 100: add_hp += number(2000, 2000); break; } sprintf(buf, "&16[&10GAIN&16] &09PL&11: &15%d &14Ki&11: &15%d &12LP&11: &15%d\r\n", add_hp, add_mana, add_lp); send_to_char(buf, ch); GET_PRACTICES(ch) = GET_PRACTICES(ch) + add_lp; ch->points.max_hit += MAX(1, add_hp); ch->points.max_mana += MAX(1, add_mana); if (GET_LEVEL(ch) >= LVL_IMMORT) { for (i = 0; i < 3; i++) GET_COND(ch, i) = (char) -1; SET_BIT(PRF_FLAGS(ch), PRF_HOLYLIGHT); } save_char(ch, NOWHERE); } /* * This simply calculates the backstab multiplier based on a character's * level. This used to be an array, but was changed to be a function so * that it would be easier to add more levels to your MUD. This doesn't * really create a big performance hit because it's not used very often. */ int backstab_mult(int level) { if (level <= 0) return 1; /* level 0 */ else if (level <= 7) return 2; /* level 1 - 7 */ else if (level <= 13) return 3; /* level 8 - 13 */ else if (level <= 20) return 4; /* level 14 - 20 */ else if (level <= 28) return 5; /* level 21 - 28 */ else if (level < LVL_IMMORT) return 6; /* all remaining mortal levels */ else return 20; /* immortals */ } /* * invalid_class is used by handler.c to determine if a piece of equipment is * usable by a particular class, based on the ITEM_ANTI_{class} bitvectors. */ int invalid_class(struct char_data *ch, struct obj_data *obj) { if ((IS_OBJ_STAT(obj, ITEM_ANTI_Human) && IS_Human(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_Namek) && IS_Namek(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_saiyan) && IS_saiyan(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_MAJIN) && IS_MAJIN(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_ANDROID) && IS_ANDROID(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_KAI) && IS_KAI(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_HALF_BREED) && IS_HALF_BREED(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_TRUFFLE) && IS_TRUFFLE(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_demon) && IS_demon(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_KONATSU) && IS_KONATSU(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_BIODROID) && IS_BIODROID(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_MUTANT) && IS_MUTANT(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_HALF_BREED) && IS_HALF_BREED(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_HALF_BREED) && IS_HALF_BREED(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_icer) && IS_icer(ch))) return 1; else return 0; } /* * SPELLS AND SKILLS. This area defines which spells are assigned to * which classes, and the minimum level the character must be to use * the spell or skill. */ void init_spell_levels(void) { /* Human */ spell_level(SPELL_GROUP_BOOST, CLASS_Human, 1); spell_level(SPELL_DETECT_INVISIBILTY, CLASS_Human, 1); spell_level(SPELL_ZANZOKEN, CLASS_Human, 1); spell_level(SKILL_KAKUSANHA, CLASS_Human, 1); spell_level(SKILL_YOIKOMINMINKEN, CLASS_Human, 1); spell_level(SKILL_SPIRITBALL, CLASS_Human, 1); spell_level(SKILL_SENSE, CLASS_Human, 1); spell_level(SKILL_SWIFTNESS, CLASS_Human, 1); spell_level(SKILL_RESCUE, CLASS_Human, 1); spell_level(SPELL_SOLAR_FLARE, CLASS_Human, 1); spell_level(SPELL_BARRIER, CLASS_Human, 1); spell_level(SKILL_SWEEP, CLASS_Human, 1); spell_level(SKILL_KNEE, CLASS_Human, 1); spell_level(SKILL_ELBOW, CLASS_Human, 1); spell_level(SKILL_ROUNDHOUSE, CLASS_Human, 1); spell_level(SKILL_FLY, CLASS_Human, 1); spell_level(SPELL_YOIKOMINMINKEN, CLASS_Human, 1); spell_level(SKILL_POWERSENSE, CLASS_Human, 1); spell_level(SPELL_MULTIFORM, CLASS_Human, 1); spell_level(SPELL_WORD_OF_RECALL, CLASS_Human, 1); spell_level(SKILL_DISK, CLASS_Human, 1); spell_level(SKILL_KAMEHAMEHA, CLASS_Human, 1); spell_level(SKILL_RENZO, CLASS_Human, 1); spell_level(SPELL_CREATE_FOOD, CLASS_Human, 1); spell_level(SKILL_KISHOT, CLASS_Human, 1); spell_level(SKILL_KIKOHO, CLASS_Human, 1); spell_level(SKILL_ZANELB, CLASS_Human, 1); /* Namek */ spell_level(SPELL_GROUP_HEAL, CLASS_Namek, 1); spell_level(SPELL_PROT_FROM_EVIL, CLASS_Namek, 1); spell_level(SPELL_DETECT_INVISIBILTY, CLASS_Namek, 1); spell_level(SPELL_ZANZOKEN, CLASS_Namek, 1); spell_level(SKILL_SENSE, CLASS_Namek, 1); spell_level(SKILL_RESCUE, CLASS_Namek, 2); spell_level(SPELL_HEAL, CLASS_Namek, 1); spell_level(SPELL_BARRIER, CLASS_Namek, 1); spell_level(SPELL_MULTIFORM, CLASS_Namek, 1); spell_level(SKILL_SWEEP, CLASS_Namek, 1); spell_level(SKILL_KNEE, CLASS_Namek, 1); spell_level(SKILL_ELBOW, CLASS_Namek, 1); spell_level(SKILL_ROUNDHOUSE, CLASS_Namek, 1); spell_level(SKILL_FLY, CLASS_Namek, 1); spell_level(SPELL_REPRODUCE, CLASS_Namek, 1); spell_level(SKILL_POWERSENSE, CLASS_Namek, 1); spell_level(SKILL_REGENERATE, CLASS_Namek, 1); spell_level(SPELL_KYODAIKA, CLASS_Namek, 1); spell_level(SPELL_WORD_OF_RECALL, CLASS_Namek, 1); spell_level(SKILL_RENZO, CLASS_Namek, 1); spell_level(SPELL_CREATE_FOOD, CLASS_Namek, 1); spell_level(SKILL_KISHOT, CLASS_Namek, 1); spell_level(SKILL_MAKANKO, CLASS_Namek, 1); spell_level(SKILL_KOUSEN, CLASS_Namek, 1); spell_level(SKILL_ZANELB, CLASS_Namek, 1); /* Icer */ spell_level(SPELL_BARRIER, CLASS_icer, 1); spell_level(SPELL_DETECT_INVISIBILTY, CLASS_icer, 1); spell_level(SPELL_ZANZOKEN, CLASS_icer, 1); spell_level(SKILL_RESCUE, CLASS_icer, 1); spell_level(SKILL_TAILWHIP, CLASS_icer, 1); spell_level(SKILL_SWEEP, CLASS_icer, 1); spell_level(SKILL_KNEE, CLASS_icer, 1); spell_level(SKILL_ELBOW, CLASS_icer, 1); spell_level(SKILL_ROUNDHOUSE, CLASS_icer, 1); spell_level(SKILL_FLY, CLASS_icer, 1); spell_level(SPELL_INFRAVISION, CLASS_icer, 1); spell_level(SPELL_WORD_OF_RECALL, CLASS_icer, 1); spell_level(SKILL_RENZO, CLASS_icer, 1); spell_level(SPELL_CREATE_FOOD, CLASS_icer, 1); spell_level(SKILL_KISHOT, CLASS_icer, 1); spell_level(SKILL_DBALL, CLASS_icer, 1); spell_level(SKILL_KOUSEN, CLASS_icer, 1); spell_level(SKILL_ZANELB, CLASS_icer, 1); spell_level(SKILL_POWERSENSE, CLASS_icer, 1); /* Saiyan */ spell_level(SPELL_BARRIER, CLASS_saiyan, 1); spell_level(SPELL_DETECT_INVISIBILTY, CLASS_saiyan, 1); spell_level(SKILL_SENSE, CLASS_saiyan, 1); spell_level(SKILL_RESCUE, CLASS_saiyan, 1); spell_level(SPELL_SOLAR_FLARE, CLASS_saiyan, 1); spell_level(SPELL_ZANZOKEN, CLASS_saiyan, 1); spell_level(SKILL_SWEEP, CLASS_saiyan, 1); spell_level(SKILL_KNEE, CLASS_saiyan, 1); spell_level(SKILL_ELBOW, CLASS_saiyan, 1); spell_level(SKILL_ROUNDHOUSE, CLASS_saiyan, 1); spell_level(SKILL_FLY, CLASS_saiyan, 1); spell_level(SPELL_HASSHUKEN, CLASS_saiyan, 1); spell_level(SPELL_TSURUGI, CLASS_saiyan, 1); spell_level(SKILL_KAIOKEN, CLASS_saiyan, 1); spell_level(SKILL_SENSE, CLASS_saiyan, 1); spell_level(SKILL_POWERSENSE, CLASS_saiyan, 1); spell_level(SPELL_WORD_OF_RECALL, CLASS_saiyan, 1); spell_level(SKILL_FINALFLASH, CLASS_saiyan, 1); spell_level(SKILL_MASENKO, CLASS_saiyan, 1); spell_level(SKILL_CHOUKAME, CLASS_saiyan, 1); spell_level(SKILL_BIGBANG, CLASS_saiyan, 1); spell_level(SKILL_KAMEHAMEHA, CLASS_saiyan, 1); spell_level(SKILL_DISK, CLASS_saiyan, 1); spell_level(SKILL_RENZO, CLASS_saiyan, 1); spell_level(SPELL_CREATE_FOOD, CLASS_saiyan, 1); spell_level(SKILL_KISHOT, CLASS_saiyan, 1); spell_level(SKILL_ZANELB, CLASS_saiyan, 1); spell_level(SKILL_POWERSENSE, CLASS_saiyan, 1); /* Majin */ spell_level(SPELL_HEAL, CLASS_MAJIN, 1); spell_level(SPELL_CANDYBEAM, CLASS_MAJIN, 1); spell_level(SPELL_GROUP_HEAL, CLASS_MAJIN, 1); spell_level(SPELL_BARRIER, CLASS_MAJIN, 1); spell_level(SPELL_DETECT_INVISIBILTY, CLASS_MAJIN, 1); spell_level(SPELL_ZANZOKEN, CLASS_MAJIN, 1); spell_level(SKILL_RESCUE, CLASS_MAJIN, 1); spell_level(SKILL_SENSE, CLASS_MAJIN, 1); spell_level(SPELL_MAJIN, CLASS_MAJIN, 1); spell_level(SKILL_SWEEP, CLASS_MAJIN, 1); spell_level(SKILL_KNEE, CLASS_MAJIN, 1); spell_level(SKILL_ELBOW, CLASS_MAJIN, 1); spell_level(SKILL_ROUNDHOUSE, CLASS_MAJIN, 1); spell_level(SKILL_FLY, CLASS_MAJIN, 1); spell_level(SKILL_INGEST, CLASS_MAJIN, 1); spell_level(SKILL_POWERSENSE, CLASS_MAJIN, 1); spell_level(SKILL_REGENERATE, CLASS_MAJIN, 1); spell_level(SPELL_WORD_OF_RECALL, CLASS_MAJIN, 1); spell_level(SKILL_RENZO, CLASS_MAJIN, 1); spell_level(SPELL_CREATE_FOOD, CLASS_MAJIN, 1); spell_level(SKILL_KISHOT, CLASS_MAJIN, 1); spell_level(SKILL_ZANELB, CLASS_MAJIN, 1); /* Android */ spell_level(SPELL_ZANZOKEN, CLASS_ANDROID, 1); spell_level(SPELL_INFRAVISION, CLASS_ANDROID, 1); spell_level(SPELL_BARRIER, CLASS_ANDROID, 1); spell_level(SPELL_DETECT_INVISIBILTY, CLASS_ANDROID, 1); spell_level(SPELL_ZANZOKEN, CLASS_ANDROID, 1); spell_level(SKILL_REPAIR, CLASS_ANDROID, 1); spell_level(SKILL_RESCUE, CLASS_ANDROID, 1); spell_level(SKILL_SENSE, CLASS_ANDROID, 1); spell_level(SKILL_SWEEP, CLASS_ANDROID, 1); spell_level(SKILL_KNEE, CLASS_ANDROID, 1); spell_level(SKILL_ELBOW, CLASS_ANDROID, 1); spell_level(SKILL_ROUNDHOUSE, CLASS_ANDROID, 1); spell_level(SKILL_FLY, CLASS_ANDROID, 1); spell_level(SPELL_BARRIER, CLASS_ANDROID, 1); spell_level(SKILL_DESTRUCT, CLASS_ANDROID, 1); spell_level(SKILL_REGENERATE, CLASS_ANDROID, 1); spell_level(SPELL_WORD_OF_RECALL, CLASS_ANDROID, 1); spell_level(SKILL_RENZO, CLASS_ANDROID, 1); spell_level(SPELL_CREATE_FOOD, CLASS_ANDROID, 1); spell_level(SKILL_KISHOT, CLASS_ANDROID, 1); spell_level(SPELL_INFRAVISION, CLASS_ANDROID, 1); spell_level(SKILL_ZANELB, CLASS_ANDROID, 1); spell_level(SKILL_POWERSENSE, CLASS_ANDROID, 1); spell_level(SKILL_HELLF, CLASS_ANDROID, 1); /* KAI */ spell_level(SPELL_PROT_FROM_EVIL, CLASS_KAI, 1); spell_level(SPELL_REMOVE_POISON, CLASS_KAI, 1); spell_level(SPELL_REMOVE_CURSE, CLASS_KAI, 1); spell_level(SPELL_DETECT_INVISIBILTY, CLASS_KAI, 1); spell_level(SPELL_MIND_FREEZE, CLASS_KAI, 1); spell_level(SPELL_HEAL, CLASS_KAI, 1); spell_level(SPELL_CURE_SOLAR_FLARE, CLASS_KAI, 1); spell_level(SPELL_ZANZOKEN, CLASS_KAI, 1); spell_level(SPELL_BARRIER, CLASS_KAI, 1); spell_level(SKILL_KAIOKEN, CLASS_KAI, 1); spell_level(SKILL_RESCUE, CLASS_KAI, 1); spell_level(SKILL_SWEEP, CLASS_KAI, 1); spell_level(SKILL_KNEE, CLASS_KAI, 1); spell_level(SKILL_ELBOW, CLASS_KAI, 1); spell_level(SKILL_ROUNDHOUSE, CLASS_KAI, 1); spell_level(SKILL_FLY, CLASS_KAI, 1); spell_level(SPELL_WORD_OF_RECALL, CLASS_KAI, 1); spell_level(SKILL_RENZO, CLASS_KAI, 1); spell_level(SPELL_CREATE_FOOD, CLASS_KAI, 1); spell_level(SKILL_KISHOT, CLASS_KAI, 1); spell_level(SPELL_KYODAIKA, CLASS_KAI, 1); spell_level(SKILL_ZANELB, CLASS_KAI, 1); spell_level(SKILL_POWERSENSE, CLASS_KAI, 1); /* BIODROID */ spell_level(SPELL_INFRAVISION, CLASS_BIODROID, 1); spell_level(SPELL_BARRIER, CLASS_BIODROID, 1); spell_level(SPELL_DETECT_INVISIBILTY, CLASS_BIODROID, 1); spell_level(SPELL_MULTIFORM, CLASS_BIODROID, 1); spell_level(SPELL_ZANZOKEN, CLASS_BIODROID, 1); spell_level(SKILL_RESCUE, CLASS_BIODROID, 1); spell_level(SKILL_SENSE, CLASS_BIODROID, 1); spell_level(SKILL_SWEEP, CLASS_BIODROID, 1); spell_level(SKILL_KNEE, CLASS_BIODROID, 1); spell_level(SKILL_ELBOW, CLASS_BIODROID, 1); spell_level(SKILL_ROUNDHOUSE, CLASS_BIODROID, 1); spell_level(SKILL_FLY, CLASS_BIODROID, 1); spell_level(SKILL_ABSORB, CLASS_BIODROID, 1); spell_level(SKILL_DESTRUCT, CLASS_BIODROID, 1); spell_level(SKILL_REGENERATE, CLASS_ANDROID, 1); spell_level(SKILL_POWERSENSE, CLASS_BIODROID, 1); spell_level(SPELL_SOLAR_FLARE, CLASS_BIODROID, 1); spell_level(SPELL_WORD_OF_RECALL, CLASS_BIODROID, 1); spell_level(SKILL_FINALFLASH, CLASS_BIODROID, 1); spell_level(SKILL_MASENKO, CLASS_BIODROID, 1); spell_level(SKILL_CHOUKAME, CLASS_BIODROID, 1); spell_level(SKILL_BIGBANG, CLASS_BIODROID, 1); spell_level(SKILL_KAMEHAMEHA, CLASS_BIODROID, 1); spell_level(SKILL_DISK, CLASS_BIODROID, 1); spell_level(SKILL_RENZO, CLASS_BIODROID, 1); spell_level(SPELL_CREATE_FOOD, CLASS_BIODROID, 1); spell_level(SKILL_KISHOT, CLASS_BIODROID, 1); spell_level(SKILL_ZANELB, CLASS_BIODROID, 1); /* KONATSU */ spell_level(SPELL_PROT_FROM_EVIL, CLASS_KONATSU, 1); spell_level(SKILL_PHEONIX, CLASS_KONATSU, 1); spell_level(SPELL_GROUP_INVISIBLE, CLASS_KONATSU, 1); spell_level(SPELL_INFRAVISION, CLASS_KONATSU, 1); spell_level(SPELL_DETECT_INVISIBILTY, CLASS_KONATSU, 1); spell_level(SPELL_ZANZOKEN, CLASS_KONATSU, 1); spell_level(SKILL_MUG, CLASS_KONATSU, 1); spell_level(SKILL_BACKSTAB, CLASS_KONATSU, 1); spell_level(SKILL_STEALTH, CLASS_KONATSU, 1); spell_level(SKILL_TWIN, CLASS_KONATSU, 1); spell_level(SKILL_RESCUE, CLASS_KONATSU, 1); spell_level(SKILL_SWEEP, CLASS_KONATSU, 1); spell_level(SKILL_KNEE, CLASS_KONATSU, 1); spell_level(SKILL_ELBOW, CLASS_KONATSU, 1); spell_level(SKILL_ROUNDHOUSE, CLASS_KONATSU, 1); spell_level(SKILL_FLY, CLASS_KONATSU, 1); spell_level(SPELL_SWORD, CLASS_KONATSU, 1); spell_level(SPELL_INFRAVISION, CLASS_KONATSU, 1); spell_level(SPELL_INVISIBLE, CLASS_KONATSU, 1); spell_level(SPELL_BURNING_SOULS, CLASS_KONATSU, 1); spell_level(SKILL_POWERSENSE, CLASS_KONATSU, 1); spell_level(SKILL_SENSE, CLASS_KONATSU, 1); spell_level(SPELL_WORD_OF_RECALL, CLASS_KONATSU, 1); spell_level(SKILL_RENZO, CLASS_KONATSU, 1); spell_level(SPELL_CREATE_FOOD, CLASS_KONATSU, 1); spell_level(SKILL_KISHOT, CLASS_KONATSU, 1); spell_level(SKILL_ZANELB, CLASS_KONATSU, 1); /* Kanassan */ spell_level(SPELL_PROT_FROM_EVIL, CLASS_KANASSAN, 1); spell_level(SPELL_REMOVE_POISON, CLASS_KANASSAN, 1); spell_level(SPELL_REMOVE_CURSE, CLASS_KANASSAN, 1); spell_level(SPELL_DETECT_INVISIBILTY, CLASS_KANASSAN, 1); spell_level(SPELL_ZANZOKEN, CLASS_KANASSAN, 1); spell_level(SKILL_RESCUE, CLASS_KANASSAN, 1); spell_level(SKILL_SWEEP, CLASS_KANASSAN, 1); spell_level(SKILL_KNEE, CLASS_KANASSAN, 1); spell_level(SKILL_ELBOW, CLASS_KANASSAN, 1); spell_level(SKILL_ROUNDHOUSE, CLASS_KANASSAN, 1); spell_level(SKILL_FLY, CLASS_KANASSAN, 1); spell_level(SPELL_BLADEMORPH, CLASS_KANASSAN, 1); spell_level(SKILL_STEALTH, CLASS_KANASSAN, 1); spell_level(SPELL_INFRAVISION, CLASS_KANASSAN, 1); spell_level(SPELL_MUTATE, CLASS_KANASSAN, 1); spell_level(SKILL_REGENERATE, CLASS_KANASSAN, 1); spell_level(SPELL_WORD_OF_RECALL, CLASS_KANASSAN, 1); spell_level(SKILL_RENZO, CLASS_KANASSAN, 1); spell_level(SPELL_CREATE_FOOD, CLASS_KANASSAN, 1); spell_level(SKILL_KISHOT, CLASS_KANASSAN, 1); spell_level(SKILL_ZANELB, CLASS_KANASSAN, 1); spell_level(SKILL_POWERSENSE, CLASS_KANASSAN, 1); /* DEMON */ spell_level(SPELL_CURSE, CLASS_demon, 1); spell_level(SPELL_REMOVE_CURSE, CLASS_demon, 1); spell_level(SPELL_SPEAR, CLASS_demon, 1); spell_level(SPELL_ANIMATE_DEAD, CLASS_demon, 1); spell_level(SPELL_BARRIER, CLASS_demon, 1); spell_level(SPELL_DETECT_INVISIBILTY, CLASS_demon, 1); spell_level(SPELL_ZANZOKEN, CLASS_demon, 1); spell_level(SKILL_RESCUE, CLASS_demon, 1); spell_level(SKILL_SWEEP, CLASS_demon, 1); spell_level(SKILL_KNEE, CLASS_demon, 1); spell_level(SKILL_ELBOW, CLASS_demon, 1); spell_level(SKILL_ROUNDHOUSE, CLASS_demon, 1); spell_level(SKILL_FLY, CLASS_demon, 1); spell_level(SKILL_KAIOKEN, CLASS_demon, 1); spell_level(SPELL_HEAL, CLASS_demon, 1); spell_level(SPELL_SUMMON, CLASS_demon, 1); spell_level(SKILL_POWERSENSE, CLASS_demon, 1); spell_level(SPELL_WORD_OF_RECALL, CLASS_demon, 1); spell_level(SKILL_RENZO, CLASS_demon, 1); spell_level(SPELL_CREATE_FOOD, CLASS_demon, 1); spell_level(SKILL_KISHOT, CLASS_demon, 1); spell_level(SKILL_ZANELB, CLASS_demon, 1); /* TRUFFLE */ spell_level(SPELL_BUILDNANO, CLASS_TRUFFLE, 1); spell_level(SPELL_BUILDSHIELD, CLASS_TRUFFLE, 1); spell_level(SPELL_GROUP_HEAL, CLASS_TRUFFLE, 1); spell_level(SPELL_GROUP_armor, CLASS_TRUFFLE, 1); spell_level(SPELL_DETECT_INVISIBILTY, CLASS_TRUFFLE, 1); spell_level(SPELL_ZANZOKEN, CLASS_TRUFFLE, 1); spell_level(SKILL_RESCUE, CLASS_TRUFFLE, 1); spell_level(SKILL_SWEEP, CLASS_TRUFFLE, 1); spell_level(SKILL_KNEE, CLASS_TRUFFLE, 1); spell_level(SKILL_ELBOW, CLASS_TRUFFLE, 1); spell_level(SKILL_ROUNDHOUSE, CLASS_TRUFFLE, 1); spell_level(SKILL_FLY, CLASS_TRUFFLE, 1); spell_level(SPELL_WORD_OF_RECALL, CLASS_TRUFFLE, 1); spell_level(SKILL_RENZO, CLASS_TRUFFLE, 1); spell_level(SPELL_CREATE_FOOD, CLASS_TRUFFLE, 1); spell_level(SKILL_KISHOT, CLASS_TRUFFLE, 1); spell_level(SKILL_ZANELB, CLASS_TRUFFLE, 1); spell_level(SKILL_POWERSENSE, CLASS_TRUFFLE, 1); /* MUTANT */ spell_level(SPELL_MUTATE, CLASS_MUTANT, 1); spell_level(SPELL_BLADEMORPH, CLASS_MUTANT, 1); spell_level(SPELL_GROUP_HEAL, CLASS_MUTANT, 1); spell_level(SPELL_POISON, CLASS_MUTANT, 1); spell_level(SPELL_DETECT_INVISIBILTY, CLASS_MUTANT, 1); spell_level(SPELL_ZANZOKEN, CLASS_MUTANT, 1); spell_level(SKILL_RESCUE, CLASS_MUTANT, 1); spell_level(SKILL_SWEEP, CLASS_MUTANT, 1); spell_level(SKILL_KNEE, CLASS_MUTANT, 1); spell_level(SKILL_ELBOW, CLASS_MUTANT, 1); spell_level(SKILL_ROUNDHOUSE, CLASS_MUTANT, 1); spell_level(SKILL_FLY, CLASS_MUTANT, 1); spell_level(SPELL_WORD_OF_RECALL, CLASS_MUTANT, 1); spell_level(SKILL_RENZO, CLASS_MUTANT, 1); spell_level(SPELL_CREATE_FOOD, CLASS_MUTANT, 1); spell_level(SKILL_KISHOT, CLASS_MUTANT, 1); spell_level(SKILL_ZANELB, CLASS_MUTANT, 1); spell_level(SKILL_POWERSENSE, CLASS_MUTANT, 1); /* TUGUIL */ /* Half-Breed */ spell_level(SPELL_DETECT_INVISIBILTY, CLASS_HALF_BREED, 1); spell_level(SPELL_ZANZOKEN, CLASS_HALF_BREED, 1); spell_level(SKILL_BURNINGATTACK, CLASS_HALF_BREED, 1); spell_level(SKILL_SEVENDRAGON, CLASS_HALF_BREED, 1); spell_level(SKILL_RESCUE, CLASS_HALF_BREED, 1); spell_level(SKILL_SENSE, CLASS_HALF_BREED, 1); spell_level(SPELL_BARRIER, CLASS_HALF_BREED, 1); spell_level(SKILL_SWEEP, CLASS_HALF_BREED, 1); spell_level(SKILL_KNEE, CLASS_HALF_BREED, 1); spell_level(SKILL_ELBOW, CLASS_HALF_BREED, 1); spell_level(SKILL_ROUNDHOUSE, CLASS_HALF_BREED, 1); spell_level(SKILL_FLY, CLASS_HALF_BREED, 1); spell_level(SPELL_HASSHUKEN, CLASS_HALF_BREED, 1); spell_level(SKILL_POWERSENSE, CLASS_HALF_BREED, 1); spell_level(SPELL_WORD_OF_RECALL, CLASS_HALF_BREED, 1); spell_level(SKILL_FINALFLASH, CLASS_HALF_BREED, 1); spell_level(SKILL_MASENKO, CLASS_HALF_BREED, 1); spell_level(SKILL_CHOUKAME, CLASS_HALF_BREED, 1); spell_level(SKILL_BIGBANG, CLASS_HALF_BREED, 1); spell_level(SKILL_KAMEHAMEHA, CLASS_HALF_BREED, 1); spell_level(SKILL_DISK, CLASS_HALF_BREED, 1); spell_level(SKILL_RENZO, CLASS_HALF_BREED, 1); spell_level(SPELL_CREATE_FOOD, CLASS_HALF_BREED, 1); spell_level(SKILL_KISHOT, CLASS_HALF_BREED, 1); spell_level(SKILL_KIKOHO, CLASS_HALF_BREED, 1); spell_level(SKILL_ZANELB, CLASS_HALF_BREED, 1); } /* * This is the exp given to implementors -- it must always be greater * than the exp required for immortality, plus at least 20,000 or so. */ #define EXP_MAX 9000000000 /* Function to return the exp required for each class/level */ long long level_exp(int chclass, long long level) { if (level > LVL_IMPL || level < 0) { log("SYSERR: Requesting exp for invalid level!"); return 0; } else { return 2000 * level; } } /* * KAIO titles of male characters. */ const char *title_male(int chclass, int level) { if (level <= 0 || level > LVL_IMPL) return "the Man"; if (level == LVL_IMPL) return "the Implementor"; switch (chclass) { case CLASS_Human: switch (level) { case 1: return "the Human"; case LVL_IMMORT: return "the Immortal Human"; case LVL_GOD: return "the Avatar of Humans"; case LVL_GRGOD: return "the God of Humans"; default: return "the Human"; } break; case CLASS_BIODROID: switch (level) { case 1: return "the Bio-android"; case LVL_IMMORT: return "the Immortal Bio-android"; case LVL_GOD: return "the Avatar of Bio-androids"; case LVL_GRGOD: return "the God of Bio-androids"; default: return "the Bio-android"; } break; case CLASS_KONATSU: switch (level) { case 1: return "the Konatsu"; case LVL_IMMORT: return "the Immortal Konatsu"; case LVL_GOD: return "the Avatar of Konatsus"; case LVL_GRGOD: return "the God of Konatsus"; default: return "the Konatsu"; } break; case CLASS_demon: switch (level) { case 1: return "the Demon"; case LVL_IMMORT: return "the Immortal Demon"; case LVL_GOD: return "the Avatar of Demons"; case LVL_GRGOD: return "the God of Demons"; default: return "the Demon"; } break; case CLASS_TRUFFLE: switch (level) { case 1: return "the Truffle"; case LVL_IMMORT: return "the Immortal Truffle"; case LVL_GOD: return "the Avatar of Truffles"; case LVL_GRGOD: return "the God of Truffles"; default: return "the Truffle"; } break; case CLASS_MUTANT: switch (level) { case 1: return "the Mutant"; case LVL_IMMORT: return "the Immortal Mutant"; case LVL_GOD: return "the Avatar of Mutant"; case LVL_GRGOD: return "the God of Mutant"; default: return "the Mutant"; } break; case CLASS_KANASSAN: switch (level) { case 1: return "the Kanassan"; case LVL_IMMORT: return "the Immortal Kanassan"; case LVL_GOD: return "the Avatar of Kanassan"; case LVL_GRGOD: return "the God of Kanassan"; default: return "the Kanassan"; } break; case CLASS_Namek: switch (level) { case 1: return "the Namek"; case LVL_IMMORT: return "the Immortal Namek"; case LVL_GOD: return "the Namek"; case LVL_GRGOD: return "the God of Nameks"; default: return "the Namek"; } break; case CLASS_icer: switch (level) { case 1: return "the Icer"; case LVL_IMMORT: return "the Immortal Icers"; case LVL_GOD: return "the Demi God of Icers"; case LVL_GRGOD: return "the God of Icers"; default: return "the Icer"; } break; case CLASS_MAJIN: switch (level) { case 1: return "the Majin"; case LVL_IMMORT: return "the Immortal Majins"; case LVL_GOD: return "the Demi God of Majins"; case LVL_GRGOD: return "the God of Majins"; default: return "the Majin"; } break; case CLASS_ANDROID: switch (level) { case 1: return "the Android"; case LVL_IMMORT: return "the Immortal Android"; case LVL_GOD: return "the Demi God of Android"; case LVL_GRGOD: return "the God of Android"; default: return "the Android"; } break; case CLASS_KAI: switch (level) { case 1: return "the Kai"; case LVL_IMMORT: return "the Immortal Kai"; case LVL_GOD: return "the Demi God of Kais"; case LVL_GRGOD: return "the God of Kais"; default: return "the Kai"; } break; case CLASS_HALF_BREED: switch (level) { case 1: return "the Half-Breed"; case LVL_IMMORT: return "the Immortal Half-Breed"; case LVL_GOD: return "the Demi God of Half-Breed"; case LVL_GRGOD: return "the God of Half-Breed"; default: return "the Half-Breed"; } break; case CLASS_saiyan: switch(level) { case 1: return "the Saiyan"; case LVL_IMMORT: return "the Immortal Saiyan"; case LVL_GOD: return "the Saiyan"; case LVL_GRGOD: return "the God of Saiyans"; default: return "the Saiyan"; } break; } /* KAIO title for classes which do not have titles defined */ return "the Classless"; } /* * KAIO titles of female characters. */ const char *title_female(int chclass, int level) { if (level <= 0 || level > LVL_IMPL) return "the Woman"; if (level == LVL_IMPL) return "the Implementress"; switch (chclass) { case CLASS_Human: switch (level) { case 1: return "the Human"; case LVL_IMMORT: return "the Immortal Human"; case LVL_GOD: return "the Human"; case LVL_GRGOD: return "the Goddess of Humans"; default: return "the Human"; } break; case CLASS_MAJIN: switch (level) { case 1: return "the Majin"; case LVL_IMMORT: return "the Immortal Majin"; case LVL_GOD: return "the Human"; case LVL_GRGOD: return "the Goddess of Majin"; default: return "the Majin"; } break; case CLASS_ANDROID: switch (level) { case 1: return "the Android"; case LVL_IMMORT: return "the Immortal Android"; case LVL_GOD: return "the Android"; case LVL_GRGOD: return "the Goddess of Android"; default: return "the Android"; } break; case CLASS_KAI: switch (level) { case 1: return "the Kai"; case LVL_IMMORT: return "the Immortal Kai"; case LVL_GOD: return "the Kai"; case LVL_GRGOD: return "the Goddess of Kai"; default: return "the Kai"; } break; case CLASS_HALF_BREED: switch (level) { case 1: return "the Half-Breed"; case LVL_IMMORT: return "the Immortal Half-Breed"; case LVL_GOD: return "the Android"; case LVL_GRGOD: return "the Goddess of Half-Breeds"; default: return "the Half=breed"; } break; case CLASS_Namek: switch (level) { case 1: return "the Namek"; case LVL_IMMORT: return "the Immortal Namek"; case LVL_GOD: return "the Namek"; case LVL_GRGOD: return "the Goddess of Nameks"; default: return "the Namek"; } break; case CLASS_icer: switch (level) { case 1: return "the Icer"; case LVL_IMMORT: return "the Immortal Icer"; case LVL_GOD: return "the Demi Goddess of Icers"; case LVL_GRGOD: return "the Goddess of Icers"; default: return "the icer"; } break; case CLASS_saiyan: switch(level) { case 1: return "the Saiyan"; case LVL_IMMORT: return "the Immortal Saiyan"; case LVL_GOD: return "the Queen of Saiyan"; case LVL_GRGOD: return "the Goddess of Saiyans"; default: return "the saiyan"; } break; } /* KAIO title for classes which do not have titles defined */ return "the Classless"; }