📄 actor.pas
字号:
m_nShiftX :Integer; //0x98
m_nShiftY :Integer; //0x9C
m_nPx :Integer; //0xA0
m_nHpx :Integer; //0xA4
m_nWpx :Integer; //0xA4
m_nSpx :Integer; //身体图片显示位置
m_nPy :Integer;
m_nHpy :Integer;
m_nWpy :Integer;
m_nSpy :Integer; //头发图片显示位置
m_nRx :Integer;
m_nRy :Integer; //武器图片显示位置
m_nDownDrawLevel :Integer; //0xC8
m_nTargetX :Integer;
m_nTargetY :Integer; //0xCC 0xD0
m_nTargetRecog :Integer; //0xD4
m_nHiterCode :Integer; //0xD8
m_nMagicNum :Integer; //0xDC
m_nCurrentEvent :Integer; //辑滚狼 捞亥飘 酒捞叼
m_boDigFragment :Boolean; //捞锅 邦豹捞 龙捞 某脸绰瘤..
m_boThrow :Boolean;
m_nBodyOffset :Integer; //0x0E8 //0x0D0
m_nHairOffset :Integer; //0x0EC
m_nHumWinOffset :Integer; //0x0F0
m_nWeaponOffset :Integer; //0x0F4
m_boUseMagic :Boolean; //0x0F8 //0xE0
m_boHitEffect :Boolean; //0x0F9 //0xE1
m_boUseEffect :Boolean; //0x0FA //0xE2
m_nHitEffectNumber :Integer; //0xE4
m_dwWaitMagicRequest :LongWord;
m_nWaitForRecogId :Integer; //磊脚捞 荤扼瘤搁 WaitFor狼 actor甫 visible 矫挪促.
m_nWaitForFeature :Integer;
m_nWaitForStatus :Integer;
m_nCurEffFrame :Integer; //0x110
m_nSpellFrame :Integer; //0x114
m_CurMagic :TUseMagicInfo; //0x118 //m_CurMagic.EffectNumber 0x110
//GlimmingMode: Boolean;
//CurGlimmer: integer;
//MaxGlimmer: integer;
//GlimmerTime: longword;
m_nGenAniCount :Integer; //0x124
m_boOpenHealth :Boolean; //0x140
m_noInstanceOpenHealth :Boolean;//0x141
m_dwOpenHealthStart :LongWord;
m_dwOpenHealthTime :LongWord;//Integer;jacky
//SRc: TRect; //Screen Rect 拳搁狼 角力谅钎(付快胶 扁霖)
m_BodySurface :TDirectDrawSurface; //0x14C //0x134
m_boGrouped :Boolean; //0x150 是否组队
m_nCurrentAction :Integer; //0x154 //0x13C
m_boReverseFrame :Boolean; //0x158
m_boWarMode :Boolean; //0x159
m_dwWarModeTime :LongWord; //0x15C
m_nChrLight :Integer; //0x160
m_nMagLight :Integer; //0x164
m_nRushDir :Integer; //0, 1 //0x168
m_nXxI :Integer; //0x16C
m_boLockEndFrame :Boolean; //0x170
m_dwLastStruckTime :LongWord; //0x174
m_dwSendQueryUserNameTime :LongWord; //0x178
m_dwDeleteTime :LongWord;//0x17C
//荤款靛 瓤苞
m_nMagicStruckSound :Integer; //0x180 被魔法攻击弯腰发出的声音
m_boRunSound :Boolean; //0x184 跑步发出的声音
m_nFootStepSound :Integer; //CM_WALK, CM_RUN //0x188 走步声
m_nStruckSound :Integer; //SM_STRUCK //0x18C 弯腰声音
m_nStruckWeaponSound :Integer; //0x190 被指定武器攻击弯腰声音
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_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);
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_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
10,24: Result := @MA10;
11: Result := @MA11;
12: Result := @MA12;
13: Result := @MA13;
14, 17, 18, 23: Result := @MA14;
15, 22: Result := @MA15;
16: Result := @MA16;
30, 31: Result := @MA17;
19, 20, 21, 40, 45, 52, 53: Result := @MA19;
41, 42: Result := @MA20;
43: Result := @MA21;
47: Result := @MA22;
48, 49: Result := @MA23;
32: Result := @MA24; //傈哎, 傍拜捞 2啊瘤 规侥
// 33: Result := @MA25;
54: Result := @MA28;
55: Result := @MA29;
98: Result := @MA27;
99: Result := @MA26;
50: Result := @MA50;
33: Result := @MA51;
34: Result := @MA52;
end;
}
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -