📄 magiceff.pas
字号:
for i:=FIREGUNFRAME-2 downto 0 do begin
FireNodes[i].FireNumber := FireNodes[i].FireNumber + 1;
FireNodes[i+1] := FireNodes[i];
end;
FireNodes[0].FireNumber := 1;
FireNodes[0].x := FlyX;
FireNodes[0].y := FlyY;
end else begin
allgone := TRUE;
for i:=FIREGUNFRAME-2 downto 0 do begin
if FireNodes[i].FireNumber <= FIREGUNFRAME then begin
FireNodes[i].FireNumber := FireNodes[i].FireNumber + 1;
FireNodes[i+1] := FireNodes[i];
allgone := FALSE;
end;
end;
if allgone then Result := FALSE;
end;
end;
end;
procedure TFireGunEffect.DrawEff (surface: TDirectDrawSurface);
var
i, num, shx, shy, firex, firey, prx, pry, img: integer;
d: TDirectDrawSurface;
begin
prx := -1;
pry := -1;
for i:=0 to FIREGUNFRAME-1 do begin
if (FireNodes[i].FireNumber <= FIREGUNFRAME) and (FireNodes[i].FireNumber > 0) then begin
shx := (g_MySelf.m_nRx * UNITX + g_MySelf.m_nShiftX) - FireMyselfX;
shy := (g_MySelf.m_nRy * UNITY + g_MySelf.m_nShiftY) - FireMyselfY;
img := EffectBase + (FireNodes[i].FireNumber - 1);
d := ImgLib.GetCachedImage (img, px, py);
if d <> nil then begin
firex := FireNodes[i].x + px - UNITX div 2 - shx;
firey := FireNodes[i].y + py - UNITY div 2 - shy;
if (firex <> prx) or (firey <> pry) then begin
prx := firex;
pry := firey;
DrawBlend (surface, firex, firey, d, 1);
end;
end;
end;
end;
end;
{--------------------------------------------------------}
constructor TThuderEffect.Create (effbase, tx, ty: integer; target: TObject);
begin
inherited Create (111, effbase,
tx, ty,
tx, ty, //TActor(target).XX, TActor(target).m_nCurrY,
mtThunder,
FALSE,
0);
TargetActor := target;
end;
procedure TThuderEffect.DrawEff (surface: TDirectDrawSurface);
var
img, px, py: integer;
d: TDirectDrawSurface;
begin
img := EffectBase;
d := ImgLib.GetCachedImage (img + 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 TLightingThunder.Create (effbase, sx, sy, tx, ty: integer; target: TObject);
begin
inherited Create (111, effbase,
sx, sy,
tx, ty, //TActor(target).XX, TActor(target).m_nCurrY,
mtLightingThunder,
FALSE,
0);
TargetActor := target;
end;
procedure TLightingThunder.DrawEff (surface: TDirectDrawSurface);
var
img, sx, sy, px, py, shx, shy: integer;
d: TDirectDrawSurface;
begin
img := EffectBase + Dir16 * 10;
if curframe < 6 then begin
shx := (g_MySelf.m_nRx * UNITX + g_MySelf.m_nShiftX) - FireMyselfX;
shy := (g_MySelf.m_nRy * UNITY + g_MySelf.m_nShiftY) - FireMyselfY;
d := ImgLib.GetCachedImage (img + curframe, px, py);
if d <> nil then begin
PlayScene.ScreenXYfromMCXY (TActor(MagOwner).m_nRx,
TActor(MagOwner).m_nRy,
sx,
sy);
DrawBlend (surface,
sx + px - UNITX div 2,
sy + py - UNITY div 2,
d, 1);
end;
end;
{if (curframe < 10) and (TargetActor <> nil) then begin
d := ImgLib.GetCachedImage (EffectBase + 17*10 + curframe, px, py);
if d <> nil then begin
PlayScene.ScreenXYfromMCXY (TActor(TargetActor).RX,
TActor(TargetActor).RY,
sx,
sy);
DrawBlend (surface,
sx + px - UNITX div 2,
sy + py - UNITY div 2,
d, 1);
end;
end;}
end;
{--------------------------------------------------------}
constructor TExploBujaukEffect.Create (effbase, sx, sy, tx, ty: integer; target: TObject);
begin
inherited Create (111, effbase,
sx, sy,
tx, ty,
mtExploBujauk,
TRUE,
0);
frame := 3;
TargetActor := target;
NextFrameTime := 50;
end;
procedure TExploBujaukEffect.DrawEff (surface: TDirectDrawSurface);
var
img: integer;
d: TDirectDrawSurface;
shx, shy: integer;
meff: TMapEffect;
begin
if m_boActive and ((Abs(FlyX-fireX) > 30) or (Abs(FlyY-fireY) > 30) 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 + 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 := MagExplosionBase + curframe;
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;
{--------------------------------------------------------}
constructor TBujaukGroundEffect.Create (effbase, magicnumb, sx, sy, tx, ty: integer);
begin
inherited Create (111, effbase,
sx, sy,
tx, ty,
mtBujaukGroundEffect,
TRUE,
0);
frame := 3;
MagicNumber := magicnumb;
BoGroundEffect := FALSE;
NextFrameTime := 50;
end;
function TBujaukGroundEffect.Run: Boolean;
begin
Result := inherited Run;
if not FixedEffect then begin
if ((abs(TargetX-FlyX) <= 15) and (abs(TargetY-FlyY) <= 15)) or
((abs(TargetX-FlyX) >= prevdisx) and (abs(TargetY-FlyY) >= prevdisy)) then begin
FixedEffect := TRUE; //气惯
start := 0;
frame := ExplosionFrame;
curframe := start;
Repetition := FALSE;
//磐瘤绰 荤款靛
PlaySound (TActor(MagOwner).m_nMagicExplosionSound);
Result := TRUE;
end else begin
prevdisx := abs(TargetX-FlyX);
prevdisy := abs(TargetY-FlyY);
end;
end;
end;
procedure TBujaukGroundEffect.DrawEff (surface: TDirectDrawSurface);
var
img: integer;
d: TDirectDrawSurface;
shx, shy: integer;
meff: TMapEffect;
begin
if m_boActive and ((Abs(FlyX-fireX) > 30) or (Abs(FlyY-fireY) > 30) 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 + 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
//气惯
if MagicNumber = 11 then //付
img := EffectBase + 16 * 10 + curframe
else //规
img := EffectBase + 18 * 10 + curframe;
if MagicNumber = 46 then begin
GetEffectBase (MagicNumber -1 , 0,ImgLib,img);
img := img + 10 + curframe;
end;
d := ImgLib.GetCachedImage (img, px, py);
if d <> nil then begin
DrawBlend (surface,
FLyX + px - UNITX div 2, // - shx,
FlyY + py - UNITY div 2, // - shy,
d, 1);
end;
{if not BoGroundEffect and (curframe = 8) then begin
BoGroundEffect := TRUE;
meff := TMapEffect.Create (img+2, 6, TargetRx, TargetRy);
meff.NextFrameTime := 100;
//meff.RepeatCount := 1;
PlayScene.GroundEffectList.Add (meff);
end; }
end;
end;
end;
{ TNormalDrawEffect }
constructor TNormalDrawEffect.Create(XX,YY:Integer;WmImage:TWMImages;effbase,nX:Integer;frmTime:LongWord;boFlag:Boolean);
begin
inherited Create (111,effbase, XX, YY, XX, YY,mtReady,TRUE,0);
ImgLib:=WmImage;
EffectBase:=effbase;
start:=0;
curframe:=0;
frame:=nX;
NextFrameTime:=frmTime;
boC8:=boFlag;
end;
procedure TNormalDrawEffect.DrawEff(surface: TDirectDrawSurface);
var
d: TDirectDrawSurface;
nRx,nRy,nPx,nPy:integer;
begin
d := ImgLib.GetCachedImage (EffectBase + curframe, nPx, nPy);
if d <> nil then begin
PlayScene.ScreenXYfromMCXY (FlyX, FlyY, nRx, nRy);
if boC8 then begin
DrawBlend (surface,nRx + nPx - UNITX div 2,nRy + nPy - UNITY div 2,d, 1);
end else begin
surface.Draw (nRx + nPx - UNITX div 2,nRy + nPy - UNITY div 2,d.ClientRect, d, TRUE);
end;
end;
end;
function TNormalDrawEffect.Run: Boolean;
begin
Result := TRUE;
if m_boActive and (GetTickCount - steptime > longword(NextFrameTime)) then begin
steptime := GetTickCount;
Inc (curframe);
if curframe > start+frame-1 then begin
curframe := start;
Result := FALSE;
end;
end;
end;
{ TFlyingBug }
constructor TFlyingBug.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 TFlyingBug.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 div 2) * 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 := curframe + MagExplosionBase;
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;
{ TFlyingFireBall }
procedure TFlyingFireBall.DrawEff(surface: TDirectDrawSurface);
var
d: TDirectDrawSurface;
begin
if m_boActive and ((Abs(FlyX-fireX) > ReadyFrame) or (Abs(FlyY-fireY) > ReadyFrame)) then begin
d := ImgLib.GetCachedImage (FlyImageBase + (GetFlyDirection (FlyX, FlyY, TargetX, TargetY) * 10) + curframe, px, py);
if d <> nil then
DrawBlend (surface,
FLyX + px - UNITX div 2,
FlyY + py - UNITY div 2,
d, 1);
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -