/***************************************************************************
 *  Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,        *
 *  Michael Seifert, Hans Henrik Strfeldt, Tom Madsen, and Katja Nyboe.    *
 *                                                                         *
 *  Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael          *
 *  Chastain, Michael Quan, and Mitchell Tse.                              *
 *                                                                         *
 *  In order to use any part of this Merc Diku Mud, you must comply with   *
 *  both the original Diku license in 'license.doc' as well the Merc       *
 *  license in 'license.txt'.  In particular, you may not remove either of *
 *  these copyright notices.                                               *
 *                                                                         *
 *  Much time and thought has gone into this software and you are          *
 *  benefitting.  We hope that you share your changes too.  What goes      *
 *  around, comes around.                                                  *
 **************************************************************************/

/***************************************************************************
 *   ROM 2.4 is copyright 1993-1998 Russ Taylor                            *
 *   ROM has been brought to you by the ROM consortium                     *
 *       Russ Taylor (rtaylor@hypercube.org)                               *
 *       Gabrielle Taylor (gtaylor@hypercube.org)                          *
 *       Brian Moore (zump@rom.org)                                        *
 *   By using this code, you have agreed to follow the terms of the        *
 *   ROM license, in the file Rom24/doc/rom.license                        *
 **************************************************************************/

// DragonBall Arena 2 has been written by:
//   Matt Brown (Antor), arkaine@sympatico.ca, 2000-2002
// Please follow all previous licenses. Enjoy!

#include <sys/types.h>
#include <stdio.h>
#include <time.h>
#include "merc.h"
#include "interp.h"


/* item type list */
const struct item_type item_table[] = {
    {ITEM_LIGHT, "light"},
    {ITEM_SCROLL, "scroll"},
    {ITEM_WAND, "wand"},
    {ITEM_STAFF, "staff"},
    {ITEM_WEAPON, "weapon"},
    {ITEM_TREASURE, "treasure"},
    {ITEM_ARMOR, "armor"},
    {ITEM_POTION, "potion"},
    {ITEM_CLOTHING, "clothing"},
    {ITEM_FURNITURE, "furniture"},
    {ITEM_TRASH, "trash"},
    {ITEM_CONTAINER, "container"},
    {ITEM_DRINK_CON, "drink"},
    {ITEM_KEY, "key"},
    {ITEM_FOOD, "food"},
    {ITEM_MONEY, "money"},
    {ITEM_BOAT, "boat"},
    {ITEM_CORPSE_NPC, "npc_corpse"},
    {ITEM_CORPSE_PC, "pc_corpse"},
    {ITEM_FOUNTAIN, "fountain"},
    {ITEM_PILL, "pill"},
    {ITEM_PROTECT, "protect"},
    {ITEM_MAP, "map"},
    {ITEM_PORTAL, "portal"},
    {ITEM_WARP_STONE, "warp_stone"},
    {ITEM_ROOM_KEY, "room_key"},
    {ITEM_GEM, "gem"},
    {ITEM_JEWELRY, "jewelry"},
    {0, NULL}
};


/* weapon selection table */
const struct weapon_type weapon_table[] = {
    {"sword", OBJ_VNUM_SCHOOL_SWORD, WEAPON_SWORD, &gsn_sword},
    {"mace", OBJ_VNUM_SCHOOL_MACE, WEAPON_MACE, &gsn_mace},
    {"dagger", OBJ_VNUM_SCHOOL_DAGGER, WEAPON_DAGGER, &gsn_dagger},
    {"axe", OBJ_VNUM_SCHOOL_AXE, WEAPON_AXE, &gsn_axe},
    {"staff", OBJ_VNUM_SCHOOL_STAFF, WEAPON_SPEAR, &gsn_spear},
    {"flail", OBJ_VNUM_SCHOOL_FLAIL, WEAPON_FLAIL, &gsn_flail},
    {"whip", OBJ_VNUM_SCHOOL_WHIP, WEAPON_WHIP, &gsn_whip},
    {"polearm", OBJ_VNUM_SCHOOL_POLEARM, WEAPON_POLEARM, &gsn_polearm},
    {NULL, 0, 0, NULL}
};



/* wiznet table and prototype for future flag setting */
const struct wiznet_type wiznet_table[] = {
    {"on", WIZ_ON, IM},
    {"prefix", WIZ_PREFIX, IM},
    {"ticks", WIZ_TICKS, IM},
    {"logins", WIZ_LOGINS, IM},
    {"sites", WIZ_SITES, CODER},
    {"links", WIZ_LINKS, IM},
    {"newbies", WIZ_NEWBIE, IM},
    {"spam", WIZ_SPAM, IM},
    {"deaths", WIZ_DEATHS, IM},
    {"resets", WIZ_RESETS, HEADBUILDER},
    {"memcheck", WIZ_MEMCHECK, CODER},
	{"mobdeaths", WIZ_MOBDEATHS, IM},
    {"flags", WIZ_FLAGS, IM},
    {"penalties", WIZ_PENALTIES, IM},
    {"saccing", WIZ_SACCING, IM},
    {"levels", WIZ_LEVELS, IM},
    {"load", WIZ_LOAD, HEADBUILDER},
    {"restore", WIZ_RESTORE, HEADBUILDER},
    {"snoops", WIZ_SNOOPS, HEADCODER},
    {"switches", WIZ_SWITCHES, HEADCODER},
    {"secure", WIZ_SECURE, HEADCODER},
    {NULL, 0, 0}
};

/* attack table  -- not very organized :( */
const struct attack_type attack_table[MAX_DAMAGE_MESSAGE] = {
    {"none",      "hit",           -1},          /*  0 */
    {"slice",     "slice",         DAM_SLASH},
    {"stab",      "stab",          DAM_PIERCE},
    {"slash",     "slash",         DAM_SLASH},
    {"whip",      "whip",          DAM_SLASH},
    {"claw",      "claw",          DAM_SLASH},   /*  5 */
    {"blast",     "blast",         DAM_BASH},
    {"pound",     "pound",         DAM_BASH},
    {"crush",     "crush",         DAM_BASH},
    {"grep",      "grep",          DAM_SLASH},
    {"bite",      "bite",          DAM_PIERCE},  /* 10 */
    {"pierce",    "pierce",        DAM_PIERCE},
    {"suction",   "suction",       DAM_BASH},
    {"beating",   "beating",       DAM_BASH},
    {"digestion", "digestion",     DAM_ACID},
    {"charge",    "charge",        DAM_BASH},    /* 15 */
    {"slap",      "slap",          DAM_BASH},
    {"punch",     "punch",         DAM_BASH},
    {"wrath",     "wrath",         DAM_ENERGY},
    {"magic",     "magic",         DAM_ENERGY},
    {"divine",    "divine power",  DAM_HOLY},    /* 20 */
    {"cleave",    "cleave",        DAM_SLASH},
    {"scratch",   "scratch",       DAM_PIERCE},
    {"peck",      "peck",          DAM_PIERCE},
    {"peckb",     "peck",          DAM_BASH},
    {"chop",      "chop",          DAM_SLASH},   /* 25 */
    {"sting",     "sting",         DAM_PIERCE},
    {"smash",     "smash",         DAM_BASH},
    {"shbite",    "shocking bite", DAM_LIGHTNING},
    {"flbite",    "flaming bite",  DAM_FIRE},
    {"frbite",    "freezing bite", DAM_COLD},    /* 30 */
    {"acbite",    "acidic bite",   DAM_ACID},
    {"chomp",     "chomp",         DAM_PIERCE},
    {"drain",     "life drain",    DAM_NEGATIVE},
    {"thrust",    "thrust",        DAM_PIERCE},
    {"slime",     "slime",         DAM_ACID},
    {"shock",     "shock",         DAM_LIGHTNING},
    {"thwack",    "thwack",        DAM_BASH},
    {"flame",     "flame",         DAM_FIRE},
    {"chill",     "chill",         DAM_COLD},
    {NULL,        NULL,            0}
};

/* race table */
const struct race_type race_table[] = {
/*
    {
    name,        pc_race?,
    act bits,    aff_by bits,    off bits,
    imm,        res,        vuln,
    form,        parts 
    },
*/
//    {"unique", FALSE, 0, 0, 0, 0, 0, 0, 0, 0, FALSE},

    {
     "human", TRUE,
     0, 0, 0,
     0, 0, 0,
     A | H | M | V, A | B | C | D | E | F | G | H | I | J | K, TRUE},

    {
     "saiya-jin", TRUE,
     0, 0, 0,
     0, 0, 0,
     A | H | M | V, A | B | C | D | E | F | G | H | I | J | K, TRUE},
     
    {
     "namek", TRUE,
     0, 0, 0,
     0, 0, 0,
     A | H | M | V, A | B | C | D | E | F | G | H | I | J | K, TRUE},
    
    {
     "half-breed", TRUE,
     0, 0, 0,
     0, 0, 0,
     A | H | M | V, A | B | C | D | E | F | G | H | I | J | K, TRUE},

    {
     "icer", TRUE,
     0, 0, 0,
     0, 0, 0,
     A | H | M | V, A | B | C | D | E | F | G | H | I | J | K, TRUE},
     
    {
     "android", TRUE,
     0, 0, 0,
     0, 0, 0,
     A | H | M | V, A | B | C | D | E | F | G | H | I | J | K, TRUE},

    {
     "bio-android", TRUE,
     0, 0, 0,
     0, 0, 0,
     A | H | M | V, A | B | C | D | E | F | G | H | I | J | K, TRUE},

    {
     "alien", TRUE,
     0, 0, 0,
     0, 0, 0,
     A | H | M | V, A | B | C | D | E | F | G | H | I | J | K, TRUE},

    /*
    {
     "majin", TRUE,
     0, 0, 0,
     0, 0, 0,
     A | H | M | V, A | B | C | D | E | F | G | H | I | J | K, FALSE},
     */
               
    {
     "elf", FALSE,
     0, AFF_INFRARED, 0,
     0, RES_CHARM, VULN_IRON,
     A | H | M | V, A | B | C | D | E | F | G | H | I | J | K, FALSE},

    {
     "dwarf", FALSE,
     0, AFF_INFRARED, 0,
     0, RES_POISON | RES_DISEASE, VULN_DROWNING,
     A | H | M | V, A | B | C | D | E | F | G | H | I | J | K, FALSE},

    {
     "giant", FALSE,
     0, 0, 0,
     0, RES_FIRE | RES_COLD, VULN_MENTAL | VULN_LIGHTNING,
     A | H | M | V, A | B | C | D | E | F | G | H | I | J | K, FALSE},

    {
     "bat", FALSE,
     0, AFF_FLYING | AFF_DARK_VISION, OFF_DODGE | OFF_FAST,
     0, 0, VULN_LIGHT,
     A | G | V, A | C | D | E | F | H | J | K | P, FALSE},

    {
     "bear", FALSE,
     0, 0, OFF_CRUSH | OFF_DISARM | OFF_BERSERK,
     0, RES_BASH | RES_COLD, 0,
     A | G | V, A | B | C | D | E | F | H | J | K | U | V, FALSE},

    {
     "cat", FALSE,
     0, AFF_DARK_VISION, OFF_FAST | OFF_DODGE,
     0, 0, 0,
     A | G | V, A | C | D | E | F | H | J | K | Q | U | V, FALSE},

    {
     "centipede", FALSE,
     0, AFF_DARK_VISION, 0,
     0, RES_PIERCE | RES_COLD, VULN_BASH,
     A | B | G | O, A | C | K, FALSE},

    {
     "dog", FALSE,
     0, 0, OFF_FAST,
     0, 0, 0,
     A | G | V, A | C | D | E | F | H | J | K | U | V, FALSE},

    {
     "doll", FALSE,
     0, 0, 0,
     IMM_COLD | IMM_POISON | IMM_HOLY | IMM_NEGATIVE | IMM_MENTAL |
     IMM_DISEASE | IMM_DROWNING, RES_BASH | RES_LIGHT,
     VULN_SLASH | VULN_FIRE | VULN_ACID | VULN_LIGHTNING | VULN_ENERGY,
     E | J | M | cc, A | B | C | G | H | K, FALSE},

    {"dragon", FALSE,
     0, AFF_INFRARED | AFF_FLYING, 0,
     0, RES_FIRE | RES_BASH | RES_CHARM,
     VULN_PIERCE | VULN_COLD,
     A | H | Z, A | C | D | E | F | G | H | I | J | K | P | Q | U | V | X, FALSE},

    {
     "fido", FALSE,
     0, 0, OFF_DODGE | ASSIST_RACE,
     0, 0, VULN_MAGIC,
     A | B | G | V, A | C | D | E | F | H | J | K | Q | V, FALSE},

    {
     "fox", FALSE,
     0, AFF_DARK_VISION, OFF_FAST | OFF_DODGE,
     0, 0, 0,
     A | G | V, A | C | D | E | F | H | J | K | Q | V, FALSE},

    {
     "goblin", FALSE,
     0, AFF_INFRARED, 0,
     0, RES_DISEASE, VULN_MAGIC,
     A | H | M | V, A | B | C | D | E | F | G | H | I | J | K, FALSE},

    {
     "hobgoblin", FALSE,
     0, AFF_INFRARED, 0,
     0, RES_DISEASE | RES_POISON, 0,
     A | H | M | V, A | B | C | D | E | F | G | H | I | J | K | Y, FALSE},

    {
     "kobold", FALSE,
     0, AFF_INFRARED, 0,
     0, RES_POISON, VULN_MAGIC,
     A | B | H | M | V, A | B | C | D | E | F | G | H | I | J | K | Q, FALSE},

    {
     "lizard", FALSE,
     0, 0, 0,
     0, RES_POISON, VULN_COLD,
     A | G | X | cc, A | C | D | E | F | H | K | Q | V, FALSE},

    {
     "modron", FALSE,
     0, AFF_INFRARED, ASSIST_RACE | ASSIST_ALIGN,
     IMM_CHARM | IMM_DISEASE | IMM_MENTAL | IMM_HOLY | IMM_NEGATIVE,
     RES_FIRE | RES_COLD | RES_ACID, 0,
     H, A | B | C | G | H | J | K, FALSE},

    {
     "orc", FALSE,
     0, AFF_INFRARED, 0,
     0, RES_DISEASE, VULN_LIGHT,
     A | H | M | V, A | B | C | D | E | F | G | H | I | J | K, FALSE},

    {
     "pig", FALSE,
     0, 0, 0,
     0, 0, 0,
     A | G | V, A | C | D | E | F | H | J | K, FALSE},

    {
     "rabbit", FALSE,
     0, 0, OFF_DODGE | OFF_FAST,
     0, 0, 0,
     A | G | V, A | C | D | E | F | H | J | K, FALSE},

    {
     "school monster", FALSE,
     ACT_NOALIGN, 0, 0,
     IMM_CHARM | IMM_SUMMON, 0, VULN_MAGIC,
     A | M | V, A | B | C | D | E | F | H | J | K | Q | U, FALSE},

    {
     "snake", FALSE,
     0, 0, 0,
     0, RES_POISON, VULN_COLD,
     A | G | X | Y | cc, A | D | E | F | K | L | Q | V | X, FALSE},

    {
     "song bird", FALSE,
     0, AFF_FLYING, OFF_FAST | OFF_DODGE,
     0, 0, 0,
     A | G | W, A | C | D | E | F | H | K | P, FALSE},

    {
     "troll", FALSE,
     0, AFF_REGENERATION | AFF_INFRARED | AFF_DETECT_HIDDEN,
     OFF_BERSERK,
     0, RES_CHARM | RES_BASH, VULN_FIRE | VULN_ACID,
     A | B | H | M | V, A | B | C | D | E | F | G | H | I | J | K | U | V, FALSE},

    {
     "water fowl", FALSE,
     0, AFF_SWIM | AFF_FLYING, 0,
     0, RES_DROWNING, 0,
     A | G | W, A | C | D | E | F | H | K | P, FALSE},

    {
     "wolf", FALSE,
     0, AFF_DARK_VISION, OFF_FAST | OFF_DODGE,
     0, 0, 0,
     A | G | V, A | C | D | E | F | J | K | Q | V, FALSE},

    {
     "wyvern", FALSE,
     0, AFF_FLYING | AFF_DETECT_INVIS | AFF_DETECT_HIDDEN,
     OFF_BASH | OFF_FAST | OFF_DODGE,
     IMM_POISON, 0, VULN_LIGHT,
     A | B | G | Z, A | C | D | E | F | H | J | K | Q | V | X, FALSE},

    {
     "unique", FALSE,
     0, 0, 0,
     0, 0, 0,
     0, 0, FALSE},


    {
     NULL, 0, 0, 0, 0, 0, 0, FALSE}
};

const struct pc_race_type pc_race_table[] = {
/*
    {"null race", "",
     {""}, {1, 1, 1, 1, 1}, {18, 18, 18, 18, 18}, {10,10,10,10,10}, 0},


    {
    "race name",     who name,
    { bonus skills },
    { base stats },        { max stats },  { stat learn bonus, add to 80 },      size
    },
*/
    {
     "human", "Human",
     {""},
     {1, 1, 1, 1, 1}, {180, 180, 180, 180, 180}, {5,5,5,5,5}, SIZE_MEDIUM,
     "The inhabitants of Earth. Decent at anything."
    },

    {
     "saiya-jin", "Saiya-jin",
     {""},
     {1, 1, 1, 1, 1}, {160, 200, 180, 210, 150}, {8,2,2,8,5}, SIZE_MEDIUM,
     "Born fighters, they are strong, but not very intelligent."
    },

    {
     "namek", "Namek",
     {"fast healing", ""},
     {1, 1, 1, 1, 1}, {160, 200, 180, 210, 150}, {6,4,6,4,5}, SIZE_MEDIUM,
     "The green-skinned Nameks possess a strong constitution, and the ability to heal quickly. They are sexless."
    },

    {
     "half-breed", "Half-breed",
     {""},
     {1, 1, 1, 1, 1}, {160, 200, 180, 210, 150}, {7,3,3,7,5}, SIZE_MEDIUM,
     "The offspring of a human and saiya-jin is a half-breed. They are not as strong as saiya-jins,  being more average like humans."
    },

    {
     "icer", "Icer",
     {""},
     {1, 1, 1, 1, 1}, {160, 200, 180, 210, 150}, {7,5,5,3,5}, SIZE_MEDIUM,
     "A terrible, evil race. Strong, but also not dexterous."
    },

    {
     "android", "Android",
     {""},
     {1, 1, 1, 1, 1}, {160, 200, 180, 210, 150}, {4,6,6,4,5}, SIZE_MEDIUM,
     "Robots, possibly built from a person. Though lacking intelligence, they have high strength and constitution."
    },

    {
     "bio-android", "Bio-Android",
     {""},
     {1, 1, 1, 1, 1}, {160, 200, 180, 210, 150}, {3,7,7,3,5}, SIZE_MEDIUM,
     "Similar to robots, but built from the cells of many races. Still lacking intelligence, they are stronger than androids."
    },

    {
     "alien", "Alien",
     {""},
     {1, 1, 1, 1, 1}, {160, 200, 180, 210, 150}, {5,5,5,5,5}, SIZE_MEDIUM,
     "Aliens or mutants are the generic species scattered across the universe. They can do anything at equal competance."
    },

    /*
    {
     "majin", "Majin",
     {""},
     {1, 1, 1, 1, 1}, {160, 200, 180, 210, 150}, {10,10,10,10,10}, SIZE_MEDIUM,
     "filler"
    }
    */
};


char *const stat_table[MAX_STATS] = {
    "strength",
    "intelligence",
    "will power",
    "dexterity",
    "charisma"
};

/*
 * Titles.
 */
char *const title_table[MAX_LEVEL + 1][2] = {
     {"Man", "Woman"},
     {"Player", "Player"},
     {"Hero", "Hero"},
     {"Builder", "Builder"},
	 {"Enforcer", "Enforcer"},
     {"Head Builder", "Head Builder"},
     {"Coder", "Coder"},
	 {"Head Coder", "Head Coder"},
     {"Implementor", "Implementor"}
};

// Names of the transformations
char *const trans_table[MAX_TRANS] = {
     "not transformed",
     "Super Saiya-Jin Level 1",
     "Super Saiya-Jin Level 2",
     "Super Saiya-Jin Level 3",
     "Super Saiya-Jin Level 4",
     "Super Saiya-Jin Level 5",
     "Mystic",
     "Super Human",
     "Hyper Namek",
     "Super Namek",
     "Android Level 1",
     "Android Level 2",
     "Android Level 3",
     "Self-Fused Android",
     "Icer Form 2",
     "Icer Form 3",
     "Icer Form 4",
     "Icer Form 5",
     "Imperfect Bio-Android",
     "Semi-Perfect Bio-Android",
     "Perfect Bio-Android",
     "Ultra-Perfect Bio-Android",
     "Kaioken"
};

// Stances
char *const stance_table[] = {
    "normal",
    "offensive",
    "defensive",
    "kamikaze",
    NULL
};


/*
 * Liquid properties.
 * Used in world.obj.
 */
/* Liquid Affects:
#define COND_DRUNK   0
#define COND_FULL    1
#define COND_THIRST  2
#define COND_HUNGER  3
*/
const struct liq_type liq_table[] = {
/*                                         (drunk)                  (amount      */
/*                                                               drank per use)  */
/*    name			     colour             proof,full,thirst,hunger,ssize, regen*/
    {"water",			"clear",			{  0,	1,	 10,    0,    16,     0}},
    {"beer",			"amber",			{ 12,	1,	  8,    1,    12,     0}},
    {"red wine",		"burgundy",			{ 30,	1,	  8,    1,     5,     0}},
    {"ale",	           	"brown",			{ 15,	1, 	  8,    1,    12,     0}},
    {"dark ale",		"dark",				{ 16,	1, 	  8,    1,    12,     0}},

    {"whisky",			"golden",			{120,	1,	  5,    0,     2,     0}},
    {"lemonade",		"pink",				{  0,	1,	  9,    2,    12,     0}},
    {"firebreather",	"boiling",			{190,	0,	  4,    0,     2,     0}},
    {"local specialty",	"clear",			{151,	1,	  3,    0,     2,     0}},
    {"slime mold juice","green",			{  0,	2,	 -8,    1,     2,     0}},

    {"milk",			"white",			{  0,	2,	  9,    3,    12,     0}},
    {"tea",	            "tan",				{  0,	1,	  8,    0,     6,     0}},
    {"coffee",			"black",			{  0,	1,	  8,    0,     6,     0}},
    {"blood",			"red",				{  0,	2,	 -1,    2,     6,     0}},
    {"salt water",		"clear",			{  0,	1,	 -2,    0,     1,     0}},

    {"coke",			"brown",			{  0,	2,	  9,    2,    12,     0}},
    {"root beer",		"brown",			{  0,	2,	  9,    2,    12,     0}},
    {"elvish wine",		"green",			{ 35,	2,	  8,    1,     5,     0}},
    {"white wine",		"golden",			{ 28,	1,    8,    1,     5,     0}},
    {"champagne",		"golden",			{ 32,	1,	  8,    1,     5,     0}},

    {"mead",			"honey-colored",	{ 34,	2,	  8,    2,    12,     0}},
    {"rose wine",		"pink",				{ 26,	1,	  8,    1,     5,     0}},
    {"benedictine wine","burgundy",			{ 40,	1,	  8,    1,     5,     0}},
    {"vodka",			"clear",			{130,	1,	  5,    0,     2,     0}},
    {"cranberry juice", "red",				{  0,	1,	  9,    2,    12,     0}},

    {"orange juice",	"orange",			{  0,	2,	  9,    3,    12,     0}},
    {"absinthe",		"green",			{200,	1,	  4,    0,     2,     0}},
    {"brandy",			"golden",			{ 80,	1,	  5,    0,     4,     0}},
    {"aquavit",			"clear",			{140,	1,	  5,    0,     2,     0}},
    {"schnapps",		"clear",			{ 90,	1,	  5,    0,     2,     0}},

    {"icewine",			"purple",			{ 50,	2,	  6,    1,     5,     0}},
    {"amontillado",		"burgundy",			{ 35,	2,	  8,    1,     5,     0}},
    {"sherry",			"red",				{ 38,	2,	  7,    1,     5,     0}},
    {"framboise",		"red",				{ 50,	1,	  7,    1,     5,     0}},
    {"rum",			    "amber",			{151,	1,	  4,    0,     2,     0}},

    {"cordial",			"clear",			{100,	1,	  5,    0,     2,     0}},
    {NULL,			    NULL,				{  0,	0,	  0,    0,     0,     0}}
};



/*
 * The skill and spell table.
 * Slot numbers must never be changed as they appear in #OBJECTS sections.
\ */
#define SLOT(n)    n

