📄 m_mutant.pas
字号:
//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 + -