📄 actor.pas
字号:
DR_UPRIGHT:
begin
if Max >= 6 then
v := 1
else
v := 0;
ss := Round((Max - cur + v) / Max) * step;
rx := XX - ss;
ry := YY + ss;
if ss = step then
begin
ShiftX := Round(unx / Max * cur);
ShiftY := -Round(uny / Max * cur);
end
else
begin
ShiftX := -Round(unx / Max * (Max - cur));
ShiftY := Round(uny / Max * (Max - cur));
end;
end;
DR_RIGHT:
begin
ss := Round((Max - cur) / Max) * step;
rx := XX - ss;
if ss = step then
ShiftX := Round(unx / Max * cur)
else
ShiftX := -Round(unx / Max * (Max - cur));
ShiftY := 0;
end;
DR_DOWNRIGHT:
begin
if Max >= 6 then
v := 1
else
v := 0;
ss := Round((Max - cur - v) / Max) * step;
rx := XX - ss;
ry := YY - ss;
if ss = step then
begin
ShiftX := Round(unx / Max * cur);
ShiftY := Round(uny / Max * cur);
end
else
begin
ShiftX := -Round(unx / Max * (Max - cur));
ShiftY := -Round(uny / Max * (Max - cur));
end;
end;
DR_DOWN:
begin
if Max >= 6 then
v := 1
else
v := 0;
ss := Round((Max - cur - v) / Max) * step;
ShiftX := 0;
ry := YY - ss;
if ss = step then
ShiftY := Round(uny / Max * cur)
else
ShiftY := -Round(uny / Max * (Max - cur));
end;
DR_DOWNLEFT:
begin
if Max >= 6 then
v := 0
else
v := 0;
ss := Round((Max - cur - v) / Max) * step;
rx := XX + ss;
ry := YY - ss;
if ss = step then
begin
ShiftX := -Round(unx / Max * cur);
ShiftY := Round(uny / Max * cur);
end
else
begin
ShiftX := Round(unx / Max * (Max - cur));
ShiftY := -Round(uny / Max * (Max - cur));
end;
end;
DR_LEFT:
begin
ss := Round((Max - cur) / Max) * step;
rx := XX + ss;
if ss = step then
ShiftX := -Round(unx / Max * cur)
else
ShiftX := Round(unx / Max * (Max - cur));
ShiftY := 0;
end;
DR_UPLEFT:
begin
if Max >= 6 then
v := 1
else
v := 0;
ss := Round((Max - cur + v) / Max) * step;
rx := XX + ss;
ry := YY + ss;
if ss = step then
begin
ShiftX := -Round(unx / Max * cur);
ShiftY := -Round(uny / Max * cur);
end
else
begin
ShiftX := Round(unx / Max * (Max - cur));
ShiftY := Round(uny / Max * (Max - cur));
end;
end;
end;
end;
procedure TActor.FeatureChanged;
var
haircount: Integer;
begin
case Race of
//human
0:
begin
hair := HAIRfeature(Feature); //函版等促.
dress := DRESSfeature(Feature);
weapon := WEAPONfeature(Feature);
if (Dress in[18,19,24,25,26,27]) then
BodyOffset := HUMANFRAME * (18+sex) //Sex; //巢磊0, 咯磊1
else
BodyOffset := HUMANFRAME * (dress); //Sex; //巢磊0, 咯磊1
haircount := aFrmMain.WHairImg.ImageCount div HUMANFRAME div 2;
if hair > haircount - 1 then
hair := haircount - 1;
hair := hair * 2;
if hair > 1 then
HairOffset := HUMANFRAME * (hair + sex)
else
HairOffset := -1;
WeaponOffset := HUMANFRAME * weapon; //(weapon*2 + Sex);
Horse:=LoByte(HorseState);
Wing:=HiByte(HorseState);
end;
50: ; //npc
else
begin
Appearance := APPRfeature(Feature);
BodyOffset := GetOffset(Appearance);
//BodyOffset := MONFRAME * (Appearance mod 10);
end;
end;
end;
function TActor.light: Integer;
begin
Result := ChrLight;
end;
procedure TActor.LoadSurface;
var
mimg: TWMImages;
begin
mimg := GetMonImg(Appearance);
if mimg <> nil then
begin
if (not ReverseFrame) then
BodySurface := mimg.GetCachedImage(GetOffset(Appearance) + currentframe,
px, py)
else
BodySurface := mimg.GetCachedImage(
GetOffset(Appearance) + endframe - (currentframe - startframe),
px, py);
end;
end;
function TActor.CharWidth: Integer;
begin
if BodySurface <> nil then
Result := BodySurface.Width
else
Result := 48;
end;
function TActor.CharHeight: Integer;
begin
if BodySurface <> nil then
Result := BodySurface.Height
else
Result := 70;
end;
function TActor.CheckSelect(dx, dy: Integer): Boolean;
var
c: Integer;
begin
Result := False;
if BodySurface <> nil then
begin
c := BodySurface.Pixels[dx, dy];
if (c <> 0) and
((BodySurface.Pixels[dx - 1, dy] <> 0) and
(BodySurface.Pixels[dx + 1, dy] <> 0) and
(BodySurface.Pixels[dx, dy - 1] <> 0) and
(BodySurface.Pixels[dx, dy + 1] <> 0)) then
Result := True;
end;
end;
procedure TActor.DrawEffSurface(dsurface, Source: TDirectDrawSurface; ddx, ddy:
Integer; blend: Boolean; ceff: TColorEffect);
begin
if (GetTickCount-AttackStateTime)>20*1000 then
AttackState:=0;
if State and $00800000 <> 0 then
begin
blend := True; //捧疙
end;
if not blend then
begin
if ceff = ceNone then
begin
if Source <> nil then
dsurface.Draw(ddx, ddy, Source.ClientRect, Source, True);
end
else
begin
if Source <> nil then
begin
ImgMixSurface.Draw(0, 0, Source.ClientRect, Source, False);
DrawEffect(0, 0, Source.Width, Source.Height, ImgMixSurface, ceff);
dsurface.Draw(ddx, ddy, Source.ClientRect, ImgMixSurface, True);
end;
end;
end
else
begin
if ceff = ceNone then
begin
if Source <> nil then
DrawBlend(dsurface, ddx, ddy, Source, 0);
end
else
begin
if Source <> nil then
begin
// ImgMixSurface.Erase(0);
ImgMixSurface.Fill(0);
ImgMixSurface.Draw(0, 0, Source.ClientRect, Source, False);
DrawEffect(0, 0, Source.Width, Source.Height, ImgMixSurface, ceff);
DrawBlend(dsurface, ddx, ddy, ImgMixSurface, 0);
end;
end;
end;
end;
procedure TActor.DrawWeaponGlimmer(dsurface: TDirectDrawSurface; ddx, ddy:
Integer);
begin
//荤侩救窃..(堪拳搬) 弊贰侨 坷幅...
(*if BoNextTimeFireHit and WarMode and GlimmingMode then begin
if GetTickCount - GlimmerTime > 200 then begin
GlimmerTime := GetTickCount;
Inc (CurGlimmer);
if CurGlimmer >= MaxGlimmer then CurGlimmer := 0;
end;
idx := GetEffectBase (5-1{堪拳搬馆娄烙}, 1) + Dir*10 + CurGlimmer;
d := aFrmMain.WMagic.GetCachedImage (idx, ax, ay);
if d <> nil then
DrawBlend (dsurface, ddx + ax, ddy + ay, d, 1);
//dx + ax + ShiftX,
//dy + ay + ShiftY,
//d, 1);
end;*)
end;
function TActor.GetDrawEffectValue: TColorEffect;
var
ceff: TColorEffect;
begin
ceff := ceNone;
if (FocusCret = Self) or (MagicTarget = Self) then
begin
ceff := ceBright;
end;
if State and $80000000 <> 0 then
begin
ceff := ceGreen;
end;
if State and $40000000 <> 0 then
begin
ceff := ceRed;
end;
if State and $20000000 <> 0 then
begin
ceff := ceBlue;
end;
if State and $10000000 <> 0 then
begin
ceff := ceYellow;
end;
if State and $08000000 <> 0 then
begin
ceff := ceFuchsia;
end;
if State and $04000000 <> 0 then
begin
ceff := ceGrayScale;
end;
if AttackState and $80000000 <> 0 then
begin
ceff := ceblue;
end;
if AttackState and $40000000 <> 0 then
begin
ceff := ceFuchsia;
end;
Result := ceff;
end;
procedure TActor.DrawAddBlood(dsurface: TDirectDrawSurface;dx, dy: Integer);
var
BooldNum,jj,BooldIndex: Integer;
d: TDirectDrawSurface;
p,w:integer;
function GetIndex(var Index:Integer):Integer;
var
s:String;
Begin
s:=Inttostr(Index);
Result:=Strtoint(S[1])+1000;
Delete(s,1,1);
if s<>'' then
Index:=Strtoint(s)
else
Index:=-1;
End;
begin
if IsAddBlood then
Begin
if GetTickCount - AddBloodTime > 1000 then
IsAddBlood := False;
if GetTickCount - AddBloodStartTime > 40 then
begin
Inc(AddBloodFram);
AddBloodStartTime := GetTickCount;
end;
End;
//加减血显示
if (IsAddBlood) then
Begin
BooldNum:=abs(AddBloodNum);
jj:=1;
if Self=Myself then
p:=24
else
if Race<>0 then
p:=0
else
P:=12;
if p=24 then
w:=12
else
w:=8;
if AddBloodnum>0 then
d := aFrmMain.WProgUse.Images[1011+p]
else
d := aFrmMain.WProgUse.Images[1010+p];
if d <> nil then
dsurface.Draw(SayX - d.Width div 2+AddBloodFram*(2), dy + hpy + ShiftY - 10-AddBloodFram*(2), d.ClientRect, d, True);
while(BooldNum>=0) do
Begin
BooldIndex:=GetIndex(BooldNum);
d := aFrmMain.WProgUse.Images[BooldIndex+p];
if d <> nil then
dsurface.Draw(SayX - d.Width div 2+AddBloodFram*(2)+jj*w, dy + hpy + ShiftY - 10-AddBloodFram*(2), d.ClientRect, d, True);
Inc(jj);
End;
End;
end;
procedure TActor.DrawChr(dsurface: TDirectDrawSurface; dx, dy: Integer; blend:
Boolean);
var
idx, ax, ay: Integer;
d: TDirectDrawSurface;
ceff: TColorEffect;
wimg: TWMImages;
begin
if not (Dir in [0..7]) then
Exit;
if GetTickCount - loadsurfacetime > 60 * 1000 then
begin
loadsurfacetime := GetTickCount;
LoadSurface; //bodysurface殿捞 loadsurface甫 促矫 何福瘤 臼酒 皋葛府啊 橇府登绰 巴阑 阜澜
end;
loadsurfacetime := GetTickCount;
ceff := GetDrawEffec
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -