/**************************************************************
 * FFTacticsMUD : objects.cpp                                 *
 **************************************************************
 * (c) 2002 Damien Dailidenas (Trenton). All rights reserved. *
 **************************************************************/

#include "main.h"
#include <strstream>
#include <iomanip>
#include "mysql/mysql.h"

const struct obj_type obj_table[] = {
  {},

  /****************************************************************
   * KNIVES  2-swords                                             *
   * EQUIPPED BY: Squire, Chemist, Thief, Mediator, Ninja, Dancer *
   ****************************************************************/
  /**************************************************************************************************************************************************************************************
   * name,             obj_type,   type,       cost,  HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add,                  always, cancel, act, elem,      absorb, half, weak, str, imm, range *
   **************************************************************************************************************************************************************************************/
  { "Air Knife",       OBJ_WEAPON, TYPE_KNIFE, 8000,  0,  0,  0,   10,  5,   0,   0,  0,  0,  0,                    {},     {},     0,   ELEM_WIND, 0,      0,    0,    0,   0,   1 },
  { "Assassin Dagger", OBJ_WEAPON, TYPE_KNIFE, 5000,  0,  0,  0,   7,   5,   0,   0,  0,  0,  status_deathsentence, {},     {},     0,   0,         0,      0,    0,    0,   0,   1 },
  { "Blind Knife",     OBJ_WEAPON, TYPE_KNIFE, 800,   0,  0,  0,   4,   5,   0,   0,  0,  0,  status_darkness,      {},     {},     0,   0,         0,      0,    0,    0,   0,   1 },
  { "Dagger",	       OBJ_WEAPON, TYPE_KNIFE, 100,   0,  0,  0,   3,   5,   0,   0,  0,  0,  0,                    {},     {},     0,   0,         0,      0,    0,    0,   0,   1 },
  { "Mage Masher",     OBJ_WEAPON, TYPE_KNIFE, 1500,  0,  0,  0,   4,   5,   0,   0,  0,  0,  status_silence,       {},     {},     0,   0,         0,      0,    0,    0,   0,   1 },
  { "Main Gauche",     OBJ_WEAPON, TYPE_KNIFE, 3000,  0,  0,  0,   6,   40,  0,   0,  0,  0,  0,	            {},     {},     0,   0,         0,      0,    0,    0,   0,   1 },
  { "Mythril Knife",   OBJ_WEAPON, TYPE_KNIFE, 500,   0,  0,  0,   4,   5,   0,   0,  0,  0,  0,	            {},     {},     0,   0,         0,      0,    0,    0,   0,   1 },
  { "Orichalcum",      OBJ_WEAPON, TYPE_KNIFE, 4000,  0,  0,  0,   7,   5,   0,   0,  0,  0,  0,	            {},     {},     0,   0,         0,      0,    0,    0,   0,   1 },
  { "Platina Dagger",  OBJ_WEAPON, TYPE_KNIFE, 1800,  0,  0,  0,   5,  10,   0,   0,  0,  0,  0,	            {},     {},     0,   0,         0,      0,    0,    0,   0,   1 },
  { "Zorlin Shape",    OBJ_WEAPON, TYPE_KNIFE, 12000, 0,  0,  0,   12,  10,  0,   0,  0,  0,  status_sleep,         {},     {},     0,   0,         0,      0,    0,    0,   0,   1 },

  /**************************
   * NINJA SWORDS  2-swords *
   * EQUIPPED BY: Ninja	    *
   **************************/
  /******************************************************************************************************************************************************************************
   * name,          obj_type,   type,             cost,  HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add,            always, cancel, act, elem, absorb, half, weak, str, imm, range *
   ******************************************************************************************************************************************************************************/
  { "Hidden Knife", OBJ_WEAPON, TYPE_NINJA_SWORD, 3000,  0,  0,  0,   8,   5,   0,   0,  0,  0,  0,              {},     {},     0,   0,    0,      0,    0,    0,   0,   1 },
  { "Iga Knife",    OBJ_WEAPON, TYPE_NINJA_SWORD, 10,    0,  0,  0,   15,  10,  0,   0,  0,  0,  0,              {},     {},     0,   0,    0,      0,    0,    0,   0,   1 },
  { "Koga Knife",   OBJ_WEAPON, TYPE_NINJA_SWORD, 10,    0,  0,  0,   15,  5,   0,   0,  0,  0,  0,              {},     {},     0,   0,    0,      0,    0,    0,   0,   1 },
  { "Ninja Edge",   OBJ_WEAPON, TYPE_NINJA_SWORD, 10000, 0,  0,  0,   12,  5,   0,   0,  0,  0,  0,              {},     {},     0,   0,    0,      0,    0,    0,   0,   1 },
  { "Ninja Knife",  OBJ_WEAPON, TYPE_NINJA_SWORD, 5000,  0,  0,  0,   9,   5,   0,   0,  0,  0,  0,              {},     {},     0,   0,    0,      0,    0,    0,   0,   1 },
  { "Short Edge",   OBJ_WEAPON, TYPE_NINJA_SWORD, 7000,  0,  0,  0,   10,  5,   0,   0,  0,  0,  0,              {},     {},     0,   0,    0,      0,    0,    0,   0,   1 },
  { "Spell Edge",   OBJ_WEAPON, TYPE_NINJA_SWORD, 16000, 0,  0,  0,   13,  5,   0,   0,  0,  0,  status_dontact, {},     {},     0,   0,    0,      0,    0,    0,   0,   1 },

  /******************************************
   * SWORDS  2-swords  2 hands              *
   * EQUIPPED BY: Squire, Knight, Geomancer *
   ******************************************/
  /*****************************************************************************************************************************************************************************************************
   * name,            obj_type,   type,       cost,  HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add,             always, cancel, act,          elem,           absorb, half, weak, str, imm, range, drain *
   *****************************************************************************************************************************************************************************************************/
  { "Ancient Sword",  OBJ_WEAPON, TYPE_SWORD, 5000,  0,  0,  0,   9,   5,   0,   0,  0,  0,  status_dontmove, {},     {},     0,            0,              0,      0,    0,    0,   0,   1 },
  { "Blood Sword",    OBJ_WEAPON, TYPE_SWORD, 2500,  0,  0,  0,   8,   5,   0,   0,  0,  0,  0,               {},     {},     do_bloodsuck, 0,              0,      0,    0,    0,   0,   1,     true },
  { "Broad Sword",    OBJ_WEAPON, TYPE_SWORD, 200,   0,  0,  0,   4,   5,   0,   0,  0,  0,  0,               {},     {},     0,            0,              0,      0,    0,    0,   0,   1 },
  { "Coral Sword",    OBJ_WEAPON, TYPE_SWORD, 3300,  0,  0,  0,   8,   5,   0,   0,  0,  0,  0,               {},     {},     0,            ELEM_LIGHTNING, 0,      0,    0,    0,   0,   1 },
  { "Diamond Sword",  OBJ_WEAPON, TYPE_SWORD, 8000,  0,  0,  0,   10,  5,   0,   0,  0,  0,  0,               {},     {},     0,            0,              0,      0,    0,    0,   0,   1 },
  { "Ice Brand",      OBJ_WEAPON, TYPE_SWORD, 14000, 0,  0,  0,   13,  10,  0,   0,  0,  0,  0,               {},     {},     do_ice2,      ELEM_ICE,       0,      0,    0,    0,   0,   1 },
  { "Iron Sword",     OBJ_WEAPON, TYPE_SWORD, 900,   0,  0,  0,   6,   5,   0,   0,  0,  0,  0,               {},     {},     0,            0,              0,      0,    0,    0,   0,   1 },
  { "Long Sword",     OBJ_WEAPON, TYPE_SWORD, 500,   0,  0,  0,   5,   10,  0,   0,  0,  0,  0,               {},     {},     0,            0,              0,      0,    0,    0,   0,   1 },
  { "Materia Blade",  OBJ_WEAPON, TYPE_SWORD, 10,    0,  0,  0,   10,  10,  0,   0,  0,  0,  0,               {},     {},     0,            0,              0,      0,    0,    0,   0,   1 },
  { "Mythril Sword",  OBJ_WEAPON, TYPE_SWORD, 1600,  0,  0,  0,   7,   8,   0,   0,  0,  0,  0,               {},     {},     0,            0,              0,      0,    0,    0,   0,   1 },
  { "Nagrarock",      OBJ_WEAPON, TYPE_SWORD, 10,    0,  0,  0,   1,   5,   0,   0,  0,  0,  status_frog,     {},     {},     0,            0,              0,      0,    0,    0,   0,   1 },
  { "Platinum Sword", OBJ_WEAPON, TYPE_SWORD, 11000, 0,  0,  0,   12,  10,  0,   0,  0,  0,  0,               {},     {},     0,            0,              0,      0,    0,    0,   0,   1 },
  { "Rune Sword",     OBJ_WEAPON, TYPE_SWORD, 20000, 0,  0,  2,   14,  15,  0,   0,  0,  0,  0,               {},     {},     0,            0,              0,      0,    0,    0,   0,   1 },
  { "Sleep Sword",    OBJ_WEAPON, TYPE_SWORD, 5000,  0,  0,  0,   9,   5,   0,   0,  0,  0,  status_sleep,    {},     {},     0,            0,              0,      0,    0,    0,   0,   1 },
  
  /************************************
   * KNIGHT SWORDS  2-swords  2 hands *
   * EQUIPPED BY: Knight              *
   ************************************/
  /*********************************************************************************************************************************************************************************************
   * name,            obj_type,   type,              cost,  HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add,            always,             cancel, act, elem, absorb, half, weak, str, imm, range *
   *********************************************************************************************************************************************************************************************/
  { "Chaos Blade",    OBJ_WEAPON, TYPE_KNIGHT_SWORD, 10,    0,  0,  0,   40,  20,  0,   0,  0,  0,  status_petrify, { status_regen },   {},     0,   0,    0,      0,    0,    0,   0,   1 },
  { "Defender",	      OBJ_WEAPON, TYPE_KNIGHT_SWORD, 40000, 0,  0,  0,   16,  60,  0,   0,  0,  0,  0,              {},                 {},     0,   0,    0,      0,    0,    0,   0,   1 },
  { "Ragnarok",	      OBJ_WEAPON, TYPE_KNIGHT_SWORD, 10,    0,  0,  0,   24,  20,  0,   0,  0,  0,  0,              { status_shell },   {},     0,   0,    0,      0,    0,    0,   0,   1 },
  { "Save the Queen", OBJ_WEAPON, TYPE_KNIGHT_SWORD, 10,    0,  0,  0,   18,  30,  0,   0,  0,  0,  0,              { status_protect }, {},     0,   0,    0,      0,    0,    0,   0,   1 },
  
  /******************************
   * KATANAS  2-swords  2 hands *
   * EQUIPPED BY: Samurai       *
   ******************************/
  /****************************************************************************************************************************************************************
   * name,            obj_type,   type,        cost,  HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm, range *
   ****************************************************************************************************************************************************************/
  { "Asura Knife",    OBJ_WEAPON, TYPE_KATANA, 1600,  0,  0,  0,   7,   15,  0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0,   1 },
  { "Bizen Boat",     OBJ_WEAPON, TYPE_KATANA, 5000,  0,  0,  0,   9,   15,  0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0,   1 },
  { "Chirijiraden",   OBJ_WEAPON, TYPE_KATANA, 10,    0,  0,  0,   25,  15,  0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0,   1 },
  { "Heaven's Cloud", OBJ_WEAPON, TYPE_KATANA, 8000,  0,  0,  0,   11,  15,  0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0,   1 },
  { "Kikuichimoji",   OBJ_WEAPON, TYPE_KATANA, 22000, 0,  0,  0,   15,  15,  0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0,   1 },
  { "Kiyomori",	      OBJ_WEAPON, TYPE_KATANA, 10000, 0,  0,  0,   12,  15,  0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0,   1 },
  { "Koutetsu Knife", OBJ_WEAPON, TYPE_KATANA, 3000,  0,  0,  0,   8,   15,  0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0,   1 },
  { "Masamune",	      OBJ_WEAPON, TYPE_KATANA, 10,    0,  0,  0,   18,  15,  0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0,   1 },
  { "Muramasa",	      OBJ_WEAPON, TYPE_KATANA, 15000, 0,  0,  0,   14,  15,  0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0,   1 },
  { "Murasame",	      OBJ_WEAPON, TYPE_KATANA, 7000,  0,  0,  0,   10,  15,  0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0,   1 },
  { "Sasuke Knife",   OBJ_WEAPON, TYPE_KATANA, 0,     0,  0,  0,   14,  15,  0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0,   1 },
  { "Koga Knife",     OBJ_WEAPON, TYPE_KATANA, 0,     0,  0,  0,   15,  5,   0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0,   1 },
  
  /**********************************
   * AXES  2 hands only             *
   * EQUIPPED BY: Squire, Geomancer *
   **********************************/
  /*****************************************************************************************************************************************************************
   * name,        obj_type,   type,     cost,  HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add,         always, cancel, act, elem, absorb, half, weak, str, imm, range *
   *****************************************************************************************************************************************************************/
  { "Battle Axe", OBJ_WEAPON, TYPE_AXE, 1500,  0,  0,  0,   9,   0,   0,   0,  0,  0,  0,           {},     {},     0,   0,    0,      0,    0,    0,   0,   1 },
  { "Giant Axe",  OBJ_WEAPON, TYPE_AXE, 4000,  0,  0,  0,   12,  0,   0,   0,  0,  0,  0,           {},     {},     0,   0,    0,      0,    0,    0,   0,   1 },
  { "Slasher",	  OBJ_WEAPON, TYPE_AXE, 12000, 0,  0,  0,   16,  0,   0,   0,  0,  0,  status_slow, {},     {},     0,   0,    0,      0,    0,    0,   0,   1 },
  
  /*****************************************
   * RODS  2-swords  2 hands               *
   * EQUIPPED BY: Wizard, Summoner, Oracle *
   *****************************************/
  /***********************************************************************************************************************************************************************************
   * name,          obj_type,   type,     cost,  HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add,           always,           cancel, act,     elem, absorb, half, weak, str, imm, range *
   ***********************************************************************************************************************************************************************************/
  { "Dragon's Rod", OBJ_WEAPON, TYPE_ROD, 12000, 0,  0,  0,   5,   20,  0,   0,  0,  0,  0,             {},               {},     0,       0,    0,      0,    0,    0,   0,   1 },
  { "Faith Rod",    OBJ_WEAPON, TYPE_ROD, 10,    0,  0,  0,   5,   20,  0,   0,  0,  0,  status_faith,  { status_faith }, {},     0,       0,    0,      0,    0,    0,   0,   1 },
  { "Flame Rod",    OBJ_WEAPON, TYPE_ROD, 400,   0,  0,  0,   3,   20,  0,   0,  0,  0,  0,             {},               {},     do_fire, 0,    0,      0,    0,    0,   0,   1 },
  { "Ice Rod",      OBJ_WEAPON, TYPE_ROD, 400,   0,  0,  0,   3,   20,  0,   0,  0,  0,  0,             {},               {},     do_ice,  0,    0,      0,    0,    0,   0,   1 },
  { "Poison Rod",   OBJ_WEAPON, TYPE_ROD, 500,   0,  0,  0,   3,   20,  0,   0,  0,  0,  status_poison, {},               {},     0,       0,    0,      0,    0,    0,   0,   1 },
  { "Rod",          OBJ_WEAPON, TYPE_ROD, 200,   0,  0,  0,   3,   20,  0,   0,  0,  0,  0,             {},               {},     0,       0,    0,      0,    0,    0,   0,   1 },
  { "Thunder Rod",  OBJ_WEAPON, TYPE_ROD, 400,   0,  0,  0,   3,   20,  0,   0,  0,  0,  0,             {},               {},     do_bolt, 0,    0,      0,    0,    0,   0,   1 },
  { "Wizard Rod",   OBJ_WEAPON, TYPE_ROD, 8000,  0,  0,  2,   4,   20,  0,   0,  0,  0,  0,             {},               {},     0,       0,    0,      0,    0,    0,   0,   1 },

  /****************************************************
   * STAFFS 2-swords 2 hands                          *
   * EQUIPPED BY: Priest, Time Mage, Summoner, Oracle *
   ****************************************************/
  /********************************************************************************************************************************************************************************
   * name,           obj_type,   type,       cost,  HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel,                   act, elem, absorb, half, weak, str, imm, range *
   ********************************************************************************************************************************************************************************/
  { "Gold Staff",    OBJ_WEAPON, TYPE_STAFF, 7000,  0,  0,  0,   6,   15,  0,   0,  0,  0,  0,   {},     {},                       0,   0,    0,      0,    0,    0,   0,   1 },
  { "Healing Staff", OBJ_WEAPON, TYPE_STAFF, 4000,  0,  0,  0,   4,   15,  0,   0,  0,  0,  0,   {},     {},                       0,   0,    0,      0,    0,    0,   0,   1 },
  { "Oak Staff",     OBJ_WEAPON, TYPE_STAFF, 120,   0,  0,  0,   3,   15,  0,   0,  0,  0,  0,   {},     {},                       0,   0,    0,      0,    0,    0,   0,   1 },
  { "Rainbow Staff", OBJ_WEAPON, TYPE_STAFF, 2200,  0,  0,  0,   5,   15,  0,   0,  0,  0,  0,   {},     {},                       0,   0,    0,      0,    0,    0,   0,   1 },
  { "White Staff",   OBJ_WEAPON, TYPE_STAFF, 800,   0,  0,  0,   3,   15,  0,   0,  0,  0,  0,   {},     { status_deathsentence }, 0,   0,    0,      0,    0,    0,   0,   1 },
  { "Wizard Staff",  OBJ_WEAPON, TYPE_STAFF, 4000,  0,  0,  1,   4,   15,  0,   0,  0,  0,  0,   {},     {},                       0,   0,    0,      0,    0,    0,   0,   1 },

  /******************************
   * FLAILS 2-swords 2 hands    *
   * EQUIPPED BY: Squire, Ninja *
   ******************************/
  /************************************************************************************************************************************************************************
   * name,           obj_type,   type,       cost,  HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act,      elem,      absorb, half, weak, str, imm, range *
   ************************************************************************************************************************************************************************/
  {" Flail",         OBJ_WEAPON, TYPE_FLAIL, 1200,  0,  0,  0,   9,   0,   0,   0,  0,  0,  0,   {},     {},     0,        0,         0,      0,    0,    0,   0,   1 },
  { "Flame Whip",    OBJ_WEAPON, TYPE_FLAIL, 4000,  0,  0,  0,   11,  0,   0,   0,  0,  0,  0,   {},     {},     do_fire2, ELEM_FIRE, 0,      0,    0,    0,   0,   1 },
  { "Morning Star",  OBJ_WEAPON, TYPE_FLAIL, 9000,  0,  0,  0,   16,  0,   0,   0,  0,  0,  0,   {},     {},     0,        0,         0,      0,    0,    0,   0,   1 },
  { "Scorpion Tail", OBJ_WEAPON, TYPE_FLAIL, 40000, 0,  0,  0,   23,  0,   0,   0,  0,  0,  0,   {},     {},     0,        0,         0,      0,    0,    0,   0,   1 },

  /**********************************
   * GUNS                           *
   * EQUIPPED BY: Chemist, Mediator *
   **********************************/
  /**********************************************************************************************************************************************************
   * name,         obj_type,   type,      cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm, range *
   **********************************************************************************************************************************************************/
  { "Blast Gun",   OBJ_WEAPON, TYPE_GUNM, 10,   0,  0,  0,   22,  5,   0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0,   8 },
  { "Blaze Gun",   OBJ_WEAPON, TYPE_GUNM, 10,   0,  0,  0,   20,  5,   0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0,   8 },
  { "Glacier Gun", OBJ_WEAPON, TYPE_GUNM, 10,   0,  0,  0,   21,  5,   0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0,   8 },
  { "Mythril Gun", OBJ_WEAPON, TYPE_GUN,  1500, 0,  0,  0,    8,  5,   0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0,   8 },
  { "Romanda Gun", OBJ_WEAPON, TYPE_GUN,  5000, 0,  0,  0,    6,  5,   0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0,   8 },
  { "Stone Gun",   OBJ_WEAPON, TYPE_GUN,  10,   0,  0,  0,    8,  5,   0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0,   8 },

  /***********************
   * CROSSBOWS           *
   * EQUIPPED BY: Archer *
   ***********************/
  /****************************************************************************************************************************************************************************
   * name,          obj_type,   type,          cost,  HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add,             always, cancel, act, elem, absorb, half, weak, str, imm, range *
   ****************************************************************************************************************************************************************************/
  { "Bow Gun",      OBJ_WEAPON, TYPE_CROSSBOW, 400,   0,  0,  0,   3,   5,   0,   0,  0,  0,  0,               {},     {},     0,   0,    0,      0,    0,    0,   0,   4 },
  { "Cross Bow",    OBJ_WEAPON, TYPE_CROSSBOW, 2000,  0,  0,  0,   4,   5,   0,   0,  0,  0,  0,               {},     {},     0,   0,    0,      0,    0,    0,   0,   4 },
  { "Gastrafitis",  OBJ_WEAPON, TYPE_CROSSBOW, 20000, 0,  0,  0,   10,  5,   0,   0,  0,  0,  0,               {},     {},     0,   0,    0,      0,    0,    0,   0,   4 },
  { "Hunting Bow",  OBJ_WEAPON, TYPE_CROSSBOW, 8000,  0,  0,  0,   6,   5,   0,   0,  0,  0,  0,               {},     {},     0,   0,    0,      0,    0,    0,   0,   4 },
  { "Night Killer", OBJ_WEAPON, TYPE_CROSSBOW, 1500,  0,  0,  0,   3,   5,   0,   0,  0,  0,  status_darkness, {},     {},     0,   0,    0,      0,    0,    0,   0,   4 },
  { "Poison Bow",   OBJ_WEAPON, TYPE_CROSSBOW, 4000,  0,  0,  0,   4,   5,   0,   0,  0,  0,  status_poison,   {},     {},     0,   0,    0,      0,    0,    0,   0,   4 },

  /***********************
   * BOWS 2 hands only   *
   * EQUIPPED BY: Archer *
   ***********************/
  /***************************************************************************************************************************************************************************
   * name,           obj_type,   type,     cost,  HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act,      elem,           absorb, half, weak, str, imm, range *
   ***************************************************************************************************************************************************************************/
  { "Ice Bow",       OBJ_WEAPON, TYPE_BOW, 2000,  0,  0,  0,   5,   0,   0,   0,  0,  0,  0,   {},     {},     0,        ELEM_ICE,       0,      0,    0,    0,   0,   5 },
  { "Lightning Bow", OBJ_WEAPON, TYPE_BOW, 3000,  0,  0,  0,   6,   0,   0,   0,  0,  0,  0,   {},     {},     do_bolt2, ELEM_LIGHTNING, 0,      0,    0,    0,   0,   5 },
  { "Long Bow",      OBJ_WEAPON, TYPE_BOW, 800,   0,  0,  0,   4,   0,   0,   0,  0,  0,  0,   {},     {},     0,        0,              0,      0,    0,    0,   0,   5 },
  { "Mythril Bow",   OBJ_WEAPON, TYPE_BOW, 5000,  0,  0,  0,   7,   0,   0,   0,  0,  0,  0,   {},     {},     0,        0,              0,      0,    0,    0,   0,   5 },
  { "Perseus Bow",   OBJ_WEAPON, TYPE_BOW, 10,    0,  0,  0,   16,  0,   0,   0,  0,  0,  0,   {},     {},     0,        0,              0,      0,    0,    0,   0,   5 },
  { "Silver Bow",    OBJ_WEAPON, TYPE_BOW, 1500,  0,  0,  0,   5,   0,   0,   0,  0,  0,  0,   {},     {},     0,        0,              0,      0,    0,    0,   0,   5 },
  { "Ultimus Bow",   OBJ_WEAPON, TYPE_BOW, 22000, 0,  0,  0,   10,  0,   0,   0,  0,  0,  0,   {},     {},     0,        0,              0,      0,    0,    0,   0,   5 },
  { "Windslash Bow", OBJ_WEAPON, TYPE_BOW, 8000,  0,  0,  0,   8,   0,   0,   0,  0,  0,  0,   {},     {},     0,        ELEM_WIND,      0,      0,    0,    0,   0,   5 },
  { "Yoichi Bow",    OBJ_WEAPON, TYPE_BOW, 10,    0,  0,  0,   12,  0,   0,   0,  0,  0,  0,   {},     {},     0,        0,              0,      0,    0,    0,   0,   5 },

  /*********************
   * INSTRUMENTS       *
   * EQUIPPED BY: Bard *
   *********************/
  /****************************************************************************************************************************************************************************************
   * name,            obj_type,   type,            cost,  HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add,              always, cancel, act, elem, absorb, half, weak, str, imm, range, drain *
   ****************************************************************************************************************************************************************************************/
  { "Bloody Strings", OBJ_WEAPON, TYPE_INSTRUMENT, 10000, 0,  0,  0,   13,  10,  0,   0,  0,  0,  0,                {},     {},     0,   0,    0,      0,    0,    0,   0,   3,     true },
  { "Fairy Harp",     OBJ_WEAPON, TYPE_INSTRUMENT, 30000, 0,  0,  0,   15,  10,  0,   0,  0,  0,  status_charm,     {},     {},     0,   0,    0,      0,    0,    0,   0,   3 },
  { "Ramia Harp",     OBJ_WEAPON, TYPE_INSTRUMENT, 5000,  0,  0,  0,   10,  10,  0,   0,  0,  0,  status_confusion, {},     {},     0,   0,    0,      0,    0,    0,   0,   3 },

  /***********************************
   * DICTIONARIES                    *
   * EQUIPPED BY: Oracle, Calculator *
   ***********************************/
  /*******************************************************************************************************************************************************************
   * name,           obj_type,   type,            cost,  HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm, range *
   *******************************************************************************************************************************************************************/
  { "Battle Dict",   OBJ_WEAPON, TYPE_DICTIONARY, 3000,  0,  0,  0,   7,   15,  0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0,   3 },
  { "Monster Dict",  OBJ_WEAPON, TYPE_DICTIONARY, 6000,  0,  0,  0,   8,   15,  0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0,   3 },
  { "Papyrus Plate", OBJ_WEAPON, TYPE_DICTIONARY, 3000,  0,  0,  0,   9,   15,  0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0,   3 },
  { "Madelgelm",     OBJ_WEAPON, TYPE_DICTIONARY, 3000,  0,  0,  0,   11,  15,  0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0,   3 },

  /***********************
   * CLOTHS              *
   * EQUIPPED BY: Dancer *
   ***********************/
  /************************************************************************************************************************************************************
   * name,         obj_type,   type,       cost,  HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm, range *
   ************************************************************************************************************************************************************/
  { "Persia",      OBJ_WEAPON, TYPE_CLOTH, 7000,  0,  0,  0,   8,   50,  0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0,   2 },
  { "Cashmere",    OBJ_WEAPON, TYPE_CLOTH, 15000, 0,  0,  0,  10,   50,  0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0,   2 },
  { "Ryozan Silk", OBJ_WEAPON, TYPE_CLOTH, 40000, 0,  0,  0,  15,   50,  0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0,   2 },

  /**********************
   * BAGS               *
   * EQUIPPED BY: Women *
   **********************/
  /***************************************************************************************************************************************************************
   * name,    obj_type,   type,     cost,  HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always,           cancel, act, elem, absorb, half, weak, str, imm, range *
   ***************************************************************************************************************************************************************/
  { "P Bag",  OBJ_WEAPON, TYPE_BAG, 52000, 0,  0,  0,   12,  0,   0,   0,  0,  0,  0,   { status_regen }, {},     0,   0,    0,      0,    0,    0,   0,   1 },
  { "C Bag",  OBJ_WEAPON, TYPE_BAG, 53000, 0,  0,  1,   10,  0,   0,   0,  0,  0,  0,   {},               {},     0,   0,    0,      0,    0,    0,   0,   1 },
  { "H Bag",  OBJ_WEAPON, TYPE_BAG, 58000, 0,  0,  0,   14,  0,   0,   1,  0,  0,  0,   {},               {},     0,   0,    0,      0,    0,    0,   0,   1 },
  { "FS Bag", OBJ_WEAPON, TYPE_BAG, 60000, 0,  0,  0,   20,  0,   0,   0,  0,  0,  0,   {},               {},     0,   0,    0,      0,    0,    0,   0,   1 },

  /**************************************************
   * SHIELDS                                        *
   * EQUIPPED BY: Knight, Archer, Geomancer, Lancer *
   **************************************************/
  /************************************************************************************************************************************************************************************************
   * name,            obj_type,    type,        cost,  HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act,  elem, absorb,    half,            weak,            str,             imm *
   ************************************************************************************************************************************************************************************************/
  { "Aegis Shield",    OBJ_SHIELD, TYPE_SHIELD, 10000, 0,  0,  1,   0,   10,  50,  0,  0,  0,  0,   {},     {},     0,    0,    0,         0,               0,               0,               0 },
  { "Bronze Shield",   OBJ_SHIELD, TYPE_SHIELD, 1200,  0,  0,  0,   0,   16,  0,   0,  0,  0,  0,   {},     {},     0,    0,    0,         0,               0,               0,               0 },
  { "Buckler",         OBJ_SHIELD, TYPE_SHIELD, 700,   0,  0,  0,   0,   13,  3,   0,  0,  0,  0,   {},     {},     0,    0,    0,         0,               0,               0,               0 },
  { "Crystal Shield",  OBJ_SHIELD, TYPE_SHIELD, 21000, 0,  0,  0,   0,   40,  15,  0,  0,  0,  0,   {},     {},     0,    0,    0,         0,               0,               0,               0 },
  { "Diamond Shield",  OBJ_SHIELD, TYPE_SHIELD, 12000, 0,  0,  0,   0,   34,  15,  0,  0,  0,  0,   {},     {},     0,    0,    0,         0,               0,               0,               0 },
  { "Escutcheon",      OBJ_SHIELD, TYPE_SHIELD, 400,   0,  0,  0,   0,   10,  3,   0,  0,  0,  0,   {},     {},     0,    0,    0,         0,               0,               0,               0 },
  { "Flame Shield",    OBJ_SHIELD, TYPE_SHIELD, 6500,  0,  0,  0,   0,   31,  0,   0,  0,  0,  0,   {},     {},     0,    0,    ELEM_FIRE, ELEM_ICE,        ELEM_WATER,      0,               0 },
  { "Genji Shield",    OBJ_SHIELD, TYPE_SHIELD, 10,    0,  0,  0,   0,   43,  0,   0,  0,  0,  0,   {},     {},     0,    0,    0,         0,               0,               0,               0 },
  { "Gold Shield",     OBJ_SHIELD, TYPE_SHIELD, 3500,  0,  0,  0,   0,   25,  0,   0,  0,  0,  0,   {},     {},     0,    0,    0,         0,               0,               0,               0 },
  { "Ice Shield",      OBJ_SHIELD, TYPE_SHIELD, 6000,  0,  0,  0,   0,   28,  0,   0,  0,  0,  0,   {},     {},     0,    0,    ELEM_ICE,  ELEM_FIRE,       ELEM_LIGHTNING,  0,               0 },
  { "Kaiser Plate",    OBJ_SHIELD, TYPE_SHIELD, 10,    0,  0,  0,   0,   46,  20,  0,  0,  0,  0,   {},     {},     0,    0,    0,         0,               0,               ELEM_FIRE |
                                                                                                                                                                             ELEM_LIGHTNING |
                                                                                                                                                                             ELEM_ICE,        0 },
  { "Mythril Shield",  OBJ_SHIELD, TYPE_SHIELD, 2500,  0,  0,  0,   0,   22,  5,   0,  0,  0,  0,   {},     {},     0,    0,    0,         0,               0,               0,               0 },
  { "Platina Shield",  OBJ_SHIELD, TYPE_SHIELD, 16000, 0,  0,  0,   0,   37,  10,  0,  0,  0,  0,   {},     {},     0,    0,    0,         0,               0,               0,               0 },
  { "Round Shield",    OBJ_SHIELD, TYPE_SHIELD, 1600,  0,  0,  0,   0,   19,  0,   0,  0,  0,  0,   {},     {},     0,    0,    0,         0,               0,               0,               0 },
  { "Venetian Shield", OBJ_SHIELD, TYPE_SHIELD, 10,    0,  0,  0,   0,   50,  25,  0,  0,  0,  0,   {},     {},     0,    0,    0,         ELEM_FIRE | 
                                                                                                                                           ELEM_LIGHTNING | 
                                                                                                                                           ELEM_ICE,        0,               0,               0 },

  /****************************************
   * HELMETS                              *
   * EQUIPPED BY: Knight, Lancer, Samurai *
   ****************************************/
  /************************************************************************************************************************************************************************************
   * name,            obj_type, type,        cost,  HP,  MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel,                            act,  elem, absorb, half, weak, str, imm *
   ************************************************************************************************************************************************************************************/
  { "Barbuta",        OBJ_HEAD, TYPE_HELMET, 1500,  40,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},                                0,    0,    0,      0,    0,    0,   0 },
  { "Bronze Helmet",  OBJ_HEAD, TYPE_HELMET, 500,   20,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},                                0,    0,    0,      0,    0,    0,   0 },
  { "Circlet",        OBJ_HEAD, TYPE_HELMET, 10000, 100, 0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},                                0,    0,    0,      0,    0,    0,   0 },
  { "Cross Helmet",   OBJ_HEAD, TYPE_HELMET, 4000,  70,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},                                0,    0,    0,      0,    0,    0,   0 },
  { "Crystal Helmet", OBJ_HEAD, TYPE_HELMET, 14000, 120, 0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},                                0,    0,    0,      0,    0,    0,   0 },
  { "Diamond Helmet", OBJ_HEAD, TYPE_HELMET, 6000,  80,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},                                0,    0,    0,      0,    0,    0,   0 },
  { "Genji Helmet",   OBJ_HEAD, TYPE_HELMET, 10,    130, 0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},                                0,    0,    0,      0,    0,    0,   0 },
  { "Gold Helmet",    OBJ_HEAD, TYPE_HELMET, 2800,  60,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},                                0,    0,    0,      0,    0,    0,   0 },
  { "Grand Helmet",   OBJ_HEAD, TYPE_HELMET, 10,    150, 0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     { status_darkness, status_sleep }, 0,    0,    0,      0,    0,    0,   0 },
  { "Iron Helmet",    OBJ_HEAD, TYPE_HELMET, 1000,  30,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},                                0,    0,    0,      0,    0,    0,   0 },
  { "Leather Helmet", OBJ_HEAD, TYPE_HELMET, 200,   10,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},                                0,    0,    0,      0,    0,    0,   0 },
  { "Mythril Helmet", OBJ_HEAD, TYPE_HELMET, 2100,  50,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},                                0,    0,    0,      0,    0,    0,   0 },
  { "Platina Helmet", OBJ_HEAD, TYPE_HELMET, 8000,  90,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},                                0,    0,    0,      0,    0,    0,   0 },

  /**************************************************************************************************************************************************
   * HATS                                                                                                                                           *
   * EQUIPPED BY: Squire, Chemist, Archer, Priest, Wizard, Time Mage, Summoner, Thief, Mediator, Oracle, Geomancer, Ninja, Calculator, Bard, Dancer *
   **************************************************************************************************************************************************/
  /***********************************************************************************************************************************************************************************
   * name,            obj_type, type,     cost,  HP,  MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel,                              act,  elem, absorb, half, weak, str, imm *
   ***********************************************************************************************************************************************************************************/
  { "Black Hood",     OBJ_HEAD, TYPE_HAT, 7000,  72,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},                                  0,    0,    0,      0,    0,    0,   0 },
  { "Feather Hat",    OBJ_HEAD, TYPE_HAT, 350,   16,  5,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},                                  0,    0,    0,      0,    0,    0,   0 },
  { "Flash Hat",      OBJ_HEAD, TYPE_HAT, 16000, 88,  15, 1,   0,   0,   0,   1,  0,  0,  0,   {},     {},                                  0,    0,    0,      0,    0,    0,   0 },
  { "Golden Hairpin", OBJ_HEAD, TYPE_HAT, 12000, 80,  50, 0,   0,   0,   0,   0,  0,  0,  0,   {},     { status_silence },                  0,    0,    0,      0,    0,    0,   0 },
  { "Green Beret",    OBJ_HEAD, TYPE_HAT, 3000,  48,  0,  0,   0,   0,   0,   1,  0,  0,  0,   {},     {},                                  0,    0,    0,      0,    0,    0,   0 },
  { "Headgear",       OBJ_HEAD, TYPE_HAT, 1200,  32,  0,  0,   1,   0,   0,   0,  0,  0,  0,   {},     {},                                  0,    0,    0,      0,    0,    0,   0 },
  { "Holy Mirter",    OBJ_HEAD, TYPE_HAT, 6000,  64,  20, 1,   0,   0,   0,   0,  0,  0,  0,   {},     {},                                  0,    0,    0,      0,    0,    0,   0 },
  { "Leather Hat",    OBJ_HEAD, TYPE_HAT, 150,   8,   0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},                                  0,    0,    0,      0,    0,    0,   0 },
  { "Red Hood",       OBJ_HEAD, TYPE_HAT, 800,   24,  8,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},                                  0,    0,    0,      0,    0,    0,   0 },
  { "Thief Hat",      OBJ_HEAD, TYPE_HAT, 35000, 100, 0,  0,   0,   0,   0,   2,  0,  0,  0,   {},     { status_dontmove, status_dontact }, 0,    0,    0,      0,    0,    0,   0 },
  { "Triangle Hat",   OBJ_HEAD, TYPE_HAT, 1800,  40,  12, 1,   0,   0,   0,   0,  0,  0,  0,   {},     {},                                  0,    0,    0,      0,    0,    0,   0 },
  { "Twist Headband", OBJ_HEAD, TYPE_HAT, 5000,  56,  0,  0,   2,   0,   0,   0,  0,  0,  0,   {},     {},                                  0,    0,    0,      0,    0,    0,   0 },

  /******************
   * WOMEN'S RIBBON *
   ******************/
  /*********************************************************************************************************************************************************************
   * name,      obj_type, type,         cost,  HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel,                   act,  elem, absorb, half, weak, str, imm *
   *********************************************************************************************************************************************************************/
  { "Barette",  OBJ_HEAD, TYPE_WRIBBON, 20000, 20, 0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     { status_dead, 
												      status_petrify,
												      status_invitation,
												      status_confusion,
												      status_bloodsuck,
												      status_berserk,
												      status_stop,
												      status_charm,
												      status_sleep },         0,    0,    0,      0,    0,    0,   0 },
  { "Cachusha", OBJ_HEAD, TYPE_WRIBBON, 20000, 20, 0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     { status_undead,
												      status_darkness,
												      status_silence,
												      status_frog,
												      status_poison,
												      status_slow,
												      status_dontmove,
												      status_dontact,
												      status_deathsentence }, 0,    0,   0,      0,     0,    0,   0 },

  /****************************************
   * ARMOR                                *
   * EQUIPPED BY: Knight, Lancer, Samurai *
   ****************************************/
  /*******************************************************************************************************************************************************************
   * name,           obj_type, type,       cost,  HP,  MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always,             cancel, act,  elem, absorb, half, weak, str, imm *
   *******************************************************************************************************************************************************************/
  { "Bronze Armor",  OBJ_BODY, TYPE_ARMOR, 800,   30,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                 {},     0,    0,    0,      0,    0,    0,   0 },
  { "Carabini Mail", OBJ_BODY, TYPE_ARMOR, 13000, 100, 0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                 {},     0,    0,    0,      0,    0,    0,   0 },
  { "Chain Mail",    OBJ_BODY, TYPE_ARMOR, 1300,  40,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                 {},     0,    0,    0,      0,    0,    0,   0 },
  { "Crystal Mail",  OBJ_BODY, TYPE_ARMOR, 19000, 110, 0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                 {},     0,    0,    0,      0,    0,    0,   0 },
  { "Diamond Armor", OBJ_BODY, TYPE_ARMOR, 6000,  80,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                 {},     0,    0,    0,      0,    0,    0,   0 },
  { "Genji Armor",   OBJ_BODY, TYPE_ARMOR, 10,    150, 0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                 {},     0,    0,    0,      0,    0,    0,   0 },
  { "Gold Armor",    OBJ_BODY, TYPE_ARMOR, 3600,  70,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                 {},     0,    0,    0,      0,    0,    0,   0 },
  { "Leather Armor", OBJ_BODY, TYPE_ARMOR, 200,   10,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                 {},     0,    0,    0,      0,    0,    0,   0 },
  { "Linen Cuirass", OBJ_BODY, TYPE_ARMOR, 600,   20,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                 {},     0,    0,    0,      0,    0,    0,   0 },
  { "Maximillion",   OBJ_BODY, TYPE_ARMOR, 10,    200, 0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                 {},     0,    0,    0,      0,    0,    0,   0 },
  { "Mythril Armor", OBJ_BODY, TYPE_ARMOR, 2000,  50,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                 {},     0,    0,    0,      0,    0,    0,   0 },
  { "Platina Armor", OBJ_BODY, TYPE_ARMOR, 9000,  80,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                 {},     0,    0,    0,      0,    0,    0,   0 },
  { "Plate Mail",    OBJ_BODY, TYPE_ARMOR, 3000,  60,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                 {},     0,    0,    0,      0,    0,    0,   0 },
  { "Reflect Mail",  OBJ_BODY, TYPE_ARMOR, 18000, 130, 0,  0,   0,   0,   0,   0,  0,  0,  0,   { status_reflect }, {},     0,    0,    0,      0,    0,    0,   0 },

  /**************************************************************************************************************************************************
   * CLOTHES                                                                                                                                        *
   * EQUIPPED BY: Squire, Chemist, Archer, Priest, Wizard, Time Mage, Summoner, Thief, Mediator, Oracle, Geomancer, Ninja, Calculator, Bard, Dancer *
   **************************************************************************************************************************************************/
  /**********************************************************************************************************************************************************************************************
   * name,            obj_type, type,         cost,  HP,  MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always,                 cancel,          act,  elem, absorb,     half, weak, str,        imm *
   **********************************************************************************************************************************************************************************************/
  { "Adaman Vest",    OBJ_BODY, TYPE_CLOTHES, 1600,  36,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                     {},              0,    0,    0,          0,    0,    0,          0 },
  { "Black Costume",  OBJ_BODY, TYPE_CLOTHES, 12000, 100, 0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                     { status_stop }, 0,    0,    0,          0,    0,    0,          0 },
  { "Brigadine",      OBJ_BODY, TYPE_CLOTHES, 2500,  50,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                     {},              0,    0,    0,          0,    0,    0,          0 },
  { "Chain Vest",     OBJ_BODY, TYPE_CLOTHES, 900,   24,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                     {},              0,    0,    0,          0,    0,    0,          0 },
  { "Clothes",        OBJ_BODY, TYPE_CLOTHES, 150,   5,   0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                     {},              0,    0,    0,          0,    0,    0,          0 },
  { "Earth Clothes",  OBJ_BODY, TYPE_CLOTHES, 10000, 85,  10, 0,   0,   0,   0,   0,  0,  0,  0,   {},                     {},              0,    0,    ELEM_EARTH, 0,    0,    ELEM_EARTH, 0 },
  { "Judo Outfit",    OBJ_BODY, TYPE_CLOTHES, 4000,  60,  0,  0,   1,   0,   0,   0,  0,  0,  0,   {},                     { status_dead }, 0,    0,    0,          0,    0,    0,          0 },
  { "Leather Outfit", OBJ_BODY, TYPE_CLOTHES, 300,   10,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                     {},              0,    0,    0,          0,    0,    0,          0 },
  { "Leather Vest",   OBJ_BODY, TYPE_CLOTHES, 500,   18,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                     {},              0,    0,    0,          0,    0,    0,          0 },
  { "Mythril Vest",   OBJ_BODY, TYPE_CLOTHES, 1500,  30,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                     {},              0,    0,    0,          0,    0,    0,          0 },
  { "Power Sleve",    OBJ_BODY, TYPE_CLOTHES, 7000,  70,  0,  0,   2,   0,   0,   0,  0,  0,  0,   {},                     {},              0,    0,    0,          0,    0,    0,          0 },
  { "Rubber Costume", OBJ_BODY, TYPE_CLOTHES, 48000, 150, 30, 0,   0,   0,   0,   0,  0,  0,  0,   {},                     {},              0,    0,    0,          0,    0,    0,          ELEM_LIGHTNING },
  { "Secret Clothes", OBJ_BODY, TYPE_CLOTHES, 10,    20,  0,  0,   0,   0,   0,   2,  0,  0,  0,   { status_transparent }, {},              0,    0,    0,          0,    0,    0,          0 },
  { "Wizard Outfit",  OBJ_BODY, TYPE_CLOTHES, 1900,  42,  15, 0,   0,   0,   0,   0,  0,  0,  0,   {},                     {},              0,    0,    0,          0,    0,    0,          0 },

  /**********************************************************************************************************************
   * ROBES                                                                                                              *
   * EQUIPPED BY: Knight, Priest, Wizard, Time Mage, Summoner, Mediator, Oracle, Geomancer, Lancer, Samurai, Calculator *
   **********************************************************************************************************************/
  /*****************************************************************************************************************************************************************************************************
   * name,            obj_type, type,      cost,  HP,  MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always,           cancel,          act,  elem,      absorb, half,           weak, str,             imm *
   *****************************************************************************************************************************************************************************************************/
  { "Black Robe",     OBJ_BODY, TYPE_ROBE, 13000, 60,  30, 0,   0,   0,   0,   0,  0,  0,  0,   {},               {},              0,    0,         0,      0,              0,    ELEM_FIRE | 
                                                                                                                                                                           ELEM_LIGHTNING |
                                                                                                                                                                           ELEM_ICE,        0 },
  { "Chameleon Robe", OBJ_BODY, TYPE_ROBE, 5000,  40,  28, 0,   0,   0,   0,   0,  0,  0,  0,   {},               { status_dead }, 0,    ELEM_HOLY, 0,      0,              0,    0,               0 },
  { "Light Robe",     OBJ_BODY, TYPE_ROBE, 30000, 75,  50, 0,   0,   0,   0,   0,  0,  0,  0,   {},               {},              0,    0,         0,      0,              0,    0,               0 },
  { "Linen Robe",     OBJ_BODY, TYPE_ROBE, 1200,  10,  10, 0,   0,   0,   0,   0,  0,  0,  0,   {},               {},              0,    0,         0,      0,              0,    0,               0 },
  { "Robe of Lords",  OBJ_BODY, TYPE_ROBE, 10,    100, 80, 1,   1,   0,   0,   0,  0,  0,  0,   { status_protect, 
												  status_shell }, {},              0,    0,         0,      0,              0,    0,               0 },
  { "Silk Robe",      OBJ_BODY, TYPE_ROBE, 2400,  20,  16, 0,   0,   0,   0,   0,  0,  0,  0,   {},               {},              0,    0,         0,      0,              0,    0,               0 },
  { "White Robe",     OBJ_BODY, TYPE_ROBE, 9000,  50,  34, 0,   0,   0,   0,   0,  0,  0,  0,   {},               {},              0,    0,         0,      ELEM_FIRE | 
                                                                                                                                                            ELEM_LIGHTNING | 
                                                                                                                                                            ELEM_ICE,       0,    0,               0 },
  { "Wizard Robe",    OBJ_BODY, TYPE_ROBE, 4000,  30,  22, 2,   0,   0,   0,   0,  0,  0,  0,   {},               {},              0,    0,         0,      0,              0,    0,               0 },

  /********************
   * ACCESSORIES      *
   * EQUIPPED BY: All *
   ********************/
  /*********
   * SHOES *
   *********/
  /******************************************************************************************************************************************************************************
   * name,            obj_type, type,       cost,  HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always,           cancel,              act,  elem, absorb, half, weak, str, imm *
   ******************************************************************************************************************************************************************************/
  { "Battle Boots",   OBJ_ACC,  TYPE_SHOES, 1000,  0,  0,  0,   0,   0,   0,   0,  1,  0,  0,   {},               {},                  0,       0,    0,      0,    0,    0,   0 },
  { "Feather Boots",  OBJ_ACC,  TYPE_SHOES, 2500,  0,  0,  0,   0,   0,   0,   0,  1,  0,  0,   { status_float }, {},                  0,       0,    0,      0,    0,    0,   0 },
  { "Germinas Boots", OBJ_ACC,  TYPE_SHOES, 5000,  0,  0,  0,   0,   0,   0,   0,  1,  1,  0,   {},               {},                  0,       0,    0,      0,    0,    0,   0 },
  { "Red Shoes",      OBJ_ACC,  TYPE_SHOES, 10000, 0,  0,  1,   0,   0,   0,   0,  1,  0,  0,   {},               {},                  0,       0,    0,      0,    0,    0,   0 },
  { "Rubber Shoes",   OBJ_ACC,  TYPE_SHOES, 1500,  0,  0,  0,   0,   0,   0,   0,  1,  0,  0,   {},               { status_dontmove }, 0,       0,    0,      0,    0,    0,   ELEM_LIGHTNING },
  { "Spike Boots",    OBJ_ACC,  TYPE_SHOES, 1200,  0,  0,  0,   0,   0,   0,   0,  0,  1,  0,   {},               {},                  0,       0,    0,      0,    0,    0,   0 },
  { "Sprint Boots",   OBJ_ACC,  TYPE_SHOES, 7000,  0,  0,  0,   0,   0,   0,   1,  0,  0,  0,   {},               {},                  0,       0,    0,      0,    0,    0,   0 },

  /*************
   * GAUNTLETS *
   *************/
  /*********************************************************************************************************************************************************
   * name,            obj_type, type,          cost,  HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm *
   *********************************************************************************************************************************************************/
  { "Bracer",         OBJ_ACC,  TYPE_GAUNTLET, 50000, 0,  0,  0,   3,   0,   0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0 },
  { "Genji Gauntlet", OBJ_ACC,  TYPE_GAUNTLET, 10,    0,  0,  2,   2,   0,   0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0 },
  { "Magic Gauntlet", OBJ_ACC,  TYPE_GAUNTLET, 20000, 0,  0,  2,   0,   0,   0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0 },
  { "Power Wrist",    OBJ_ACC,  TYPE_GAUNTLET, 5000,  0,  0,  0,   1,   0,   0,   0,  0,  0,  0,   {},     {},     0,   0,    0,      0,    0,    0,   0 },

  /*********
   * RINGS *
   *********/
  /***********************************************************************************************************************************************************************************
   * name,            obj_type, type,      cost,  HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always,             cancel,                   act, elem, absorb, half, weak, str, imm *
   ***********************************************************************************************************************************************************************************/
  { "Angel Ring",     OBJ_ACC,  TYPE_RING, 20000, 0,  0,  0,   0,   0,   0,   0,  0,  0,  0,   { status_reraise }, { status_dead, 
														     status_darkness },      0,   0,    0,      0,    0,    0,   0 },
  { "Cursed Ring",    OBJ_ACC,  TYPE_RING, 10,    0,  0,  1,   1,   0,   0,   1,  0,  0,  0,   { status_undead },  { status_invitation },    0,   0,    0,      0,    0,    0,   0 },
  { "Defense Ring",   OBJ_ACC,  TYPE_RING, 5000,  0,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                 { status_sleep,
														     status_deathsentence }, 0,   0,    0,      0,    0,    0,   0 },
  { "Magic Ring",     OBJ_ACC,  TYPE_RING, 10000, 0,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                 { status_silence, 
														     status_berserk },       0,   0,    0,      0,    0,    0,   0 },
  { "Reflect Ring",   OBJ_ACC,  TYPE_RING, 10000, 0,  0,  0,   0,   0,   0,   0,  0,  0,  0,   { status_reflect }, {},                       0,   0,    0,      0,    0,    0,   0 },

  /***********
   * ARMLETS *
   ***********/
  /************************************************************************************************************************************************************************************
   * name,            obj_type, type,        cost,  HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always,             cancel,             act, elem, absorb, half,      weak, str, imm *
   ************************************************************************************************************************************************************************************/
  { "108 Gems",       OBJ_ACC,  TYPE_ARMLET, 15000, 0,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                 { status_undead,
														       status_bloodsuck,
														       status_frog,
														       status_poison },  0,   0,    0,      0,         0,    0,   0 },
  { "Defense Armlet", OBJ_ACC,  TYPE_ARMLET, 7000,  0,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                 { status_dontmove, 
														       status_dontact }, 0,   0,    0,      0,         0,    0,   0 },
  { "Diamond Armlet", OBJ_ACC,  TYPE_ARMLET, 5000,  0,  0,  1,   1,   0,   0,   0,  0,  0,  0,   {},                 { status_slow },    0,   0,    0,      0,         0,    0,   0 },
  { "Jade Armlet",    OBJ_ACC,  TYPE_ARMLET, 0,     0,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                 { status_petrify, 
														       status_stop },    0,   0,    0,      0,         0,    0,   0 },
  { "N-Kai Armlet",   OBJ_ACC,  TYPE_ARMLET, 10000, 0,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},                 { status_confusion,
														       status_charm },   0,   0,    0,      ELEM_DARK, 0,    0,   0 },

  /***********
   * MANTLES *
   ***********/
  /***********************************************************************************************************************************************************************
   * name,            obj_type, type,        cost,  HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always,                 cancel, act, elem, absorb, half, weak, str, imm *
   ***********************************************************************************************************************************************************************/
  { "Dracula Mantle", OBJ_ACC,  TYPE_MANTLE, 15000, 0,  0,  0,   0,   28,  28,  0,  0,  0,  0,   {},                     {},     0,   0,    0,      0,    0,    0,   0 },
  { "Elf Mantle",     OBJ_ACC,  TYPE_MANTLE, 8000,  0,  0,  0,   0,   25,  25,  0,  0,  0,  0,   {},                     {},     0,   0,    0,      0,    0,    0,   0 },
  { "Feather Mantle", OBJ_ACC,  TYPE_MANTLE, 20000, 0,  0,  0,   0,   40,  30,  0,  0,  0,  0,   {},                     {},     0,   0,    0,      0,    0,    0,   0 },
  { "Leather Mantle", OBJ_ACC,  TYPE_MANTLE, 800,   0,  0,  0,   0,   15,  15,  0,  0,  0,  0,   {},                     {},     0,   0,    0,      0,    0,    0,   0 },
  { "Small Mantle",   OBJ_ACC,  TYPE_MANTLE, 300,   0,  0,  0,   0,   10,  10,  0,  0,  0,  0,   {},                     {},     0,   0,    0,      0,    0,    0,   0 },
  { "Vanish Mantle",  OBJ_ACC,  TYPE_MANTLE, 10,    0,  0,  0,   0,   35,  0,   0,  0,  0,  0,   { status_transparent }, {},     0,   0,    0,      0,    0,    0,   0 },
  { "Wizard Mantle",  OBJ_ACC,  TYPE_MANTLE, 2000,  0,  0,  1,   0,   18,  18,  0,  0,  0,  0,   {},                     {},     0,   0,    0,      0,    0,    0,   0 },

  /*******************
   * WOMEN'S PERFUME *
   *******************/
  /********************************************************************************************************************************************************************
   * name,        obj_type, type,         cost,  HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always,                 cancel, act, elem, absorb, half, weak, str, imm *
   ********************************************************************************************************************************************************************/
  { "Cherche",    OBJ_ACC,  TYPE_PERFUME, 30000, 0,  0,  0,   0,   0,   0,   0,  0,  0,  0,   { status_float, 
												status_reflect },  {},     0,   0,    0,      0,    0,    0,   0 },
  { "Chantage",   OBJ_ACC,  TYPE_PERFUME, 30000, 0,  0,  0,   0,   0,   0,   0,  0,  0,  0,   { status_reraise, 
												status_regen },    {},     0,   0,    0,      0,    0,    0,   0 },
  { "Salty Rage", OBJ_ACC,  TYPE_PERFUME, 30000, 0,  0,  0,   0,   0,   0,   0,  0,  0,  0,   { status_protect,
												status_shell },    {},     0,   0,    0,      0,    0,    0,   0 },
  { "Setiemson",  OBJ_ACC,  TYPE_PERFUME, 30000, 0,  0,  1,   0,   0,   0,   0,  0,  0,  0,   { status_haste,
												status_transparent }, {},     0,   0,    0,      0,    0,    0,   0 },

  /***********
   * RIBBONS *
   ***********/
  /*****************************************************************************************************************************************************************
   * name,    obj_type, type,        cost,  HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel,                   act, elem, absorb, half, weak, str, imm *
   *****************************************************************************************************************************************************************/
  { "Ribbon", OBJ_ACC,  TYPE_RIBBON, 60000, 10, 0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     { status_dead,
												   status_undead,
												   status_petrify,
												   status_invitation,
												   status_darkness,
												   status_confusion,
												   status_silence,
												   status_bloodsuck,
												   status_frog,
												   status_poison,
												   status_slow,
												   status_stop,
												   status_charm,
												   status_sleep,
												   status_dontmove,
												   status_dontact,
												   status_deathsentence }, 0,   0,    0,      0,    0,    0,   0 },

  /***********
   * POTIONS *
   ***********/
  /****************************************************************************************************************************************************************
   * name,           obj_type, type,        cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act,            elem, absorb, half, weak, str, imm *
   ****************************************************************************************************************************************************************/
  { "Potion",	     OBJ_ITEM, TYPE_POTION, 50,   0,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},     do_potion,      0,    0,      0,    0,    0,   0 },
  { "Hi-Potion",     OBJ_ITEM, TYPE_POTION, 200,  0,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},     do_hipotion,    0,    0,      0,    0,    0,   0 },
  { "X-Potion",	     OBJ_ITEM, TYPE_POTION, 700,  0,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},     do_xpotion,     0,    0,      0,    0,    0,   0 },
  { "Ether",	     OBJ_ITEM, TYPE_POTION, 200,  0,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},     do_ether,       0,    0,      0,    0,    0,   0 },
  { "Hi-Ether",	     OBJ_ITEM, TYPE_POTION, 600,  0,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},     do_hiether,     0,    0,      0,    0,    0,   0 },
  { "Elixir",	     OBJ_ITEM, TYPE_POTION, 10,   0,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},     do_elixir,      0,    0,      0,    0,    0,   0 },
  { "Antidote",	     OBJ_ITEM, TYPE_POTION, 50,   0,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},     do_antidote,    0,    0,      0,    0,    0,   0 },
  { "Eye Drop",	     OBJ_ITEM, TYPE_POTION, 50,   0,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},     do_eyedrop,     0,    0,      0,    0,    0,   0 },
  { "Echo Grass",    OBJ_ITEM, TYPE_POTION, 50,   0,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},     do_echograss,   0,    0,      0,    0,    0,   0 },
  { "Maiden's Kiss", OBJ_ITEM, TYPE_POTION, 50,   0,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},     do_maidenskiss, 0,    0,      0,    0,    0,   0 },
  { "Soft",	     OBJ_ITEM, TYPE_POTION, 100,  0,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},     do_soft,        0,    0,      0,    0,    0,   0 },
  { "Holy Water",    OBJ_ITEM, TYPE_POTION, 2000, 0,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},     do_holywater,   0,    0,      0,    0,    0,   0 },
  { "Remedy",	     OBJ_ITEM, TYPE_POTION, 350,  0,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},     do_remedy,      0,    0,      0,    0,    0,   0 },
  { "Phoenix Down",  OBJ_ITEM, TYPE_POTION, 300,  0,  0,  0,   0,   0,   0,   0,  0,  0,  0,   {},     {},     do_phoenixdown, 0,    0,      0,    0,    0,   0 },
  {}
};

const struct obj_types obj_type_table[] = {
  { TYPE_KNIFE,        "Knife" },
  { TYPE_SWORD,        "Sword" },
  { TYPE_KNIGHT_SWORD, "Knight Sword" },
  { TYPE_NINJA_SWORD,  "Ninja Sword" },
  { TYPE_KATANA,       "Katana" },
  { TYPE_STAFF,        "Staff" },
  { TYPE_ROD,          "Rod" },
  { TYPE_CROSSBOW,     "Crossbow" },
  { TYPE_BOW,          "Bow" },
  { TYPE_GUN,          "Gun" },
  { TYPE_GUNM,	       "Gun (magic)" },
  { TYPE_FLAIL,        "Flail" },
  { TYPE_AXE,          "Axe" },
  { TYPE_STICK,        "Stick" },
  { TYPE_SPEAR,        "Spear" },
  { TYPE_INSTRUMENT,   "Instrument" },
  { TYPE_DICTIONARY,   "Dictionary" },
  { TYPE_CLOTH,        "Cloth" },
  { TYPE_BAG,          "Bag" },
  { TYPE_POTION,       "Potion" },
  { TYPE_HELMET,       "Helmet" },
  { TYPE_HAT,          "Hat" },
  { TYPE_RIBBON,       "Ribbon" },
  { TYPE_ARMOR,        "Armor" },
  { TYPE_ROBE,         "Robe" },
  { TYPE_CLOTHES,      "Clothes" },
  { TYPE_SHOES,        "Shoes" },
  { TYPE_SHIELD,       "Shield" },
  { TYPE_RING,         "Ring" },
  { TYPE_ARMLET,       "Armlet" },
  { TYPE_MANTLE,       "Mantle" },
  { TYPE_WRIBBON,      "Women's Ribbon" },
  { TYPE_GAUNTLET,     "Gauntlet" },
  { TYPE_PERFUME,      "Perfume" },
  {}
};

OBJ::OBJ(const short id) {
  next = NULL;
  ch = NULL;
  room = NULL;
  equipped = false;
  this->id = id;
  return;
}

OBJ::~OBJ() {
  from_ch();
  from_battle_room();
  return;
}

OBJ *create_obj(const string name) {
  if(name.empty())
    return NULL;

  for(short x = 1; obj_table[x].name; ++x) {
    if(find(name, obj_table[x].name)) {
      OBJ *obj = new OBJ(x);
      return obj;
    }
  }

  return NULL;
}

OBJ *create_obj(const short id) {
  if(!obj_table[id].name)
    return NULL;

  OBJ *obj = new OBJ(id);
  return obj;
}

void OBJ::to(CH *ch) {
  from_ch();
  from_battle_room();
  this->ch = ch;
  next = ch->objects;
  ch->objects = this;
  return;
}

void OBJ::from_ch() {
  if(!ch)
    return;

  if(equipped)
    ch->remove(this);

  if(this == ch->objects)
    ch->objects = next;
  else {
    OBJ *prev;
 
    for(prev = ch->objects; prev; prev = prev->next) {
      if(prev->next == this) {
        prev->next = next;
        break;
      }
    }
  }

  ch = NULL;
  return;
}

void OBJ::to(BATTLE_ROOM *room) {
  from_ch();
  from_battle_room();
  this->room = room;
  next = room->objects;
  room->objects = this;
  return;
}
    
void OBJ::from_battle_room() {
  if(!room)
    return;   
       
  if(this == room->objects)
    room->objects = next;
  else {
    for(OBJ *prev = room->objects; prev; prev = prev->next) {
      if(prev->next == this) {   
        prev->next = next;
        break;
      }
    }
  }
        
  room = NULL;
  next = NULL;
  return;
}    

void do_equip(CH *ch, string argument="") {
  string arg;      
  split(argument, arg);
  
  if(arg.empty() || !find(arg, "rhand lhand head body accessory")) {
    ch->printf("Usage: equip [rhand | lhand | head | body | accessory]\n\r");
    return;
  }
       
  if(find(arg, "rhand"))
    do_equiprhand(ch, argument);
  else if(find(arg, "lhand"))
    do_equiplhand(ch, argument);
  else if(find(arg, "head"))
    do_equiphead(ch, argument);
  else if(find(arg, "body"))
    do_equipbody(ch, argument);   
  else if(find(arg, "accessory"))
    do_equipacc(ch, argument);
  
  return;
}

string print_obj_type(const short type) {
  for(short x = 0; obj_type_table[x].name; ++x)
    if(obj_type_table[x].type == type)
      return obj_type_table[x].name;
  
  return "";
} 

void CH::remove(OBJ *obj) {
  eq[obj->loc] = NULL;
  obj->equipped = false;
  HP[1] -= obj_table[obj->id].HP;
  MP[1] -= obj_table[obj->id].MP;
  HP[0] -= obj_table[obj->id].HP;
  MP[0] -= obj_table[obj->id].MP;
  MA -= obj_table[obj->id].ATm;
  Sp -= obj_table[obj->id].Sp;
  Mv -= obj_table[obj->id].Mv;
  Ju -= obj_table[obj->id].Ju;

  if(obj_table[obj->id].obj_type != OBJ_WEAPON)
    PA -= obj_table[obj->id].ATp;
  
  for(short x = 0; obj_table[obj->id].always[x]; ++x)
    cancel(obj_table[obj->id].always[x]);
  
  if(obj_table[obj->id].absorb)
    REM_BIT(absorb, obj_table[obj->id].absorb);
  
  if(obj_table[obj->id].weakness)  
    REM_BIT(weakness, obj_table[obj->id].weakness);
  
  if(obj_table[obj->id].imm)
    REM_BIT(imm, obj_table[obj->id].imm);
  
  if(obj_table[obj->id].strengthen)
    REM_BIT(strengthen, obj_table[obj->id].strengthen);
  
  if(obj_table[obj->id].half)
    REM_BIT(half, obj_table[obj->id].half);
  
  return;
} 
  
void CH::equip(OBJ *obj, const short loc) {
  if(eq[loc])
    remove(eq[loc]);
  
  eq[(obj->loc = loc)] = obj;
  obj->equipped = true;
  HP[1] += obj_table[obj->id].HP;
  HP[0] += obj_table[obj->id].HP;
  MP[1] += obj_table[obj->id].MP;
  MP[0] += obj_table[obj->id].MP;
  MA += obj_table[obj->id].ATm;
  Sp += obj_table[obj->id].Sp;
  Mv += obj_table[obj->id].Mv;
  Ju += obj_table[obj->id].Ju;
  
  if(obj_table[obj->id].absorb)
    SET_BIT(absorb, obj_table[obj->id].absorb);
  if(obj_table[obj->id].weakness)
    SET_BIT(weakness, obj_table[obj->id].weakness);
  if(obj_table[obj->id].imm)
    SET_BIT(imm, obj_table[obj->id].imm);
  if(obj_table[obj->id].strengthen)
    SET_BIT(strengthen, obj_table[obj->id].strengthen);
  if(obj_table[obj->id].half)
    SET_BIT(half, obj_table[obj->id].half);
  if(obj_table[obj->id].obj_type != OBJ_WEAPON)
    PA += obj_table[obj->id].ATp;
  
  short x;
  for(x = 0; obj_table[obj->id].always[x]; ++x)
    add(obj_table[obj->id].always[x], 0, 0, true);
  for(x = 0; obj_table[obj->id].cancel[x]; ++x)
    cancel(obj_table[obj->id].cancel[x]);
  
  return;
}

bool CH::can_equip(const OBJ *obj, const short loc) {
  switch(loc) {
  case LOC_RHAND:
  case LOC_LHAND:
    if(obj_table[obj->id].obj_type == OBJ_WEAPON) {
      switch(obj_table[obj->id].type) {
      case TYPE_KNIFE:
        if(cjob == JOB_SQUIRE || cjob == JOB_CHEMIST || cjob == JOB_THIEF || cjob == JOB_MEDIATOR || cjob == JOB_NINJA || cjob == JOB_DANCER)
          return true;
      
        return false;
      case TYPE_NINJA_SWORD:
        if(cjob == JOB_NINJA)
          return true;
      
        return false;
      case TYPE_SWORD:
        if(cjob == JOB_SQUIRE || cjob == JOB_KNIGHT || cjob == JOB_GEOMANCER || has_skill("Equip Sword", true))
          return true;
      
        return false;
      case TYPE_KNIGHT_SWORD:
        if(cjob == JOB_KNIGHT)
          return true;
      
        return false;
      case TYPE_KATANA:
        if(cjob == JOB_SAMURAI)
          return true;
      
        return false;
      case TYPE_AXE:  
        if(cjob == JOB_SQUIRE || cjob == JOB_GEOMANCER || has_skill("Equip Axe", true))
          return true;
      
        return false;
      case TYPE_ROD:  
        if(cjob == JOB_WIZARD || cjob == JOB_SUMMONER || cjob == JOB_ORACLE)
          return true;
      
        return false;
      case TYPE_STAFF:
        if(cjob == JOB_PRIEST || cjob == JOB_TIMEMAGE || cjob == JOB_SUMMONER || cjob == JOB_ORACLE)
          return true;
      
        return false; 
      case TYPE_FLAIL:
        if(cjob == JOB_SQUIRE || cjob == JOB_NINJA)
          return true;
      
        return false;
      case TYPE_GUN:
        if(cjob == JOB_CHEMIST || cjob == JOB_MEDIATOR)
          return true;
    
        return false;
      case TYPE_CROSSBOW:
        if(cjob == JOB_ARCHER || has_skill("Equip Crossbow", true))
          return true;
      
        return false;
      case TYPE_BOW:
        if(cjob == JOB_ARCHER)
          return true;
      
        return false;
      case TYPE_INSTRUMENT:
        if(cjob == JOB_BARD)
          return true;
      
        return false;
      case TYPE_DICTIONARY:  
      case TYPE_STICK:
        if(cjob == JOB_ORACLE || cjob == JOB_CALCULATOR)
          return true;
        
        return false;  
      case TYPE_SPEAR:
        if(cjob == JOB_LANCER)
          return true;
        
        return false; 
      }
    }
    else if(obj_table[obj->id].type == OBJ_SHIELD && (cjob == JOB_KNIGHT || cjob == JOB_ARCHER || cjob == JOB_GEOMANCER || cjob == JOB_LANCER || has_skill("Equip Shield", true)))
      return true;
    
    return false;
  case LOC_HEAD:
    if(obj_table[obj->id].obj_type != OBJ_HEAD)
      return false;
    
    switch(obj_table[obj->id].type) {
    case TYPE_HELMET:
      if(cjob == JOB_KNIGHT || cjob == JOB_LANCER || cjob == JOB_SAMURAI)
        return true;
        
      return false;   
    case TYPE_HAT:
      if(cjob == JOB_KNIGHT || cjob == JOB_LANCER || cjob == JOB_SAMURAI)
        return false;
        
      return true;
    case TYPE_RIBBON:
      if(sex)
        return true;
        
      return false;   
    } 
        
    return false;   
  case LOC_BODY:
    if(obj_table[obj->id].obj_type != OBJ_BODY)
      return false;
        
    switch(obj_table[obj->id].type) {
    case TYPE_ARMOR:
      if(cjob == JOB_KNIGHT || cjob == JOB_LANCER || cjob == JOB_SAMURAI || has_skill("Equip Armor", true))
        return true;
        
      return false;
    case TYPE_CLOTHES:
      if(cjob == JOB_KNIGHT || cjob == JOB_LANCER || cjob == JOB_SAMURAI)
        return false; 
        
      return true;     
    case TYPE_ROBE:   
      if(cjob == JOB_KNIGHT || cjob == JOB_PRIEST || cjob == JOB_WIZARD || cjob == JOB_TIMEMAGE || cjob == JOB_SUMMONER || cjob == JOB_MEDIATOR || cjob == JOB_ORACLE || cjob == JOB_GEOMANCER || cjob == JOB_LANCER || cjob == JOB_SAMURAI || cjob == JOB_CALCULATOR)
        return true;
      
      return false;
    }
    
    return false;
  case LOC_ACC:
    if(obj_table[obj->id].obj_type != OBJ_ACC)
      return false;
    
    return true;
  }   
  
  return true;
}   

void do_equiprhand(CH *ch, string argument="") {
  OBJ *obj;
      
  if(argument.empty() || !(obj = ch->obj(argument, false)) || !ch->can_equip(obj, LOC_RHAND)) {
    ch->printf("Usage: equip rhand [object]\n\r");
    ch->printf("{3+--{0Type{3---------------{0Name{3------------------------+\n\r");
    ch->printf("+-------------------------------------------------+{0\n\r");
      
    for(obj = ch->objects; obj; obj = obj->next)
      if(ch->can_equip(obj, LOC_RHAND) && !obj->equipped)
        ch->printf(" {3|{0 %-16s {3|{0 %s\n\r", print_obj_type(obj_table[obj->id].type).c_str(), obj->name().c_str());
        
    return;
  }   
        
  if(!ch->has_skill("Two Swords", true) && ch->eq[LOC_LHAND] && obj_table[ch->eq[LOC_LHAND]->id].obj_type == OBJ_WEAPON) {
    ch->printf("equip: ERROR: You can only equip 2 weapons with \"Two Swords\" ability.\n\r");
    return;
  }
        
  ch->room->echo(ch->name + " equips \"" + obj->name() + "\".\n\r", ch);
  ch->equip(obj, LOC_RHAND);
  return;
}

void do_equiplhand(CH *ch, string argument="") {
  OBJ *obj;
    
  if(argument.empty() || !(obj = ch->obj(argument, false)) || !ch->can_equip(obj, LOC_LHAND)) {
    ch->printf("Usage: equip lhand [object]\n\r");
    ch->printf("{3+--{0Type{3---------------{0Name{3------------------------+\n\r");
    ch->printf("+-------------------------------------------------+{0\n\r");
      
    for(obj = ch->objects; obj; obj = obj->next)
      if(ch->can_equip(obj, LOC_LHAND) && !obj->equipped)
        ch->printf(" {3|{0 %-16s {3|{0 %s\n\r", print_obj_type(obj_table[obj->id].type).c_str(), obj->name().c_str());
   
    return;
  }
    
  if(!ch->has_skill("Two Swords", true) && ch->eq[LOC_RHAND] && obj_table[ch->eq[LOC_RHAND]->id].obj_type == OBJ_WEAPON) {
    ch->printf("equip: ERROR: You can only equip 2 weapons with \"Two Swords\" ability.\n\r");
    return;
  }
  
  ch->room->echo(ch->name + " equips \"" + obj->name() + "\".\n\r", ch);
  ch->equip(obj, LOC_LHAND);
  return;
}

void do_equiphead(CH *ch, string argument="") { 
  OBJ *obj;
      
  if(argument.empty() || !(obj = ch->obj(argument, false)) || !ch->can_equip(obj, LOC_HEAD)) { 
    ch->printf("Usage: equip head [object]\n\r"); 
    ch->printf("{3+--{0Type{3---------------{0Name{3------------------------+\n\r");
    ch->printf("+-------------------------------------------------+{0\n\r");
      
    for(obj = ch->objects; obj; obj = obj->next)
      if(ch->can_equip(obj, LOC_HEAD) && !obj->equipped) 
        ch->printf(" {3|{0 %-16s {3|{0 %s\n\r", print_obj_type(obj_table[obj->id].type).c_str(), obj->name().c_str());
        
    return;
  }   
        
  ch->room->echo(ch->name + " equips \"" + obj->name() + "\".\n\r", ch);
  ch->equip(obj, LOC_HEAD);
  return;  
}  
        
void do_equipbody(CH *ch, string argument="") {
  OBJ *obj;
      
  if(argument.empty() || !(obj = ch->obj(argument, false)) || !ch->can_equip(obj, LOC_BODY)) {
    ch->printf("Usage: equip body [object]\n\r");
    ch->printf("{3+--{0Type{3---------------{0Name{3------------------------+\n\r");
    ch->printf("+-------------------------------------------------+{0\n\r");
    
    for(obj = ch->objects; obj; obj = obj->next)
      if(ch->can_equip(obj, LOC_BODY) && !obj->equipped)
        ch->printf(" {3|{0 %-16s {3|{0 %s\n\r", print_obj_type(obj_table[obj->id].type).c_str(), obj->name().c_str());
 
    return;
  }
  
  ch->room->echo(ch->name + " equips \"" + obj->name() + "\".\n\r", ch);
  ch->equip(obj, LOC_BODY);
  return;
}

void do_equipacc(CH *ch, string argument="") {
  OBJ *obj;
      
  if(argument.empty() || !(obj = ch->obj(argument, false)) || !ch->can_equip(obj, LOC_ACC)) {
    ch->printf("Usage: equip accessory [object]\n\r");
    ch->printf("{3+--{0Type{3---------------{0Name{3------------------------+\n\r");
    ch->printf("+-------------------------------------------------+{0\n\r");
    
    for(obj = ch->objects; obj; obj = obj->next)
      if(ch->can_equip(obj, LOC_ACC) && !obj->equipped)
        ch->printf(" {3|{0 %-16s {3|{0 %s\n\r", print_obj_type(obj_table[obj->id].type).c_str(), obj->name().c_str());
 
    return;
  }
  
  ch->room->echo(ch->name + " equips \"" + obj->name() + "\".\n\r", ch);
  ch->equip(obj, LOC_ACC);
  return;
}

void do_remove(CH *ch, string argument="") {
  OBJ *obj;
  
  if(argument.empty() || !(obj = ch->obj(argument, true))) {
    ch->printf("Usage: remove [object]\n\r");
    return;
  }
  
  ch->room->echo(ch->name + " removes " + obj->name() + ".\n\r", ch);
  ch->remove(obj);
  return;
}

void do_items(CH *ch, string argument="") {
  OBJ *obj;
  bool can_wear;
  ostrstream ost;
  ch->printf("{3+--{0Type{3---------------{0Name{3------------------------+\n\r");
  ch->printf("+-------------------------------------------------+{0\n\r");
   
  for(obj = ch->objects; obj; obj = obj->next) {
    if(!obj->equipped) {
      can_wear = obj->type() == TYPE_POTION || ch->can_equip(obj, (obj->type() == OBJ_WEAPON || obj->type() == OBJ_WEAPON ? LOC_RHAND : obj->type() == OBJ_HEAD ? LOC_HEAD : obj->type() == OBJ_BODY ? LOC_BODY : LOC_ACC));
      ost << " {3|{0 " << (can_wear ? "{0" : "{8") << setw(16) << setiosflags(ios::left) << obj->str_type() << " {3|{0 " << (can_wear ? "{0" : "{8") << obj->name() << "{0" << endl;
    }
  }
  
  ost << ends;
  ch->printf(ost.str());
  return;
}  

void CH::save_objects() {
  if(npc || confirm_delete)
    return;

  MYSQL mysql;  
  mysql_init(&mysql);
  
  if(npc || !mysql_real_connect(&mysql, DB_LOC, DB_USER, DB_PASS, DB_NAME, 0, NULL, 0))
    return;
  
  ostrstream ost;
  ost << "DELETE FROM objects WHERE owner='" + name + "'" << ends;
  mysql_query(&mysql, ost.str());
  
  for(OBJ *obj = objects; obj; obj = obj->next) {
    ost.freeze(false);
    ost.seekp(0, ios::beg);
    ost << "INSERT INTO objects(owner, id, equipped, loc) values('" << name << "', " << obj->id << ", " << obj->equipped << ", " << obj->loc << ")" << ends;
    mysql_query(&mysql, ost.str());
  }
  
  mysql_close(&mysql);
  return;
}

void CH::load_objects() {
  MYSQL mysql;
  MYSQL_RES *res;
  MYSQL_ROW row; 
  mysql_init(&mysql);
  
  if(!mysql_real_connect(&mysql, DB_LOC, DB_USER, DB_PASS, DB_NAME, 0, NULL, 0))
    return;
    
  ostrstream ost;
  ost << "SELECT * FROM objects WHERE owner='" << name << "'" << ends;
  mysql_query(&mysql, ost.str());
  res = mysql_store_result(&mysql);
  OBJ *obj;
  
  while((row = mysql_fetch_row(res))) {
    obj = create_obj(atoi(row[1]));
    obj->to(this);
    
    if(atoi(row[2]))
      equip(obj, atoi(row[3]));
  }
   
  mysql_free_result(res);
  mysql_close(&mysql);  
  return;
}

OBJ *CH::obj(const string name, const bool equipped = false) {
  for(OBJ *obj = objects; obj; obj = obj->next)
    if(((equipped && obj->equipped) || (!equipped && !obj->equipped)) && find(name, obj->name()))
      return obj;
      
  return NULL;
}
 
OBJ *CH::obj(const short id, const bool equipped = false) {
  short cnt = 0;
  
  for(OBJ *obj = objects; obj; obj = obj->next) {
    if((!equipped && obj->equipped) || (equipped && !obj->equipped))
      continue;
      
    if(++cnt == id)
      return obj;  
  }
   
  return NULL;
}

string OBJ::name() {
  return (string)obj_table[id].name;
};

string OBJ::str_type() {
  return obj_type_table[type()].name;
};

short OBJ::type() {
  return obj_table[id].type;
};

short OBJ::cost() {
  return obj_table[id].cost;
}

short OBJ::value() {
  return cost();
}

void do_give(CH *ch, string argument="") {
  OBJ *obj;
  CH *pers;
  string arg;
  split(argument, arg);
   
  if(arg.empty() || argument.empty() || !(obj = ch->obj(arg, false)) || !(pers = ch->room->ch(argument))) {
    ch->printf("Usage: give [object] [player]\n\r");
    return;
  }
  
  ch->room->echo(ch->name + " gives " + pers->name + " \"" + obj->name() + "\".\n\r");
  obj->to(pers);
  return;
}