📄 magiceff.pas
字号:
//烹苞咯何甫 犬牢窍扁 困窍咯
passdir16 := GetFlyDirection16 (FlyX, FlyY, TargetX, TargetY);
DebugOutStr (IntToStr(prevdisx) + ' ' + IntToStr(prevdisy) + ' / ' + IntToStr(abs(TargetX-FlyX)) + ' ' + IntToStr(abs(TargetY-FlyY)) + ' ' +
IntToStr(firedisX) + '.' + IntToStr(firedisY) + ' ' +
IntToStr(FlyX) + '.' + IntToStr(FlyY) + ' ' +
IntToStr(TargetX) + '.' + IntToStr(TargetY));
if ((abs(TargetX-FlyX) <= 15) and (abs(TargetY-FlyY) <= 15)) or
((abs(TargetX-FlyX) >= prevdisx) and (abs(TargetY-FlyY) >= prevdisy)) or
OverThrough(OldDir16, passdir16) then begin
crash := TRUE;
end else begin
prevdisx := abs(TargetX-FlyX);
prevdisy := abs(TargetY-FlyY);
//if (prevdisx <= 5) and (prevdisy <= 5) then crash := TRUE;
end;
OldDir16 := passdir16;
end else begin
ms := GetTickCount - m_dwFrameTime; //瓤苞狼 矫累饶 倔付唱 矫埃捞 汝范绰瘤?
rrx := TargetX - fireX;
rry := TargetY - fireY;
stepx := Round ((firedisX/900) * ms);
stepy := Round ((firedisY/900) * ms);
FlyX := fireX + stepx;
FlyY := fireY + stepy;
end;
PlayScene.CXYfromMouseXY (FlyX, FlyY, Rx, Ry);
if crash and (TargetActor <> nil) then begin
FixedEffect := TRUE; //气惯
start := 0;
frame := ExplosionFrame;
curframe := start;
Repetition := FALSE;
//磐瘤绰 荤款靛
PlaySound (TActor(MagOwner).m_nMagicExplosionSound);
end;
//if not Map.CanFly (Rx, Ry) then
// Result := FALSE;
end;
if FixedEffect then begin
if frame = -1 then frame := ExplosionFrame;
if TargetActor = nil then begin
FlyX := TargetX - ((g_MySelf.m_nRx * UNITX + g_MySelf.m_nShiftX) - FireMyselfX);
FlyY := TargetY - ((g_MySelf.m_nRy * UNITY + g_MySelf.m_nShiftY) - FireMyselfY);
PlayScene.CXYfromMouseXY (FlyX, FlyY, Rx, Ry);
end else begin
Rx := TActor(TargetActor).m_nRx;
Ry := TActor(TargetActor).m_nRy;
PlayScene.ScreenXYfromMCXY (Rx, Ry, FlyX, FlyY);
FlyX := FlyX + TActor(TargetActor).m_nShiftX;
FlyY := FlyY + TActor(TargetActor).m_nShiftY;
end;
end;
end;
procedure TMagicEff.GetFlyXY (ms: integer; var fx, fy: integer);
var
rrx, rry, stepx, stepy: integer;
begin
rrx := TargetX - fireX;
rry := TargetY - fireY;
stepx := Round ((firedisX/900) * ms);
stepy := Round ((firedisY/900) * ms);
fx := fireX + stepx;
fy := fireY + stepy;
end;
function TMagicEff.Run: Boolean;
begin
Result := Shift;
if Result then
if GetTickCount - m_dwStartTime > 10000 then //2000 then
Result := FALSE
else Result := TRUE;
end;
procedure TMagicEff.DrawEff (surface: TDirectDrawSurface);
var
img: integer;
d: TDirectDrawSurface;
shx, shy: integer;
begin
if m_boActive and ((Abs(FlyX-fireX) > 15) or (Abs(FlyY-fireY) > 15) or FixedEffect) then begin
shx := (g_MySelf.m_nRx * UNITX + g_MySelf.m_nShiftX) - FireMyselfX;
shy := (g_MySelf.m_nRy * UNITY + g_MySelf.m_nShiftY) - FireMyselfY;
if not FixedEffect then begin
//朝酒啊绰芭
img := EffectBase + FLYBASE + Dir16 * 10;
d := ImgLib.GetCachedImage (img + curframe, px, py);
if d <> nil then begin
DrawBlend (surface,
FlyX + px - UNITX div 2 - shx,
FlyY + py - UNITY div 2 - shy,
d, 1);
end;
end else begin
//磐瘤绰芭
img := MagExplosionBase + curframe; //EXPLOSIONBASE;
d := ImgLib.GetCachedImage (img, px, py);
if d <> nil then begin
DrawBlend (surface,
FlyX + px - UNITX div 2,
FlyY + py - UNITY div 2,
d, 1);
end;
end;
end;
end;
{------------------------------------------------------------}
// TFlyingAxe : 朝酒啊绰 档尝
{------------------------------------------------------------}
constructor TFlyingAxe.Create (id, effnum, sx, sy, tx, ty: integer; mtype: TMagicType; Recusion: Boolean; anitime: integer);
begin
inherited Create (id, effnum, sx, sy, tx, ty, mtype, Recusion, anitime);
FlyImageBase := FLYOMAAXEBASE;
ReadyFrame := 65;
end;
procedure TFlyingAxe.DrawEff (surface: TDirectDrawSurface);
var
img: integer;
d: TDirectDrawSurface;
shx, shy: integer;
begin
if m_boActive and ((Abs(FlyX-fireX) > ReadyFrame) or (Abs(FlyY-fireY) > ReadyFrame)) then begin
shx := (g_MySelf.m_nRx * UNITX + g_MySelf.m_nShiftX) - FireMyselfX;
shy := (g_MySelf.m_nRy * UNITY + g_MySelf.m_nShiftY) - FireMyselfY;
if not FixedEffect then begin
//
img := FlyImageBase + Dir16 * 10;
d := ImgLib.GetCachedImage (img + curframe, px, py);
if d <> nil then begin
//舅颇喉珐爹窍瘤 臼澜
surface.Draw (FlyX + px - UNITX div 2 - shx,
FlyY + py - UNITY div 2 - shy,
d.ClientRect, d, TRUE);
end;
end else begin
{//沥瘤, 档尝俊 嘛腮 葛嚼.
img := FlyImageBase + Dir16 * 10;
d := ImgLib.GetCachedImage (img, px, py);
if d <> nil then begin
//舅颇喉珐爹窍瘤 臼澜
surface.Draw (FlyX + px - UNITX div 2,
FlyY + py - UNITY div 2,
d.ClientRect, d, TRUE);
end; }
end;
end;
end;
{------------------------------------------------------------}
// TFlyingArrow : 朝酒啊绰 拳混
{------------------------------------------------------------}
procedure TFlyingArrow.DrawEff (surface: TDirectDrawSurface);
var
img: integer;
d: TDirectDrawSurface;
shx, shy: integer;
begin
//(**6岿菩摹
if m_boActive and ((Abs(FlyX-fireX) > 40) or (Abs(FlyY-fireY) > 40)) then begin
//*)
(**捞傈
if Active then begin //and ((Abs(FlyX-fireX) > 65) or (Abs(FlyY-fireY) > 65)) then begin
//*)
shx := (g_MySelf.m_nRx * UNITX + g_MySelf.m_nShiftX) - FireMyselfX;
shy := (g_MySelf.m_nRy * UNITY + g_MySelf.m_nShiftY) - FireMyselfY;
if not FixedEffect then begin
//朝酒啊绰芭
img := FlyImageBase + Dir16; // * 10;
d := ImgLib.GetCachedImage (img + curframe, px, py);
//(**6岿菩摹
if d <> nil then begin
//舅颇喉珐爹窍瘤 臼澜
surface.Draw (FlyX + px - UNITX div 2 - shx,
FlyY + py - UNITY div 2 - shy - 46,
d.ClientRect, d, TRUE);
end;
//**)
(***捞傈
if d <> nil then begin
//舅颇喉珐爹窍瘤 臼澜
surface.Draw (FlyX + px - UNITX div 2 - shx,
FlyY + py - UNITY div 2 - shy,
d.ClientRect, d, TRUE);
end;
//**)
end;
end;
end;
{--------------------------------------------------------}
constructor TCharEffect.Create (effbase, effframe: integer; target: TObject);
begin
inherited Create (111, effbase,
TActor(target).m_nCurrX, TActor(target).m_nCurrY,
TActor(target).m_nCurrX, TActor(target).m_nCurrY,
mtExplosion,
FALSE,
0);
TargetActor := target;
frame := effframe;
NextFrameTime := 30;
end;
function TCharEffect.Run: Boolean;
begin
Result := TRUE;
if GetTickCount - steptime > longword(NextFrameTime) then begin
steptime := GetTickCount;
Inc (curframe);
if curframe > start+frame-1 then begin
curframe := start+frame-1;
Result := FALSE;
end;
end;
end;
procedure TCharEffect.DrawEff (surface: TDirectDrawSurface);
var
d: TDirectDrawSurface;
begin
if TargetActor <> nil then begin
Rx := TActor(TargetActor).m_nRx;
Ry := TActor(TargetActor).m_nRy;
PlayScene.ScreenXYfromMCXY (Rx, Ry, FlyX, FlyY);
FlyX := FlyX + TActor(TargetActor).m_nShiftX;
FlyY := FlyY + TActor(TargetActor).m_nShiftY;
d := ImgLib.GetCachedImage (EffectBase + curframe, px, py);
if d <> nil then begin
DrawBlend (surface,
FlyX + px - UNITX div 2,
FlyY + py - UNITY div 2,
d, 1);
end;
end;
end;
{--------------------------------------------------------}
constructor TMapEffect.Create (effbase, effframe: integer; x, y: integer);
begin
inherited Create (111, effbase,
x, y,
x, y,
mtExplosion,
FALSE,
0);
TargetActor := nil;
frame := effframe;
NextFrameTime := 30;
RepeatCount := 0;
end;
function TMapEffect.Run: Boolean;
begin
Result := TRUE;
if GetTickCount - steptime > longword(NextFrameTime) then begin
steptime := GetTickCount;
Inc (curframe);
if curframe > start+frame-1 then begin
curframe := start+frame-1;
if RepeatCount > 0 then begin
Dec (RepeatCount);
curframe := start;
end else
Result := FALSE;
end;
end;
end;
procedure TMapEffect.DrawEff (surface: TDirectDrawSurface);
var
d: TDirectDrawSurface;
begin
Rx := TargetX;
Ry := TargetY;
PlayScene.ScreenXYfromMCXY (Rx, Ry, FlyX, FlyY);
d := ImgLib.GetCachedImage (EffectBase + curframe, px, py);
if d <> nil then begin
DrawBlend (surface,
FlyX + px - UNITX div 2,
FlyY + py - UNITY div 2,
d, 1);
end;
end;
{--------------------------------------------------------}
constructor TScrollHideEffect.Create (effbase, effframe: integer; x, y: integer; target: TObject);
begin
inherited Create (effbase, effframe, x, y);
//TargetCret := TActor(target);//在出现有人用随机之类时,将设置目标
end;
function TScrollHideEffect.Run: Boolean;
begin
Result := inherited Run;
if frame = 7 then
if g_TargetCret <> nil then
PlayScene.DeleteActor (g_TargetCret.m_nRecogId);
end;
{--------------------------------------------------------}
constructor TLightingEffect.Create (effbase, effframe: integer; x, y: integer);
begin
end;
function TLightingEffect.Run: Boolean;
begin
Result:=False;//Jacky
end;
{--------------------------------------------------------}
constructor TFireGunEffect.Create (effbase, sx, sy, tx, ty: integer);
begin
inherited Create (111, effbase,
sx, sy,
tx, ty, //TActor(target).XX, TActor(target).m_nCurrY,
mtFireGun,
TRUE,
0);
NextFrameTime := 50;
FillChar (FireNodes, sizeof(TFireNode)*FIREGUNFRAME, #0);
OutofOil := FALSE;
firetime := GetTickCount;
end;
function TFireGunEffect.Run: Boolean;
var
i, fx, fy: integer;
allgone: Boolean;
begin
Result := TRUE;
if GetTickCount - steptime > longword(NextFrameTime) then begin
Shift;
steptime := GetTickCount;
//if not FixedEffect then begin //格钎俊 嘎瘤 臼疽栏搁
if not OutofOil then begin
if (abs(RX-TActor(MagOwner).m_nRx) >= 5) or (abs(RY-TActor(MagOwner).m_nRy) >= 5) or (GetTickCount - firetime > 800) then
OutofOil := TRUE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -