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

📄 m_mutant.pas

📁 雷神之锤2(Quake2)Delphi源码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
//100%
{$ALIGN ON}{$MINENUMSIZE 4}
{----------------------------------------------------------------------------}
{                                                                            }
{ File(s): game\m_mutant.c                                                   }
{          game\m_mutant.h                                                   }
{ Content: Saving and loading games                                          }
{                                                                            }
{ Initial conversion by: Carl A Kenner (carlkenner@hotmail.com)              }
{ Initial conversion on: 1-Mar-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: 3-Mar-2002                                                     }
{ Updated by: Carl A Kenner                                                  }
{                                                                            }
{----------------------------------------------------------------------------}
{ * Still dependent (to compile correctly) on:                               }
{ g_ai, g_monster, g_weapon, g_combat, m_move                                }
{----------------------------------------------------------------------------}
{ * TODO:                                                                    }
{ check for errors                                                           }
{----------------------------------------------------------------------------}
unit m_mutant;

{$DEFINE NODEPEND}

interface

// G:\quake2\baseq2\models/monsters/mutant

// This [part of the - CAK] file generated by ModelGen - Do NOT Modify
const
  FRAME_attack01 = 0;
  FRAME_attack02 = 1;
  FRAME_attack03 = 2;
  FRAME_attack04 = 3;
  FRAME_attack05 = 4;
  FRAME_attack06 = 5;
  FRAME_attack07 = 6;
  FRAME_attack08 = 7;
  FRAME_attack09 = 8;
  FRAME_attack10 = 9;
  FRAME_attack11 = 10;
  FRAME_attack12 = 11;
  FRAME_attack13 = 12;
  FRAME_attack14 = 13;
  FRAME_attack15 = 14;
  FRAME_death101 = 15;
  FRAME_death102 = 16;
  FRAME_death103 = 17;
  FRAME_death104 = 18;
  FRAME_death105 = 19;
  FRAME_death106 = 20;
  FRAME_death107 = 21;
  FRAME_death108 = 22;
  FRAME_death109 = 23;
  FRAME_death201 = 24;
  FRAME_death202 = 25;
  FRAME_death203 = 26;
  FRAME_death204 = 27;
  FRAME_death205 = 28;
  FRAME_death206 = 29;
  FRAME_death207 = 30;
  FRAME_death208 = 31;
  FRAME_death209 = 32;
  FRAME_death210 = 33;
  FRAME_pain101  = 34;
  FRAME_pain102  = 35;
  FRAME_pain103  = 36;
  FRAME_pain104  = 37;
  FRAME_pain105  = 38;
  FRAME_pain201  = 39;
  FRAME_pain202  = 40;
  FRAME_pain203  = 41;
  FRAME_pain204  = 42;
  FRAME_pain205  = 43;
  FRAME_pain206  = 44;
  FRAME_pain301  = 45;
  FRAME_pain302  = 46;
  FRAME_pain303  = 47;
  FRAME_pain304  = 48;
  FRAME_pain305  = 49;
  FRAME_pain306  = 50;
  FRAME_pain307  = 51;
  FRAME_pain308  = 52;
  FRAME_pain309  = 53;
  FRAME_pain310  = 54;
  FRAME_pain311  = 55;
  FRAME_run03    = 56;
  FRAME_run04    = 57;
  FRAME_run05    = 58;
  FRAME_run06    = 59;
  FRAME_run07    = 60;
  FRAME_run08    = 61;
  FRAME_stand101 = 62;
  FRAME_stand102 = 63;
  FRAME_stand103 = 64;
  FRAME_stand104 = 65;
  FRAME_stand105 = 66;
  FRAME_stand106 = 67;
  FRAME_stand107 = 68;
  FRAME_stand108 = 69;
  FRAME_stand109 = 70;
  FRAME_stand110 = 71;
  FRAME_stand111 = 72;
  FRAME_stand112 = 73;
  FRAME_stand113 = 74;
  FRAME_stand114 = 75;
  FRAME_stand115 = 76;
  FRAME_stand116 = 77;
  FRAME_stand117 = 78;
  FRAME_stand118 = 79;
  FRAME_stand119 = 80;
  FRAME_stand120 = 81;
  FRAME_stand121 = 82;
  FRAME_stand122 = 83;
  FRAME_stand123 = 84;
  FRAME_stand124 = 85;
  FRAME_stand125 = 86;
  FRAME_stand126 = 87;
  FRAME_stand127 = 88;
  FRAME_stand128 = 89;
  FRAME_stand129 = 90;
  FRAME_stand130 = 91;
  FRAME_stand131 = 92;
  FRAME_stand132 = 93;
  FRAME_stand133 = 94;
  FRAME_stand134 = 95;
  FRAME_stand135 = 96;
  FRAME_stand136 = 97;
  FRAME_stand137 = 98;
  FRAME_stand138 = 99;
  FRAME_stand139 = 100;
  FRAME_stand140 = 101;
  FRAME_stand141 = 102;
  FRAME_stand142 = 103;
  FRAME_stand143 = 104;
  FRAME_stand144 = 105;
  FRAME_stand145 = 106;
  FRAME_stand146 = 107;
  FRAME_stand147 = 108;
  FRAME_stand148 = 109;
  FRAME_stand149 = 110;
  FRAME_stand150 = 111;
  FRAME_stand151 = 112;
  FRAME_stand152 = 113;
  FRAME_stand153 = 114;
  FRAME_stand154 = 115;
  FRAME_stand155 = 116;
  FRAME_stand156 = 117;
  FRAME_stand157 = 118;
  FRAME_stand158 = 119;
  FRAME_stand159 = 120;
  FRAME_stand160 = 121;
  FRAME_stand161 = 122;
  FRAME_stand162 = 123;
  FRAME_stand163 = 124;
  FRAME_stand164 = 125;
  FRAME_walk01   = 126;
  FRAME_walk02   = 127;
  FRAME_walk03   = 128;
  FRAME_walk04   = 129;
  FRAME_walk05   = 130;
  FRAME_walk06   = 131;
  FRAME_walk07   = 132;
  FRAME_walk08   = 133;
  FRAME_walk09   = 134;
  FRAME_walk10   = 135;
  FRAME_walk11   = 136;
  FRAME_walk12   = 137;
  FRAME_walk13   = 138;
  FRAME_walk14   = 139;
  FRAME_walk15   = 140;
  FRAME_walk16   = 141;
  FRAME_walk17   = 142;
  FRAME_walk18   = 143;
  FRAME_walk19   = 144;
  FRAME_walk20   = 145;
  FRAME_walk21   = 146;
  FRAME_walk22   = 147;
  FRAME_walk23   = 148;

  MODEL_SCALE    = 1.000000;


implementation
Uses
{$IFNDEF NODEPEND}
g_ai, g_monster, g_weapon, g_combat, m_move,
{$ENDIF}
q_shared, GameUnit, g_misc, g_utils, g_local;

{$IFDEF NODEPEND}
//g_ai
procedure ai_move(self: edict_p; dist: Single); cdecl; begin end;
procedure ai_stand(self: edict_p; dist: Single); cdecl; begin end;
procedure ai_walk(self: edict_p; dist: Single); cdecl; begin end;
procedure ai_run(self: edict_p; dist: Single); cdecl; begin end;
procedure ai_charge(self: edict_p; dist: Single); cdecl; begin end;
function range(self, other: edict_p): Integer;
begin
  result:=0;
end;

//g_monster
procedure M_FlyCheck(self: edict_p); begin end;
procedure walkmonster_start(self: edict_p); begin end;

//g_weapon
function fire_hit(self: edict_p; aim: vec3_t; damage: Integer; kick: Integer): qboolean;
begin
  result:=false;
end;

//g_combat
function T_Damage(targ, inflictor, attacker: edict_p; var dir, point, normal: vec3_t; damage, knockback, dflags, _mod: Integer): edict_p;
begin
  result:=nil;
end;

//m_move
function M_CheckBottom(ent: edict_p): qboolean;
begin
  Result:=false;
end;
{$ENDIF}


(*
==============================================================================

mutant

==============================================================================
*)
Var
  sound_swing,
  sound_hit,
  sound_hit2,
  sound_death,
  sound_idle,
  sound_pain1,
  sound_pain2,
  sound_sight,
  sound_search,
  sound_step1,
  sound_step2,
  sound_step3,
  sound_thud: Integer;

//
// SOUNDS
//

procedure mutant_step(self: edict_p); cdecl;
Var n: Integer;
begin
  n := System.Random(3);
  if n = 0 then
    gi.sound(self, CHAN_VOICE, sound_step1, 1, ATTN_NORM, 0)
  else if n = 1 then
    gi.sound(self, CHAN_VOICE, sound_step2, 1, ATTN_NORM, 0)
  else
    gi.sound(self, CHAN_VOICE, sound_step3, 1, ATTN_NORM, 0);
end;

procedure mutant_sight(self, other: edict_p); cdecl;
begin
  gi.sound(self, CHAN_VOICE, sound_sight, 1, ATTN_NORM, 0);
end;

procedure mutant_search(self: edict_p); cdecl;
begin
  gi.sound(self, CHAN_VOICE, sound_search, 1, ATTN_NORM, 0);
end;

procedure mutant_swing(self: edict_p);
begin
  gi.sound(self, CHAN_VOICE, sound_swing, 1, ATTN_NORM, 0);
end;

//
// STAND
//

const
  mutant_frames_stand: Array[0..50] of mframe_t = (
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0), // 10

    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0), // 20

    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0), // 30

    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0), // 40

    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0), // 50

    (aifunc: ai_stand; dist: 0)
  );
  mutant_move_stand: mmove_t =
    (firstframe: FRAME_stand101;
     lastframe: FRAME_stand151;
     frame: @mutant_frames_stand[0]);

procedure mutant_stand(self: edict_p); cdecl;
begin
  self.monsterinfo.currentmove := @mutant_move_stand;
end;


//
// IDLE
//

procedure mutant_idle_loop(self: edict_p); cdecl;
begin
  if _random() < 0.75 then
    self.monsterinfo.nextframe := FRAME_stand155;
end;

const
  mutant_frames_idle: Array[0..12] of mframe_t = (
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0), // scratch loop start
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0; thinkfunc: mutant_idle_loop), // scratch loop end
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0),
    (aifunc: ai_stand; dist: 0)
  );

  mutant_move_idle: mmove_t =
    (firstframe: FRAME_stand152;
     lastframe: FRAME_stand164;
     frame: @mutant_frames_idle[0];
     endfunc: mutant_stand);

procedure mutant_idle(self: edict_p); cdecl;
begin
  self.monsterinfo.currentmove := @mutant_move_idle;
  gi.sound(self, CHAN_VOICE, sound_idle, 1, ATTN_IDLE, 0);
end;


//
// WALK
//

procedure mutant_walk(self: edict_p); cdecl; forward;

const
  mutant_frames_walk: Array[0..11] of mframe_t = (
    (aifunc: ai_walk; dist: 3),
    (aifunc: ai_walk; dist: 1),
    (aifunc: ai_walk; dist: 5),
    (aifunc: ai_walk; dist: 10),
    (aifunc: ai_walk; dist: 13),
    (aifunc: ai_walk; dist: 10),
    (aifunc: ai_walk; dist: 0),
    (aifunc: ai_walk; dist: 5),
    (aifunc: ai_walk; dist: 6),
    (aifunc: ai_walk; dist: 16),
    (aifunc: ai_walk; dist: 15),
    (aifunc: ai_walk; dist: 6)
  );
  mutant_move_walk: mmove_t =
    (firstframe: FRAME_walk05;
     lastframe: FRAME_walk16;
     frame: @mutant_frames_walk[0]);

procedure mutant_walk_loop(self: edict_p); cdecl;
begin
  self.monsterinfo.currentmove := @mutant_move_walk;
end;

const
  mutant_frames_start_walk: Array[0..3] of mframe_t = (
    (aifunc: ai_walk; dist: 5),
    (aifunc: ai_walk; dist: 5),
    (aifunc: ai_walk; dist: -2),
    (aifunc: ai_walk; dist: 1)
  );
  mutant_move_start_walk: mmove_t =
    (firstframe: FRAME_walk01;
     lastframe: FRAME_walk04;
     frame: @mutant_frames_start_walk[0];
     endfunc: mutant_walk_loop);

procedure mutant_walk(self: edict_p); cdecl;
begin
  self.monsterinfo.currentmove := @mutant_move_start_walk;
end;


//
// RUN
//

⌨️ 快捷键说明

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