index c9b4ff7a3c9119d30a16411c8d7cfa9d3ad52144..01a486d0a7dd6e7a2e9966f85326f33609b75f0b 100644 (file)
uses
SysUtils, Classes, Math, e_log,
uses
SysUtils, Classes, Math, e_log,
- r_graphics, g_options, r_animations,
+ r_graphics, g_options, r_animations, r_game,
MAPDEF,
g_base, g_basic, g_game, g_phys,
g_monsters
;
type
MAPDEF,
g_base, g_basic, g_game, g_phys,
g_monsters
;
type
- TMonsterDirected = array [TDirection.D_LEFT..TDirection.D_RIGHT] of DWORD;
- TMonsterAnims = array [ANIM_SLEEP..ANIM_PAIN] of TMonsterDirected;
+ TMonsterAnims = array [ANIM_SLEEP..ANIM_PAIN, TDirection.D_LEFT..TDirection.D_RIGHT] of DWORD;
var
VileFire: DWORD;
var
VileFire: DWORD;
end;
procedure r_Monsters_Load;
end;
procedure r_Monsters_Load;
- var m, a: Integer; s, info: String; FramesID: DWORD;
+ var m, a: Integer; s: String; FramesID: DWORD;
begin
g_Frames_CreateWAD(nil, 'FRAMES_MONSTER_BARREL_SLEEP', GameWAD+':MTEXTURES\BARREL_SLEEP', 64, 64, 3);
g_Frames_CreateWAD(nil, 'FRAMES_MONSTER_BARREL_DIE', GameWAD+':MTEXTURES\BARREL_DIE', 64, 64, 4);
begin
g_Frames_CreateWAD(nil, 'FRAMES_MONSTER_BARREL_SLEEP', GameWAD+':MTEXTURES\BARREL_SLEEP', 64, 64, 3);
g_Frames_CreateWAD(nil, 'FRAMES_MONSTER_BARREL_DIE', GameWAD+':MTEXTURES\BARREL_DIE', 64, 64, 4);
end;
procedure r_Monsters_Draw (constref monster: TMonster);
end;
procedure r_Monsters_Draw (constref monster: TMonster);
- var m: TMirrorType; dx, dy, c, fX, fY: Integer; o: TObj;
+ var m: TMirrorType; dx, dy, c, fX, fY, mw, mh: Integer; o: TObj;
begin
with monster do
begin
begin
with monster do
begin
if MonsterType = MONSTER_VILE then
if MonsterState = MONSTATE_SHOOT then
if GetPos(MonsterTargetUID, @o) then
if MonsterType = MONSTER_VILE then
if MonsterState = MONSTATE_SHOOT then
if GetPos(MonsterTargetUID, @o) then
- r_AnimationState_Draw(VileFire, VileFireAnim, o.X + o.Rect.X + (o.Rect.Width div 2) - 32, o.Y + o.Rect.Y + o.Rect.Height - 128, TMirrorType.None);
+ r_AnimState_Draw(VileFire, VileFireAnim, o.X + o.Rect.X + (o.Rect.Width div 2) - 32, o.Y + o.Rect.Y + o.Rect.Height - 128, 0, TMirrorType.None, False);
// Не в области рисования не ресуем:
//FIXME!
// Не в области рисования не ресуем:
//FIXME!
// Расстояние от края текстуры до края визуального положения объекта на текстуре:
c := (MONSTERTABLE[MonsterType].Rect.X - dx) + MONSTERTABLE[MonsterType].Rect.Width;
// Расстояние от края хит бокса до края визуального положения объекта на текстуре:
// Расстояние от края текстуры до края визуального положения объекта на текстуре:
c := (MONSTERTABLE[MonsterType].Rect.X - dx) + MONSTERTABLE[MonsterType].Rect.Width;
// Расстояние от края хит бокса до края визуального положения объекта на текстуре:
- //dx := DirAnim[MonsterAnim, GameDirection].Width - c - MONSTERTABLE[MonsterType].Rect.X;
- dx := 64 - c - MONSTERTABLE[MonsterType].Rect.X; // !!! ^^^
+ g_Frames_GetFrameSize(monFrames[MonsterType, MonsterAnim, GameDirection], mw, mh);
+ dx := mw - c - MONSTERTABLE[MonsterType].Rect.X; // !!! ^^^
// Т.к. двигать текстуру нужно будет в противоположном направлении:
dx := -dx;
// Это значит: dX := -frameWidth - animDeltaX + hitX + hitWidth + hitX
// Т.к. двигать текстуру нужно будет в противоположном направлении:
dx := -dx;
// Это значит: dX := -frameWidth - animDeltaX + hitX + hitWidth + hitX
dy := MONSTER_ANIMTABLE[MonsterType].AnimDeltaRight[MonsterAnim].Y;
end;
dy := MONSTER_ANIMTABLE[MonsterType].AnimDeltaRight[MonsterAnim].Y;
end;
- r_AnimationState_Draw(monFrames[MonsterType, MonsterAnim, GameDirection], DirAnim[MonsterAnim, GameDirection], fX + dx, fY + dy, m);
+ r_AnimState_Draw(monFrames[MonsterType, MonsterAnim, GameDirection], DirAnim[MonsterAnim, GameDirection], fX + dx, fY + dy, 0, m, False);
end;
if g_debug_Frames then
end;
if g_debug_Frames then