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