struct skill_type skill_table[MAX_SKILL] = {

/* combat and weapons skills */

/*struct:
 *	{	"name", &gsn_, skill_fun, command?,
 *		can learn?, can improve?, {"skillpre"}, {skill values}, {str,int,wis,dex,con}, pl_pre, {"race"},
 *		TAR_, POS_, ki, type (SKILL_IMM, SKILL_DELAY, SKILL_CHARGE), wait,
 *		"damage", "off", "obj off", "immediate 1", "imm 2", "delay 1", "delay 2" },
 */
/*
	{	"", &gsn_, NULL, FALSE,
		TRUE, {}, {0}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_FIGHTING, 15, 0, 0,
		"", "!error!", "", "", "",   },
 */
	{	"hand to hand", "", &gsn_hand_to_hand, NULL, FALSE,
		TRUE, TRUE, {}, {0}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_FIGHTING, 12, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

    {	"axe", "", &gsn_axe, NULL, FALSE,
		TRUE, TRUE, {"sword"}, {20}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_FIGHTING, 10, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""   },

	{	"dagger", "", &gsn_dagger, NULL, FALSE,
		TRUE, TRUE, {"hand to hand"}, {30}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_FIGHTING, 10, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""   },

	{	"sword", "", &gsn_sword, NULL, FALSE,
		TRUE, TRUE, {"dagger"}, {20}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_FIGHTING, 12, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""   },

	{	"flail", "", &gsn_flail, NULL, FALSE,
		TRUE, TRUE, {"mace"}, {20}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_FIGHTING, 12, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

	{	"mace", "", &gsn_mace, NULL, FALSE,
		TRUE, TRUE, {"dagger"}, {20}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_FIGHTING, 12, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

    {	"polearm", "", &gsn_polearm, NULL, FALSE,
		TRUE, TRUE, {"spear"}, {20}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_FIGHTING, 12, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

	{	"spear", "", &gsn_spear, NULL, FALSE,
		TRUE, TRUE, {"dagger"}, {20}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_FIGHTING, 12, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

	{	"whip", "", &gsn_whip, NULL, FALSE,
		TRUE, TRUE, {"flail"}, {20}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_FIGHTING, 12, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

	{	"exotic", "", &gsn_exotic, NULL, FALSE,
		TRUE, TRUE, {"whip"}, {20}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_FIGHTING, 12, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""   },

	{	"shield block", "", &gsn_shield_block, NULL, FALSE,
		TRUE, TRUE, {"parry"}, {20}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_FIGHTING, 3, SKILL_NONE, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

	{	"dodge", "", &gsn_dodge, NULL, FALSE,
		TRUE, TRUE, {}, {0}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_FIGHTING, 3, SKILL_NONE, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

	{	"parry", "", &gsn_parry, NULL, FALSE,
		TRUE, TRUE, {"dagger"}, {5}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_FIGHTING, 3, SKILL_NONE, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

	{	"fast healing", "", &gsn_fast_healing, NULL, FALSE,
		TRUE, TRUE, {}, {0}, {35,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_SLEEPING, 1, SKILL_NONE, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

// Not updated:

	{	"meditation", "", &gsn_meditation, NULL, FALSE,
		FALSE, TRUE, {}, {0}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_SLEEPING, 1, SKILL_NONE, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

	{	"berserk", "", &gsn_berserk, NULL, FALSE,
		FALSE, TRUE, {}, {0}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_FIGHTING, 5, SKILL_IMM, 5*PULSE_SECOND,
		"", "You feel your pulse slow down.", "", "", "", "", ""  },

	{	"disarm", "", &gsn_disarm, NULL, FALSE,
		FALSE, TRUE, {}, {0}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_FIGHTING, 5, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

	{	"rescue", "", &gsn_rescue, NULL, FALSE,
		FALSE, TRUE, {}, {0}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_FIGHTING, 1, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },
/* non-combat skills */

	{	"haggle", "", &gsn_haggle, NULL, FALSE,
		FALSE, TRUE, {}, {0}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_RESTING, 1, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

	{	"hide", "", &gsn_hide, NULL, FALSE,
		FALSE, TRUE, {}, {0}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_RESTING, 1, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

	{	"lore", "", &gsn_lore, NULL, FALSE,
		FALSE, TRUE, {}, {0}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_FIGHTING, 1, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

	{	"peek", "", &gsn_peek, NULL, FALSE,
		FALSE, TRUE, {}, {0}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_FIGHTING, 1, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

	{	"pick lock", "", &gsn_pick_lock, NULL, FALSE,
		FALSE, TRUE, {}, {0}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

	{	"sneak", "", &gsn_sneak, NULL, FALSE,
		FALSE, TRUE, {}, {0}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 5*PULSE_SECOND,
		"", "You no longer feel stealthy.", "", "", "", "", ""  },

	{	"steal", "", &gsn_steal, NULL, FALSE,
		FALSE, TRUE, {}, {0}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

	{	"scrolls", "", &gsn_scrolls, NULL, FALSE,
		FALSE, TRUE, {}, {0}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

	{	"staves", "", &gsn_staves, NULL, FALSE,
		FALSE, TRUE, {}, {0}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },


	{	"wands", "", &gsn_wands, NULL, FALSE,
		FALSE, TRUE, {}, {0}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },


	{	"recall", "", &gsn_recall, NULL, FALSE,
		FALSE, FALSE, {}, {0}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

//other new ones:
	{	"perception", "", &gsn_perception, NULL, FALSE,
		FALSE, FALSE, {}, {0}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

    {	"teaching", "", &gsn_teaching, NULL, FALSE,
		TRUE, TRUE, {}, {0}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

	{	"defend", "", &gsn_defend, NULL, FALSE,
		FALSE, FALSE, {}, {0}, {0,0,0,0,0}, 0, {},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

    {	"kamikaze", "", &gsn_kamikaze, NULL, FALSE,
		FALSE, FALSE, {}, {0}, {0,0,0,0,0}, 100000, {},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

    {	"fusion", "", &gsn_fusion, NULL, FALSE,
		FALSE, FALSE, {}, {0}, {0,50,50,0,0}, 0, {},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

    {	"kaioken", "", &gsn_kaioken, NULL, FALSE,
		TRUE, TRUE, {}, {0}, {0,50,50,0,0}, 0, {},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

    {	"fly", "", &gsn_fly, NULL, FALSE,
		TRUE, TRUE, {}, {0}, {0,30,0,0,0}, 0, {},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", "" },

    {	"sense", "", &gsn_sense, NULL, FALSE,
		TRUE, TRUE, {}, {0}, {0,0,30,0,0}, 0, {},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", "" },

    {	"suppress", "", &gsn_suppress, NULL, FALSE,
		TRUE, TRUE, {"sense"}, {25}, {0,0,30,0,0}, 0, {},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 5*PULSE_SECOND,
		"", "!error!", "", "", "", "", "" },

// Transformations:
    {	"super saiyan 1", "", &gsn_ssj1, NULL, FALSE,
		FALSE, FALSE, {}, {0}, {0,0,0,0,0}, 0, {"saiya-jin", "half-breed"},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 0,
		"", "!error!", "", "", "", "", ""  },

    {	"super saiyan 2", "", &gsn_ssj2, NULL, FALSE,
		FALSE, FALSE, {}, {0}, {0,0,0,0,0}, 0, {"saiya-jin", "half-breed"},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 0,
		"", "!error!", "", "", "", "", ""  },

    {	"super saiyan 3", "", &gsn_ssj3, NULL, FALSE,
		FALSE, FALSE, {}, {0}, {0,0,0,0,0}, 0, {"saiya-jin"},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 0,
		"", "!error!", "", "", "", "", ""  },

    {	"super saiyan 4", "", &gsn_ssj4, NULL, FALSE,
		FALSE, FALSE, {}, {0}, {0,0,0,0,0}, 0, {"saiya-jin"},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 0,
		"", "!error!", "", "", "", "", ""  },

    {	"super saiyan 5", "", &gsn_ssj5, NULL, FALSE,
		FALSE, FALSE, {}, {0}, {0,0,0,0,0}, 0, {"saiya-jin"},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 0,
		"", "!error!", "", "", "", "", ""  },

    {	"mystic", "", &gsn_mystic, NULL, FALSE,
		TRUE, FALSE, {}, {0}, {0,0,0,0,0}, 10000, {"half-breed", "human"},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 0,
		"", "!error!", "", "", "", "", ""  },

    {	"super human", "", &gsn_superh, NULL, FALSE,
		TRUE, FALSE, {}, {0}, {0,0,0,0,0}, 2000, {"human"},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 0,
		"", "!error!", "", "", "", "", ""  },

    {	"first form", "", &gsn_form1, NULL, FALSE,
		TRUE, FALSE, {}, {0}, {0,0,0,0,0}, 1000, {"icer"},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 0,
		"", "!error!", "", "", "", "", ""  },

    {	"second form", "", &gsn_form2, NULL, FALSE,
		TRUE, FALSE, {}, {0}, {0,0,0,0,0}, 2500, {"icer"},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 0,
		"", "!error!", "", "", "", "", ""  },

    {	"third form", "", &gsn_form3, NULL, FALSE,
		TRUE, FALSE, {}, {0}, {0,0,0,0,0}, 5000, {"icer"},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 0,
		"", "!error!", "", "", "", "", ""  },

    {	"fourth form", "", &gsn_form4, NULL, FALSE,
		TRUE, FALSE, {}, {0}, {0,0,0,0,0}, 7500, {"icer"},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 0,
		"", "!error!", "", "", "", "", ""  },

    {	"fifth form", "", &gsn_form5, NULL, FALSE,
		TRUE, FALSE, {}, {0}, {0,0,0,0,0}, 10000, {"icer"},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 0,
		"", "!error!", "", "", "", "", ""  },

    {	"hyper namek", "", &gsn_hypern, NULL, FALSE,
		TRUE, FALSE, {}, {0}, {0,0,0,0,0}, 3000, {"namek"},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 0,
		"", "!error!", "", "", "", "", ""  },

    {	"super namek", "", &gsn_supern, NULL, FALSE,
		TRUE, FALSE, {}, {0}, {0,0,0,0,0}, 7500, {"namek"},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 0,
		"", "!error!", "", "", "", "", ""  },

    {	"imperfect", "", &gsn_imperfect, NULL, FALSE,
		FALSE, FALSE, {}, {0}, {0,0,0,0,0}, 0, {"bio-android"},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 0,
		"", "!error!", "", "", "", "", ""  },

    {	"semi-perfect", "", &gsn_semiperfect, NULL, FALSE,
		FALSE, FALSE, {}, {0}, {0,0,0,0,0}, 0, {"bio-android"},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 0,
		"", "!error!", "", "", "", "", ""  },

    {	"perfect", "", &gsn_perfect, NULL, FALSE,
		FALSE, FALSE, {}, {0}, {0,0,0,0,0}, 0, {"bio-android"},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 0,
		"", "!error!", "", "", "", "", ""  },

    {	"ultra perfect", "", &gsn_ultraperfect, NULL, FALSE,
		FALSE, FALSE, {}, {0}, {0,0,0,0,0}, 0, {"bio-android"},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 0,
		"", "!error!", "", "", "", "", ""  },

    {	"upgrade 1", "", &gsn_upgrade1, NULL, FALSE,
		FALSE, FALSE, {}, {0}, {0,0,0,0,0}, 0, {"android"},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 0,
		"", "!error!", "", "", "", "", ""  },
        
    {	"upgrade 2", "", &gsn_upgrade2, NULL, FALSE,
		FALSE, FALSE, {}, {0}, {0,0,0,0,0}, 0, {"android"},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 0,
		"", "!error!", "", "", "", "", ""  },
        
    {	"upgrade 3", "", &gsn_upgrade3, NULL, FALSE,
		FALSE, FALSE, {}, {0}, {0,0,0,0,0}, 0, {"android"},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 0,
		"", "!error!", "", "", "", "", ""  },

    {	"self-fuse", "", &gsn_selffuse, NULL, FALSE,
		TRUE, FALSE, {}, {0}, {0,0,0,0,0}, 15000, {"android"},
		TAR_IGNORE, POS_STANDING, 1, SKILL_IMM, 0,
		"", "!error!", "", "", "", "", ""  },

// Updated:
	{	"bash", "", &gsn_bash, skill_bash, TRUE,
        TRUE, TRUE, {"kick"}, {35}, {0,0,0,0,0}, 0, {},
		TAR_CHAR_OFFENSIVE, POS_FIGHTING, 24, SKILL_IMM, 5*PULSE_SECOND,
		"bash", "!error!", "", "", "", "", ""  },

	{	"kick", "", &gsn_kick, skill_kick, TRUE,
		TRUE, TRUE, {}, {0}, {0,0,0,0,0}, 0, {},
		TAR_CHAR_OFFENSIVE, POS_FIGHTING, 15, SKILL_IMM, 5*PULSE_SECOND,
		"kick", "!error!", "", "", "", "", ""  },

	{	"sweep", "", &gsn_sweep, skill_sweep, TRUE,
		TRUE, TRUE, {"kick"}, {25}, {0,0,0,0,0}, 0, {},
		TAR_CHAR_OFFENSIVE, POS_FIGHTING, 12, SKILL_IMM, 3*PULSE_SECOND,
		"sweep", "!error!", "", "", "", "", ""  },

	{	"throat shot", "", &gsn_throat_shot, skill_throat_shot, TRUE,
		TRUE, TRUE, {"hand to hand"}, {10}, {0,0,0,0,0}, 0, {},
		TAR_CHAR_OFFENSIVE, POS_FIGHTING, 12, SKILL_IMM, 2*PULSE_SECOND,
		"throat shot", "!error!", "", "", "", "", ""  },

	{	"knee", "", &gsn_knee, skill_knee, TRUE,
		TRUE, TRUE, {"kick"}, {15}, {0,0,0,20,0}, 0, {},
		TAR_CHAR_OFFENSIVE, POS_FIGHTING, 12, SKILL_IMM, 5*PULSE_SECOND,
		"knee", "!error!", "", "", "", "", ""  },

	{	"elbow", "", &gsn_elbow, skill_elbow, TRUE,
		TRUE, TRUE, {"hand to hand"}, {25}, {0,0,0,0,0}, 0, {},
		TAR_CHAR_OFFENSIVE, POS_FIGHTING, 9, SKILL_IMM, 2*PULSE_SECOND,
		"elbow", "!error!", "", "", "", "", ""  },

	{	"eye gouge", "", &gsn_eye_gouge, skill_eye_gouge, TRUE,
		TRUE, TRUE, {"throat shot"}, {20}, {0,0,0,0,0}, 0, {},
		TAR_CHAR_OFFENSIVE, POS_FIGHTING, 10, SKILL_IMM, 5*PULSE_SECOND,
		"eye gouge", "Your eyes no longer hurt, and you can see!", "", "", "", "", ""  },

	{	"heart shot", "", &gsn_heart_shot, skill_heart_shot, TRUE,
		TRUE, TRUE, {"eye gouge"}, {25}, {0,0,0,0,0}, 0, {},
		TAR_CHAR_OFFENSIVE, POS_FIGHTING, 24, SKILL_IMM, 5*PULSE_SECOND,
		"heart shot", "!error!", "", "", "", "", ""  },

	{	"hyperpunch", "", &gsn_hyperpunch, skill_hyperpunch, TRUE,
		TRUE, TRUE, {"hand to hand"}, {60}, {0,0,0,0,0}, 0, {},
		TAR_AREA_OFF, POS_FIGHTING, 24, SKILL_IMM, 10*PULSE_SECOND,
		"", "!error!", "", "", "", "", ""  },

/* DBZ abilites */

// HACK:
// Kamehameha must be the first ki skill in the table, and all the ki skills
// must come at the end of the table! Search for FIRST_KI_SN for references.
// Basically, FIRST_KI_SN lets us determine which skills
// are ki skills or not (every sn >= FIRST_KI_SN is a ki skill) (FIRST_KI_SN = gsn_kamehameha)
	{	"kamehameha", "", &gsn_kamehameha, skill_kamehameha, TRUE,
		TRUE, TRUE, {"energy beam"}, {30}, {0,0,0,0,0}, 0, {},
		TAR_HYBRID100, POS_FIGHTING, 3, SKILL_CHARGE, 10*PULSE_SECOND,
		"blast", "!error!", "", "You place your palms together and begin to create a ball of energy.", "$n places $s palms together and begins to create a ball of energy.", "You release a massive energy beam!", "$n releases a massive energy beam!" },

    {   "focus",       "", &gsn_focus, skill_focus, TRUE,
        TRUE, TRUE, {}, {0}, {0,0,0,0,0}, 0, {},
        TAR_CHAR_OFFENSIVE, POS_FIGHTING, 12, SKILL_DELAY, 4*PULSE_SECOND,
        "focused ki", "!error!", "", "You focus an amount of ki in a clenched fist.",  "$n focuses an amount of ki in a clenched fist.", "You open your fist and let your ki escape!", "$n opens $s fist and lets $s ki escape!" },

    {	"energy beam", "beam", &gsn_energy_beam, skill_energy_beam, TRUE,
		TRUE, TRUE, {"focus"}, {10}, {0,0,0,0,0}, 0, {},
		TAR_CHAR_OFFENSIVE, POS_FIGHTING, 3, SKILL_CHARGE, 6*PULSE_SECOND,
		"energy beam", "!error!", "", "A point of light begins to grow between your palms.", "A point of light begins grow between $n's palms.", "You release a beam of energy!", "$n releases a beam of energy!" },

	{	"energy slash", "energyslash", &gsn_energy_slash, skill_energy_slash, TRUE,
		TRUE, TRUE, {"energy beam", "sword"}, {20, 10}, {0,10,0,0,0}, 0, {},
		TAR_CHAR_OFFENSIVE, POS_FIGHTING, 3, SKILL_CHARGE, 6*PULSE_SECOND,
		"energy slash", "!error!", "", "You begin to charge your weapon.", "$n begins to charge $s weapon.", "You unleash your weapon!", "$n unleashes $s weapon!" },

	{	"final flash", "", &gsn_finalflash, skill_finalflash, TRUE,
		TRUE, TRUE, {"kamehameha"}, {25}, {0,0,0,0,0}, 0, {},
        TAR_HYBRID100, POS_FIGHTING, 3, SKILL_CHARGE, 10*PULSE_SECOND,
		"final flash", "!error!", "", "You stretch your arms out and build up energy in either palm.", "$n stretches $s arms out and builds up energy in either palm.", "With an amazing flash, you throw your arms forward and release!", "With an amazing flash, $n throws $s arms forward and releases!" },

	{	"eye beam", "eyebeam", &gsn_eyebeam, skill_eyebeam, TRUE,
		TRUE, TRUE, {"energy beam"}, {10}, {0,0,0,0,0}, 0, {},
		TAR_CHAR_OFFENSIVE, POS_FIGHTING, 3, SKILL_CHARGE, 10*PULSE_SECOND,
		"eye beam", "!error!", "", "You stare at your target.", "$n begins to stare at $s target.", "A beam erupts from your eyes!", "A beam erupts from $n's eyes!" },

	{	"mouth beam", "", &gsn_mouthbeam, skill_mouthbeam, TRUE,
		TRUE, TRUE, {"eye beam"}, {15}, {0,0,0,0,0}, 0, {},
		TAR_CHAR_OFFENSIVE, POS_FIGHTING, 3, SKILL_CHARGE, 10*PULSE_SECOND,
		"mouth beam", "!error!", "", "Your mouth slowly opens.", "$n's mouth slowly opens.", "A beam erupts from your mouth!", "A beam erupts from $n's mouth!"},

	{	"finger beam", "", &gsn_fingerbeam, skill_fingerbeam, TRUE,
		TRUE, TRUE, {"mouth beam"}, {25}, {0,0,0,0,0}, 0, {},
		TAR_CHAR_OFFENSIVE, POS_FIGHTING, 3, SKILL_CHARGE, 20*PULSE_SECOND,
		"finger beam", "!error!", "", "You point at your target.", "$n points at $s target.", "A beam erupts from your finger!", "A beam erupts from $n's finger!" },

	{	"special beam cannon", "sbc", &gsn_specialbeam, skill_specialbeam, TRUE,
		TRUE, TRUE, {"energy beam"}, {15}, {0,0,0,0,0}, 0, {},
		TAR_CHAR_OFFENSIVE, POS_FIGHTING, 3, SKILL_CHARGE, 10*PULSE_SECOND,
		"special beam", "!error!", "", "You concentrate and point your fingers at your target.", "$n concentrates and points $s fingers at $s target.", "A yellow beam, rotating around a thin ray, ignites from your fingers!", "A green beam, rotating around a thin ray, ignites from $n's fingers!" },

	{	"masenko", "", &gsn_masenko, skill_masenko, TRUE,
		TRUE, TRUE, {"speical beam cannon"}, {30}, {0,0,0,0,0}, 0, {},
		TAR_HYBRID100, POS_FIGHTING, 3, SKILL_CHARGE, 10*PULSE_SECOND,
		"energy ball", "!error!", "", "With your hands behind your head, you begin to weave a ball of energy into existence.", "With $s hands behind $s head, $n begins to weave a ball of energy into existence.", "You throw your ball of energy forward, sending it exploding in a giant splash!", "$n throws $s ball of energy forward, sending it exploding in a giant splash!" },

	{	"energy ball", "ball", &gsn_energy_ball, skill_energy_ball, TRUE,
		TRUE, TRUE, {"focus"}, {25}, {0,0,0,0,0}, 0, {},
		TAR_CHAR_OFFENSIVE, POS_FIGHTING, 3, SKILL_CHARGE, 6*PULSE_SECOND,
		"energy ball", "!error!", "", "Placing your palms together, you begin to generate a small ball of energy.", "Placing $s palms together, $n begin to generate a small ball of energy.", "You throw a small ball of energy!", "$n throws a small ball of energy!" },

	{	"solar flare", "", &gsn_solarflare, skill_solarflare, TRUE,
		TRUE, TRUE, {"energy ball", "energy beam"}, {10,10}, {0,0,0,0,0}, 0, {},
		TAR_AREA_OFF, POS_FIGHTING, 3, SKILL_CHARGE, 10*PULSE_SECOND,
		"flash", "The blinding light resides and you can once again see.", "", "You create a bright light.", "$n creates a bright light.", "A blinding light erupts from you!", "A blinding light erupts from $n!" },

	{	"spirit bomb", "", &gsn_spirit_bomb, skill_spirit_bomb, TRUE,
		TRUE, TRUE, {"energy ball"}, {20}, {0,0,0,0,0}, 0, {},
		TAR_AREA_OFF, POS_FIGHTING, 1, SKILL_CHARGE, 120*PULSE_SECOND,
		"spirit bomb", "!error!", "", "You begin to charge an enormous ball of energy.", "$n begins to charge an enormous ball of energy.", "You release a massive ball of energy!", "$n relases a massive ball of energy!" },

	{	"death ball", "", &gsn_death_ball, skill_death_ball, TRUE,
		TRUE, TRUE, {"finger beam", "spirit bomb"}, {5,10}, {0,0,0,0,0}, 0, {},
		TAR_AREA_OFF, POS_FIGHTING, 1, SKILL_CHARGE, 120*PULSE_SECOND,
		"death ball", "!error!", "", "You point your finger out, creating a swirling red ball of energy at the tip.", "$n points $s finger out, creating a swirling red ball of energy at the tip.", "With a flick of the finger, you throw your planet-sized ball of coalescing, red energy!", "With a flick of the finger, $n throws $s planet-sized ball of coalescing, red energy!" },

	{	"power bomb", "powerbomb", &gsn_power_bomb, skill_power_bomb, TRUE,
		TRUE, TRUE, {"death ball"}, {25}, {0,0,0,0,0}, 0, {},
		TAR_AREA_OFF, POS_FIGHTING, 2, SKILL_CHARGE, 40*PULSE_SECOND,
		"power bomb", "!error!", "", "You begin to charge an enormous ball of energy.", "$n begins to charge an enormous ball of energy.", "You release a massive ball of energy!", "$n relases a massive ball of energy!" },

	{	"scattershot", "", &gsn_scattershot, skill_scattershot, TRUE,
		TRUE, TRUE, {"energy ball"}, {10}, {0,0,0,0,0}, 0, {},
		TAR_CHAR_OFFENSIVE, POS_FIGHTING, 4, SKILL_DELAY, 8*PULSE_SECOND,
		"ball", "!error!", "", "You concentrate and point your fingers at your target.", "$n concentrates and points $s fingers at $s target.", "You release a stream of energy balls!", "$n releases a stream of energy balls!" },

	{	"destructo disk", "", &gsn_destructo_disk, skill_destructo_disk, TRUE,
		TRUE, TRUE, {"scattershot"}, {10}, {0,0,0,0,0}, 0, {},
		TAR_CHAR_OFFENSIVE, POS_FIGHTING, 3, SKILL_CHARGE, 10*PULSE_SECOND,
		"destructo disk", "!error!", "", "Placing your hands at your sides, energy begins to build in your palms.", "Placing $s hands at $s sides, energy begins to build in $n's palms.", "You launch your destructo disk spinning towards your foe!", "$n launches $s destructo disk spinning towards $s foe!" },

	{	"timestop", "", &gsn_timestop, skill_timestop, TRUE,
		FALSE, TRUE, {}, {0}, {0,0,0,0,0}, 0, {},
		TAR_AREA_OFF, POS_FIGHTING, 2, SKILL_CHARGE, 20*PULSE_SECOND,
		"!error!", "!error!", "", "You concentrate.", "$n concentrates.", "You finish and time seems to  s l ow   d  o  w   n.", "$n finishes and time seems to  s l ow   d  o  w   n." },

	{	"heal", "", &gsn_heal, skill_heal, TRUE,
		FALSE, TRUE, {}, {}, {0,0,0,0,0}, 0, {},
		TAR_CHAR_DEFENSIVE, POS_FIGHTING, 4, SKILL_CHARGE, 10*PULSE_SECOND,
		"!error!", "!error!", "", "You begin to utter some words.", "$n begins to utters some words.", "You finish your littany!", "$n finishes $s littany!" },

	{	"revive", "", &gsn_revive, skill_revive, TRUE,
		FALSE, TRUE, {}, {}, {0,0,0,0,0}, 0, {},
		TAR_CHAR_DEFENSIVE, POS_FIGHTING, 4, SKILL_DELAY, 25*PULSE_SECOND,
		"!error!", "!error!", "", "You begin to shout some words.", "$n begins to shout some words.", "You finish your shout!", "$n finishes $s shout!" },

	{	"regeneration", "", &gsn_regen, skill_regen, TRUE,
		FALSE, TRUE, {}, {}, {0,0,0,0,0}, 0, {},
		TAR_CHAR_DEFENSIVE, POS_FIGHTING, 4, SKILL_DELAY, 40*PULSE_SECOND,
		"!error!", "Your stamina suddenly weakens.", "", "You begin to utter some words.", "$n begins to utters some words.", "You finish your littany!", "$n finishes $s littany!" }
};