/* ************************************************************************
* 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[] = {
"&06human&00",
"&10namek&00",
"&12icer&00",
"&14saiyan&00",
"&13majin&00",
"&15android&00",
"&09demon&00",
"&06half-breed &00",
"&05arlian&00",
"&11konatsu&00",
"&09c&10h&11a&12n&13g&14e&15l&01i&02n&03g&00",
"&15k&09a&15i&09o&00",
"&04truffle&00",
"&07mutant&00",
"&03kaio&00",
"\n"
};
const char *pc_class_types[] = {
"Human",
"Namek",
"Icer",
"Saiyan",
"Majin",
"Android",
"Demon",
"Half-Breed",
"Arlian",
"Konatsu",
"Changeling",
"",
"Truffle",
"Mutant",
"Kaio",
"\n"
};
/* The menu for choosing a class in interpreter.c: */
const char *class_menu =
"\r\n"
"\x1B[1;37mo\x1B[1;31m-----------------------------------------------------\x1B[1;37mo\x1B[0;0m\r\n"
"\x1B[1;31m| \x1B[1;34m(\x1B[1;33m1\x1B[1;34m)\x1B[0;0m Human \x1B[1;34m(\x1B[1;33m6\x1B[1;34m)\x1B[0;0m Android \x1B[1;34m(\x1B[1;33mA\x1B[1;34m)\x1B[0;0m Mutant \x1B[1;31m|\r\n"
"\x1B[1;31m| \x1B[1;34m(\x1B[1;33m2\x1B[1;34m)\x1B[0;0m Namek \x1B[1;34m(\x1B[1;33m7\x1B[1;34m)\x1B[0;0m Demon \x1B[1;34m(\x1B[1;33mB\x1B[1;34m)\x1B[0;0m Kaio \x1B[1;31m|\r\n"
"\x1B[1;31m| \x1B[1;34m(\x1B[1;33m*\x1B[1;34m)\x1B[0;0m Saiyan(c) \x1B[1;34m(\x1B[1;33m8\x1B[1;34m)\x1B[0;0m Half-Breed \x1B[1;34m(\x1B[1;33m\x1B[1;34m)\x1B[0;0m \x1B[1;31m|\r\n"
"\x1B[1;31m| \x1B[1;34m(\x1B[1;33m4\x1B[1;34m)\x1B[0;0m Icer \x1B[1;34m(\x1B[1;33m9\x1B[1;34m)\x1B[0;0m Arlian \x1B[1;34m(\x1B[1;33m\x1B[1;34m)\x1B[0;0m \x1B[1;31m|\r\n"
"\x1B[1;31m| \x1B[1;34m(\x1B[1;33m*\x1B[1;34m)\x1B[0;0m Majin(c) \x1B[1;34m(\x1B[1;33m0\x1B[1;34m)\x1B[0;0m Konatsu \x1B[1;34m(\x1B[1;33mE\x1B[1;34m)\x1B[0;0m Truffle \x1B[1;31m|\r\n"
"\x1B[1;37mo\x1B[1;31m-----------------------------------------------------\x1B[1;37mo\x1B[0;0m\r\n"
"\x1B[1;31mMajin and Saiyan races currently closed, must apply for them.\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 'Q': return CLASS_saiyan;
case '4': return CLASS_icer;
case 'Y': return CLASS_MAJIN;
case '6': return CLASS_ANDROID;
case '7': return CLASS_DEMON;
case '8': return CLASS_HALF_BREED;
case '9': return CLASS_ARLIAN;
case '0': return CLASS_KONATSU;
case 'A': return CLASS_MUTANT;
case 'a': return CLASS_MUTANT;
case 'B': return CLASS_KAIO;
case 'b': return CLASS_KAIO;
case 'C': return CLASS_CHANGELING;
case 'c': return CLASS_CHANGELING;
case 'D': return CLASS_KAIO;
case 'd': return CLASS_KAIO;
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 'Q': return (1 << CLASS_saiyan);
case 'Y': return (1 << CLASS_MAJIN);
case '6': return (1 << CLASS_ANDROID);
case '7': return (1 << CLASS_DEMON);
case '8': return (1 << CLASS_HALF_BREED);
case '9': return (1 << CLASS_ARLIAN);
case '0': return (1 << CLASS_KONATSU);
case 'A': return (1 << CLASS_MUTANT);
case 'a': return (1 << CLASS_MUTANT);
case 'B': return (1 << CLASS_KAIO);
case 'b': return (1 << CLASS_KAIO);
case 'C': return (1 << CLASS_CHANGELING);
case 'c': return (1 << CLASS_CHANGELING);
case 'D': return (1 << CLASS_KAIO);
case 'd': return (1 << CLASS_KAIO);
case 'E': return (1 << CLASS_TRUFFLE);
case 'e': return (1 << CLASS_TRUFFLE);
default: return 0;
}
}
/*
* These are definitions which control the guildmasters for each class.
*
* The first field (top line) controls the highest percentage skill level
* a character of the class is allowed to attain in any skill. (After
* this level, attempts to practice will say "You are already learned in
* this area."
*
* The second line controls the maximum percent gain in learnedness a
* character is allowed per practice -- in other words, if the random
* die throw comes out higher than this number, the gain will only be
* this number instead.
*
* The third line controls the minimu percent gain in learnedness a
* character is allowed per practice -- in other words, if the random
* die throw comes out below this number, the gain will be set up to
* this number.
*
* The fourth line simply sets whether the character knows 'spells'
* or 'skills'. This does not affect anything except the message given
* to the character when trying to practice (i.e. "You know of the
* following spells" vs. "You know of the following skills"
*/
#define SPELL 0
#define SKILL 1
/* #define LEARNED_LEVEL 0 % known which is considered "learned" */
/* #define MAX_PER_PRAC 1 max percent gain in skill per practice */
/* #define MIN_PER_PRAC 2 min percent gain in skill per practice */
/* #define PRAC_TYPE 3 should it say 'spell' or 'skill'? */
int prac_params[4][NUM_CLASSES] = {
/* MAG CLE THE WAR */
{100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100}, /* learned level */
{100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100}, /* max per prac */
{25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,}, /* min per pac */
{SPELL, SPELL, SPELL, SPELL, SPELL, SPELL, SPELL, SPELL, SPELL, SPELL, SPELL, SPELL, SPELL, SPELL, SPELL} /* prac name */
};
/*
* ...And the appropriate rooms for each guildmaster/guildguard; controls
* which types of people the various guildguards let through. i.e., the
* first line shows that from room 3017, only HumanS are allowed
* to go south.
*/
int guild_info[][3] = {
/* Midgaard */
/* this must go last -- add new guards above! */
{-1, -1, -1}};
/*
* Saving throws for:
* MCTW
* PARA, ROD, PETRI, BREATH, SPELL
* Levels 0-40
*
* Do not forget to change extern declaration in magic.c if you add to this.
*/
byte saving_throws(int class_num, int type, int level) {
switch (class_num) {
case CLASS_Human:
switch (type) {
case SAVING_PARA: /* Paralyzation */
switch (level) {
case 0: return 90;
case 1: return 70;
case 2: return 69;
case 3: return 68;
case 4: return 67;
case 5: return 66;
case 6: return 65;
case 7: return 63;
case 8: return 61;
case 9: return 60;
case 10: return 59;
case 11: return 57;
case 12: return 55;
case 13: return 54;
case 14: return 53;
case 15: return 53;
case 16: return 52;
case 17: return 51;
case 18: return 50;
case 19: return 48;
case 20: return 46;
case 21: return 45;
case 22: return 44;
case 23: return 42;
case 24: return 40;
case 25: return 38;
case 26: return 36;
case 27: return 34;
case 28: return 32;
case 29: return 30;
case 30: return 28;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for human paralyzation saving throw.");
}
case SAVING_ROD: /* Rods */
switch (level) {
case 0: return 90;
case 1: return 55;
case 2: return 53;
case 3: return 51;
case 4: return 49;
case 5: return 47;
case 6: return 45;
case 7: return 43;
case 8: return 41;
case 9: return 40;
case 10: return 39;
case 11: return 37;
case 12: return 35;
case 13: return 33;
case 14: return 31;
case 15: return 30;
case 16: return 29;
case 17: return 27;
case 18: return 25;
case 19: return 23;
case 20: return 21;
case 21: return 20;
case 22: return 19;
case 23: return 17;
case 24: return 15;
case 25: return 14;
case 26: return 13;
case 27: return 12;
case 28: return 11;
case 29: return 10;
case 30: return 9;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for human rod saving throw.");
}
case SAVING_PETRI: /* Petrification */
switch (level) {
case 0: return 90;
case 1: return 65;
case 2: return 63;
case 3: return 61;
case 4: return 59;
case 5: return 57;
case 6: return 55;
case 7: return 53;
case 8: return 51;
case 9: return 50;
case 10: return 49;
case 11: return 47;
case 12: return 45;
case 13: return 43;
case 14: return 41;
case 15: return 40;
case 16: return 39;
case 17: return 37;
case 18: return 35;
case 19: return 33;
case 20: return 31;
case 21: return 30;
case 22: return 29;
case 23: return 27;
case 24: return 25;
case 25: return 23;
case 26: return 21;
case 27: return 19;
case 28: return 17;
case 29: return 15;
case 30: return 13;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for human petrification saving throw.");
}
case SAVING_BREATH: /* Breath weapons */
switch (level) {
case 0: return 90;
case 1: return 75;
case 2: return 73;
case 3: return 71;
case 4: return 69;
case 5: return 67;
case 6: return 65;
case 7: return 63;
case 8: return 61;
case 9: return 60;
case 10: return 59;
case 11: return 57;
case 12: return 55;
case 13: return 53;
case 14: return 51;
case 15: return 50;
case 16: return 49;
case 17: return 47;
case 18: return 45;
case 19: return 43;
case 20: return 41;
case 21: return 40;
case 22: return 39;
case 23: return 37;
case 24: return 35;
case 25: return 33;
case 26: return 31;
case 27: return 29;
case 28: return 27;
case 29: return 25;
case 30: return 23;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for human breath saving throw.");
}
case SAVING_SPELL: /* Generic spells */
switch (level) {
case 0: return 90;
case 1: return 60;
case 2: return 58;
case 3: return 56;
case 4: return 54;
case 5: return 52;
case 6: return 50;
case 7: return 48;
case 8: return 46;
case 9: return 45;
case 10: return 44;
case 11: return 42;
case 12: return 40;
case 13: return 38;
case 14: return 36;
case 15: return 35;
case 16: return 34;
case 17: return 32;
case 18: return 30;
case 19: return 28;
case 20: return 26;
case 21: return 25;
case 22: return 24;
case 23: return 22;
case 24: return 20;
case 25: return 18;
case 26: return 16;
case 27: return 14;
case 28: return 12;
case 29: return 10;
case 30: return 8;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for humam spell saving throw.");
}
default:
log("SYSERR: Invalid saving throw type.");
}
break;
case CLASS_Namek:
switch (type) {
case SAVING_PARA: /* Paralyzation */
switch (level) {
case 0: return 90;
case 1: return 60;
case 2: return 59;
case 3: return 48;
case 4: return 46;
case 5: return 45;
case 6: return 43;
case 7: return 40;
case 8: return 37;
case 9: return 35;
case 10: return 34;
case 11: return 33;
case 12: return 31;
case 13: return 30;
case 14: return 29;
case 15: return 27;
case 16: return 26;
case 17: return 25;
case 18: return 24;
case 19: return 23;
case 20: return 22;
case 21: return 21;
case 22: return 20;
case 23: return 18;
case 24: return 15;
case 25: return 14;
case 26: return 12;
case 27: return 10;
case 28: return 9;
case 29: return 8;
case 30: return 7;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek paralyzation saving throw.");
}
case SAVING_ROD: /* Rods */
switch (level) {
case 0: return 90;
case 1: return 70;
case 2: return 69;
case 3: return 68;
case 4: return 66;
case 5: return 65;
case 6: return 63;
case 7: return 60;
case 8: return 57;
case 9: return 55;
case 10: return 54;
case 11: return 53;
case 12: return 51;
case 13: return 50;
case 14: return 49;
case 15: return 47;
case 16: return 46;
case 17: return 45;
case 18: return 44;
case 19: return 43;
case 20: return 42;
case 21: return 41;
case 22: return 40;
case 23: return 38;
case 24: return 35;
case 25: return 34;
case 26: return 32;
case 27: return 30;
case 28: return 29;
case 29: return 28;
case 30: return 27;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek rod saving throw.");
}
case SAVING_PETRI: /* Petrification */
switch (level) {
case 0: return 90;
case 1: return 65;
case 2: return 64;
case 3: return 63;
case 4: return 61;
case 5: return 60;
case 6: return 58;
case 7: return 55;
case 8: return 53;
case 9: return 50;
case 10: return 49;
case 11: return 48;
case 12: return 46;
case 13: return 45;
case 14: return 44;
case 15: return 43;
case 16: return 41;
case 17: return 40;
case 18: return 39;
case 19: return 38;
case 20: return 37;
case 21: return 36;
case 22: return 35;
case 23: return 33;
case 24: return 31;
case 25: return 29;
case 26: return 27;
case 27: return 25;
case 28: return 24;
case 29: return 23;
case 30: return 22;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek petrification saving throw.");
}
case SAVING_BREATH: /* Breath weapons */
switch (level) {
case 0: return 90;
case 1: return 80;
case 2: return 79;
case 3: return 78;
case 4: return 76;
case 5: return 75;
case 6: return 73;
case 7: return 70;
case 8: return 67;
case 9: return 65;
case 10: return 64;
case 11: return 63;
case 12: return 61;
case 13: return 60;
case 14: return 59;
case 15: return 57;
case 16: return 56;
case 17: return 55;
case 18: return 54;
case 19: return 53;
case 20: return 52;
case 21: return 51;
case 22: return 50;
case 23: return 48;
case 24: return 45;
case 25: return 44;
case 26: return 42;
case 27: return 40;
case 28: return 39;
case 29: return 38;
case 30: return 37;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek breath saving throw.");
}
case SAVING_SPELL: /* Generic spells */
switch (level) {
case 0: return 90;
case 1: return 75;
case 2: return 74;
case 3: return 73;
case 4: return 71;
case 5: return 70;
case 6: return 68;
case 7: return 65;
case 8: return 63;
case 9: return 60;
case 10: return 59;
case 11: return 58;
case 12: return 56;
case 13: return 55;
case 14: return 54;
case 15: return 53;
case 16: return 51;
case 17: return 50;
case 18: return 49;
case 19: return 48;
case 20: return 47;
case 21: return 46;
case 22: return 45;
case 23: return 43;
case 24: return 41;
case 25: return 39;
case 26: return 37;
case 27: return 35;
case 28: return 34;
case 29: return 33;
case 30: return 32;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek spell saving throw.");
}
default:
log("SYSERR: Invalid saving throw type.");
}
break;
case CLASS_ARLIAN:
switch (type) {
case SAVING_PARA: /* Paralyzation */
switch (level) {
case 0: return 90;
case 1: return 60;
case 2: return 59;
case 3: return 48;
case 4: return 46;
case 5: return 45;
case 6: return 43;
case 7: return 40;
case 8: return 37;
case 9: return 35;
case 10: return 34;
case 11: return 33;
case 12: return 31;
case 13: return 30;
case 14: return 29;
case 15: return 27;
case 16: return 26;
case 17: return 25;
case 18: return 24;
case 19: return 23;
case 20: return 22;
case 21: return 21;
case 22: return 20;
case 23: return 18;
case 24: return 15;
case 25: return 14;
case 26: return 12;
case 27: return 10;
case 28: return 9;
case 29: return 8;
case 30: return 7;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek paralyzation saving throw.");
}
case SAVING_ROD: /* Rods */
switch (level) {
case 0: return 90;
case 1: return 70;
case 2: return 69;
case 3: return 68;
case 4: return 66;
case 5: return 65;
case 6: return 63;
case 7: return 60;
case 8: return 57;
case 9: return 55;
case 10: return 54;
case 11: return 53;
case 12: return 51;
case 13: return 50;
case 14: return 49;
case 15: return 47;
case 16: return 46;
case 17: return 45;
case 18: return 44;
case 19: return 43;
case 20: return 42;
case 21: return 41;
case 22: return 40;
case 23: return 38;
case 24: return 35;
case 25: return 34;
case 26: return 32;
case 27: return 30;
case 28: return 29;
case 29: return 28;
case 30: return 27;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek rod saving throw.");
}
case SAVING_PETRI: /* Petrification */
switch (level) {
case 0: return 90;
case 1: return 65;
case 2: return 64;
case 3: return 63;
case 4: return 61;
case 5: return 60;
case 6: return 58;
case 7: return 55;
case 8: return 53;
case 9: return 50;
case 10: return 49;
case 11: return 48;
case 12: return 46;
case 13: return 45;
case 14: return 44;
case 15: return 43;
case 16: return 41;
case 17: return 40;
case 18: return 39;
case 19: return 38;
case 20: return 37;
case 21: return 36;
case 22: return 35;
case 23: return 33;
case 24: return 31;
case 25: return 29;
case 26: return 27;
case 27: return 25;
case 28: return 24;
case 29: return 23;
case 30: return 22;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek petrification saving throw.");
}
case SAVING_BREATH: /* Breath weapons */
switch (level) {
case 0: return 90;
case 1: return 80;
case 2: return 79;
case 3: return 78;
case 4: return 76;
case 5: return 75;
case 6: return 73;
case 7: return 70;
case 8: return 67;
case 9: return 65;
case 10: return 64;
case 11: return 63;
case 12: return 61;
case 13: return 60;
case 14: return 59;
case 15: return 57;
case 16: return 56;
case 17: return 55;
case 18: return 54;
case 19: return 53;
case 20: return 52;
case 21: return 51;
case 22: return 50;
case 23: return 48;
case 24: return 45;
case 25: return 44;
case 26: return 42;
case 27: return 40;
case 28: return 39;
case 29: return 38;
case 30: return 37;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek breath saving throw.");
}
case SAVING_SPELL: /* Generic spells */
switch (level) {
case 0: return 90;
case 1: return 75;
case 2: return 74;
case 3: return 73;
case 4: return 71;
case 5: return 70;
case 6: return 68;
case 7: return 65;
case 8: return 63;
case 9: return 60;
case 10: return 59;
case 11: return 58;
case 12: return 56;
case 13: return 55;
case 14: return 54;
case 15: return 53;
case 16: return 51;
case 17: return 50;
case 18: return 49;
case 19: return 48;
case 20: return 47;
case 21: return 46;
case 22: return 45;
case 23: return 43;
case 24: return 41;
case 25: return 39;
case 26: return 37;
case 27: return 35;
case 28: return 34;
case 29: return 33;
case 30: return 32;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek spell saving throw.");
}
default:
log("SYSERR: Invalid saving throw type.");
}
break;
case CLASS_KONATSU:
switch (type) {
case SAVING_PARA: /* Paralyzation */
switch (level) {
case 0: return 90;
case 1: return 60;
case 2: return 59;
case 3: return 48;
case 4: return 46;
case 5: return 45;
case 6: return 43;
case 7: return 40;
case 8: return 37;
case 9: return 35;
case 10: return 34;
case 11: return 33;
case 12: return 31;
case 13: return 30;
case 14: return 29;
case 15: return 27;
case 16: return 26;
case 17: return 25;
case 18: return 24;
case 19: return 23;
case 20: return 22;
case 21: return 21;
case 22: return 20;
case 23: return 18;
case 24: return 15;
case 25: return 14;
case 26: return 12;
case 27: return 10;
case 28: return 9;
case 29: return 8;
case 30: return 7;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek paralyzation saving throw.");
}
case SAVING_ROD: /* Rods */
switch (level) {
case 0: return 90;
case 1: return 70;
case 2: return 69;
case 3: return 68;
case 4: return 66;
case 5: return 65;
case 6: return 63;
case 7: return 60;
case 8: return 57;
case 9: return 55;
case 10: return 54;
case 11: return 53;
case 12: return 51;
case 13: return 50;
case 14: return 49;
case 15: return 47;
case 16: return 46;
case 17: return 45;
case 18: return 44;
case 19: return 43;
case 20: return 42;
case 21: return 41;
case 22: return 40;
case 23: return 38;
case 24: return 35;
case 25: return 34;
case 26: return 32;
case 27: return 30;
case 28: return 29;
case 29: return 28;
case 30: return 27;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek rod saving throw.");
}
case SAVING_PETRI: /* Petrification */
switch (level) {
case 0: return 90;
case 1: return 65;
case 2: return 64;
case 3: return 63;
case 4: return 61;
case 5: return 60;
case 6: return 58;
case 7: return 55;
case 8: return 53;
case 9: return 50;
case 10: return 49;
case 11: return 48;
case 12: return 46;
case 13: return 45;
case 14: return 44;
case 15: return 43;
case 16: return 41;
case 17: return 40;
case 18: return 39;
case 19: return 38;
case 20: return 37;
case 21: return 36;
case 22: return 35;
case 23: return 33;
case 24: return 31;
case 25: return 29;
case 26: return 27;
case 27: return 25;
case 28: return 24;
case 29: return 23;
case 30: return 22;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek petrification saving throw.");
}
case SAVING_BREATH: /* Breath weapons */
switch (level) {
case 0: return 90;
case 1: return 80;
case 2: return 79;
case 3: return 78;
case 4: return 76;
case 5: return 75;
case 6: return 73;
case 7: return 70;
case 8: return 67;
case 9: return 65;
case 10: return 64;
case 11: return 63;
case 12: return 61;
case 13: return 60;
case 14: return 59;
case 15: return 57;
case 16: return 56;
case 17: return 55;
case 18: return 54;
case 19: return 53;
case 20: return 52;
case 21: return 51;
case 22: return 50;
case 23: return 48;
case 24: return 45;
case 25: return 44;
case 26: return 42;
case 27: return 40;
case 28: return 39;
case 29: return 38;
case 30: return 37;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek breath saving throw.");
}
case SAVING_SPELL: /* Generic spells */
switch (level) {
case 0: return 90;
case 1: return 75;
case 2: return 74;
case 3: return 73;
case 4: return 71;
case 5: return 70;
case 6: return 68;
case 7: return 65;
case 8: return 63;
case 9: return 60;
case 10: return 59;
case 11: return 58;
case 12: return 56;
case 13: return 55;
case 14: return 54;
case 15: return 53;
case 16: return 51;
case 17: return 50;
case 18: return 49;
case 19: return 48;
case 20: return 47;
case 21: return 46;
case 22: return 45;
case 23: return 43;
case 24: return 41;
case 25: return 39;
case 26: return 37;
case 27: return 35;
case 28: return 34;
case 29: return 33;
case 30: return 32;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek spell saving throw.");
}
default:
log("SYSERR: Invalid saving throw type.");
}
break;
case CLASS_CHANGELING:
switch (type) {
case SAVING_PARA: /* Paralyzation */
switch (level) {
case 0: return 90;
case 1: return 60;
case 2: return 59;
case 3: return 48;
case 4: return 46;
case 5: return 45;
case 6: return 43;
case 7: return 40;
case 8: return 37;
case 9: return 35;
case 10: return 34;
case 11: return 33;
case 12: return 31;
case 13: return 30;
case 14: return 29;
case 15: return 27;
case 16: return 26;
case 17: return 25;
case 18: return 24;
case 19: return 23;
case 20: return 22;
case 21: return 21;
case 22: return 20;
case 23: return 18;
case 24: return 15;
case 25: return 14;
case 26: return 12;
case 27: return 10;
case 28: return 9;
case 29: return 8;
case 30: return 7;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek paralyzation saving throw.");
}
case SAVING_ROD: /* Rods */
switch (level) {
case 0: return 90;
case 1: return 70;
case 2: return 69;
case 3: return 68;
case 4: return 66;
case 5: return 65;
case 6: return 63;
case 7: return 60;
case 8: return 57;
case 9: return 55;
case 10: return 54;
case 11: return 53;
case 12: return 51;
case 13: return 50;
case 14: return 49;
case 15: return 47;
case 16: return 46;
case 17: return 45;
case 18: return 44;
case 19: return 43;
case 20: return 42;
case 21: return 41;
case 22: return 40;
case 23: return 38;
case 24: return 35;
case 25: return 34;
case 26: return 32;
case 27: return 30;
case 28: return 29;
case 29: return 28;
case 30: return 27;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek rod saving throw.");
}
case SAVING_PETRI: /* Petrification */
switch (level) {
case 0: return 90;
case 1: return 65;
case 2: return 64;
case 3: return 63;
case 4: return 61;
case 5: return 60;
case 6: return 58;
case 7: return 55;
case 8: return 53;
case 9: return 50;
case 10: return 49;
case 11: return 48;
case 12: return 46;
case 13: return 45;
case 14: return 44;
case 15: return 43;
case 16: return 41;
case 17: return 40;
case 18: return 39;
case 19: return 38;
case 20: return 37;
case 21: return 36;
case 22: return 35;
case 23: return 33;
case 24: return 31;
case 25: return 29;
case 26: return 27;
case 27: return 25;
case 28: return 24;
case 29: return 23;
case 30: return 22;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek petrification saving throw.");
}
case SAVING_BREATH: /* Breath weapons */
switch (level) {
case 0: return 90;
case 1: return 80;
case 2: return 79;
case 3: return 78;
case 4: return 76;
case 5: return 75;
case 6: return 73;
case 7: return 70;
case 8: return 67;
case 9: return 65;
case 10: return 64;
case 11: return 63;
case 12: return 61;
case 13: return 60;
case 14: return 59;
case 15: return 57;
case 16: return 56;
case 17: return 55;
case 18: return 54;
case 19: return 53;
case 20: return 52;
case 21: return 51;
case 22: return 50;
case 23: return 48;
case 24: return 45;
case 25: return 44;
case 26: return 42;
case 27: return 40;
case 28: return 39;
case 29: return 38;
case 30: return 37;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek breath saving throw.");
}
case SAVING_SPELL: /* Generic spells */
switch (level) {
case 0: return 90;
case 1: return 75;
case 2: return 74;
case 3: return 73;
case 4: return 71;
case 5: return 70;
case 6: return 68;
case 7: return 65;
case 8: return 63;
case 9: return 60;
case 10: return 59;
case 11: return 58;
case 12: return 56;
case 13: return 55;
case 14: return 54;
case 15: return 53;
case 16: return 51;
case 17: return 50;
case 18: return 49;
case 19: return 48;
case 20: return 47;
case 21: return 46;
case 22: return 45;
case 23: return 43;
case 24: return 41;
case 25: return 39;
case 26: return 37;
case 27: return 35;
case 28: return 34;
case 29: return 33;
case 30: return 32;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek spell saving throw.");
}
default:
log("SYSERR: Invalid saving throw type.");
}
break;
case CLASS_KAIO:
switch (type) {
case SAVING_PARA: /* Paralyzation */
switch (level) {
case 0: return 90;
case 1: return 60;
case 2: return 59;
case 3: return 48;
case 4: return 46;
case 5: return 45;
case 6: return 43;
case 7: return 40;
case 8: return 37;
case 9: return 35;
case 10: return 34;
case 11: return 33;
case 12: return 31;
case 13: return 30;
case 14: return 29;
case 15: return 27;
case 16: return 26;
case 17: return 25;
case 18: return 24;
case 19: return 23;
case 20: return 22;
case 21: return 21;
case 22: return 20;
case 23: return 18;
case 24: return 15;
case 25: return 14;
case 26: return 12;
case 27: return 10;
case 28: return 9;
case 29: return 8;
case 30: return 7;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek paralyzation saving throw.");
}
case SAVING_ROD: /* Rods */
switch (level) {
case 0: return 90;
case 1: return 70;
case 2: return 69;
case 3: return 68;
case 4: return 66;
case 5: return 65;
case 6: return 63;
case 7: return 60;
case 8: return 57;
case 9: return 55;
case 10: return 54;
case 11: return 53;
case 12: return 51;
case 13: return 50;
case 14: return 49;
case 15: return 47;
case 16: return 46;
case 17: return 45;
case 18: return 44;
case 19: return 43;
case 20: return 42;
case 21: return 41;
case 22: return 40;
case 23: return 38;
case 24: return 35;
case 25: return 34;
case 26: return 32;
case 27: return 30;
case 28: return 29;
case 29: return 28;
case 30: return 27;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek rod saving throw.");
}
case SAVING_PETRI: /* Petrification */
switch (level) {
case 0: return 90;
case 1: return 65;
case 2: return 64;
case 3: return 63;
case 4: return 61;
case 5: return 60;
case 6: return 58;
case 7: return 55;
case 8: return 53;
case 9: return 50;
case 10: return 49;
case 11: return 48;
case 12: return 46;
case 13: return 45;
case 14: return 44;
case 15: return 43;
case 16: return 41;
case 17: return 40;
case 18: return 39;
case 19: return 38;
case 20: return 37;
case 21: return 36;
case 22: return 35;
case 23: return 33;
case 24: return 31;
case 25: return 29;
case 26: return 27;
case 27: return 25;
case 28: return 24;
case 29: return 23;
case 30: return 22;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek petrification saving throw.");
}
case SAVING_BREATH: /* Breath weapons */
switch (level) {
case 0: return 90;
case 1: return 80;
case 2: return 79;
case 3: return 78;
case 4: return 76;
case 5: return 75;
case 6: return 73;
case 7: return 70;
case 8: return 67;
case 9: return 65;
case 10: return 64;
case 11: return 63;
case 12: return 61;
case 13: return 60;
case 14: return 59;
case 15: return 57;
case 16: return 56;
case 17: return 55;
case 18: return 54;
case 19: return 53;
case 20: return 52;
case 21: return 51;
case 22: return 50;
case 23: return 48;
case 24: return 45;
case 25: return 44;
case 26: return 42;
case 27: return 40;
case 28: return 39;
case 29: return 38;
case 30: return 37;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek breath saving throw.");
}
case SAVING_SPELL: /* Generic spells */
switch (level) {
case 0: return 90;
case 1: return 75;
case 2: return 74;
case 3: return 73;
case 4: return 71;
case 5: return 70;
case 6: return 68;
case 7: return 65;
case 8: return 63;
case 9: return 60;
case 10: return 59;
case 11: return 58;
case 12: return 56;
case 13: return 55;
case 14: return 54;
case 15: return 53;
case 16: return 51;
case 17: return 50;
case 18: return 49;
case 19: return 48;
case 20: return 47;
case 21: return 46;
case 22: return 45;
case 23: return 43;
case 24: return 41;
case 25: return 39;
case 26: return 37;
case 27: return 35;
case 28: return 34;
case 29: return 33;
case 30: return 32;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek spell saving throw.");
}
default:
log("SYSERR: Invalid saving throw type.");
}
break;
case CLASS_TRUFFLE:
switch (type) {
case SAVING_PARA: /* Paralyzation */
switch (level) {
case 0: return 90;
case 1: return 60;
case 2: return 59;
case 3: return 48;
case 4: return 46;
case 5: return 45;
case 6: return 43;
case 7: return 40;
case 8: return 37;
case 9: return 35;
case 10: return 34;
case 11: return 33;
case 12: return 31;
case 13: return 30;
case 14: return 29;
case 15: return 27;
case 16: return 26;
case 17: return 25;
case 18: return 24;
case 19: return 23;
case 20: return 22;
case 21: return 21;
case 22: return 20;
case 23: return 18;
case 24: return 15;
case 25: return 14;
case 26: return 12;
case 27: return 10;
case 28: return 9;
case 29: return 8;
case 30: return 7;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek paralyzation saving throw.");
}
case SAVING_ROD: /* Rods */
switch (level) {
case 0: return 90;
case 1: return 70;
case 2: return 69;
case 3: return 68;
case 4: return 66;
case 5: return 65;
case 6: return 63;
case 7: return 60;
case 8: return 57;
case 9: return 55;
case 10: return 54;
case 11: return 53;
case 12: return 51;
case 13: return 50;
case 14: return 49;
case 15: return 47;
case 16: return 46;
case 17: return 45;
case 18: return 44;
case 19: return 43;
case 20: return 42;
case 21: return 41;
case 22: return 40;
case 23: return 38;
case 24: return 35;
case 25: return 34;
case 26: return 32;
case 27: return 30;
case 28: return 29;
case 29: return 28;
case 30: return 27;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek rod saving throw.");
}
case SAVING_PETRI: /* Petrification */
switch (level) {
case 0: return 90;
case 1: return 65;
case 2: return 64;
case 3: return 63;
case 4: return 61;
case 5: return 60;
case 6: return 58;
case 7: return 55;
case 8: return 53;
case 9: return 50;
case 10: return 49;
case 11: return 48;
case 12: return 46;
case 13: return 45;
case 14: return 44;
case 15: return 43;
case 16: return 41;
case 17: return 40;
case 18: return 39;
case 19: return 38;
case 20: return 37;
case 21: return 36;
case 22: return 35;
case 23: return 33;
case 24: return 31;
case 25: return 29;
case 26: return 27;
case 27: return 25;
case 28: return 24;
case 29: return 23;
case 30: return 22;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek petrification saving throw.");
}
case SAVING_BREATH: /* Breath weapons */
switch (level) {
case 0: return 90;
case 1: return 80;
case 2: return 79;
case 3: return 78;
case 4: return 76;
case 5: return 75;
case 6: return 73;
case 7: return 70;
case 8: return 67;
case 9: return 65;
case 10: return 64;
case 11: return 63;
case 12: return 61;
case 13: return 60;
case 14: return 59;
case 15: return 57;
case 16: return 56;
case 17: return 55;
case 18: return 54;
case 19: return 53;
case 20: return 52;
case 21: return 51;
case 22: return 50;
case 23: return 48;
case 24: return 45;
case 25: return 44;
case 26: return 42;
case 27: return 40;
case 28: return 39;
case 29: return 38;
case 30: return 37;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek breath saving throw.");
}
case SAVING_SPELL: /* Generic spells */
switch (level) {
case 0: return 90;
case 1: return 75;
case 2: return 74;
case 3: return 73;
case 4: return 71;
case 5: return 70;
case 6: return 68;
case 7: return 65;
case 8: return 63;
case 9: return 60;
case 10: return 59;
case 11: return 58;
case 12: return 56;
case 13: return 55;
case 14: return 54;
case 15: return 53;
case 16: return 51;
case 17: return 50;
case 18: return 49;
case 19: return 48;
case 20: return 47;
case 21: return 46;
case 22: return 45;
case 23: return 43;
case 24: return 41;
case 25: return 39;
case 26: return 37;
case 27: return 35;
case 28: return 34;
case 29: return 33;
case 30: return 32;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek spell saving throw.");
}
default:
log("SYSERR: Invalid saving throw type.");
}
break;
case CLASS_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:
log("SYSERR: Missing level for namek paralyzation saving throw.");
}
case SAVING_ROD: /* Rods */
switch (level) {
case 0: return 90;
case 1: return 70;
case 2: return 69;
case 3: return 68;
case 4: return 66;
case 5: return 65;
case 6: return 63;
case 7: return 60;
case 8: return 57;
case 9: return 55;
case 10: return 54;
case 11: return 53;
case 12: return 51;
case 13: return 50;
case 14: return 49;
case 15: return 47;
case 16: return 46;
case 17: return 45;
case 18: return 44;
case 19: return 43;
case 20: return 42;
case 21: return 41;
case 22: return 40;
case 23: return 38;
case 24: return 35;
case 25: return 34;
case 26: return 32;
case 27: return 30;
case 28: return 29;
case 29: return 28;
case 30: return 27;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek rod saving throw.");
}
case SAVING_PETRI: /* Petrification */
switch (level) {
case 0: return 90;
case 1: return 65;
case 2: return 64;
case 3: return 63;
case 4: return 61;
case 5: return 60;
case 6: return 58;
case 7: return 55;
case 8: return 53;
case 9: return 50;
case 10: return 49;
case 11: return 48;
case 12: return 46;
case 13: return 45;
case 14: return 44;
case 15: return 43;
case 16: return 41;
case 17: return 40;
case 18: return 39;
case 19: return 38;
case 20: return 37;
case 21: return 36;
case 22: return 35;
case 23: return 33;
case 24: return 31;
case 25: return 29;
case 26: return 27;
case 27: return 25;
case 28: return 24;
case 29: return 23;
case 30: return 22;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek petrification saving throw.");
}
case SAVING_BREATH: /* Breath weapons */
switch (level) {
case 0: return 90;
case 1: return 80;
case 2: return 79;
case 3: return 78;
case 4: return 76;
case 5: return 75;
case 6: return 73;
case 7: return 70;
case 8: return 67;
case 9: return 65;
case 10: return 64;
case 11: return 63;
case 12: return 61;
case 13: return 60;
case 14: return 59;
case 15: return 57;
case 16: return 56;
case 17: return 55;
case 18: return 54;
case 19: return 53;
case 20: return 52;
case 21: return 51;
case 22: return 50;
case 23: return 48;
case 24: return 45;
case 25: return 44;
case 26: return 42;
case 27: return 40;
case 28: return 39;
case 29: return 38;
case 30: return 37;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek breath saving throw.");
}
case SAVING_SPELL: /* Generic spells */
switch (level) {
case 0: return 90;
case 1: return 75;
case 2: return 74;
case 3: return 73;
case 4: return 71;
case 5: return 70;
case 6: return 68;
case 7: return 65;
case 8: return 63;
case 9: return 60;
case 10: return 59;
case 11: return 58;
case 12: return 56;
case 13: return 55;
case 14: return 54;
case 15: return 53;
case 16: return 51;
case 17: return 50;
case 18: return 49;
case 19: return 48;
case 20: return 47;
case 21: return 46;
case 22: return 45;
case 23: return 43;
case 24: return 41;
case 25: return 39;
case 26: return 37;
case 27: return 35;
case 28: return 34;
case 29: return 33;
case 30: return 32;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek spell saving throw.");
}
default:
log("SYSERR: Invalid saving throw type.");
}
break;
case CLASS_KAIO:
switch (type) {
case SAVING_PARA: /* Paralyzation */
switch (level) {
case 0: return 90;
case 1: return 60;
case 2: return 59;
case 3: return 48;
case 4: return 46;
case 5: return 45;
case 6: return 43;
case 7: return 40;
case 8: return 37;
case 9: return 35;
case 10: return 34;
case 11: return 33;
case 12: return 31;
case 13: return 30;
case 14: return 29;
case 15: return 27;
case 16: return 26;
case 17: return 25;
case 18: return 24;
case 19: return 23;
case 20: return 22;
case 21: return 21;
case 22: return 20;
case 23: return 18;
case 24: return 15;
case 25: return 14;
case 26: return 12;
case 27: return 10;
case 28: return 9;
case 29: return 8;
case 30: return 7;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek paralyzation saving throw.");
}
case SAVING_ROD: /* Rods */
switch (level) {
case 0: return 90;
case 1: return 70;
case 2: return 69;
case 3: return 68;
case 4: return 66;
case 5: return 65;
case 6: return 63;
case 7: return 60;
case 8: return 57;
case 9: return 55;
case 10: return 54;
case 11: return 53;
case 12: return 51;
case 13: return 50;
case 14: return 49;
case 15: return 47;
case 16: return 46;
case 17: return 45;
case 18: return 44;
case 19: return 43;
case 20: return 42;
case 21: return 41;
case 22: return 40;
case 23: return 38;
case 24: return 35;
case 25: return 34;
case 26: return 32;
case 27: return 30;
case 28: return 29;
case 29: return 28;
case 30: return 27;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek rod saving throw.");
}
case SAVING_PETRI: /* Petrification */
switch (level) {
case 0: return 90;
case 1: return 65;
case 2: return 64;
case 3: return 63;
case 4: return 61;
case 5: return 60;
case 6: return 58;
case 7: return 55;
case 8: return 53;
case 9: return 50;
case 10: return 49;
case 11: return 48;
case 12: return 46;
case 13: return 45;
case 14: return 44;
case 15: return 43;
case 16: return 41;
case 17: return 40;
case 18: return 39;
case 19: return 38;
case 20: return 37;
case 21: return 36;
case 22: return 35;
case 23: return 33;
case 24: return 31;
case 25: return 29;
case 26: return 27;
case 27: return 25;
case 28: return 24;
case 29: return 23;
case 30: return 22;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek petrification saving throw.");
}
case SAVING_BREATH: /* Breath weapons */
switch (level) {
case 0: return 90;
case 1: return 80;
case 2: return 79;
case 3: return 78;
case 4: return 76;
case 5: return 75;
case 6: return 73;
case 7: return 70;
case 8: return 67;
case 9: return 65;
case 10: return 64;
case 11: return 63;
case 12: return 61;
case 13: return 60;
case 14: return 59;
case 15: return 57;
case 16: return 56;
case 17: return 55;
case 18: return 54;
case 19: return 53;
case 20: return 52;
case 21: return 51;
case 22: return 50;
case 23: return 48;
case 24: return 45;
case 25: return 44;
case 26: return 42;
case 27: return 40;
case 28: return 39;
case 29: return 38;
case 30: return 37;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek breath saving throw.");
}
case SAVING_SPELL: /* Generic spells */
switch (level) {
case 0: return 90;
case 1: return 75;
case 2: return 74;
case 3: return 73;
case 4: return 71;
case 5: return 70;
case 6: return 68;
case 7: return 65;
case 8: return 63;
case 9: return 60;
case 10: return 59;
case 11: return 58;
case 12: return 56;
case 13: return 55;
case 14: return 54;
case 15: return 53;
case 16: return 51;
case 17: return 50;
case 18: return 49;
case 19: return 48;
case 20: return 47;
case 21: return 46;
case 22: return 45;
case 23: return 43;
case 24: return 41;
case 25: return 39;
case 26: return 37;
case 27: return 35;
case 28: return 34;
case 29: return 33;
case 30: return 32;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for namek spell saving throw.");
}
default:
log("SYSERR: Invalid saving throw type.");
}
break;
case CLASS_HALF_BREED:
switch (type) {
case SAVING_PARA: /* Paralyzation */
switch (level) {
case 0: return 90;
case 1: return 60;
case 2: return 59;
case 3: return 48;
case 4: return 46;
case 5: return 45;
case 6: return 43;
case 7: return 40;
case 8: return 37;
case 9: return 35;
case 10: return 34;
case 11: return 33;
case 12: return 31;
case 13: return 30;
case 14: return 29;
case 15: return 27;
case 16: return 26;
case 17: return 25;
case 18: return 24;
case 19: return 23;
case 20: return 22;
case 21: return 21;
case 22: return 20;
case 23: return 18;
case 24: return 15;
case 25: return 14;
case 26: return 12;
case 27: return 10;
case 28: return 9;
case 29: return 8;
case 30: return 7;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for halfbreed paralyzation saving throw.");
}
case SAVING_ROD: /* Rods */
switch (level) {
case 0: return 90;
case 1: return 70;
case 2: return 69;
case 3: return 68;
case 4: return 66;
case 5: return 65;
case 6: return 63;
case 7: return 60;
case 8: return 57;
case 9: return 55;
case 10: return 54;
case 11: return 53;
case 12: return 51;
case 13: return 50;
case 14: return 49;
case 15: return 47;
case 16: return 46;
case 17: return 45;
case 18: return 44;
case 19: return 43;
case 20: return 42;
case 21: return 41;
case 22: return 40;
case 23: return 38;
case 24: return 35;
case 25: return 34;
case 26: return 32;
case 27: return 30;
case 28: return 29;
case 29: return 28;
case 30: return 27;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for halfbreed rod saving throw.");
}
case SAVING_PETRI: /* Petrification */
switch (level) {
case 0: return 90;
case 1: return 65;
case 2: return 64;
case 3: return 63;
case 4: return 61;
case 5: return 60;
case 6: return 58;
case 7: return 55;
case 8: return 53;
case 9: return 50;
case 10: return 49;
case 11: return 48;
case 12: return 46;
case 13: return 45;
case 14: return 44;
case 15: return 43;
case 16: return 41;
case 17: return 40;
case 18: return 39;
case 19: return 38;
case 20: return 37;
case 21: return 36;
case 22: return 35;
case 23: return 33;
case 24: return 31;
case 25: return 29;
case 26: return 27;
case 27: return 25;
case 28: return 24;
case 29: return 23;
case 30: return 22;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for halfbreed petrification saving throw.");
}
case SAVING_BREATH: /* Breath weapons */
switch (level) {
case 0: return 90;
case 1: return 80;
case 2: return 79;
case 3: return 78;
case 4: return 76;
case 5: return 75;
case 6: return 73;
case 7: return 70;
case 8: return 67;
case 9: return 65;
case 10: return 64;
case 11: return 63;
case 12: return 61;
case 13: return 60;
case 14: return 59;
case 15: return 57;
case 16: return 56;
case 17: return 55;
case 18: return 54;
case 19: return 53;
case 20: return 52;
case 21: return 51;
case 22: return 50;
case 23: return 48;
case 24: return 45;
case 25: return 44;
case 26: return 42;
case 27: return 40;
case 28: return 39;
case 29: return 38;
case 30: return 37;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for halfbreed breath saving throw.");
}
case SAVING_SPELL: /* Generic spells */
switch (level) {
case 0: return 90;
case 1: return 75;
case 2: return 74;
case 3: return 73;
case 4: return 71;
case 5: return 70;
case 6: return 68;
case 7: return 65;
case 8: return 63;
case 9: return 60;
case 10: return 59;
case 11: return 58;
case 12: return 56;
case 13: return 55;
case 14: return 54;
case 15: return 53;
case 16: return 51;
case 17: return 50;
case 18: return 49;
case 19: return 48;
case 20: return 47;
case 21: return 46;
case 22: return 45;
case 23: return 43;
case 24: return 41;
case 25: return 39;
case 26: return 37;
case 27: return 35;
case 28: return 34;
case 29: return 33;
case 30: return 32;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for halfbreed spell saving throw.");
}
default:
log("SYSERR: Invalid saving throw type.");
}
break;
case CLASS_DEMON:
switch (type) {
case SAVING_PARA: /* Paralyzation */
switch (level) {
case 0: return 90;
case 1: return 60;
case 2: return 59;
case 3: return 48;
case 4: return 46;
case 5: return 45;
case 6: return 43;
case 7: return 40;
case 8: return 37;
case 9: return 35;
case 10: return 34;
case 11: return 33;
case 12: return 31;
case 13: return 30;
case 14: return 29;
case 15: return 27;
case 16: return 26;
case 17: return 25;
case 18: return 24;
case 19: return 23;
case 20: return 22;
case 21: return 21;
case 22: return 20;
case 23: return 18;
case 24: return 15;
case 25: return 14;
case 26: return 12;
case 27: return 10;
case 28: return 9;
case 29: return 8;
case 30: return 7;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for demon paralyzation saving throw.");
}
case SAVING_ROD: /* Rods */
switch (level) {
case 0: return 90;
case 1: return 70;
case 2: return 69;
case 3: return 68;
case 4: return 66;
case 5: return 65;
case 6: return 63;
case 7: return 60;
case 8: return 57;
case 9: return 55;
case 10: return 54;
case 11: return 53;
case 12: return 51;
case 13: return 50;
case 14: return 49;
case 15: return 47;
case 16: return 46;
case 17: return 45;
case 18: return 44;
case 19: return 43;
case 20: return 42;
case 21: return 41;
case 22: return 40;
case 23: return 38;
case 24: return 35;
case 25: return 34;
case 26: return 32;
case 27: return 30;
case 28: return 29;
case 29: return 28;
case 30: return 27;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for demon rod saving throw.");
}
case SAVING_PETRI: /* Petrification */
switch (level) {
case 0: return 90;
case 1: return 65;
case 2: return 64;
case 3: return 63;
case 4: return 61;
case 5: return 60;
case 6: return 58;
case 7: return 55;
case 8: return 53;
case 9: return 50;
case 10: return 49;
case 11: return 48;
case 12: return 46;
case 13: return 45;
case 14: return 44;
case 15: return 43;
case 16: return 41;
case 17: return 40;
case 18: return 39;
case 19: return 38;
case 20: return 37;
case 21: return 36;
case 22: return 35;
case 23: return 33;
case 24: return 31;
case 25: return 29;
case 26: return 27;
case 27: return 25;
case 28: return 24;
case 29: return 23;
case 30: return 22;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for demon petrification saving throw.");
}
case SAVING_BREATH: /* Breath weapons */
switch (level) {
case 0: return 90;
case 1: return 80;
case 2: return 79;
case 3: return 78;
case 4: return 76;
case 5: return 75;
case 6: return 73;
case 7: return 70;
case 8: return 67;
case 9: return 65;
case 10: return 64;
case 11: return 63;
case 12: return 61;
case 13: return 60;
case 14: return 59;
case 15: return 57;
case 16: return 56;
case 17: return 55;
case 18: return 54;
case 19: return 53;
case 20: return 52;
case 21: return 51;
case 22: return 50;
case 23: return 48;
case 24: return 45;
case 25: return 44;
case 26: return 42;
case 27: return 40;
case 28: return 39;
case 29: return 38;
case 30: return 37;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for demon breath saving throw.");
}
case SAVING_SPELL: /* Generic spells */
switch (level) {
case 0: return 90;
case 1: return 75;
case 2: return 74;
case 3: return 73;
case 4: return 71;
case 5: return 70;
case 6: return 68;
case 7: return 65;
case 8: return 63;
case 9: return 60;
case 10: return 59;
case 11: return 58;
case 12: return 56;
case 13: return 55;
case 14: return 54;
case 15: return 53;
case 16: return 51;
case 17: return 50;
case 18: return 49;
case 19: return 48;
case 20: return 47;
case 21: return 46;
case 22: return 45;
case 23: return 43;
case 24: return 41;
case 25: return 39;
case 26: return 37;
case 27: return 35;
case 28: return 34;
case 29: return 33;
case 30: return 32;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for demon spell saving throw.");
}
default:
log("SYSERR: Invalid saving throw type.");
}
break;
case CLASS_icer:
switch (type) {
case SAVING_PARA: /* Paralyzation */
switch (level) {
case 0: return 90;
case 1: return 65;
case 2: return 64;
case 3: return 63;
case 4: return 62;
case 5: return 61;
case 6: return 60;
case 7: return 59;
case 8: return 58;
case 9: return 57;
case 10: return 56;
case 11: return 55;
case 12: return 54;
case 13: return 53;
case 14: return 52;
case 15: return 51;
case 16: return 50;
case 17: return 49;
case 18: return 48;
case 19: return 47;
case 20: return 46;
case 21: return 45;
case 22: return 44;
case 23: return 43;
case 24: return 42;
case 25: return 41;
case 26: return 40;
case 27: return 39;
case 28: return 38;
case 29: return 37;
case 30: return 36;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for icer paralyzation saving throw.");
}
case SAVING_ROD: /* Rods */
switch (level) {
case 0: return 90;
case 1: return 70;
case 2: return 68;
case 3: return 66;
case 4: return 64;
case 5: return 62;
case 6: return 60;
case 7: return 58;
case 8: return 56;
case 9: return 54;
case 10: return 52;
case 11: return 50;
case 12: return 48;
case 13: return 46;
case 14: return 44;
case 15: return 42;
case 16: return 40;
case 17: return 38;
case 18: return 36;
case 19: return 34;
case 20: return 32;
case 21: return 30;
case 22: return 28;
case 23: return 26;
case 24: return 24;
case 25: return 22;
case 26: return 20;
case 27: return 18;
case 28: return 16;
case 29: return 14;
case 30: return 13;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for icer rod saving throw.");
}
case SAVING_PETRI: /* Petrification */
switch (level) {
case 0: return 90;
case 1: return 60;
case 2: return 59;
case 3: return 58;
case 4: return 58;
case 5: return 56;
case 6: return 55;
case 7: return 54;
case 8: return 53;
case 9: return 52;
case 10: return 51;
case 11: return 50;
case 12: return 49;
case 13: return 48;
case 14: return 47;
case 15: return 46;
case 16: return 45;
case 17: return 44;
case 18: return 43;
case 19: return 42;
case 20: return 41;
case 21: return 40;
case 22: return 39;
case 23: return 38;
case 24: return 37;
case 25: return 36;
case 26: return 35;
case 27: return 34;
case 28: return 33;
case 29: return 32;
case 30: return 31;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for icer petrification saving throw.");
}
case SAVING_BREATH: /* Breath weapons */
switch (level) {
case 0: return 90;
case 1: return 80;
case 2: return 79;
case 3: return 78;
case 4: return 77;
case 5: return 76;
case 6: return 75;
case 7: return 74;
case 8: return 73;
case 9: return 72;
case 10: return 71;
case 11: return 70;
case 12: return 69;
case 13: return 68;
case 14: return 67;
case 15: return 66;
case 16: return 65;
case 17: return 64;
case 18: return 63;
case 19: return 62;
case 20: return 61;
case 21: return 60;
case 22: return 59;
case 23: return 58;
case 24: return 57;
case 25: return 56;
case 26: return 55;
case 27: return 54;
case 28: return 53;
case 29: return 52;
case 30: return 51;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for icer breath saving throw.");
}
case SAVING_SPELL: /* Generic spells */
switch (level) {
case 0: return 90;
case 1: return 75;
case 2: return 73;
case 3: return 71;
case 4: return 69;
case 5: return 67;
case 6: return 65;
case 7: return 63;
case 8: return 61;
case 9: return 59;
case 10: return 57;
case 11: return 55;
case 12: return 53;
case 13: return 51;
case 14: return 49;
case 15: return 47;
case 16: return 45;
case 17: return 43;
case 18: return 41;
case 19: return 39;
case 20: return 37;
case 21: return 35;
case 22: return 33;
case 23: return 31;
case 24: return 29;
case 25: return 27;
case 26: return 25;
case 27: return 23;
case 28: return 21;
case 29: return 19;
case 30: return 17;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for icer spell saving throw.");
}
default:
log("SYSERR: Invalid saving throw type.");
}
break;
case CLASS_ANDROID:
switch (type) {
case SAVING_PARA: /* Paralyzation */
switch (level) {
case 0: return 90;
case 1: return 65;
case 2: return 64;
case 3: return 63;
case 4: return 62;
case 5: return 61;
case 6: return 60;
case 7: return 59;
case 8: return 58;
case 9: return 57;
case 10: return 56;
case 11: return 55;
case 12: return 54;
case 13: return 53;
case 14: return 52;
case 15: return 51;
case 16: return 50;
case 17: return 49;
case 18: return 48;
case 19: return 47;
case 20: return 46;
case 21: return 45;
case 22: return 44;
case 23: return 43;
case 24: return 42;
case 25: return 41;
case 26: return 40;
case 27: return 39;
case 28: return 38;
case 29: return 37;
case 30: return 36;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for android paralyzation saving throw.");
}
case SAVING_ROD: /* Rods */
switch (level) {
case 0: return 90;
case 1: return 70;
case 2: return 68;
case 3: return 66;
case 4: return 64;
case 5: return 62;
case 6: return 60;
case 7: return 58;
case 8: return 56;
case 9: return 54;
case 10: return 52;
case 11: return 50;
case 12: return 48;
case 13: return 46;
case 14: return 44;
case 15: return 42;
case 16: return 40;
case 17: return 38;
case 18: return 36;
case 19: return 34;
case 20: return 32;
case 21: return 30;
case 22: return 28;
case 23: return 26;
case 24: return 24;
case 25: return 22;
case 26: return 20;
case 27: return 18;
case 28: return 16;
case 29: return 14;
case 30: return 13;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for android rod saving throw.");
}
case SAVING_PETRI: /* Petrification */
switch (level) {
case 0: return 90;
case 1: return 60;
case 2: return 59;
case 3: return 58;
case 4: return 58;
case 5: return 56;
case 6: return 55;
case 7: return 54;
case 8: return 53;
case 9: return 52;
case 10: return 51;
case 11: return 50;
case 12: return 49;
case 13: return 48;
case 14: return 47;
case 15: return 46;
case 16: return 45;
case 17: return 44;
case 18: return 43;
case 19: return 42;
case 20: return 41;
case 21: return 40;
case 22: return 39;
case 23: return 38;
case 24: return 37;
case 25: return 36;
case 26: return 35;
case 27: return 34;
case 28: return 33;
case 29: return 32;
case 30: return 31;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for android petrification saving throw.");
}
case SAVING_BREATH: /* Breath weapons */
switch (level) {
case 0: return 90;
case 1: return 80;
case 2: return 79;
case 3: return 78;
case 4: return 77;
case 5: return 76;
case 6: return 75;
case 7: return 74;
case 8: return 73;
case 9: return 72;
case 10: return 71;
case 11: return 70;
case 12: return 69;
case 13: return 68;
case 14: return 67;
case 15: return 66;
case 16: return 65;
case 17: return 64;
case 18: return 63;
case 19: return 62;
case 20: return 61;
case 21: return 60;
case 22: return 59;
case 23: return 58;
case 24: return 57;
case 25: return 56;
case 26: return 55;
case 27: return 54;
case 28: return 53;
case 29: return 52;
case 30: return 51;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for android breath saving throw.");
}
case SAVING_SPELL: /* Generic spells */
switch (level) {
case 0: return 90;
case 1: return 75;
case 2: return 73;
case 3: return 71;
case 4: return 69;
case 5: return 67;
case 6: return 65;
case 7: return 63;
case 8: return 61;
case 9: return 59;
case 10: return 57;
case 11: return 55;
case 12: return 53;
case 13: return 51;
case 14: return 49;
case 15: return 47;
case 16: return 45;
case 17: return 43;
case 18: return 41;
case 19: return 39;
case 20: return 37;
case 21: return 35;
case 22: return 33;
case 23: return 31;
case 24: return 29;
case 25: return 27;
case 26: return 25;
case 27: return 23;
case 28: return 21;
case 29: return 19;
case 30: return 17;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for android spell saving throw.");
}
default:
log("SYSERR: Invalid saving throw type.");
}
break;
case CLASS_MAJIN:
switch (type) {
case SAVING_PARA: /* Paralyzation */
switch (level) {
case 0: return 90;
case 1: return 65;
case 2: return 64;
case 3: return 63;
case 4: return 62;
case 5: return 61;
case 6: return 60;
case 7: return 59;
case 8: return 58;
case 9: return 57;
case 10: return 56;
case 11: return 55;
case 12: return 54;
case 13: return 53;
case 14: return 52;
case 15: return 51;
case 16: return 50;
case 17: return 49;
case 18: return 48;
case 19: return 47;
case 20: return 46;
case 21: return 45;
case 22: return 44;
case 23: return 43;
case 24: return 42;
case 25: return 41;
case 26: return 40;
case 27: return 39;
case 28: return 38;
case 29: return 37;
case 30: return 36;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for majin paralyzation saving throw.");
}
case SAVING_ROD: /* Rods */
switch (level) {
case 0: return 90;
case 1: return 70;
case 2: return 68;
case 3: return 66;
case 4: return 64;
case 5: return 62;
case 6: return 60;
case 7: return 58;
case 8: return 56;
case 9: return 54;
case 10: return 52;
case 11: return 50;
case 12: return 48;
case 13: return 46;
case 14: return 44;
case 15: return 42;
case 16: return 40;
case 17: return 38;
case 18: return 36;
case 19: return 34;
case 20: return 32;
case 21: return 30;
case 22: return 28;
case 23: return 26;
case 24: return 24;
case 25: return 22;
case 26: return 20;
case 27: return 18;
case 28: return 16;
case 29: return 14;
case 30: return 13;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for majin rod saving throw.");
}
case SAVING_PETRI: /* Petrification */
switch (level) {
case 0: return 90;
case 1: return 60;
case 2: return 59;
case 3: return 58;
case 4: return 58;
case 5: return 56;
case 6: return 55;
case 7: return 54;
case 8: return 53;
case 9: return 52;
case 10: return 51;
case 11: return 50;
case 12: return 49;
case 13: return 48;
case 14: return 47;
case 15: return 46;
case 16: return 45;
case 17: return 44;
case 18: return 43;
case 19: return 42;
case 20: return 41;
case 21: return 40;
case 22: return 39;
case 23: return 38;
case 24: return 37;
case 25: return 36;
case 26: return 35;
case 27: return 34;
case 28: return 33;
case 29: return 32;
case 30: return 31;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for majin petrification saving throw.");
}
case SAVING_BREATH: /* Breath weapons */
switch (level) {
case 0: return 90;
case 1: return 80;
case 2: return 79;
case 3: return 78;
case 4: return 77;
case 5: return 76;
case 6: return 75;
case 7: return 74;
case 8: return 73;
case 9: return 72;
case 10: return 71;
case 11: return 70;
case 12: return 69;
case 13: return 68;
case 14: return 67;
case 15: return 66;
case 16: return 65;
case 17: return 64;
case 18: return 63;
case 19: return 62;
case 20: return 61;
case 21: return 60;
case 22: return 59;
case 23: return 58;
case 24: return 57;
case 25: return 56;
case 26: return 55;
case 27: return 54;
case 28: return 53;
case 29: return 52;
case 30: return 51;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for majin breath saving throw.");
}
case SAVING_SPELL: /* Generic spells */
switch (level) {
case 0: return 90;
case 1: return 75;
case 2: return 73;
case 3: return 71;
case 4: return 69;
case 5: return 67;
case 6: return 65;
case 7: return 63;
case 8: return 61;
case 9: return 59;
case 10: return 57;
case 11: return 55;
case 12: return 53;
case 13: return 51;
case 14: return 49;
case 15: return 47;
case 16: return 45;
case 17: return 43;
case 18: return 41;
case 19: return 39;
case 20: return 37;
case 21: return 35;
case 22: return 33;
case 23: return 31;
case 24: return 29;
case 25: return 27;
case 26: return 25;
case 27: return 23;
case 28: return 21;
case 29: return 19;
case 30: return 17;
case 31: return 0;
case 32: return 0;
case 33: return 0;
case 34: return 0;
case 35: return 0;
case 36: return 0;
case 37: return 0;
case 38: return 0;
case 39: return 0;
case 40: return 0;
default:
log("SYSERR: Missing level for majin spell saving throw.");
}
default:
log("SYSERR: Invalid saving throw type.");
}
break;
case CLASS_saiyan:
switch (type) {
case SAVING_PARA: /* Paralyzation */
switch (level) {
case 0: return 90;
case 1: return 70;
case 2: return 68;
case 3: return 67;
case 4: return 65;
case 5: return 62;
case 6: return 58;
case 7: return 55;
case 8: return 53;
case 9: return 52;
case 10: return 50;
case 11: return 47;
case 12: return 43;
case 13: return 40;
case 14: return 38;
case 15: return 37;
case 16: return 35;
case 17: return 32;
case 18: return 28;
case 19: return 25;
case 20: return 24;
case 21: return 23;
case 22: return 22;
case 23: return 20;
case 24: return 19;
case 25: return 17;
case 26: return 16;
case 27: return 15;
case 28: return 14;
case 29: return 13;
case 30: return 12;
case 31: return 11;
case 32: return 10;
case 33: return 9;
case 34: return 8;
case 35: return 7;
case 36: return 6;
case 37: return 5;
case 38: return 4;
case 39: return 3;
case 40: return 2;
default:
log("SYSERR: Missing level for saiyan paralyzation saving throw.");
}
case SAVING_ROD: /* Rods */
switch (level) {
case 0: return 90;
case 1: return 80;
case 2: return 78;
case 3: return 77;
case 4: return 75;
case 5: return 72;
case 6: return 68;
case 7: return 65;
case 8: return 63;
case 9: return 62;
case 10: return 60;
case 11: return 57;
case 12: return 53;
case 13: return 50;
case 14: return 48;
case 15: return 47;
case 16: return 45;
case 17: return 42;
case 18: return 38;
case 19: return 35;
case 20: return 34;
case 21: return 33;
case 22: return 32;
case 23: return 30;
case 24: return 29;
case 25: return 27;
case 26: return 26;
case 27: return 25;
case 28: return 24;
case 29: return 23;
case 30: return 22;
case 31: return 20;
case 32: return 18;
case 33: return 16;
case 34: return 14;
case 35: return 12;
case 36: return 10;
case 37: return 8;
case 38: return 6;
case 39: return 5;
case 40: return 4;
default:
log("SYSERR: Missing level for saiyan rod saving throw.");
}
case SAVING_PETRI: /* Petrification */
switch (level) {
case 0: return 90;
case 1: return 75;
case 2: return 73;
case 3: return 72;
case 4: return 70;
case 5: return 67;
case 6: return 63;
case 7: return 60;
case 8: return 58;
case 9: return 57;
case 10: return 55;
case 11: return 52;
case 12: return 48;
case 13: return 45;
case 14: return 43;
case 15: return 42;
case 16: return 40;
case 17: return 37;
case 18: return 33;
case 19: return 30;
case 20: return 29;
case 21: return 28;
case 22: return 26;
case 23: return 25;
case 24: return 24;
case 25: return 23;
case 26: return 21;
case 27: return 20;
case 28: return 19;
case 29: return 18;
case 30: return 17;
case 31: return 16;
case 32: return 15;
case 33: return 14;
case 34: return 13;
case 35: return 12;
case 36: return 11;
case 37: return 10;
case 38: return 9;
case 39: return 8;
case 40: return 7;
default:
log("SYSERR: Missing level for saiyan petrification saving throw.");
}
case SAVING_BREATH: /* Breath weapons */
switch (level) {
case 0: return 90;
case 1: return 85;
case 2: return 83;
case 3: return 82;
case 4: return 80;
case 5: return 75;
case 6: return 70;
case 7: return 65;
case 8: return 63;
case 9: return 62;
case 10: return 60;
case 11: return 55;
case 12: return 50;
case 13: return 45;
case 14: return 43;
case 15: return 42;
case 16: return 40;
case 17: return 37;
case 18: return 33;
case 19: return 30;
case 20: return 29;
case 21: return 28;
case 22: return 26;
case 23: return 25;
case 24: return 24;
case 25: return 23;
case 26: return 21;
case 27: return 20;
case 28: return 19;
case 29: return 18;
case 30: return 17;
case 31: return 16;
case 32: return 15;
case 33: return 14;
case 34: return 13;
case 35: return 12;
case 36: return 11;
case 37: return 10;
case 38: return 9;
case 39: return 8;
case 40: return 7;
default:
log("SYSERR: Missing level for saiyan breath saving throw.");
}
case SAVING_SPELL: /* Generic spells */
switch (level) {
case 0: return 90;
case 1: return 85;
case 2: return 83;
case 3: return 82;
case 4: return 80;
case 5: return 77;
case 6: return 73;
case 7: return 70;
case 8: return 68;
case 9: return 67;
case 10: return 65;
case 11: return 62;
case 12: return 58;
case 13: return 55;
case 14: return 53;
case 15: return 52;
case 16: return 50;
case 17: return 47;
case 18: return 43;
case 19: return 40;
case 20: return 39;
case 21: return 38;
case 22: return 36;
case 23: return 35;
case 24: return 34;
case 25: return 33;
case 26: return 31;
case 27: return 30;
case 28: return 29;
case 29: return 28;
case 30: return 27;
case 31: return 25;
case 32: return 23;
case 33: return 21;
case 34: return 19;
case 35: return 17;
case 36: return 15;
case 37: return 13;
case 38: return 11;
case 39: return 9;
case 40: return 7;
default:
log("SYSERR: Missing level for saiyan spell saving throw.");
}
default:
log("SYSERR: Invalid saving throw type.");
}
default:
log("SYSERR: Invalid class saving throw.");
}
/* Should not get here unless something is wrong. */
return 100;
}
int thaco(int class, int level) {
if (level < 0 || level > LVL_IMPL) {
log("SYSERR: Unknown class in thac0 chart.");
return 100;
} else {
return 1;
}
}
/*
* Roll the 6 stats for a character... each stat is made of the sum of
* the best 3 out of 4 rolls of a 6-sided die. Each class then decides
* which priority will be given for the best to worst stats.
*/
void roll_real_abils(struct char_data * ch)
{
int i, j, k, temp;
ubyte table[6];
ubyte rolls[4];
for (i = 0; i < 6; i++)
table[i] = 0;
for (i = 0; i < 6; i++) {
for (j = 0; j < 4; j++)
rolls[j] = number(1, 6);
temp = rolls[0] + rolls[1] + rolls[2] + rolls[3] -
MIN(rolls[0], MIN(rolls[1], MIN(rolls[2], rolls[3])));
for (k = 0; k < 6; k++)
if (table[k] < temp) {
temp ^= table[k];
table[k] ^= temp;
temp ^= table[k];
}
}
ch->real_abils.str_add = 0;
switch (GET_CLASS(ch)) {
case CLASS_Human:
ch->real_abils.intel = table[0];
ch->real_abils.str = table[1];
ch->real_abils.dex = table[2];
ch->real_abils.con = table[3];
ch->real_abils.wis = table[4];
ch->real_abils.cha = table[5];
break;
case CLASS_Namek:
ch->real_abils.con = table[0];
ch->real_abils.str = table[1];
ch->real_abils.dex = table[2];
ch->real_abils.wis = table[3];
ch->real_abils.intel = table[4];
ch->real_abils.cha = table[5];
break;
case CLASS_icer:
ch->real_abils.str = table[0];
ch->real_abils.dex = table[1];
ch->real_abils.con = table[2];
ch->real_abils.intel = table[3];
ch->real_abils.wis = table[4];
ch->real_abils.cha = table[5];
break;
case CLASS_MAJIN:
ch->real_abils.str = table[0];
ch->real_abils.con = table[1];
ch->real_abils.dex = table[2];
ch->real_abils.intel = table[3];
ch->real_abils.wis = table[4];
ch->real_abils.cha = table[5];
break;
case CLASS_ANDROID:
ch->real_abils.str = table[0];
ch->real_abils.dex = table[1];
ch->real_abils.con = table[2];
ch->real_abils.intel = table[3];
ch->real_abils.wis = table[4];
ch->real_abils.cha = table[5];
break;
case CLASS_DEMON:
ch->real_abils.str = table[0];
ch->real_abils.dex = table[1];
ch->real_abils.con = table[2];
ch->real_abils.intel = table[3];
ch->real_abils.wis = table[4];
ch->real_abils.cha = table[5];
break;
case CLASS_HALF_BREED:
ch->real_abils.str = table[0];
ch->real_abils.dex = table[1];
ch->real_abils.con = table[2];
ch->real_abils.intel = table[3];
ch->real_abils.wis = table[4];
ch->real_abils.cha = table[5];
break;
case CLASS_ARLIAN:
ch->real_abils.str = table[0];
ch->real_abils.dex = table[1];
ch->real_abils.con = table[2];
ch->real_abils.intel = table[3];
ch->real_abils.wis = table[4];
ch->real_abils.cha = table[5];
break;
case CLASS_KONATSU:
ch->real_abils.str = table[0];
ch->real_abils.dex = table[1];
ch->real_abils.con = table[2];
ch->real_abils.intel = table[3];
ch->real_abils.wis = table[4];
ch->real_abils.cha = table[5];
break;
case CLASS_CHANGELING:
ch->real_abils.str = table[0];
ch->real_abils.dex = table[1];
ch->real_abils.con = table[2];
ch->real_abils.intel = table[3];
ch->real_abils.wis = table[4];
ch->real_abils.cha = table[5];
break;
case CLASS_KAIO:
ch->real_abils.str = table[0];
ch->real_abils.dex = table[1];
ch->real_abils.con = table[2];
ch->real_abils.intel = table[3];
ch->real_abils.wis = table[4];
ch->real_abils.cha = table[5];
break;
case CLASS_TRUFFLE:
ch->real_abils.str = table[0];
ch->real_abils.dex = table[1];
ch->real_abils.con = table[2];
ch->real_abils.intel = table[3];
ch->real_abils.wis = table[4];
ch->real_abils.cha = table[5];
break;
case CLASS_MUTANT:
ch->real_abils.str = table[0];
ch->real_abils.dex = table[1];
ch->real_abils.con = table[2];
ch->real_abils.intel = table[3];
ch->real_abils.wis = table[4];
ch->real_abils.cha = table[5];
break;
case CLASS_KAIO:
ch->real_abils.str = table[0];
ch->real_abils.dex = table[1];
ch->real_abils.con = table[2];
ch->real_abils.intel = table[3];
ch->real_abils.wis = table[4];
ch->real_abils.cha = table[5];
break;
case CLASS_saiyan:
ch->real_abils.str = table[0];
ch->real_abils.dex = table[1];
ch->real_abils.con = table[2];
ch->real_abils.wis = table[3];
ch->real_abils.intel = table[4];
ch->real_abils.cha = table[5];
if (ch->real_abils.str == 100)
ch->real_abils.str_add = number(0, 200);
break;
}
ch->aff_abils = ch->real_abils;
}
/* Some initializations for characters, including initial skills */
void do_start(struct char_data * ch)
{
GET_LEVEL(ch) = 1;
GET_EXP(ch) = 1;
set_title(ch, NULL);
roll_real_abils(ch);
ch->points.max_hit = 10;
switch (GET_CLASS(ch)) {
case CLASS_Human:
break;
case CLASS_Namek:
break;
case CLASS_icer:
break;
case CLASS_saiyan:
break;
case CLASS_MAJIN:
break;
case CLASS_ANDROID:
break;
case CLASS_DEMON:
break;
case CLASS_HALF_BREED:
break;
case CLASS_ARLIAN:
break;
case CLASS_KONATSU:
break;
case CLASS_CHANGELING:
break;
case CLASS_KAIO:
break;
case CLASS_TRUFFLE:
break;
case CLASS_MUTANT:
break;
case CLASS_KAIO:
break;
}
advance_level(ch);
GET_HIT(ch) = GET_MAX_HIT(ch);
GET_MANA(ch) = GET_MAX_MANA(ch);
GET_MOVE(ch) = GET_MAX_MOVE(ch);
GET_COND(ch, FULL) = 24;
GET_COND(ch, DRUNK) = 0;
GET_COND(ch, THIRST) = 24;
GET_RAGE(ch) = 1;
GET_UBS(ch) = 50;
GET_LBS(ch) = 50;
if (IS_Namek(ch))
GET_COND(ch, FULL) = -1;
if (IS_ANDROID(ch))
GET_COND(ch, FULL) = -1;
GET_COND(ch, THIRST) = -1;
ch->player.time.played = 0;
ch->player.time.logon = time(0);
ch->player_specials->saved.pc_attacks = 1;
SET_BIT(PRF_FLAGS(ch), PRF_DISPHP);
SET_BIT(PRF_FLAGS(ch), PRF_DISPMANA);
SET_BIT(PRF_FLAGS(ch), PRF_DISPMOVE);
SET_BIT(PRF_FLAGS(ch), PRF_AUTOEXIT);
SET_BIT(PRF_FLAGS(ch), PRF_COLOR_1);
SET_BIT(PRF_FLAGS(ch), PRF_COLOR_2);
if (siteok_everyone)
SET_BIT(PLR_FLAGS(ch), PLR_SITEOK);
}
/*
* This function controls the change to maxmove, maxmana, and maxhp for
* each class every time they gain a level.
*/
void advance_level(struct char_data * ch)
{
int add_hp = 0, add_mana = 0, add_move = 0, i;
add_hp = con_app[GET_CON(ch)].hitp;
add_hp = int_app[GET_INT(ch)].hitp;
switch (GET_CLASS(ch)) {
case CLASS_Human:
add_hp += number(2, 12);
add_mana += number(15, 15);
add_move = number(1, 10);
break;
case CLASS_Namek:
add_hp += number(4, 15);
add_mana += number(15, 15);
add_move = number(1, 10);
break;
case CLASS_icer:
add_hp += number(5, 16);
add_mana += number(15, 15);
add_move = number(1, 12);
break;
case CLASS_saiyan:
add_hp += number(4, 14);
add_mana += number(15, 15);
add_move = number(1, 15);
break;
case CLASS_MAJIN:
add_hp += number(5, 16);
add_mana += number(15, 15);
add_move = number(1, 10);
break;
case CLASS_DEMON:
add_hp += number(6, 16);
add_mana += number(15, 15);
add_move = number(1, 10);
break;
case CLASS_HALF_BREED:
add_hp += number(2, 10);
add_mana += number(15, 15);
add_move = number(3, 10);
break;
case CLASS_ANDROID:
add_hp += number(2, 10);
add_mana += number(15, 15);
add_move = number(10, 30);
break;
case CLASS_ARLIAN:
add_hp += number(2, 8);
add_mana += number(15, 15);
add_move = number(10, 14);
break;
case CLASS_KONATSU:
add_hp += number(2, 15);
add_mana += number(15, 15);
add_move = number(3, 10);
break;
case CLASS_CHANGELING:
add_hp += number(2, 6);
add_mana = number(GET_LEVEL(ch), (int) (2 * GET_INT(ch)));
add_mana = MIN(add_mana, 15);
add_move = number(4, 15);
break;
case CLASS_KAIO:
add_hp += number(6, 13);
add_mana += number(15, 15);
add_move = number(3, 15);
break;
case CLASS_TRUFFLE:
add_hp += number(2, 4);
add_mana += number(15, 15);
add_move = number(3, 10);
break;
case CLASS_MUTANT:
add_hp += number(2, 10);
add_mana += number(15, 15);
add_move = number(3, 10);
break;
case CLASS_KAIO:
add_hp += number(2, 14);
add_mana = number(GET_LEVEL(ch), (int) (2 * GET_INT(ch)));
add_mana = MIN(add_mana, 15);
add_move = number(3, 10);
break;
}
ch->points.max_hit += MAX(1, add_hp);
ch->points.max_move += MAX(1, add_move);
if (GET_LEVEL(ch) > 1)
ch->points.max_mana += add_mana;
if (IS_Human(ch) || IS_Namek(ch))
GET_PRACTICES(ch) += MAX(2, wis_app[GET_WIS(ch)].bonus);
else
GET_PRACTICES(ch) += MIN(3, MAX(2, wis_app[GET_WIS(ch)].bonus));
if (GET_LEVEL(ch) >= LVL_IMMORT) {
for (i = 0; i < 3; i++)
GET_COND(ch, i) = (char) -1;
SET_BIT(PRF_FLAGS(ch), PRF_HOLYLIGHT);
}
save_char(ch, NOWHERE);
sprintf(buf, "%s advanced to level %Ld", GET_NAME(ch), GET_LEVEL(ch));
mudlog(buf, BRF, MAX(LVL_IMMORT, GET_INVIS_LEV(ch)), TRUE);
}
/*
* This simply calculates the backstab multiplier based on a character's
* level. This used to be an array, but was changed to be a function so
* that it would be easier to add more levels to your MUD. This doesn't
* really create a big performance hit because it's not used very often.
*/
int backstab_mult(int level)
{
if (level <= 0)
return 1; /* level 0 */
else if (level <= 7)
return 2; /* level 1 - 7 */
else if (level <= 13)
return 3; /* level 8 - 13 */
else if (level <= 20)
return 4; /* level 14 - 20 */
else if (level <= 28)
return 5; /* level 21 - 28 */
else if (level < LVL_IMMORT)
return 6; /* all remaining mortal levels */
else
return 20; /* immortals */
}
/*
* invalid_class is used by handler.c to determine if a piece of equipment is
* usable by a particular class, based on the ITEM_ANTI_{class} bitvectors.
*/
int invalid_class(struct char_data *ch, struct obj_data *obj) {
if ((IS_OBJ_STAT(obj, ITEM_ANTI_Human) && IS_Human(ch)) ||
(IS_OBJ_STAT(obj, ITEM_ANTI_Namek) && IS_Namek(ch)) ||
(IS_OBJ_STAT(obj, ITEM_ANTI_saiyan) && IS_saiyan(ch)) ||
(IS_OBJ_STAT(obj, ITEM_ANTI_MAJIN) && IS_MAJIN(ch)) ||
(IS_OBJ_STAT(obj, ITEM_ANTI_ANDROID) && IS_ANDROID(ch)) ||
(IS_OBJ_STAT(obj, ITEM_ANTI_DEMON) && IS_DEMON(ch)) ||
(IS_OBJ_STAT(obj, ITEM_ANTI_HALF_BREED) && IS_HALF_BREED(ch)) ||
(IS_OBJ_STAT(obj, ITEM_ANTI_HALF_BREED) && IS_HALF_BREED(ch)) ||
(IS_OBJ_STAT(obj, ITEM_ANTI_HALF_BREED) && IS_HALF_BREED(ch)) ||
(IS_OBJ_STAT(obj, ITEM_ANTI_HALF_BREED) && IS_HALF_BREED(ch)) ||
(IS_OBJ_STAT(obj, ITEM_ANTI_HALF_BREED) && IS_HALF_BREED(ch)) ||
(IS_OBJ_STAT(obj, ITEM_ANTI_HALF_BREED) && IS_HALF_BREED(ch)) ||
(IS_OBJ_STAT(obj, ITEM_ANTI_HALF_BREED) && IS_HALF_BREED(ch)) ||
(IS_OBJ_STAT(obj, ITEM_ANTI_HALF_BREED) && IS_HALF_BREED(ch)) ||
(IS_OBJ_STAT(obj, ITEM_ANTI_icer) && IS_icer(ch)))
return 1;
else
return 0;
}
/*
* SPELLS AND SKILLS. This area defines which spells are assigned to
* which classes, and the minimum level the character must be to use
* the spell or skill.
*/
void init_spell_levels(void)
{
/* Human */
spell_level(SKILL_KICK, 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_KAMEHAMEHA, CLASS_Human, 1);
spell_level(SPELL_SOLAR_FLARE, CLASS_Human, 1);
spell_level(SPELL_DESTRUCTO_DISK, CLASS_Human, 1);
spell_level(SPELL_KI_SHOT, CLASS_Human, 1);
spell_level(SPELL_CHOU_KAMEHAMEHA, CLASS_Human, 1);
spell_level(SPELL_BARRIER, CLASS_Human, 1);
spell_level(SPELL_SPIRIT_BOMB, CLASS_Human, 1);
spell_level(SPELL_KIKOHO, CLASS_Human, 1);
spell_level(SKILL_SWEEP, CLASS_Human, 1);
spell_level(SKILL_KNEE, CLASS_Human, 1);
spell_level(SKILL_ELBOW, CLASS_Human, 1);
spell_level(SKILL_ROUNDHOUSE, CLASS_Human, 1);
spell_level(SKILL_FLY, CLASS_Human, 1);
spell_level(SKILL_POWERUP, CLASS_Human, 1);
spell_level(SKILL_POWERDOWN, CLASS_Human, 1);
spell_level(SPELL_DONDOPA, CLASS_Human, 1);
spell_level(SPELL_YOIKOMINMINKEN, CLASS_Human, 1);
spell_level(SKILL_DESTRUCT, CLASS_Human, 1);
spell_level(SKILL_POWERSENSE, CLASS_Human, 1);
spell_level(SPELL_MULTIFORM, CLASS_Human, 1);
/* Namek */
spell_level(SKILL_KICK, 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_KI_SHOT, CLASS_Namek, 1);
spell_level(SPELL_MAKANKOSAPPO, CLASS_Namek, 1);
spell_level(SPELL_EYE_BEAM, CLASS_Namek, 1);
spell_level(SPELL_MULTIFORM, CLASS_Namek, 1);
spell_level(SKILL_SWEEP, CLASS_Namek, 1);
spell_level(SKILL_KNEE, CLASS_Namek, 1);
spell_level(SKILL_ELBOW, CLASS_Namek, 1);
spell_level(SKILL_ROUNDHOUSE, CLASS_Namek, 1);
spell_level(SKILL_FLY, CLASS_Namek, 1);
spell_level(SKILL_POWERUP, CLASS_Namek, 1);
spell_level(SKILL_POWERDOWN, CLASS_Namek, 1);
spell_level(SPELL_REPRODUCE, CLASS_Namek, 1);
spell_level(SKILL_POWERSENSE, CLASS_Namek, 1);
spell_level(SPELL_KYODAIKA, CLASS_Namek, 1);
spell_level(SPELL_ERASER_CANNON, CLASS_Namek, 1);
/* Icer */
spell_level(SKILL_KICK, CLASS_icer, 1);
spell_level(SKILL_RESCUE, CLASS_icer, 1);
spell_level(SKILL_TAILWHIP, CLASS_icer, 1);
spell_level(SPELL_DESTRUCTO_DISK, CLASS_icer, 1);
spell_level(SPELL_KI_SHOT, CLASS_icer, 1);
spell_level(SPELL_DEATH_BALL, CLASS_icer, 1);
spell_level(SPELL_DONDOPA, CLASS_icer, 1);
spell_level(SKILL_SWEEP, CLASS_icer, 1);
spell_level(SKILL_KNEE, CLASS_icer, 1);
spell_level(SKILL_ELBOW, CLASS_icer, 1);
spell_level(SKILL_ROUNDHOUSE, CLASS_icer, 1);
spell_level(SKILL_FLY, CLASS_icer, 1);
spell_level(SKILL_POWERUP, CLASS_icer, 1);
spell_level(SPELL_EYE_BEAM, CLASS_icer, 1);
spell_level(SPELL_DAICHIRETSUHAN, CLASS_icer, 1);
spell_level(SPELL_ERASER_CANNON, CLASS_icer, 1);
spell_level(SPELL_INFRAVISION, CLASS_icer, 1);
/* Saiyan */
spell_level(SKILL_KICK, CLASS_saiyan, 1);
spell_level(SKILL_SENSE, CLASS_saiyan, 1);
spell_level(SKILL_RESCUE, CLASS_saiyan, 1);
spell_level(SPELL_KAMEHAMEHA, CLASS_saiyan, 1);
spell_level(SPELL_SOLAR_FLARE, CLASS_saiyan, 1);
spell_level(SPELL_KI_SHOT, CLASS_saiyan, 1);
spell_level(SPELL_CHOU_KAMEHAMEHA, CLASS_saiyan, 1);
spell_level(SPELL_BIG_BANG, CLASS_saiyan, 1);
spell_level(SPELL_ZANZOKEN, CLASS_saiyan, 1);
spell_level(SPELL_SPIRIT_BOMB, CLASS_saiyan, 1);
spell_level(SPELL_ERASER_CANNON, CLASS_saiyan, 1);
spell_level(SPELL_BAKUHATSUHA, CLASS_saiyan, 1);
spell_level(SKILL_SWEEP, CLASS_saiyan, 1);
spell_level(SKILL_KNEE, CLASS_saiyan, 1);
spell_level(SKILL_ELBOW, CLASS_saiyan, 1);
spell_level(SKILL_ROUNDHOUSE, CLASS_saiyan, 1);
spell_level(SKILL_FLY, CLASS_saiyan, 1);
spell_level(SKILL_POWERUP, CLASS_saiyan, 1);
spell_level(SPELL_HASSHUKEN, CLASS_saiyan, 1);
spell_level(SPELL_DESTRUCTO_DISK, CLASS_saiyan, 1);
spell_level(SPELL_TSURUGI, CLASS_saiyan, 1);
spell_level(SKILL_POWERDOWN, CLASS_saiyan, 1);
spell_level(SKILL_KAIOKEN, CLASS_saiyan, 1);
spell_level(SKILL_SENSE, CLASS_saiyan, 1);
spell_level(SKILL_POWERSENSE, CLASS_saiyan, 1);
spell_level(SKILL_POWERDOWN, CLASS_saiyan, 1);
/* Majin */
spell_level(SKILL_KICK, CLASS_MAJIN, 1);
spell_level(SKILL_RESCUE, CLASS_MAJIN, 1);
spell_level(SKILL_SENSE, CLASS_MAJIN, 1);
spell_level(SPELL_KI_SHOT, CLASS_MAJIN, 1);
spell_level(SPELL_DEATH_BALL, CLASS_MAJIN, 1);
spell_level(SPELL_MAJIN, CLASS_MAJIN, 1);
spell_level(SKILL_SWEEP, CLASS_MAJIN, 1);
spell_level(SKILL_KNEE, CLASS_MAJIN, 1);
spell_level(SKILL_ELBOW, CLASS_MAJIN, 1);
spell_level(SKILL_ROUNDHOUSE, CLASS_MAJIN, 1);
spell_level(SKILL_FLY, CLASS_MAJIN, 1);
spell_level(SKILL_POWERUP, CLASS_MAJIN, 1);
spell_level(SKILL_INGEST, CLASS_MAJIN, 1);
spell_level(SKILL_POWERDOWN, CLASS_MAJIN, 1);
spell_level(SKILL_POWERSENSE, CLASS_MAJIN, 1);
spell_level(SPELL_EYE_BEAM, CLASS_MAJIN, 1);
/* Android */
spell_level(SKILL_KICK, 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(SPELL_KI_SHOT, CLASS_ANDROID, 1);
spell_level(SKILL_SWEEP, CLASS_ANDROID, 1);
spell_level(SKILL_KNEE, CLASS_ANDROID, 1);
spell_level(SKILL_ELBOW, CLASS_ANDROID, 1);
spell_level(SKILL_ROUNDHOUSE, CLASS_ANDROID, 1);
spell_level(SKILL_FLY, CLASS_ANDROID, 1);
spell_level(SKILL_POWERUP, CLASS_ANDROID, 1);
spell_level(SPELL_BARRIER, CLASS_ANDROID, 1);
spell_level(SPELL_DESTRUCTO_DISK, CLASS_ANDROID, 1);
spell_level(SPELL_EYE_BEAM, CLASS_ANDROID, 1);
spell_level(SPELL_ENERGY_KYUSHU, CLASS_ANDROID, 1);
spell_level(SPELL_HELL_FLASH, CLASS_ANDROID, 1);
spell_level(SKILL_ABSORB, CLASS_ANDROID, 1);
spell_level(SKILL_DESTRUCT, CLASS_ANDROID, 1);
/* Demon */
spell_level(SKILL_KICK, CLASS_DEMON, 1);
spell_level(SKILL_RESCUE, CLASS_DEMON, 1);
spell_level(SPELL_KI_SHOT, CLASS_DEMON, 1);
spell_level(SKILL_SWEEP, CLASS_DEMON, 1);
spell_level(SKILL_KNEE, CLASS_DEMON, 1);
spell_level(SKILL_ELBOW, CLASS_DEMON, 1);
spell_level(SKILL_ROUNDHOUSE, CLASS_DEMON, 1);
spell_level(SKILL_FLY, CLASS_DEMON, 1);
spell_level(SKILL_POWERUP, CLASS_DEMON, 1);
spell_level(SPELL_KYODAIKA, CLASS_DEMON, 1);
/* ARLIAN */
spell_level(SKILL_KICK, CLASS_ARLIAN, 1);
spell_level(SKILL_RESCUE, CLASS_ARLIAN, 1);
spell_level(SPELL_KI_SHOT, CLASS_ARLIAN, 1);
spell_level(SKILL_SWEEP, CLASS_ARLIAN, 1);
spell_level(SKILL_KNEE, CLASS_ARLIAN, 1);
spell_level(SKILL_ELBOW, CLASS_ARLIAN, 1);
spell_level(SKILL_ROUNDHOUSE, CLASS_ARLIAN, 1);
spell_level(SKILL_FLY, CLASS_ARLIAN, 1);
spell_level(SKILL_POWERUP, CLASS_ARLIAN, 1);
spell_level(SPELL_ERASER_CANNON, CLASS_ARLIAN, 1);
/* KONATSU */
spell_level(SKILL_KICK, CLASS_KONATSU, 1);
spell_level(SKILL_RESCUE, CLASS_KONATSU, 1);
spell_level(SPELL_KI_SHOT, CLASS_KONATSU, 1);
spell_level(SKILL_SWEEP, CLASS_KONATSU, 1);
spell_level(SKILL_KNEE, CLASS_KONATSU, 1);
spell_level(SKILL_ELBOW, CLASS_KONATSU, 1);
spell_level(SKILL_ROUNDHOUSE, CLASS_KONATSU, 1);
spell_level(SKILL_FLY, CLASS_KONATSU, 1);
spell_level(SKILL_POWERUP, CLASS_KONATSU, 1);
spell_level(SPELL_SWORD, CLASS_KONATSU, 1);
spell_level(SPELL_HURRICANE, CLASS_KONATSU, 1);
spell_level(SPELL_INFRAVISION, CLASS_KONATSU, 1);
spell_level(SPELL_INVISIBLE, CLASS_KONATSU, 1);
spell_level(SPELL_BURNING_SOULS, CLASS_KONATSU, 1);
spell_level(SKILL_POWERSENSE, CLASS_KONATSU, 1);
spell_level(SKILL_POWERDOWN, CLASS_KONATSU, 1);
spell_level(SKILL_SENSE, CLASS_KONATSU, 1);
/* CHANGELING */
spell_level(SKILL_KICK, CLASS_CHANGELING, 1);
spell_level(SKILL_RESCUE, CLASS_CHANGELING, 1);
spell_level(SPELL_KI_SHOT, CLASS_CHANGELING, 1);
spell_level(SKILL_SWEEP, CLASS_CHANGELING, 1);
spell_level(SKILL_KNEE, CLASS_CHANGELING, 1);
spell_level(SKILL_ELBOW, CLASS_CHANGELING, 1);
spell_level(SKILL_ROUNDHOUSE, CLASS_CHANGELING, 1);
spell_level(SKILL_FLY, CLASS_CHANGELING, 1);
spell_level(SKILL_POWERUP, CLASS_CHANGELING, 1);
spell_level(SPELL_BLADEMORPH, CLASS_CHANGELING, 1);
spell_level(SKILL_STEALTH, CLASS_CHANGELING, 1);
spell_level(SPELL_INFRAVISION, CLASS_CHANGELING, 1);
spell_level(SPELL_MUTATE, CLASS_CHANGELING, 1);
/* KAIO */
spell_level(SKILL_KICK, CLASS_KAIO, 1);
spell_level(SKILL_RESCUE, CLASS_KAIO, 1);
spell_level(SPELL_KI_SHOT, CLASS_KAIO, 1);
spell_level(SKILL_SWEEP, CLASS_KAIO, 1);
spell_level(SKILL_KNEE, CLASS_KAIO, 1);
spell_level(SKILL_ELBOW, CLASS_KAIO, 1);
spell_level(SKILL_ROUNDHOUSE, CLASS_KAIO, 1);
spell_level(SKILL_FLY, CLASS_KAIO, 1);
spell_level(SKILL_POWERUP, CLASS_KAIO, 1);
spell_level(SKILL_KAIOKEN, CLASS_KAIO, 1);
spell_level(SPELL_SPIRIT_BOMB, CLASS_KAIO, 1);
spell_level(SPELL_HEAL, CLASS_KAIO, 1);
spell_level(SPELL_SUMMON, CLASS_KAIO, 1);
spell_level(SKILL_POWERSENSE, CLASS_KAIO, 1);
/* TRUFFLE */
spell_level(SKILL_KICK, CLASS_TRUFFLE, 1);
spell_level(SKILL_RESCUE, CLASS_TRUFFLE, 1);
spell_level(SPELL_KI_SHOT, CLASS_TRUFFLE, 1);
spell_level(SKILL_SWEEP, CLASS_TRUFFLE, 1);
spell_level(SKILL_KNEE, CLASS_TRUFFLE, 1);
spell_level(SKILL_ELBOW, CLASS_TRUFFLE, 1);
spell_level(SKILL_ROUNDHOUSE, CLASS_TRUFFLE, 1);
spell_level(SKILL_FLY, CLASS_TRUFFLE, 1);
spell_level(SKILL_POWERUP, CLASS_TRUFFLE, 1);
/* MUTANT */
spell_level(SKILL_KICK, CLASS_MUTANT, 1);
spell_level(SKILL_RESCUE, CLASS_MUTANT, 1);
spell_level(SPELL_KI_SHOT, 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(SKILL_POWERUP, CLASS_MUTANT, 1);
/* KAIO */
spell_level(SKILL_KICK, CLASS_KAIO, 1);
spell_level(SKILL_RESCUE, CLASS_KAIO, 1);
spell_level(SPELL_KI_SHOT, CLASS_KAIO, 1);
spell_level(SKILL_SWEEP, CLASS_KAIO, 1);
spell_level(SKILL_KNEE, CLASS_KAIO, 1);
spell_level(SKILL_ELBOW, CLASS_KAIO, 1);
spell_level(SKILL_ROUNDHOUSE, CLASS_KAIO, 1);
spell_level(SKILL_FLY, CLASS_KAIO, 1);
spell_level(SKILL_POWERUP, CLASS_KAIO, 1);
/* Half-Breed */
spell_level(SKILL_KICK, CLASS_HALF_BREED, 1);
spell_level(SKILL_RESCUE, CLASS_HALF_BREED, 1);
spell_level(SKILL_SENSE, CLASS_HALF_BREED, 1);
spell_level(SPELL_KAMEHAMEHA, CLASS_HALF_BREED, 1);
spell_level(SPELL_KI_SHOT, CLASS_HALF_BREED, 1);
spell_level(SPELL_BARRIER, CLASS_HALF_BREED, 1);
spell_level(SPELL_CHOU_KAMEHAMEHA, CLASS_HALF_BREED, 1);
spell_level(SPELL_SPIRIT_BOMB, CLASS_HALF_BREED, 1);
spell_level(SPELL_MASENKO, CLASS_HALF_BREED, 1);
spell_level(SKILL_SWEEP, CLASS_HALF_BREED, 1);
spell_level(SKILL_KNEE, CLASS_HALF_BREED, 1);
spell_level(SKILL_ELBOW, CLASS_HALF_BREED, 1);
spell_level(SKILL_ROUNDHOUSE, CLASS_HALF_BREED, 1);
spell_level(SKILL_FLY, CLASS_HALF_BREED, 1);
spell_level(SKILL_POWERUP, CLASS_HALF_BREED, 1);
spell_level(SKILL_POWERDOWN, CLASS_HALF_BREED, 1);
spell_level(SPELL_HASSHUKEN, CLASS_HALF_BREED, 1);
spell_level(SKILL_POWERSENSE, CLASS_HALF_BREED, 1);
spell_level(SPELL_BIG_BANG, CLASS_HALF_BREED, 1);
}
/*
* This is the exp given to implementors -- it must always be greater
* than the exp required for immortality, plus at least 20,000 or so.
*/
#define EXP_MAX 9000000000
/* Function to return the exp required for each class/level */
long long level_exp(int chclass, long long level) {
if (level > LVL_IMPL || level < 0) {
log("SYSERR: Requesting exp for invalid level!");
return 0;
} else {
return 2000 * level;
}
}
/*
* KAIO titles of male characters.
*/
const char *title_male(int chclass, int level)
{
if (level <= 0 || level > LVL_IMPL)
return "the Man";
if (level == LVL_IMPL)
return "the Implementor";
switch (chclass) {
case CLASS_Human:
switch (level) {
case 1: return "the Human";
case LVL_IMMORT: return "the Immortal Human";
case LVL_GOD: return "the Avatar of Humans";
case LVL_GRGOD: return "the God of Humans";
default: return "the Human";
}
break;
case CLASS_ARLIAN:
switch (level) {
case 1: return "the Arlian";
case LVL_IMMORT: return "the Immortal Arlian";
case LVL_GOD: return "the Avatar of Arlians";
case LVL_GRGOD: return "the God of Arlians";
default: return "the Arlian";
}
break;
case CLASS_KONATSU:
switch (level) {
case 1: return "the Konatsu";
case LVL_IMMORT: return "the Immortal Konatsu";
case LVL_GOD: return "the Avatar of Konatsus";
case LVL_GRGOD: return "the God of Konatsus";
default: return "the Konatsu";
}
break;
case CLASS_CHANGELING:
switch (level) {
case 1: return "the Changeling";
case LVL_IMMORT: return "the Immortal Changeling";
case LVL_GOD: return "the Avatar of Changelings";
case LVL_GRGOD: return "the God of Changelings";
default: return "the Changeling";
}
break;
case CLASS_KAIO:
switch (level) {
case 1: return "the Kaio";
case LVL_IMMORT: return "the Immortal Kaio";
case LVL_GOD: return "the Avatar of Kaios";
case LVL_GRGOD: return "the God of Kaios";
default: return "the Kaio";
}
break;
case CLASS_TRUFFLE:
switch (level) {
case 1: return "the Truffle";
case LVL_IMMORT: return "the Immortal Truffle";
case LVL_GOD: return "the Avatar of Truffles";
case LVL_GRGOD: return "the God of Truffles";
default: return "the Truffle";
}
break;
case CLASS_MUTANT:
switch (level) {
case 1: return "the Mutant";
case LVL_IMMORT: return "the Immortal Mutant";
case LVL_GOD: return "the Avatar of Mutants";
case LVL_GRGOD: return "the God of Mutant";
default: return "the Mutant";
}
break;
case CLASS_KAIO:
switch (level) {
case 1: return "the Kaio";
case LVL_IMMORT: return "the Immortal Kaio";
case LVL_GOD: return "the Avatar of Kaios";
case LVL_GRGOD: return "the God of Kaios";
default: return "the Kaio";
}
break;
case CLASS_Namek:
switch (level) {
case 1: return "the Namek";
case LVL_IMMORT: return "the Immortal Namek";
case LVL_GOD: return "the Namek";
case LVL_GRGOD: return "the God of Nameks";
default: return "the Namek";
}
break;
case CLASS_icer:
switch (level) {
case 1: return "the Icer";
case LVL_IMMORT: return "the Immortal Icers";
case LVL_GOD: return "the Demi God of Icers";
case LVL_GRGOD: return "the God of Icers";
default: return "the Icer";
}
break;
case CLASS_MAJIN:
switch (level) {
case 1: return "the Majin";
case LVL_IMMORT: return "the Immortal Majins";
case LVL_GOD: return "the Demi God of Majins";
case LVL_GRGOD: return "the God of Majins";
default: return "the Majin";
}
break;
case CLASS_ANDROID:
switch (level) {
case 1: return "the Android";
case LVL_IMMORT: return "the Immortal Android";
case LVL_GOD: return "the Demi God of Android";
case LVL_GRGOD: return "the God of Android";
default: return "the Android";
}
break;
case CLASS_DEMON:
switch (level) {
case 1: return "the Demon";
case LVL_IMMORT: return "the Immortal Demon";
case LVL_GOD: return "the Demi God of Demons";
case LVL_GRGOD: return "the God of Demons";
default: return "the Demon";
}
break;
case CLASS_HALF_BREED:
switch (level) {
case 1: return "the Half-Breed";
case LVL_IMMORT: return "the Immortal Half-Breed";
case LVL_GOD: return "the Demi God of Half-Breed";
case LVL_GRGOD: return "the God of Half-Breed";
default: return "the Half-Breed";
}
break;
case CLASS_saiyan:
switch(level) {
case 1: return "the Saiyan";
case LVL_IMMORT: return "the Immortal Saiyan";
case LVL_GOD: return "the Saiyan";
case LVL_GRGOD: return "the God of Saiyans";
default: return "the Saiyan";
}
break;
}
/* KAIO title for classes which do not have titles defined */
return "the Classless";
}
/*
* KAIO titles of female characters.
*/
const char *title_female(int chclass, int level)
{
if (level <= 0 || level > LVL_IMPL)
return "the Woman";
if (level == LVL_IMPL)
return "the Implementress";
switch (chclass) {
case CLASS_Human:
switch (level) {
case 1: return "the Human";
case LVL_IMMORT: return "the Immortal Human";
case LVL_GOD: return "the Human";
case LVL_GRGOD: return "the Goddess of Humans";
default: return "the Human";
}
break;
case CLASS_MAJIN:
switch (level) {
case 1: return "the Majin";
case LVL_IMMORT: return "the Immortal Majin";
case LVL_GOD: return "the Human";
case LVL_GRGOD: return "the Goddess of Majin";
default: return "the Majin";
}
break;
case CLASS_ANDROID:
switch (level) {
case 1: return "the Android";
case LVL_IMMORT: return "the Immortal Android";
case LVL_GOD: return "the Android";
case LVL_GRGOD: return "the Goddess of Android";
default: return "the Android";
}
break;
case CLASS_DEMON:
switch (level) {
case 1: return "the Demon";
case LVL_IMMORT: return "the Immortal Demon";
case LVL_GOD: return "the Demon";
case LVL_GRGOD: return "the Goddess of Demon";
default: return "the Demon";
}
break;
case CLASS_HALF_BREED:
switch (level) {
case 1: return "the Half-Breed";
case LVL_IMMORT: return "the Immortal Half-Breed";
case LVL_GOD: return "the Android";
case LVL_GRGOD: return "the Goddess of Half-Breeds";
default: return "the Half=breed";
}
break;
case CLASS_Namek:
switch (level) {
case 1: return "the Namek";
case LVL_IMMORT: return "the Immortal Namek";
case LVL_GOD: return "the Namek";
case LVL_GRGOD: return "the Goddess of Nameks";
default: return "the Namek";
}
break;
case CLASS_icer:
switch (level) {
case 1: return "the Icer";
case LVL_IMMORT: return "the Immortal Icer";
case LVL_GOD: return "the Demi Goddess of Icers";
case LVL_GRGOD: return "the Goddess of Icers";
default: return "the icer";
}
break;
case CLASS_saiyan:
switch(level) {
case 1: return "the Saiyan";
case LVL_IMMORT: return "the Immortal Saiyan";
case LVL_GOD: return "the Queen of Saiyan";
case LVL_GRGOD: return "the Goddess of Saiyans";
default: return "the saiyan";
}
break;
}
/* KAIO title for classes which do not have titles defined */
return "the Classless";
}