/* ************************************************************************ * 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 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[] = { "&06human&00", "&10namek&00", "&12icer&00", "&14saiyan&00", "&13majin&00", "&15android&00", "&09demon&00", "&06half-breed &00", "&05arlian&00", "&11konatsu&00", "&09c&10h&11a&12n&13g&14e&15l&01i&02n&03g&00", "&15k&09a&15i&09o&00", "&04truffle&00", "&07alien&00", "&03tuguil&00", "\n" }; const char *pc_class_types[] = { "Human", "Namek", "Icer", "Saiyan", "Majin", "Android", "Demon", "Half-Breed", "Arlian", "Konatsu", "Changeling", "Kaio", "Truffle", "Alien", "Tuguil", "\n" }; /* The menu for choosing a class in interpreter.c: */ const char *class_menu = "\r\n" "\x1B[1;37mo\x1B[1;31m-----------------------------------------------------\x1B[1;37mo\x1B[0;0m\r\n" "\x1B[1;31m| \x1B[1;34m(\x1B[1;33m1\x1B[1;34m)\x1B[0;0m Human \x1B[1;34m(\x1B[1;33m6\x1B[1;34m)\x1B[0;0m Android \x1B[1;34m(\x1B[1;33mA\x1B[1;34m)\x1B[0;0m Alien \x1B[1;31m|\r\n" "\x1B[1;31m| \x1B[1;34m(\x1B[1;33m2\x1B[1;34m)\x1B[0;0m Namek \x1B[1;34m(\x1B[1;33m7\x1B[1;34m)\x1B[0;0m Demon \x1B[1;34m(\x1B[1;33mB\x1B[1;34m)\x1B[0;0m Kaio \x1B[1;31m|\r\n" "\x1B[1;31m| \x1B[1;34m(\x1B[1;33m*\x1B[1;34m)\x1B[0;0m Saiyan(C) \x1B[1;34m(\x1B[1;33m8\x1B[1;34m)\x1B[0;0m Half-Breed \x1B[1;34m(\x1B[1;33mC\x1B[1;34m)\x1B[0;0m Changeling \x1B[1;31m|\r\n" "\x1B[1;31m| \x1B[1;34m(\x1B[1;33m4\x1B[1;34m)\x1B[0;0m Icer \x1B[1;34m(\x1B[1;33m9\x1B[1;34m)\x1B[0;0m Arlian \x1B[1;34m(\x1B[1;33mD\x1B[1;34m)\x1B[0;0m Tuguil \x1B[1;31m|\r\n" "\x1B[1;31m| \x1B[1;34m(\x1B[1;33m*\x1B[1;34m)\x1B[0;0m Majin(C) \x1B[1;34m(\x1B[1;33m0\x1B[1;34m)\x1B[0;0m Konatsu \x1B[1;34m(\x1B[1;33mE\x1B[1;34m)\x1B[0;0m Truffle \x1B[1;31m|\r\n" "\x1B[1;37mo\x1B[1;31m-----------------------------------------------------\x1B[1;37mo\x1B[0;0m\r\n" "\x1B[1;31mMajin and Saiyan races currently closed.\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 'h': return CLASS_saiyan; case '4': return CLASS_icer; case 'p': return CLASS_MAJIN; case '6': return CLASS_ANDROID; case '7': return CLASS_DEMON; case '8': return CLASS_HALF_BREED; case '9': return CLASS_ARLIAN; case '0': return CLASS_KONATSU; case 'A': return CLASS_ALIEN; case 'a': return CLASS_ALIEN; case 'B': return CLASS_KAIO; case 'b': return CLASS_KAIO; case 'C': return CLASS_CHANGELING; case 'c': return CLASS_CHANGELING; case 'D': return CLASS_TUGUIL; case 'd': return CLASS_TUGUIL; 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_DEMON); case '8': return (1 << CLASS_HALF_BREED); case '9': return (1 << CLASS_ARLIAN); case '0': return (1 << CLASS_KONATSU); case 'A': return (1 << CLASS_ALIEN); case 'a': return (1 << CLASS_ALIEN); case 'B': return (1 << CLASS_KAIO); case 'b': return (1 << CLASS_KAIO); case 'C': return (1 << CLASS_CHANGELING); case 'c': return (1 << CLASS_CHANGELING); case 'D': return (1 << CLASS_TUGUIL); case 'd': return (1 << CLASS_TUGUIL); 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: log("SYSERR: Missing level for human paralyzation saving throw."); } 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: log("SYSERR: Missing level for human rod saving throw."); } 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: log("SYSERR: Missing level for human petrification saving throw."); } 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: log("SYSERR: Missing level for human breath saving throw."); } 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: log("SYSERR: Missing level for humam spell saving throw."); } default: log("SYSERR: Invalid saving throw type."); } 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: log("SYSERR: Missing level for namek paralyzation saving throw."); } 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: log("SYSERR: Missing level for namek rod saving throw."); } 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: log("SYSERR: Missing level for namek petrification saving throw."); } 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: log("SYSERR: Missing level for namek breath saving throw."); } 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: log("SYSERR: Missing level for namek spell saving throw."); } default: log("SYSERR: Invalid saving throw type."); } break; case CLASS_ARLIAN: 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: log("SYSERR: Missing level for namek paralyzation saving throw."); } 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: log("SYSERR: Missing level for namek rod saving throw."); } 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: log("SYSERR: Missing level for namek petrification saving throw."); } 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: log("SYSERR: Missing level for namek breath saving throw."); } 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: log("SYSERR: Missing level for namek spell saving throw."); } default: log("SYSERR: Invalid saving throw type."); } 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: log("SYSERR: Missing level for namek paralyzation saving throw."); } 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: log("SYSERR: Missing level for namek rod saving throw."); } 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: log("SYSERR: Missing level for namek petrification saving throw."); } 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: log("SYSERR: Missing level for namek breath saving throw."); } 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: log("SYSERR: Missing level for namek spell saving throw."); } default: log("SYSERR: Invalid saving throw type."); } 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: log("SYSERR: Missing level for namek paralyzation saving throw."); } 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: log("SYSERR: Missing level for namek rod saving throw."); } 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: log("SYSERR: Missing level for namek petrification saving throw."); } 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: log("SYSERR: Missing level for namek breath saving throw."); } 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: log("SYSERR: Missing level for namek spell saving throw."); } default: log("SYSERR: Invalid saving throw type."); } break; case CLASS_KAIO: 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: log("SYSERR: Missing level for namek paralyzation saving throw."); } 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: log("SYSERR: Missing level for namek rod saving throw."); } 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: log("SYSERR: Missing level for namek petrification saving throw."); } 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: log("SYSERR: Missing level for namek breath saving throw."); } 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: log("SYSERR: Missing level for namek spell saving throw."); } default: log("SYSERR: Invalid saving throw type."); } 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: log("SYSERR: Missing level for namek paralyzation saving throw."); } 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: log("SYSERR: Missing level for namek rod saving throw."); } 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: log("SYSERR: Missing level for namek petrification saving throw."); } 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: log("SYSERR: Missing level for namek breath saving throw."); } 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: log("SYSERR: Missing level for namek spell saving throw."); } default: log("SYSERR: Invalid saving throw type."); } break; case CLASS_ALIEN: 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: log("SYSERR: Missing level for namek paralyzation saving throw."); } 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: log("SYSERR: Missing level for namek rod saving throw."); } 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: log("SYSERR: Missing level for namek petrification saving throw."); } 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: log("SYSERR: Missing level for namek breath saving throw."); } 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: log("SYSERR: Missing level for namek spell saving throw."); } default: log("SYSERR: Invalid saving throw type."); } break; case CLASS_TUGUIL: 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: log("SYSERR: Missing level for namek paralyzation saving throw."); } 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: log("SYSERR: Missing level for namek rod saving throw."); } 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: log("SYSERR: Missing level for namek petrification saving throw."); } 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: log("SYSERR: Missing level for namek breath saving throw."); } 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: log("SYSERR: Missing level for namek spell saving throw."); } default: log("SYSERR: Invalid saving throw type."); } 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: log("SYSERR: Missing level for halfbreed paralyzation saving throw."); } 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: log("SYSERR: Missing level for halfbreed rod saving throw."); } 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: log("SYSERR: Missing level for halfbreed petrification saving throw."); } 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: log("SYSERR: Missing level for halfbreed breath saving throw."); } 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: log("SYSERR: Missing level for halfbreed spell saving throw."); } default: log("SYSERR: Invalid saving throw type."); } 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: log("SYSERR: Missing level for demon paralyzation saving throw."); } 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: log("SYSERR: Missing level for demon rod saving throw."); } 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: log("SYSERR: Missing level for demon petrification saving throw."); } 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: log("SYSERR: Missing level for demon breath saving throw."); } 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: log("SYSERR: Missing level for demon spell saving throw."); } default: log("SYSERR: Invalid saving throw type."); } 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: log("SYSERR: Missing level for icer paralyzation saving throw."); } 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: log("SYSERR: Missing level for icer rod saving throw."); } 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: log("SYSERR: Missing level for icer petrification saving throw."); } 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: log("SYSERR: Missing level for icer breath saving throw."); } 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: log("SYSERR: Missing level for icer spell saving throw."); } default: log("SYSERR: Invalid saving throw type."); } 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: log("SYSERR: Missing level for android paralyzation saving throw."); } 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: log("SYSERR: Missing level for android rod saving throw."); } 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: log("SYSERR: Missing level for android petrification saving throw."); } 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: log("SYSERR: Missing level for android breath saving throw."); } 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: log("SYSERR: Missing level for android spell saving throw."); } default: log("SYSERR: Invalid saving throw type."); } 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: log("SYSERR: Missing level for majin paralyzation saving throw."); } 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: log("SYSERR: Missing level for majin rod saving throw."); } 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: log("SYSERR: Missing level for majin petrification saving throw."); } 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: log("SYSERR: Missing level for majin breath saving throw."); } 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: log("SYSERR: Missing level for majin spell saving throw."); } default: log("SYSERR: Invalid saving throw type."); } 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: log("SYSERR: Missing level for saiyan paralyzation saving throw."); } 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: log("SYSERR: Missing level for saiyan rod saving throw."); } 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: log("SYSERR: Missing level for saiyan petrification saving throw."); } 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: log("SYSERR: Missing level for saiyan breath saving throw."); } 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: log("SYSERR: Missing level for saiyan spell saving throw."); } default: log("SYSERR: Invalid saving throw type."); } default: log("SYSERR: Invalid class saving throw."); } /* Should not get here unless something is wrong. */ return 100; } int thaco(int class, int level) { if (level < 0 || level > LVL_IMPL) { 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; switch (GET_CLASS(ch)) { case CLASS_Human: ch->real_abils.intel = table[0]; ch->real_abils.str = table[1]; ch->real_abils.dex = table[2]; ch->real_abils.con = table[3]; ch->real_abils.wis = table[4]; ch->real_abils.cha = table[5]; break; case CLASS_Namek: ch->real_abils.con = table[0]; ch->real_abils.str = table[1]; ch->real_abils.dex = table[2]; ch->real_abils.wis = table[3]; ch->real_abils.intel = table[4]; ch->real_abils.cha = table[5]; break; case CLASS_icer: 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 = table[5]; break; case CLASS_MAJIN: ch->real_abils.str = table[0]; ch->real_abils.con = table[1]; ch->real_abils.dex = table[2]; ch->real_abils.intel = table[3]; ch->real_abils.wis = table[4]; ch->real_abils.cha = table[5]; break; case CLASS_ANDROID: 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 = table[5]; break; case CLASS_DEMON: 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 = table[5]; break; case CLASS_HALF_BREED: 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 = table[5]; break; case CLASS_ARLIAN: 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 = table[5]; break; case CLASS_KONATSU: 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 = table[5]; 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 = table[5]; break; case CLASS_KAIO: 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 = table[5]; break; case CLASS_TRUFFLE: 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 = table[5]; break; case CLASS_ALIEN: 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 = table[5]; break; case CLASS_TUGUIL: 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 = table[5]; break; case CLASS_saiyan: ch->real_abils.str = table[0]; ch->real_abils.dex = table[1]; ch->real_abils.con = table[2]; ch->real_abils.wis = table[3]; ch->real_abils.intel = table[4]; ch->real_abils.cha = table[5]; if (ch->real_abils.str == 100) ch->real_abils.str_add = number(0, 200); 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: break; case CLASS_Namek: break; case CLASS_icer: break; case CLASS_saiyan: break; case CLASS_MAJIN: break; case CLASS_ANDROID: break; case CLASS_DEMON: break; case CLASS_HALF_BREED: break; case CLASS_ARLIAN: break; case CLASS_KONATSU: break; case CLASS_CHANGELING: break; case CLASS_KAIO: break; case CLASS_TRUFFLE: break; case CLASS_ALIEN: break; case CLASS_TUGUIL: break; } advance_level(ch); GET_HIT(ch) = GET_MAX_HIT(ch); GET_MANA(ch) = GET_MAX_MANA(ch); GET_MOVE(ch) = GET_MAX_MOVE(ch); 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_DISPMOVE); 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_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); } } /* * 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_move = 0, i; add_hp = con_app[GET_CON(ch)].hitp; switch (GET_CLASS(ch)) { case CLASS_Human: add_hp += number(2, 12); add_mana = number(GET_LEVEL(ch), (int) (GET_INT(ch))); add_mana = MIN(add_mana, 15); add_move = number(1, 10); break; case CLASS_Namek: add_hp += number(4, 15); add_mana = number(GET_LEVEL(ch), (int) (GET_INT(ch))); add_mana = MIN(add_mana, 15); add_move = number(1, 10); break; case CLASS_icer: add_hp += number(5, 16); add_mana = number(GET_LEVEL(ch), (int) (GET_INT(ch))); add_mana = MIN(add_mana, 15); add_move = number(1, 12); break; case CLASS_saiyan: add_hp += number(4, 14); add_mana = number(GET_LEVEL(ch), (int) (GET_INT(ch))); add_mana = MIN(add_mana, 15); add_move = number(1, 15); break; case CLASS_MAJIN: add_hp += number(5, 16); add_mana = number(GET_LEVEL(ch), (int) (GET_INT(ch))); add_mana = MIN(add_mana, 15); add_move = number(1, 10); break; case CLASS_DEMON: add_hp += number(6, 16); add_mana = number(GET_LEVEL(ch), (int) (GET_INT(ch))); add_mana = MIN(add_mana, 15); add_move = number(1, 10); break; case CLASS_HALF_BREED: add_hp += number(2, 10); add_mana = number(GET_LEVEL(ch), (int) (GET_INT(ch))); add_mana = MIN(add_mana, 15); add_move = number(3, 10); break; case CLASS_ANDROID: add_hp += number(2, 10); add_mana = number(GET_LEVEL(ch), (int) (2 * GET_INT(ch))); add_mana = MIN(add_mana, 15); add_move = number(10, 30); break; case CLASS_ARLIAN: add_hp += number(2, 8); add_mana = number(GET_LEVEL(ch), (int) (2 * GET_INT(ch))); add_mana = MIN(add_mana, 15); add_move = number(10, 14); break; case CLASS_KONATSU: add_hp += number(2, 15); add_mana = number(GET_LEVEL(ch), (int) (2 * GET_INT(ch))); add_mana = MIN(add_mana, 15); add_move = number(3, 10); break; case CLASS_CHANGELING: add_hp += number(2, 6); add_mana = number(GET_LEVEL(ch), (int) (2 * GET_INT(ch))); add_mana = MIN(add_mana, 15); add_move = number(4, 15); break; case CLASS_KAIO: add_hp += number(6, 13); add_mana = number(GET_LEVEL(ch), (int) (2 * GET_INT(ch))); add_mana = MIN(add_mana, 15); add_move = number(3, 15); break; case CLASS_TRUFFLE: add_hp += number(2, 4); add_mana = number(GET_LEVEL(ch), (int) (2 * GET_INT(ch))); add_mana = MIN(add_mana, 15); add_move = number(3, 10); break; case CLASS_ALIEN: add_hp += number(2, 10); add_mana = number(GET_LEVEL(ch), (int) (2 * GET_INT(ch))); add_mana = MIN(add_mana, 15); add_move = number(3, 10); break; case CLASS_TUGUIL: add_hp += number(2, 14); add_mana = number(GET_LEVEL(ch), (int) (2 * GET_INT(ch))); add_mana = MIN(add_mana, 15); add_move = number(3, 10); break; } ch->points.max_hit += MAX(1, add_hp); ch->points.max_move += MAX(1, add_move); if (GET_LEVEL(ch) > 1) ch->points.max_mana += add_mana; if (IS_Human(ch) || IS_Namek(ch)) GET_PRACTICES(ch) += MAX(2, wis_app[GET_WIS(ch)].bonus); else GET_PRACTICES(ch) += MIN(3, MAX(2, wis_app[GET_WIS(ch)].bonus)); 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); sprintf(buf, "%s advanced to level %Ld", GET_NAME(ch), GET_LEVEL(ch)); mudlog(buf, BRF, MAX(LVL_IMMORT, GET_INVIS_LEV(ch)), TRUE); } /* * 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_DEMON) && IS_DEMON(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_HALF_BREED) && IS_HALF_BREED(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_HALF_BREED) && IS_HALF_BREED(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(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(SKILL_POWERUP, CLASS_Human, 1); spell_level(SKILL_POWERDOWN, CLASS_Human, 1); spell_level(SPELL_YOIKOMINMINKEN, CLASS_Human, 1); spell_level(SKILL_DESTRUCT, CLASS_Human, 1); spell_level(SKILL_POWERSENSE, CLASS_Human, 1); spell_level(SPELL_MULTIFORM, CLASS_Human, 1); /* Namek */ 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(SKILL_POWERUP, CLASS_Namek, 1); spell_level(SKILL_POWERDOWN, 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); /* Icer */ 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(SKILL_POWERUP, CLASS_icer, 1); spell_level(SPELL_INFRAVISION, CLASS_icer, 1); /* Saiyan */ 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(SKILL_POWERUP, CLASS_saiyan, 1); spell_level(SPELL_HASSHUKEN, CLASS_saiyan, 1); spell_level(SPELL_TSURUGI, CLASS_saiyan, 1); spell_level(SKILL_POWERDOWN, 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(SKILL_POWERDOWN, CLASS_saiyan, 1); /* Majin */ 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_POWERUP, CLASS_MAJIN, 1); spell_level(SKILL_INGEST, CLASS_MAJIN, 1); spell_level(SKILL_POWERDOWN, CLASS_MAJIN, 1); spell_level(SKILL_POWERSENSE, CLASS_MAJIN, 1); spell_level(SKILL_REGENERATE, CLASS_MAJIN, 1); /* Android */ 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(SKILL_POWERUP, CLASS_ANDROID, 1); spell_level(SPELL_BARRIER, CLASS_ANDROID, 1); spell_level(SKILL_ABSORB, CLASS_ANDROID, 1); spell_level(SKILL_DESTRUCT, CLASS_ANDROID, 1); spell_level(SKILL_REGENERATE, CLASS_ANDROID, 1); /* Demon */ 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_POWERUP, CLASS_DEMON, 1); spell_level(SPELL_KYODAIKA, CLASS_DEMON, 1); /* ARLIAN */ spell_level(SKILL_RESCUE, CLASS_ARLIAN, 1); spell_level(SKILL_SWEEP, CLASS_ARLIAN, 1); spell_level(SKILL_KNEE, CLASS_ARLIAN, 1); spell_level(SKILL_ELBOW, CLASS_ARLIAN, 1); spell_level(SKILL_ROUNDHOUSE, CLASS_ARLIAN, 1); spell_level(SKILL_FLY, CLASS_ARLIAN, 1); spell_level(SKILL_POWERUP, CLASS_ARLIAN, 1); /* KONATSU */ 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(SKILL_POWERUP, 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_POWERDOWN, CLASS_KONATSU, 1); spell_level(SKILL_SENSE, CLASS_KONATSU, 1); /* CHANGELING */ spell_level(SKILL_RESCUE, CLASS_CHANGELING, 1); spell_level(SKILL_SWEEP, CLASS_CHANGELING, 1); spell_level(SKILL_KNEE, CLASS_CHANGELING, 1); spell_level(SKILL_ELBOW, CLASS_CHANGELING, 1); spell_level(SKILL_ROUNDHOUSE, CLASS_CHANGELING, 1); spell_level(SKILL_FLY, CLASS_CHANGELING, 1); spell_level(SKILL_POWERUP, CLASS_CHANGELING, 1); spell_level(SPELL_BLADEMORPH, CLASS_CHANGELING, 1); spell_level(SKILL_STEALTH, CLASS_CHANGELING, 1); spell_level(SPELL_INFRAVISION, CLASS_CHANGELING, 1); spell_level(SPELL_MUTATE, CLASS_CHANGELING, 1); spell_level(SKILL_REGENERATE, CLASS_CHANGELING, 1); /* KAIO */ spell_level(SKILL_RESCUE, CLASS_KAIO, 1); spell_level(SKILL_SWEEP, CLASS_KAIO, 1); spell_level(SKILL_KNEE, CLASS_KAIO, 1); spell_level(SKILL_ELBOW, CLASS_KAIO, 1); spell_level(SKILL_ROUNDHOUSE, CLASS_KAIO, 1); spell_level(SKILL_FLY, CLASS_KAIO, 1); spell_level(SKILL_POWERUP, CLASS_KAIO, 1); spell_level(SKILL_KAIOKEN, CLASS_KAIO, 1); spell_level(SPELL_HEAL, CLASS_KAIO, 1); spell_level(SPELL_SUMMON, CLASS_KAIO, 1); spell_level(SKILL_POWERSENSE, CLASS_KAIO, 1); /* TRUFFLE */ 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(SKILL_POWERUP, CLASS_TRUFFLE, 1); /* ALIEN */ spell_level(SKILL_RESCUE, CLASS_ALIEN, 1); spell_level(SKILL_SWEEP, CLASS_ALIEN, 1); spell_level(SKILL_KNEE, CLASS_ALIEN, 1); spell_level(SKILL_ELBOW, CLASS_ALIEN, 1); spell_level(SKILL_ROUNDHOUSE, CLASS_ALIEN, 1); spell_level(SKILL_FLY, CLASS_ALIEN, 1); spell_level(SKILL_POWERUP, CLASS_ALIEN, 1); /* TUGUIL */ spell_level(SKILL_RESCUE, CLASS_TUGUIL, 1); spell_level(SKILL_SWEEP, CLASS_TUGUIL, 1); spell_level(SKILL_KNEE, CLASS_TUGUIL, 1); spell_level(SKILL_ELBOW, CLASS_TUGUIL, 1); spell_level(SKILL_ROUNDHOUSE, CLASS_TUGUIL, 1); spell_level(SKILL_FLY, CLASS_TUGUIL, 1); spell_level(SKILL_POWERUP, CLASS_TUGUIL, 1); /* Half-Breed */ 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(SKILL_POWERUP, CLASS_HALF_BREED, 1); spell_level(SKILL_POWERDOWN, CLASS_HALF_BREED, 1); spell_level(SPELL_HASSHUKEN, CLASS_HALF_BREED, 1); spell_level(SKILL_POWERSENSE, 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_ARLIAN: switch (level) { case 1: return "the Arlian"; case LVL_IMMORT: return "the Immortal Arlian"; case LVL_GOD: return "the Avatar of Arlians"; case LVL_GRGOD: return "the God of Arlians"; default: return "the Arlian"; } 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_CHANGELING: switch (level) { case 1: return "the Changeling"; case LVL_IMMORT: return "the Immortal Changeling"; case LVL_GOD: return "the Avatar of Changelings"; case LVL_GRGOD: return "the God of Changelings"; default: return "the Changeling"; } break; case CLASS_KAIO: switch (level) { case 1: return "the Kaio"; case LVL_IMMORT: return "the Immortal Kaio"; case LVL_GOD: return "the Avatar of Kaios"; case LVL_GRGOD: return "the God of Kaios"; default: return "the Kaio"; } 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_ALIEN: switch (level) { case 1: return "the Alien"; case LVL_IMMORT: return "the Immortal Alien"; case LVL_GOD: return "the Avatar of Aliens"; case LVL_GRGOD: return "the God of Aliens"; default: return "the Alien"; } break; case CLASS_TUGUIL: switch (level) { case 1: return "the Kaio"; case LVL_IMMORT: return "the Immortal Kaio"; case LVL_GOD: return "the Avatar of Kaios"; case LVL_GRGOD: return "the God of Kaios"; default: return "the Kaio"; } 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_DEMON: switch (level) { case 1: return "the Demon"; case LVL_IMMORT: return "the Immortal Demon"; case LVL_GOD: return "the Demi God of Demons"; case LVL_GRGOD: return "the God of Demons"; default: return "the Demon"; } 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_DEMON: switch (level) { case 1: return "the Demon"; case LVL_IMMORT: return "the Immortal Demon"; case LVL_GOD: return "the Demon"; case LVL_GRGOD: return "the Goddess of Demon"; default: return "the Demon"; } 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"; }