void CreateItem(ITEM_t *ip,BYTE *Item,vec3_t Position,int CreateFlag)
{
int Type = ConvertItemType(Item);
ITEM *n = &ip->Item;
n->Type = Type;
if(Type==ITEM_POTION+15)
{
n->Level = (Item[1]<<16)+(Item[2]<<8)+(Item[4]);
n->Durability = 0;
n->Option1 = 0;
if(CreateFlag)
PlayBuffer(SOUND_DROP_GOLD01);
}
else
{
n->Level = Item[1];
n->Durability = Item[2];
n->Option1 = Item[3];
n->ExtOption = Item[4];
n->option_380 = false;
BYTE b = ( ( (Item[5] & 0x08) << 4) >>7);
n->option_380 = b;
if(CreateFlag)
{
if(Type==ITEM_POTION+13 || Type==ITEM_POTION+14 || Type==ITEM_POTION+16 || Type==ITEM_WING+15 || Type==ITEM_POTION+22 || Type==ITEM_POTION+31)
PlayBuffer(SOUND_JEWEL01,&ip->Object);
else if(Type == ITEM_POTION+41)
PlayBuffer(SOUND_JEWEL02,&ip->Object);
else
PlayBuffer(SOUND_DROP_ITEM01,&ip->Object);
}
}
OBJECT *o = &ip->Object;
o->Live = true;
o->Type = MODEL_SWORD+Type;
o->SubType = 1;
if ( Type == (int)( ITEM_POTION+11))
{
switch ( ( n->Level >> 3))
{
case 1:
o->Type = MODEL_EVENT+4;
break;
case 2:
o->Type = MODEL_EVENT+5;
break;
case 3:
o->Type = MODEL_EVENT+6;
break;
case 5:
o->Type = MODEL_EVENT+8;
break;
case 6:
o->Type = MODEL_EVENT+9;
break;
case 8:
case 9:
case 10:
case 11:
case 12:
o->Type = MODEL_EVENT+10;
break;
case 13:
o->Type = MODEL_EVENT+6;
break;
case 14:
case 15:
o->Type = MODEL_EVENT+5;
}
}
if ( Type >= ITEM_POTION+46 && Type <= ITEM_POTION+48)
{
o->Type = MODEL_ITEM+Type;
}
if ( Type >= ITEM_POTION+32 && Type <= ITEM_POTION+34)
{
if( (n->Level >> 3) == 1)
{
int Num = Type - (ITEM_POTION+32);
o->Type = MODEL_EVENT+21+Num;
}
}
else if ( Type==(int)(ITEM_POTION+21) )
{
switch ( (n->Level>>3) )
{
case 1:
case 2:
o->Type = MODEL_EVENT+11;
break;
}
}
else if ( Type==(int)(ITEM_HELPER+19) )
{
switch ( (n->Level>>3) )
{
case 0:
o->Type = MODEL_STAFF+10;
n->Level = 0;
break;
case 1:
o->Type = MODEL_SWORD+19;
n->Level = 0;
break;
case 2:
o->Type = MODEL_BOW+18;
n->Level = 0;
break;
}
}
else if ( Type==ITEM_POTION+23 )
{
switch( (n->Level>>3) )
{
case 1:
o->Type = MODEL_EVENT+12;
break;
break;
}
}
else if ( Type==ITEM_POTION+24 )
{
switch( (n->Level>>3) )
{
case 1:
o->Type = MODEL_EVENT+13;
break;
}
}
else if ( Type == ITEM_HELPER+20 )
{
switch( (n->Level>>3) )
{
case 0:
o->Type = MODEL_EVENT+15;
break;
case 1:
case 2:
case 3:
o->Type = MODEL_EVENT+14;
break;
}
}
else if ( Type == (int)( ITEM_POTION+9))
{
switch ( ( n->Level >> 3))
{
case 1:
o->Type = MODEL_EVENT+7;
break;
}
}
else if ( Type==ITEM_HELPER+14 && (n->Level>>3)==1 )
{
o->Type = MODEL_EVENT+16;
}
else if ( Type==ITEM_HELPER+11 && (n->Level>>3)==1 )
{
o->Type = MODEL_EVENT+18;
}
else if ( Type== ITEM_POTION+41 )
{
o->Type = MODEL_POTION+41;
}
else if ( Type== ITEM_POTION+42 )
{
o->Type = MODEL_POTION+42;
}
else if ( Type== ITEM_POTION+43 )
{
o->Type = MODEL_POTION+43;
}
else if ( Type== ITEM_POTION+44 )
{
o->Type = MODEL_POTION+44;
}
ItemObjectAttribute(o);
Vector(-30.f,-30.f,-30.f,o->BoundingBoxMin);
Vector( 30.f, 30.f, 30.f,o->BoundingBoxMax);
VectorCopy(Position,o->Position);
if(CreateFlag)
{
if ( o->Type == MODEL_EVENT+8 || o->Type == MODEL_EVENT+9)
{
short scale = 55;
vec3_t Angle;
vec3_t light;
Vector( 1.f, 1.f, 1.f, light );
Vector( 0.f, 0.f, 0.f, Angle);
vec3_t NewPosition;
VectorCopy( Position, NewPosition);
NewPosition[2] = RequestTerrainHeight( Position[0], Position[1] ) + 3;
CreateEffect(MODEL_SKILL_FURY_STRIKE+6,NewPosition,Angle,light,0,o,scale);
CreateEffect(MODEL_SKILL_FURY_STRIKE+4,NewPosition,Angle,light,0,o,scale);
//CreateEffect(MODEL_SKILL_FURY_STRIKE+5,NewPosition,Angle,light,0,o,scale);
o->Position[2] = RequestTerrainHeight(o->Position[0],o->Position[1]) + 3.f;
o->Gravity = 50.f;
}
else
{
o->Position[2] = RequestTerrainHeight(o->Position[0],o->Position[1]) + 180.f;
o->Gravity = 20.f;
}
}
else
{
o->Position[2] = RequestTerrainHeight(o->Position[0],o->Position[1]);
}
ItemAngle(o);
}