📄 actor.pas
字号:
m_nAppearSound :Integer; // 0 //0x194
m_nNormalSound :Integer; // 1 //0x198
m_nAttackSound :Integer; // 2 //0x19C
m_nWeaponSound :Integer; // 3 //0x1A0
m_nScreamSound :Integer; // 4 //0x1A4
m_nDieSound :Integer; // 5 SM_DEATHNOW //0x1A8
m_nDie2Sound :Integer; //0x1AC
m_nMagicStartSound :Integer; //0x1B0
m_nMagicFireSound :Integer; //0x1B4
m_nMagicExplosionSound :Integer; //0x1B8
m_Action :pTMonsterAction;
private
function GetMessage(ChrMsg:pTChrMsg):Boolean;
protected
m_nStartFrame :Integer; //0x1BC //0x1A8
m_nEndFrame :Integer; //0x1C0 //0x1AC
m_nCurrentFrame :Integer; //0x1C4 //0x1B0
m_nEffectStart :Integer; //0x1C8 //0x1B4
m_nEffectFrame :Integer; //0x1CC //0x1B8
m_nEffectEnd :Integer; //0x1D0 //0x1BC
m_dwEffectStartTime :LongWord;//0x1D4 //0x1C0
m_dwEffectFrameTime :LongWord;//0x1D8 //0x1C4
m_dwFrameTime :LongWord; //0x1DC //0x1C8
m_dwStartTime :LongWord; //0x1E0 //0x1CC
m_nMaxTick :Integer; //0x1E4
m_nCurTick :Integer; //0x1E8
m_nMoveStep :Integer; //0x1EC
m_boMsgMuch :Boolean; //0x1F0
m_dwStruckFrameTime :LongWord; //0x1F4
m_nCurrentDefFrame :Integer; //0x1F8 //0x1E4
m_dwDefFrameTime :LongWord; //0x1FC //0x1E8
m_nDefFrameCount :Integer; //0x200 //0x1EC
m_nSkipTick :Integer; //0x204
m_dwSmoothMoveTime :LongWord; //0x208
m_dwGenAnicountTime :LongWord; //0x20C
m_dwLoadSurfaceTime :LongWord; //0x210 //0x200
m_dwTDBtimer :LongWord;
m_nOldx :Integer;
m_nOldy :Integer;
m_nOldDir :Integer; //0x214 0x218 0x21C
m_nActBeforeX :Integer;
m_nActBeforeY :Integer; //0x220 0x224
m_nWpord :Integer; //0x228
procedure CalcActorFrame; dynamic;
procedure DefaultMotion; dynamic;
function GetDefaultFrame (wmode: Boolean): integer; dynamic;
procedure DrawEffSurface (dsurface, source: TDirectDrawSurface; ddx, ddy: integer; blend: Boolean; ceff: TColorEffect);dynamic;
procedure DrawWeaponGlimmer (dsurface: TDirectDrawSurface; ddx, ddy: integer);
public
m_MsgList: TGList; //list of PTChrMsg 0x22C //0x21C
RealActionMsg: TChrMsg; //FrmMain 0x230
constructor Create; dynamic;
destructor Destroy; override;
procedure SendMsg (wIdent:Word; nX,nY, ndir,nFeature,nState:Integer;sStr:String;nSound:Integer);
procedure UpdateMsg(wIdent:Word; nX,nY, ndir,nFeature,nState:Integer;sStr:String;nSound:Integer);
procedure CleanUserMsgs;
procedure ProcMsg;
procedure ProcHurryMsg;
function IsIdle: Boolean;
function ActionFinished: Boolean;
function CanWalk: Integer;
function CanRun: Integer;
function Strucked: Boolean;
procedure Shift (dir, step, cur, max: integer);
procedure ReadyAction (msg: TChrMsg);
function CharWidth: Integer;
function CharHeight: Integer;
function CheckSelect (dx, dy: integer): Boolean;
procedure CleanCharMapSetting (x, y: integer);
procedure Say (str: string);
procedure SetSound; dynamic;
procedure Run; dynamic;
procedure RunSound; dynamic;
procedure RunActSound (frame: integer); dynamic;
procedure RunFrameAction (frame: integer); dynamic;
procedure ActionEnded; dynamic;
function Move (step: integer): Boolean;
procedure MoveFail;
function CanCancelAction: Boolean;
procedure CancelAction;
procedure FeatureChanged; dynamic;
function Light: integer; dynamic;
procedure LoadSurface; dynamic;
function GetDrawEffectValue: TColorEffect;
procedure DrawChr (dsurface: TDirectDrawSurface; dx, dy: integer; blend: Boolean;boFlag:Boolean); dynamic;
procedure DrawEff (dsurface: TDirectDrawSurface; dx, dy: integer); dynamic;
end;
TNpcActor = class (TActor)
private
m_nEffX :Integer; //0x240
m_nEffY :Integer; //0x244
m_bo248 :Boolean; //0x248
m_dwUseEffectTick :LongWord; //0x24C
m_EffSurface :TDirectDrawSurface; //0x250
public
constructor Create; override;
procedure Run; override;
procedure CalcActorFrame; override;
function GetDefaultFrame (wmode: Boolean): integer; override;
procedure LoadSurface; override;
procedure DrawChr (dsurface: TDirectDrawSurface; dx, dy: integer; blend: Boolean;boFlag:Boolean); override;
procedure DrawEff (dsurface: TDirectDrawSurface; dx, dy: integer); override;
end;
THumActor = class (TActor)//Size: 0x27C Address: 0x00475BB8
private
m_HairSurface :TDirectDrawSurface; //0x250 //0x240
m_WeaponSurface :TDirectDrawSurface; //0x254 //0x244
m_HumWinSurface :TDirectDrawSurface; //0x258 //0x248
m_HelmetSurface :TDirectDrawSurface;
m_boWeaponEffect :Boolean; //0x25C //0x24C
m_nCurWeaponEffect :Integer; //0x260 //0x250
m_nCurBubbleStruck :Integer; //0x264 //0x254
m_dwWeaponpEffectTime :LongWord; //0x268
m_boHideWeapon :Boolean; //0x26C
m_nFrame :Integer;
m_dwFrameTick :LongWord;
m_dwFrameTime :LongWord;
m_bo2D0 :Boolean;
protected
procedure CalcActorFrame; override;
procedure DefaultMotion; override;
function GetDefaultFrame (wmode: Boolean): integer; override;
public
constructor Create; override;
destructor Destroy; override;
procedure Run; override;
procedure RunFrameAction (frame: integer); override;
function Light: integer; override;
procedure LoadSurface; override;
procedure DoWeaponBreakEffect;
procedure DrawChr (dsurface: TDirectDrawSurface; dx, dy: integer; blend: Boolean;boFlag:Boolean); override;
end;
function GetRaceByPM (race: integer;Appr:word): PTMonsterAction;
function aGetMonImg (appr: integer): TWMImages;
function GetOffset (appr: integer): integer;
function GetNpcOffset(nAppr:Integer):Integer;
implementation
uses
ClMain, SoundUtil, clEvent, MShare;
function GetRaceByPM (race: integer;Appr:word): pTMonsterAction;
begin
Result := nil;
case Race of
9{01}: Result:=@MA9; //475D70
10{02}: Result:=@MA10; //475D7C
11{03}: Result:=@MA11; //475D88
12{04}: Result:=@MA12; //475D94
13{05}: Result:=@MA14; //475DA0
14{06}: Result:=@MA14; //475DAC
15{07}: Result:=@MA15; //475DB8
16{08}: Result:=@MA16; //475DC4
17{06}: Result:=@MA14; //475DAC
18{06}: Result:=@MA14; //475DAC
19{0A}: Result:=@MA19; //475DDC
20{0A}: Result:=@MA19; //475DDC
21{0A}: Result:=@MA19; //475DDC
22{07}: Result:=@MA15; //475DB8
23{06}: Result:=@MA14; //475DAC
24{04}: Result:=@MA12; //475D94
30{09}: Result:=@MA17; //475DD0
31{09}: Result:=@MA17; //475DD0
32{0F}: Result:=@MA24; //475E18
33{10}: Result:=@MA25; //475E24
34{11}: Result:=@MA30; //475E30 赤月恶魔
35{12}: Result:=@MA31; //475E3C
36{13}: Result:=@MA32; //475E48
37{0A}: Result:=@MA19; //475DDC
40{0A}: Result:=@MA19; //475DDC
41{0B}: Result:=@MA20; //475DE8
42{0B}: Result:=@MA20; //475DE8
43{0C}: Result:=@MA21; //475DF4
45{0A}: Result:=@MA19; //475DDC
47{0D}: Result:=@MA22; //475E00
48{0E}: Result:=@MA23; //475E0C
49{0E}: Result:=@MA23; //475E0C
50{27}: begin//475F32
case Appr of
23{01}: Result := @MA36; //475F77
24{02}: Result := @MA37; //475F80
25{02}: Result := @MA37; //475F80
26{00}: Result := @MA35; //475F9B
27{02}: Result := @MA37; //475F80
28{00}: Result := @MA35; //475F9B
29{00}: Result := @MA35; //475F9B
30{00}: Result := @MA35; //475F9B
31{00}: Result := @MA35; //475F9B
32{02}: Result := @MA37; //475F80
33{00}: Result := @MA35; //475F9B
34{00}: Result := @MA35; //475F9B
35{03}: Result := @MA41; //475F89
36{03}: Result := @MA41; //475F89
37{03}: Result := @MA41; //475F89
38{03}: Result := @MA41; //475F89
39{03}: Result := @MA41; //475F89
40{03}: Result := @MA41; //475F89
41{03}: Result := @MA41; //475F89
42{04}: Result := @MA46; //475F92
43{04}: Result := @MA46; //475F92
44{04}: Result := @MA46; //475F92
45{04}: Result := @MA46; //475F92
46{04}: Result := @MA46; //475F92
47{04}: Result := @MA46; //475F92
48{03}: Result := @MA41; //楼梯
49{03}: Result := @MA41; //公告牌
50{03}: Result := @MA41; //杂物
51{00}: Result := @MA35; //转生NPC
52{00}: Result := @MA41; //圣诞雪人
53{03}: Result := @MA41; //龙井
54{03}: Result := @MA41; //骷髅骨头
55{03}: Result := @MA41; //守卫
56{05}: Result := @MA55;
57{03}: Result := @MA41;
58{03}: Result := @MA57;
59{05}: Result := @MA41;
60{03}: Result := @MA46;
61{00}: Result := @MA46;
62{00}: Result := @MA46;
63{00}: Result := @MA46;
64{00}: Result := @MA46;
65{00}: Result := @MA46;
66{00}: Result := @MA59; //圣诞树
67{00}: Result := @MA56;
68{05}: Result := @MA57;
69{05}: Result := @MA57;
70{05}: Result := @MA57;
71{05}: Result := @MA57;
72{05}: Result := @MA57;
73{05}: Result := @MA57;
74{05}: Result := @MA41;
75{05}: Result := @MA57;
76{05}: Result := @MA57;
77{05}: Result := @MA57;
78{05}: Result := @MA41;
79{05}: Result := @MA41;
80{05}: Result := @MA41;
82{05}: Result := @MA57;
83{05}: Result := @MA41;
84{05}: Result := @MA41;
86{05}: Result := @MA41;
87{05}: Result := @MA41;
88{05}: Result := @MA57;
89{05}: Result := @MA57;
90{05}: Result := @MA57;
91{05}: Result := @MA58;
92{05}: Result := @MA41;
93{05}: Result := @MA41;
else Result := @MA35;
end;
end;
52{0A}: Result:=@MA19; //475DDC
53{0A}: Result:=@MA19; //475DDC
54{14}: Result:=@MA28; //475E54
55{15}: Result:=@MA29; //475E60
60{16}: Result:=@MA33; //475E6C
61{16}: Result:=@MA33; //475E6C
62{16}: Result:=@MA33; //475E6C
63{17}: Result:=@MA34; //475E78
64{18}: Result:=@MA19; //475E84
65{18}: Result:=@MA19; //475E84
66{18}: Result:=@MA19; //475E84
67{18}: Result:=@MA19; //475E84
68{18}: Result:=@MA19; //475E84
69{18}: Result:=@MA19; //475E84
70{19}: Result:=@MA33; //475E90
71{19}: Result:=@MA33; //475E90
72{19}: Result:=@MA33; //475E90
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -