SetRange((LPVOID)0x00749C90,0x94A,ASM::NOP);
SetOp((LPVOID)0x00749C90,(LPVOID)CreateBowSkillEffect,ASM::JMP);
void CreateBowSkillEffect(DWORD lpObj, DWORD lpModel, DWORD Owner, BYTE a4, BYTE a5, WORD Skill)
{
short Bow;
short CrossBow;
int EffectType;
lpViewObj gObj = &*(ObjectPreview*)lpObj;
lpModelObj gModel = &*(ViewPortObject*)lpModel;
vec3_t Color;
vec3_t VecPos;
vec3_t WorldPos;
Vector(gModel->ColorR, gModel->ColorG, gModel->ColorB, Color);
Vector(gModel->VecPos.X, gModel->VecPos.Y, gModel->VecPos.Z, VecPos);
Vector(gModel->WorldPos.X, gModel->WorldPos.Y, gModel->WorldPos.Z, WorldPos);
EffectType = 0;
CrossBow = gObj->WeaponFirstSlot;
Bow = gObj->WeaponSecondSlot;
if (lpObj == oUserPreviewStruct)
{
CrossBow = *((short *)oUserObjectStruct_ + 2336);
Bow = *(short *)(oUserObjectStruct_ + 4779);
if (CrossBow != -1)
CrossBow += ITEM_BASE_MODEL;
if (Bow != -1)
Bow += ITEM_BASE_MODEL;
}
if (Skill == Penetration || Skill == PenetrationImproved)
{
EffectType = 2;
sub_6D6C20(85, lpModel, 0);
}
*(int*)0x8793730 = Skill;
if (Skill == IceArrow || Skill == IceArrowImproved)
sub_6D6C20(130, lpModel, 0);
if (a5 == 2)
EffectType = 99;
if (Skill == Starfall)
{
gEffect.CreateEffect(365, VecPos, WorldPos, Color, 0, Owner, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
}
else
{
switch (CrossBow)
{
case 3227:
{
gEffect.CreateEffect(296, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
}
break;
case 3228:
gEffect.CreateEffect(267, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3229:
gEffect.CreateEffect(271, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3230:
gEffect.CreateEffect(269, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3231:
gEffect.CreateEffect(268, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3232:
gEffect.CreateEffect(274, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3233:
gEffect.CreateEffect(273, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3235:
gEffect.CreateEffect(294, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3237:
gEffect.CreateEffect(321, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3238:
gEffect.CreateEffect(324, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case ITEM2(4, 26): //Devil CrossBow
gEffect.CreateEffect(296, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
default:
break;
}
switch (Bow)
{
case 3219:
gEffect.CreateEffect(266, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3220:
gEffect.CreateEffect(266, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3221:
gEffect.CreateEffect(270, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3222:
gEffect.CreateEffect(266, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3223:
gEffect.CreateEffect(266, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3224:
gEffect.CreateEffect(266, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3225:
gEffect.CreateEffect(272, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3236:
gEffect.CreateEffect(295, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3239:
gEffect.CreateEffect(335, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3240:
gEffect.CreateEffect(296, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3241:
gEffect.CreateEffect(297, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3242:
gEffect.CreateEffect(298, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3243:
gEffect.CreateEffect(509, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case 3246:
gEffect.CreateEffect(266, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case ITEM2(4, 25): //Angelic Bow
gEffect.CreateEffect(509, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case ITEM2(4, 28): //Bloodangel Bow
gEffect.CreateEffect(321, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
break;
case ITEM2(4, 36): //Holyangel Bow
{
int EID[10] = { 266, 270, 272, 295, 335, 296, 297, 298, 509, 266 };
gEffect.CreateEffect(EID[rand() % 10], VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
//gEffect.CreateEffect(294, VecPos, WorldPos, Color, EffectType, lpModel, *(short *)(lpModel + 44), a4, a5, 0, 0.0, -1);
}
break;
default:
break;
}
}
}