📄 m_soldier.pas
字号:
{----------------------------------------------------------------------------}
{ }
{ File(s): m_soldier.h }
{ }
{ Initial conversion by : Ben Watt (ben@delphigamedev.com) }
{ Initial conversion on : 04-Feb-2002 }
{ }
{ This File contains part of convertion of Quake2 source to ObjectPascal. }
{ More information about this project can be found at: }
{ http://www.sulaco.co.za/quake2/ }
{ }
{ Copyright (C) 1997-2001 Id Software, Inc. }
{ }
{ This program is free software; you can redistribute it and/or }
{ modify it under the terms of the GNU General Public License }
{ as published by the Free Software Foundation; either version 2 }
{ of the License, or (at your option) any later version. }
{ }
{ This program is distributed in the hope that it will be useful, }
{ but WITHOUT ANY WARRANTY; without even the implied warranty of }
{ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. }
{ }
{ See the GNU General Public License for more details. }
{ }
{----------------------------------------------------------------------------}
{ Updated on : }
{ Updated by : }
{ }
{----------------------------------------------------------------------------}
{ * Still dependent (to compile correctly) on: }
{ 1.) g_local.h and game.h }
{----------------------------------------------------------------------------}
{ * TODO: }
{ 1.) test compilation with the above two units }
{----------------------------------------------------------------------------}
{
==============================================================================
SOLDIER
==============================================================================
}
unit m_soldier;
interface
const MODEL_SCALE = 1.200000;
var
sound_idle,
sound_sight1,
sound_sight2,
sound_pain_light,
sound_pain,
sound_pain_ss,
sound_death_light,
sound_death,
sound_death_ss,
sound_cock : Integer;
{$I g_local.inc}
{$I m_soldier.inc}
procedure soldier_idle(self : edict_t);
procedure soldier_cock(self : edict_t);
procedure soldier_stand(self : edict_t);
procedure soldier_walk1_random(self : edict_t);
procedure soldier_walk(self : edict_t);
procedure soldier_run(self : edict_t);
procedure soldier_pain (self, other : edict_t; kick : single; damage : integer);
procedure soldier_fire(self : edict_t; flash_number : integer);
procedure soldier_fire1(self : edict_t);
procedure soldier_attack1_refire1(self : edict_t);
procedure soldier_attack1_refire2(self : edict_t);
procedure soldier_fire2(self : edict_t);
procedure soldier_attack2_refire1(self : edict_t);
procedure soldier_attack2_refire2(self : edict_t);
procedure soldier_duck_down(self : edict_t);
procedure soldier_duck_up(self : edict_t);
procedure soldier_fire3(self : edict_t);
procedure soldier_attack3_refire(self : edict_t);
procedure soldier_fire4(self : edict_t);
procedure soldier_fire5(self : edict_t);
procedure soldier_attack5_refire(self : edict_t);
procedure soldier_fire8(self : edict_t);
procedure soldier_attack6_refire(self : edict_t);
procedure soldier_attack(self : edict_t);
procedure soldier_sight(self, other : edict_t);
procedure soldier_duck_hold(self : edict_t);
procedure soldier_dodge(self, attacker : edict_t; eta : single);
procedure soldier_fire6(self : edict_t);
procedure soldier_fire7(self : edict_t);
procedure soldier_dead(self : edict_t);
procedure soldier_die(self, inflictor, attacker : edict_t; damage : integer; point : vec3_t);
procedure SP_monster_soldier_x(self : edict_t);
procedure SP_monster_soldier_light(self : edict_t);
procedure SP_monster_soldier(self : edict_t);
procedure SP_monster_soldier_ss(self : edict_t);
procedure soldier_idle(self : edict_t);
begin
if random() > 0.8 then
gi.sound(self, CHAN_VOICE, sound_idle, 1, ATTN_IDLE, 0);
end;
procedure soldier_cock(self : edict_t);
begin
if self.s.frame = FRAME_stand322 then
gi.sound(self, CHAN_WEAPON, sound_cock, 1, ATTN_IDLE, 0)
else
gi.sound(self, CHAN_WEAPON, sound_cock, 1, ATTN_NORM, 0);
end;
// STAND
const
soldier_frames_stand1 : Array[0..29] of mframe_t =
((aifunc:ai_stand; dist:0; thinkfunc:soldier_idle),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil));
soldier_move_stand1 : mmove_t =
(firstframe:FRAME_stand101; lastframe:FRAME_stand130; frame:soldier_frames_stand1; endfunc:soldier_stand);
soldier_frames_stand3 : Array[0..38] of mframe_t =
((aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:soldier_cock),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil));
soldier_move_stand3 : mmove_t =
(firstframe:FRAME_stand301; lastframe:FRAME_stand339; frame:soldier_frames_stand3; endfunc:soldier_stand);
{$IF false}
soldier_frames_stand4 : Array[0..51] of mframe_t =
((aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:4; thinkfunc:nil),
(aifunc:ai_stand; dist:1; thinkfunc:nil),
(aifunc:ai_stand; dist:-1; thinkfunc:nil),
(aifunc:ai_stand; dist:-2; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil),
(aifunc:ai_stand; dist:0; thinkfunc:nil));
soldier_move_stand4 : mmove_t =
(firstframe:FRAME_stand401; lastframe:FRAME_stand452; frame:soldier_frames_stand4; endfunc:nil);
{$IFEND}
procedure soldier_stand(self : edict_t);
begin
if (self.monsterinfo.currentmove = soldier_move_stand3) or (random() < 0.8) then
self.monsterinfo.currentmove := soldier_move_stand1
else
self.monsterinfo.currentmove := soldier_move_stand3;
end;
//
// WALK
//
procedure soldier_walk1_random(self : edict_t);
begin
if random() > 0.1 then
self.monsterinfo.nextframe := FRAME_walk101;
end;
const
soldier_frames_walk1 : Array[0..32] of mframe_t =
((aifunc:ai_walk; dist:3; thinkfunc:nil),
(aifunc:ai_walk; dist:6; thinkfunc:nil),
(aifunc:ai_walk; dist:2; thinkfunc:nil),
(aifunc:ai_walk; dist:2; thinkfunc:nil),
(aifunc:ai_walk; dist:2; thinkfunc:nil),
(aifunc:ai_walk; dist:1; thinkfunc:nil),
(aifunc:ai_walk; dist:6; thinkfunc:nil),
(aifunc:ai_walk; dist:5; thinkfunc:nil),
(aifunc:ai_walk; dist:3; thinkfunc:nil),
(aifunc:ai_walk; dist:-1; thinkfunc:soldier_walk1_random),
(aifunc:ai_walk; dist:0; thinkfunc:nil),
(aifunc:ai_walk; dist:0; thinkfunc:nil),
(aifunc:ai_walk; dist:0; thinkfunc:nil),
(aifunc:ai_walk; dist:0; thinkfunc:nil),
(aifunc:ai_walk; dist:0; thinkfunc:nil),
(aifunc:ai_walk; dist:0; thinkfunc:nil),
(aifunc:ai_walk; dist:0; thinkfunc:nil),
(aifunc:ai_walk; dist:0; thinkfunc:nil),
(aifunc:ai_walk; dist:0; thinkfunc:nil),
(aifunc:ai_walk; dist:0; thinkfunc:nil),
(aifunc:ai_walk; dist:0; thinkfunc:nil),
(aifunc:ai_walk; dist:0; thinkfunc:nil),
(aifunc:ai_walk; dist:0; thinkfunc:nil),
(aifunc:ai_walk; dist:0; thinkfunc:nil),
(aifunc:ai_walk; dist:0; thinkfunc:nil),
(aifunc:ai_walk; dist:0; thinkfunc:nil),
(aifunc:ai_walk; dist:0; thinkfunc:nil),
(aifunc:ai_walk; dist:0; thinkfunc:nil),
(aifunc:ai_walk; dist:0; thinkfunc:nil),
(aifunc:ai_walk; dist:0; thinkfunc:nil),
(aifunc:ai_walk; dist:0; thinkfunc:nil),
(aifunc:ai_walk; dist:0; thinkfunc:nil),
(aifunc:ai_walk; dist:0; thinkfunc:nil));
soldier_move_walk1 : mmove_t =
(firstframe:FRAME_walk101; lastframe:FRAME_walk133; frame:soldier_frames_walk1; endfunc:nil);
soldier_frames_walk2 : Array[0..9] of mframe_t =
((aifunc:ai_walk; dist:4; thinkfunc:nil),
(aifunc:ai_walk; dist:4; thinkfunc:nil),
(aifunc:ai_walk; dist:9; thinkfunc:nil),
(aifunc:ai_walk; dist:8; thinkfunc:nil),
(aifunc:ai_walk; dist:5; thinkfunc:nil),
(aifunc:ai_walk; dist:1; thinkfunc:nil),
(aifunc:ai_walk; dist:3; thinkfunc:nil),
(aifunc:ai_walk; dist:7; thinkfunc:nil),
(aifunc:ai_walk; dist:6; thinkfunc:nil),
(aifunc:ai_walk; dist:7; thinkfunc:nil));
soldier_move_walk2 : mmove_t =
(firstframe:FRAME_walk209; lastframe:FRAME_walk218; frame:soldier_frames_walk2; endfunc:nil);
procedure soldier_walk(self : edict_t);
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -