⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 m_float.pas

📁 雷神之锤2(Quake2)Delphi源码
💻 PAS
📖 第 1 页 / 共 3 页
字号:
    (aifunc: ai_walk;  dist: 5;  thinkfunc: Nil),
    (aifunc: ai_walk;  dist: 5;  thinkfunc: Nil),
    (aifunc: ai_walk;  dist: 5;  thinkfunc: Nil),
    (aifunc: ai_walk;  dist: 5;  thinkfunc: Nil),
    (aifunc: ai_walk;  dist: 5;  thinkfunc: Nil),
    (aifunc: ai_walk;  dist: 5;  thinkfunc: Nil),
    (aifunc: ai_walk;  dist: 5;  thinkfunc: Nil),
    (aifunc: ai_walk;  dist: 5;  thinkfunc: Nil),
    (aifunc: ai_walk;  dist: 5;  thinkfunc: Nil),
    (aifunc: ai_walk;  dist: 5;  thinkfunc: Nil),
    (aifunc: ai_walk;  dist: 5;  thinkfunc: Nil),
    (aifunc: ai_walk;  dist: 5;  thinkfunc: Nil),
    (aifunc: ai_walk;  dist: 5;  thinkfunc: Nil),
    (aifunc: ai_walk;  dist: 5;  thinkfunc: Nil),
    (aifunc: ai_walk;  dist: 5;  thinkfunc: Nil),
    (aifunc: ai_walk;  dist: 5;  thinkfunc: Nil),
    (aifunc: ai_walk;  dist: 5;  thinkfunc: Nil),
    (aifunc: ai_walk;  dist: 5;  thinkfunc: Nil) );
  floater_move_walk : mmove_t = (firstframe: FRAME_stand101;  lastframe: FRAME_stand152;  frame: @floater_frames_walk;  endfunc: Nil);

  floater_frames_run : array [0..51] of mframe_t = (
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil),
    (aifunc: ai_run;  dist: 13;  thinkfunc: Nil)
);
  floater_move_run : mmove_t = (firstframe: FRAME_stand101;  lastframe: FRAME_stand152;  frame: @floater_frames_run;  endfunc: Nil);

procedure floater_run (self : edict_p); cdecl;
begin
  if (self.monsterinfo.aiflags AND AI_STAND_GROUND) <> 0
  then self.monsterinfo.currentmove := @floater_move_stand1
  else self.monsterinfo.currentmove := @floater_move_run;
end;//procedure

procedure floater_walk (self : edict_p);
begin
  self.monsterinfo.currentmove := @floater_move_walk;
end;//procedure

procedure floater_wham (self : edict_p); cdecl;
//	static	vec3_t	aim = {MELEE_DISTANCE, 0, 0};
const
  aim : vec3_t = (MELEE_DISTANCE, 0, 0);
begin
  gi.sound (self, CHAN_WEAPON, sound_attack3, 1, ATTN_NORM, 0);
//  fire_hit (self, aim, 5 + rand() % 6, -50);
//Y  fire_hit (self, aim, 5 + random(6), -50);
end;//procedure

procedure floater_zap (self : edict_p); cdecl;
var
  forward_, right,
  origin,
  dir,
  offset  : vec3_t;
begin
  VectorSubtract (self.enemy.s.origin, self.s.origin, dir);

  AngleVectors (self.s.angles, @forward_, @right, Nil);
  //FIXME use a flash and replace these two lines with the commented one
  VectorSet (offset, 18.5, -0.9, 10);
//Y  G_ProjectSource (self.s.origin, offset, forward_, right, origin);
//idsoft	G_ProjectSource (self->s.origin, monster_flash_offset[flash_number], forward, right, origin);

  gi.sound (self, CHAN_WEAPON, sound_attack2, 1, ATTN_NORM, 0);

  //FIXME use the flash, Luke
  gi.WriteByte (svc_temp_entity);
//Y  gi.WriteByte (TE_SPLASH);
  gi.WriteByte (32);
  gi.WritePosition (origin);
  gi.WriteDir (dir);
  gi.WriteByte (1);   //sparks
  gi.multicast (origin, MULTICAST_PVS);

//  T_Damage (self.enemy, self, self, dir, self.enemy.s.origin, vec3_origin, 5 + rand() % 6, -10, DAMAGE_ENERGY, MOD_UNKNOWN);
//Y  T_Damage (self.enemy, self, self, dir, self.enemy.s.origin, vec3_origin, 5 + random(6), -10, DAMAGE_ENERGY, MOD_UNKNOWN);
end;//procedure

procedure floater_attack (self : edict_p);
begin
  self.monsterinfo.currentmove := @floater_move_attack1;
end;//procedure


procedure floater_melee (self : edict_p);
begin
  if (random < 0.5)
  then self.monsterinfo.currentmove := @floater_move_attack3
  else self.monsterinfo.currentmove := @floater_move_attack2;
end;//procedure


procedure floater_pain (self, other : edict_p; kick : float; damage : integer);
var
  n : integer;
begin
  if (self.health < (self.max_health / 2)) then
    self.s.skinnum := 1;

  if (level.time < self.pain_debounce_time) then
    Exit;

  self.pain_debounce_time := level.time + 3;
  if (skill.value = 3) then
    Exit;  // no pain anims in nightmare

//  n = (rand() + 1) % 3;
//  n := (random( ???MAX_INT??? ) + 1) mod 3;
  n := random(3);
  if (n = 0)
  then begin
    gi.sound (self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
    self.monsterinfo.currentmove := @floater_move_pain1;
  end
  else begin
    gi.sound (self, CHAN_VOICE, sound_pain2, 1, ATTN_NORM, 0);
    self.monsterinfo.currentmove := @floater_move_pain2;
  end;
end;//procedure

procedure floater_dead (self : edict_p); cdecl;
begin
  VectorSet (self.mins, -16, -16, -24);
  VectorSet (self.maxs, 16, 16, -8);
  self.movetype := MOVETYPE_TOSS;
  self.svflags  := self.svflags OR SVF_DEADMONSTER;
  self.nextthink := 0;
  gi.linkentity (self);
end;//procedure

//procedure floater_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
procedure floater_die (self, inflictor, attacker : edict_p; damage : integer; point : vec3_t);
begin
  gi.sound (self, CHAN_VOICE, sound_death1, 1, ATTN_NORM, 0);
//Y  BecomeExplosion1(self);
end;//procedure

//*QUAKED monster_floater (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight
procedure SP_monster_floater (self : edict_p);
begin
  if (deathmatch.value <> 0) then
  begin
//Y    G_FreeEdict (self);
    Exit;
  end;

  sound_attack2 := gi.soundindex ('floater/fltatck2.wav');
  sound_attack3 := gi.soundindex ('floater/fltatck3.wav');
  sound_death1 := gi.soundindex ('floater/fltdeth1.wav');
  sound_idle := gi.soundindex ('floater/fltidle1.wav');
  sound_pain1 := gi.soundindex ('floater/fltpain1.wav');
  sound_pain2 := gi.soundindex ('floater/fltpain2.wav');
  sound_sight := gi.soundindex ('floater/fltsght1.wav');

  gi.soundindex ('floater/fltatck1.wav');

  self.s.sound := gi.soundindex ('floater/fltsrch1.wav');

  self.movetype := MOVETYPE_STEP;
  self.solid := SOLID_BBOX;
  self.s.modelindex := gi.modelindex ('models/monsters/float/tris.md2');
  VectorSet (self.mins, -24, -24, -24);
  VectorSet (self.maxs, 24, 24, 32);

  self.health := 200;
  self.gib_health := -80;
  self.mass := 300;

  self.pain := @floater_pain;
  self.die := @floater_die;

  self.monsterinfo.stand := @floater_stand;
  self.monsterinfo.walk := @floater_walk;
  self.monsterinfo.run := @floater_run;
//idsoft	self->monsterinfo.dodge = floater_dodge;
  self.monsterinfo.attack := @floater_attack;
  self.monsterinfo.melee := @floater_melee;
  self.monsterinfo.sight := @floater_sight;
  self.monsterinfo.idle := @floater_idle;

  gi.linkentity (self);

  if (random <= 0.5)
  then self.monsterinfo.currentmove := @floater_move_stand1
  else self.monsterinfo.currentmove := @floater_move_stand2;

  self.monsterinfo.scale := MODEL_SCALE;

//Y  flymonster_start (self);
end;//procedure

// End of file
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -