?? axemon.pas
字號:
unit AxeMon;
interface
uses
Windows, Messages, SysUtils, Classes, ExtCtrls, Graphics, Controls, Forms, Dialogs,
Grobal2, DxDraws, CliUtil, ClFunc, magiceff, Actor, ClEvent;
const
DEATHEFFECTBASE = 340;
DEATHFIREEFFECTBASE = 2860;
AXEMONATTACKFRAME = 6;
KUDEGIGASBASE = 1445;
COWMONFIREBASE = 1800;
COWMONLIGHTBASE = 1900;
ZOMBILIGHTINGBASE = 350;
ZOMBIDIEBASE = 340;
ZOMBILIGHTINGEXPBASE = 520;
SCULPTUREFIREBASE = 1680;
MOTHPOISONGASBASE = 3590;
DUNGPOISONGASBASE = 3590;
WARRIORELFFIREBASE = 820;
//Jacky
SUPERIORGUARDBASE = 760;
type
TSkeletonOma = class (TActor) //Size:25C
private
protected
EffectSurface: TDirectDrawSurface; //0x240
ax:Integer; //0x244
ay: integer; //0x248
public
constructor Create; override;
//destructor Destroy; override;
procedure CalcActorFrame; override;
function GetDefaultFrame (wmode: Boolean): integer; override;
procedure LoadSurface; override;
procedure Run; override;
procedure DrawChr (dsurface: TDirectDrawSurface; dx, dy: integer; blend: Boolean;boFlag:Boolean); override;
end;
TDualAxeOma = class (TSkeletonOma) //檔嘗帶瘤綽 各
private
public
procedure Run; override;
end;
TCatMon = class (TSkeletonOma)
private
public
procedure DrawChr (dsurface: TDirectDrawSurface; dx, dy: integer; blend: Boolean;boFlag:Boolean); override;
end;
TArcherMon = class (TCatMon)//Size: 0x25C Address: 0x00461A90
public
procedure Run; override;
end;
TScorpionMon = class (TCatMon)
public
end;
THuSuABi = class (TSkeletonOma)
public
procedure LoadSurface; override;
end;
TZombiDigOut = class (TSkeletonOma)
public
procedure RunFrameAction (frame: integer); override;
end;
TZombiZilkin = class (TSkeletonOma)
public
end;
TWhiteSkeleton = class (TSkeletonOma)
public
end;
TGasKuDeGi = class (TActor)//Size 0x274
protected
AttackEffectSurface :TDirectDrawSurface; //0x250
DieEffectSurface :TDirectDrawSurface; //0x254
BoUseDieEffect :Boolean; //0x258
firedir :integer; //0x25C
fire16dir :integer; //0c260
ax :integer; //0x264
ay :integer; //0x268
bx :integer;
by :integer;
public
constructor Create; override;
procedure CalcActorFrame; override;
function GetDefaultFrame (wmode: Boolean): integer; override;
procedure LoadSurface; override;
procedure Run; override;
procedure DrawChr (dsurface: TDirectDrawSurface; dx, dy: integer; blend: Boolean;boFlag:Boolean); override;
procedure DrawEff (dsurface: TDirectDrawSurface; dx, dy: integer); override;
end;
TFireCowFaceMon = class (TGasKuDeGi)
public
function Light: integer; override;
end;
TCowFaceKing = class (TGasKuDeGi)
public
function Light: integer; override;
end;
TZombiLighting = class (TGasKuDeGi)
protected
public
end;
TSuperiorGuard = class (TGasKuDeGi)
protected
public
end;
TExplosionSpider = class (TGasKuDeGi)
protected
public
procedure CalcActorFrame; override;
procedure LoadSurface; override;
end;
TFlyingSpider = class (TSkeletonOma)//Size: 0x25C Address: 0x00461F38
protected
public
procedure CalcActorFrame; override;
end;
TSculptureMon = class (TSkeletonOma)
private
AttackEffectSurface: TDirectDrawSurface;
ax, ay, firedir: integer;
public
procedure CalcActorFrame; override;
procedure LoadSurface; override;
function GetDefaultFrame (wmode: Boolean): integer; override;
procedure DrawEff (dsurface: TDirectDrawSurface; dx, dy: integer); override;
procedure Run; override;
end;
TSculptureKingMon = class (TSculptureMon)
public
end;
TSmallElfMonster = class (TSkeletonOma)
public
end;
TWarriorElfMonster = class (TSkeletonOma)
private
oldframe: integer;
public
procedure RunFrameAction (frame: integer); override; //橇貳烙付促 刀漂竅霸 秦具且老
end;
//大蜈蚣
TElectronicScolpionMon = class (TGasKuDeGi)//Size 0x274 0x3c
protected
public
procedure CalcActorFrame; override;
procedure LoadSurface; override;
end;
TBossPigMon = class (TGasKuDeGi)//0x3d
protected
public
procedure LoadSurface; override;
end;
TKingOfSculpureKingMon = class (TGasKuDeGi)//0x3e
protected
public
procedure CalcActorFrame; override;
procedure LoadSurface; override;
end;
TSkeletonKingMon = class (TGasKuDeGi)//0x3f
protected
public
procedure CalcActorFrame; override;
procedure LoadSurface; override;
procedure Run; override;
end;
TSamuraiMon = class (TGasKuDeGi)//0x41
protected
public
end;
TSkeletonSoldierMon = class (TGasKuDeGi)//0x42 0x43 0x44
protected
public
end;
TSkeletonArcherMon = class (TArcherMon)//Size: 0x26C Address: 0x004623B4 //0x45
AttackEffectSurface :TDirectDrawSurface;//0x25C
bo260:Boolean;
n264:integer;
n268:integer;
protected
public
procedure CalcActorFrame; override;
procedure LoadSurface; override;
procedure Run; override;
procedure DrawEff (dsurface: TDirectDrawSurface; dx, dy: integer); override;
end;
TBanyaGuardMon = class (TSkeletonArcherMon)//Size: 0x270 Address: 0x00462430 0x46 0x47 0x48 0x4e
n26C:TDirectDrawSurface;
protected
public
constructor Create; override;
procedure CalcActorFrame; override;
procedure LoadSurface; override;
procedure Run; override;
procedure DrawEff (dsurface: TDirectDrawSurface; dx, dy: integer); override;
end;
TStoneMonster = class (TSkeletonArcherMon)//Size: 0x270 0x4d 0x4b
n26C:TDirectDrawSurface;
protected
public
constructor Create; override;
procedure CalcActorFrame; override;
procedure LoadSurface; override;
procedure Run; override;
procedure DrawEff (dsurface: TDirectDrawSurface; dx, dy: integer); override;
end;
TPBOMA1Mon = class (TCatMon)//0x49
protected
public
procedure Run; override;
end;
TPBOMA6Mon = class (TCatMon)//0x4f
protected
public
procedure Run; override;
end;
TAngel = class (TBanyaGuardMon)//Size: 0x27C 0x51
n270:Integer;
n274:Integer;
n278:TDirectDrawSurface;
protected
public
procedure LoadSurface; override;
procedure DrawChr (dsurface: TDirectDrawSurface; dx, dy: integer; blend: Boolean;boFlag:Boolean); override;
end;
TFireDragon = class (TSkeletonArcherMon)//0x53
n270:TDirectDrawSurface;
private
procedure AttackEff;
protected
public
constructor Create; override;
procedure CalcActorFrame; override;
procedure LoadSurface; override;
procedure Run; override;
procedure DrawEff (dsurface: TDirectDrawSurface; dx, dy: integer); override;
end;
TDragonStatue = class (TSkeletonArcherMon)//Size: 0x270 0x54
n26C:TDirectDrawSurface;
protected
public
constructor Create; override;
procedure CalcActorFrame; override;
procedure LoadSurface; override;
procedure Run; override;
procedure DrawEff (dsurface: TDirectDrawSurface; dx, dy: integer); override;
end;
implementation
uses
ClMain, SoundUtil, WIL, MShare;
{============================== TSkeletonOma =============================}
// 秦榜 坷付(秦榜, 奴檔嘗秦榜, 秦榜傈葷)
{--------------------------}
constructor TSkeletonOma.Create;
begin
inherited Create;
EffectSurface := nil;
m_boUseEffect := FALSE;
end;
procedure TSkeletonOma.CalcActorFrame;
var
pm: PTMonsterAction;
haircount: integer;
begin
m_nCurrentFrame := -1;
m_boReverseFrame := FALSE;
m_boUseEffect := FALSE;
m_nBodyOffset := GetOffset (m_wAppearance);
pm := GetRaceByPM (m_btRace,m_wAppearance);
if pm = nil then exit;
case m_nCurrentAction of
SM_TURN:
begin
m_nStartFrame := pm.ActStand.start + m_btDir * (pm.ActStand.frame + pm.ActStand.skip);
m_nEndFrame := m_nStartFrame + pm.ActStand.frame - 1;
m_dwFrameTime := pm.ActStand.ftime;
m_dwStartTime := GetTickCount;
m_nDefFrameCount := pm.ActStand.frame;
Shift (m_btDir, 0, 0, 1);
end;
SM_WALK, SM_BACKSTEP:
begin
m_nStartFrame := pm.ActWalk.start + m_btDir * (pm.ActWalk.frame + pm.ActWalk.skip);
m_nEndFrame := m_nStartFrame + pm.ActWalk.frame - 1;
m_dwFrameTime := pm.ActWalk.ftime;
m_dwStartTime := GetTickCount;
m_nMaxTick := pm.ActWalk.UseTick;
m_nCurTick := 0;
//WarMode := FALSE;
m_nMoveStep := 1;
if m_nCurrentAction = SM_WALK then
Shift (m_btDir, m_nMoveStep, 0, m_nEndFrame-m_nStartFrame+1)
else //sm_backstep
Shift (GetBack(m_btDir), m_nMoveStep, 0, m_nEndFrame-m_nStartFrame+1);
end;
SM_DIGUP: //叭扁 絕瀾, SM_DIGUP, 規氫 絕瀾.
begin
if (m_btRace = 23) then begin //or (m_btRace = 54) or (m_btRace = 55) then begin
//歸榜
m_nStartFrame := pm.ActDeath.start;
end else begin
m_nStartFrame := pm.ActDeath.start + m_btDir * (pm.ActDeath.frame + pm.ActDeath.skip);
end;
m_nEndFrame := m_nStartFrame + pm.ActDeath.frame - 1;
m_dwFrameTime := pm.ActDeath.ftime;
m_dwStartTime := GetTickCount;
//WarMode := FALSE;
Shift (m_btDir, 0, 0, 1);
end;
SM_DIGDOWN:
begin
if m_btRace = 55 then begin
//腳薦1 牢 版快 開函腳
m_nStartFrame := pm.ActCritical.start + m_btDir * (pm.ActCritical.frame + pm.ActCritical.skip);
m_nEndFrame := m_nStartFrame + pm.ActCritical.frame - 1;
m_dwFrameTime := pm.ActCritical.ftime;
m_dwStartTime := GetTickCount;
m_boReverseFrame := TRUE;
//WarMode := FALSE;
Shift (m_btDir, 0, 0, 1);
end;
end;
SM_HIT,
SM_FLYAXE,
SM_LIGHTING:
begin
m_nStartFrame := pm.ActAttack.start + m_btDir * (pm.ActAttack.frame + pm.ActAttack.skip);
m_nEndFrame := m_nStartFrame + pm.ActAttack.frame - 1;
m_dwFrameTime := pm.ActAttack.ftime;
m_dwStartTime := GetTickCount;
//WarMode := TRUE;
m_dwWarModeTime := GetTickCount;
if (m_btRace = 16) or (m_btRace = 54) then
m_boUseEffect := TRUE;
Shift (m_btDir, 0, 0, 1);
end;
SM_STRUCK:
begin
m_nStartFrame := pm.ActStruck.start + m_btDir * (pm.ActStruck.frame + pm.ActStruck.skip);
m_nEndFrame := m_nStartFrame + pm.ActStruck.frame - 1;
m_dwFrameTime := m_dwStruckFrameTime; //pm.ActStruck.ftime;
m_dwStartTime := GetTickCount;
end;
SM_DEATH:
begin
m_nStartFrame := pm.ActDie.start + m_btDir * (pm.ActDie.frame + pm.ActDie.skip);
m_nEndFrame := m_nStartFrame + pm.ActDie.frame - 1;
m_nStartFrame := m_nEndFrame; //
m_dwFrameTime := pm.ActDie.ftime;
m_dwStartTime := GetTickCount;
end;
SM_NOWDEATH:
begin
m_nStartFrame := pm.ActDie.start + m_btDir * (pm.ActDie.frame + pm.ActDie.skip);
m_nEndFrame := m_nStartFrame + pm.ActDie.frame - 1;
m_dwFrameTime := pm.ActDie.ftime;
m_dwStartTime := GetTickCount;
if m_btRace <> 22 then
m_boUseEffect := TRUE;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -