📄 herbactor.pas
字号:
unit HerbActor;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grobal2, DxDraws, CliUtil, magiceff, Actor, WIl;
const
BEEQUEENBASE = 600;
DOORDEATHEFFECTBASE = 120;
WALLLEFTBROKENEFFECTBASE = 224;
WALLRIGHTBROKENEFFECTBASE = 240;
type
TDoorState = (dsOpen, dsClose, dsBroken);
TKillingHerb = class (TActor)
private
public
constructor Create; override;
destructor Destroy; override;
procedure CalcActorFrame; override;
function GetDefaultFrame (wmode: Boolean): integer; override;
end;
TBeeQueen = class (TActor)
private
public
procedure CalcActorFrame; override;
function GetDefaultFrame (wmode: Boolean): integer; override;
end;
TCentipedeKingMon = class (TKillingHerb)
public
procedure CalcActorFrame; override;
end;
TCastleDoor = class (TActor)
private
EffectSurface: TDirectDrawSurface;
ax, ay: integer;
oldunitx, oldunity: integer;
procedure ApplyDoorState (dstate: TDoorState);
public
BoDoorOpen: Boolean;
constructor Create; override;
procedure CalcActorFrame; override;
procedure LoadSurface; override;
function GetDefaultFrame (wmode: Boolean): integer; override;
procedure ActionEnded; override;
procedure Run; override;
procedure DrawChr (dsurface: TDirectDrawSurface; dx, dy: integer; blend: Boolean); override;
end;
TWallStructure = class (TActor)
private
EffectSurface: TDirectDrawSurface;
BrokenSurface: TDirectDrawSurface;
ax, ay, bx, by: integer;
deathframe: integer;
bomarkpos: Boolean; //给啊霸 阜绊 乐绰瘤
public
constructor Create; override;
procedure CalcActorFrame; override;
procedure LoadSurface; override;
function GetDefaultFrame (wmode: Boolean): integer; override;
procedure DrawChr (dsurface: TDirectDrawSurface; dx, dy: integer; blend: Boolean); override;
procedure Run; override;
end;
implementation
uses
ClMain;
{============================== TKillingHerb =============================}
// 侥牢檬
{--------------------------}
constructor TKillingHerb.Create;
begin
inherited Create;
end;
destructor TKillingHerb.Destroy;
begin
inherited Destroy;
end;
procedure TKillingHerb.CalcActorFrame;
var
pm: PTMonsterAction;
haircount: integer;
begin
BoUseMagic := FALSE;
currentframe := -1;
BodyOffset := GetOffset (Appearance);
pm := RaceByPM (Race);
if pm = nil then exit;
case CurrentAction of
SM_TURN: //规氢捞 绝澜...
begin
startframe := pm.ActStand.start; // + Dir * (pm.ActStand.frame + pm.ActStand.skip);
endframe := startframe + pm.ActStand.frame - 1;
frametime := pm.ActStand.ftime;
starttime := GetTickCount;
defframecount := pm.ActStand.frame;
Shift (Dir, 0, 0, 1);
end;
SM_DIGUP: //叭扁 绝澜, SM_DIGUP, 规氢 绝澜.
begin
startframe := pm.ActWalk.start; // + Dir * (pm.ActWalk.frame + pm.ActWalk.skip);
endframe := startframe + pm.ActWalk.frame - 1;
frametime := pm.ActWalk.ftime;
starttime := GetTickCount;
maxtick := pm.ActWalk.UseTick;
curtick := 0;
//WarMode := FALSE;
movestep := 1;
Shift (Dir, 0, 0, 1); //movestep, 0, endframe-startframe+1);
end;
SM_HIT:
begin
startframe := pm.ActAttack.start + Dir * (pm.ActAttack.frame + pm.ActAttack.skip);
endframe := startframe + pm.ActAttack.frame - 1;
frametime := pm.ActAttack.ftime;
starttime := GetTickCount;
//WarMode := TRUE;
WarModeTime := GetTickCount;
Shift (Dir, 0, 0, 1);
end;
SM_STRUCK:
begin
startframe := pm.ActStruck.start + Dir * (pm.ActStruck.frame + pm.ActStruck.skip);
endframe := startframe + pm.ActStruck.frame - 1;
frametime := struckframetime; //pm.ActStruck.ftime;
starttime := GetTickCount;
end;
SM_DEATH:
begin
startframe := pm.ActDie.start + Dir * (pm.ActDie.frame + pm.ActDie.skip);
endframe := startframe + pm.ActDie.frame - 1;
startframe := endframe; //
frametime := pm.ActDie.ftime;
starttime := GetTickCount;
end;
SM_NOWDEATH:
begin
startframe := pm.ActDie.start + Dir * (pm.ActDie.frame + pm.ActDie.skip);
endframe := startframe + pm.ActDie.frame - 1;
frametime := pm.ActDie.ftime;
starttime := GetTickCount;
end;
SM_DIGDOWN:
begin
startframe := pm.ActDeath.start;
endframe := startframe + pm.ActDeath.frame - 1;
frametime := pm.ActDeath.ftime;
starttime := GetTickCount;
BoDelActionAfterFinished := TRUE; //捞悼累捞 场唱搁 咀磐 瘤澜
end;
end;
end;
function TKillingHerb.GetDefaultFrame (wmode: Boolean): integer;
var
cf, dr: integer;
pm: PTMonsterAction;
begin
pm := RaceByPM (Race);
if pm = nil then exit;
if Death then begin
if Skeleton then
Result := pm.ActDeath.start
else Result := pm.ActDie.start + Dir * (pm.ActDie.frame + pm.ActDie.skip) + (pm.ActDie.frame - 1);
end else begin
defframecount := pm.ActStand.frame;
if currentdefframe < 0 then cf := 0
else if currentdefframe >= pm.ActStand.frame then cf := 0
else cf := currentdefframe;
Result := pm.ActStand.start + cf; //规氢捞 绝澜..
end;
end;
{----------------------------------------------------------------------}
//厚阜盔面
procedure TBeeQueen.CalcActorFrame;
var
pm: PTMonsterAction;
begin
BoUseMagic := FALSE;
currentframe := -1;
BodyOffset := GetOffset (Appearance);
pm := RaceByPM (Race);
if pm = nil then exit;
case CurrentAction of
SM_TURN: //规氢捞 绝澜...
begin
startframe := pm.ActStand.start; // + Dir * (pm.ActStand.frame + pm.ActStand.skip);
endframe := startframe + pm.ActStand.frame - 1;
frametime := pm.ActStand.ftime;
starttime := GetTickCount;
defframecount := pm.ActStand.frame;
Shift (Dir, 0, 0, 1);
end;
SM_HIT:
begin
startframe := pm.ActAttack.start; // + Dir * (pm.ActAttack.frame + pm.ActAttack.skip);
endframe := startframe + pm.ActAttack.frame - 1;
frametime := pm.ActAttack.ftime;
starttime := GetTickCount;
//WarMode := TRUE;
WarModeTime := GetTickCount;
Shift (Dir, 0, 0, 1);
end;
SM_STRUCK:
begin
startframe := pm.ActStruck.start; // + Dir * (pm.ActStruck.frame + pm.ActStruck.skip);
endframe := startframe + pm.ActStruck.frame - 1;
frametime := struckframetime; //pm.ActStruck.ftime;
starttime := GetTickCount;
end;
SM_DEATH:
begin
startframe := pm.ActDie.start; // + Dir * (pm.ActDie.frame + pm.ActDie.skip);
endframe := startframe + pm.ActDie.frame - 1;
startframe := endframe; //
frametime := pm.ActDie.ftime;
starttime := GetTickCount;
end;
SM_NOWDEATH:
begin
startframe := pm.ActDie.start; // + Dir * (pm.ActDie.frame + pm.ActDie.skip);
endframe := startframe + pm.ActDie.frame - 1;
frametime := pm.ActDie.ftime;
starttime := GetTickCount;
end;
end;
end;
function TBeeQueen.GetDefaultFrame (wmode: Boolean): integer;
var
pm: PTMonsterAction;
cf: integer;
begin
pm := RaceByPM (Race);
if pm = nil then exit;
if Death then begin
Result := pm.ActDie.start + (pm.ActDie.frame - 1);
end else begin
defframecount := pm.ActStand.frame;
if currentdefframe < 0 then cf := 0
else if currentdefframe >= pm.ActStand.frame then cf := 0
else cf := currentdefframe;
Result := pm.ActStand.start + cf; //规氢捞 绝澜..
end;
end;
{----------------------------------------------------------------------}
//瘤匙空
procedure TCentipedeKingMon.CalcActorFrame;
var
pm: PTMonsterAction;
begin
BoUseMagic := FALSE;
currentframe := -1;
BodyOffset := GetOffset (Appearance);
pm := RaceByPM (Race);
if pm = nil then exit;
case CurrentAction of
SM_TURN: //规氢捞 绝澜...
begin
Dir := 0;
inherited CalcActorFrame;
end;
SM_HIT:
begin
case Dir of
7, 6: Dir := 0;
0, 1, 2, 5: Dir := 1;
else Dir := 2;
end;
inherited CalcActorFrame;
end;
//SM_SPITPOISON:
// begin
// end;
else begin
Dir := 0;
inherited CalcActorFrame;
end;
end;
end;
{----------------------------------------------------------------------}
//己寒, 己巩
constructor TCastleDoor.Create;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -