tfe-1.0/area/
tfe-1.0/files/
tfe-1.0/logs/
tfe-1.0/logs/immortal/
tfe-1.0/logs/mob/
tfe-1.0/logs/object/
tfe-1.0/logs/player/
tfe-1.0/logs/room/
tfe-1.0/notes/clans/
tfe-1.0/player/
tfe-1.0/prev/
tfe-1.0/prev/area/
tfe-1.0/prev/player/
tfe-1.0/prev/rooms/
tfe-1.0/rooms/
tfe-1.0/src-gc/
tfe-1.0/src-msvc/
tfe-1.0/src-unix/
tfe-1.0/www/
tfe-1.0/www/html/
#include <ctype.h>
#include <sys/types.h>
#include <stdio.h>
#include <syslog.h>
#include "define.h"
#include "struct.h"


/*
 *   ACID DAMAGE ROUTINES
 */


index_data acid_index [] = 
{
  { "blemishes",            "blemish",               3 },
  { "irritates",            "irritate",              7 },
  { "burns",                "burn",                 15 },
  { "erodes",               "erode",                30 },
  { "blisters",             "blister",              45 },
  { "MARS",                 "MAR",                  60 },
  { "WITHERS",              "WITHER",               90 },
  { "* CORRODES *",         "* CORRODE *",         120 },
  { "* SCARS *",            "* SCAR *",            150 }, 
  { "* DISFIGURES *",       "* DISFIGURE *",       190 }, 
  { "** MELTS **",          "** MELT **",          240 },
  { "** LIQUIFIES **",      "** LIQUIFY **",       290 },
  { "*** DISSOLVES ***",    "*** DISSOLVE ***",    350 },
  { "*** DELIQUESCES ***",  "*** DELIQUESCE ***",   -1 },
};


bool damage_acid( char_data* victim, char_data* ch, int damage,
  const char* string, bool plural )
{
  damage *= 100-victim->Save_Acid( );
  damage /= 100;

  dam_message( victim, ch, damage, string,
    lookup( acid_index, damage, plural ) );
  
  return inflict( victim, ch, damage, "acid" );
}


int obj_data :: vs_acid( )
{
  int save  = 100;
  int    i;

  for( i = 0; i < MAX_MATERIAL; i++ ) 
    if( is_set( &pIndexData->materials, i ) )
      save = min( save, material_table[i].save_acid );

  if( pIndexData->item_type != ITEM_ARMOR 
    || pIndexData->item_type != ITEM_WEAPON ) 
    return save;

  return save+value[0]*(100-save)/(value[0]+2);
}


/* 
 *   ACID BASED SPELLS
 */


bool spell_resist_acid( char_data* ch, char_data* victim, void*,
  int level, int duration )
{

  spell_affect( ch, victim, level, duration, SPELL_RESIST_ACID,
    AFF_RESIST_ACID );
  
  return TRUE;
}


bool spell_acid_blast( char_data* ch, char_data* victim, void* vo,
  int level, int duration )
{
  obj_data*  obj  = (obj_data*) vo;
  int       save;

  /* Quaff */

  if( ch == NULL && obj == NULL ) {
    fsend( victim, "You feel incredible pain as the acid eats away at your\
 stomach and throat.  Luckily you don't feel it for long." );
    fsend_seen( victim, "%s grasps %s throat and spasms in pain - %s does\
 not survive long.", victim, victim->His_Her( ),
      victim->He_She( ) );
    death_message( victim );
    death( victim, NULL, "drinking acid" );
    return TRUE;
    }  

  /* Fill */

  if( ch == NULL ) {
    if( obj->metal( )
      || is_set( &obj->materials, MAT_STONE ) 
      || is_set( &obj->materials, MAT_GLASS ) )
      return FALSE;

    fsend( victim, "The acid bubbles and boils, eating its way through %s,\
 which you quickly drop and watch disappear into nothing.\n\r", obj );
    fsend( *victim->array, "%s quickly drops %s\
 as %s dissolved by the liquid.", victim, obj, 
      obj->selected > 1 ? "they are" : "it is" );

    obj->Extract( obj->selected );
    return TRUE;
    }

  /* Dip */

  if( duration == -3 ) {
    save = obj->vs_acid( );
    if( number_range( 0,99 ) > save ) {
      if( number_range( 0,99 ) > save ) {
        send( *ch->array, "%s is devoured.\n\r", obj );
        obj->Extract( 1 );
        return TRUE;
        }
      send( ch, "%s is partially destroyed.\n\r", obj );
      }
    if( obj->rust > 0 ) {
      send( ch, "%sthe %s on %s is removed.\n\r", 
        obj->rust-- > 1 ? "Some of " : "", "rust", obj );
      }
    return TRUE;
    }
  
  /* Throw-Cast */

  damage_acid( victim, ch, spell_damage( SPELL_ACID_BLAST, level ),
    "*the splatter of acid" );

  return TRUE; 
}


bool spell_acid_storm( char_data* ch, char_data* victim, void*,
  int level, int )
{
  damage_acid( victim, ch, spell_damage( SPELL_ACID_STORM, level ),
    "*the blast of acid" );

  return TRUE;
}