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

📄 g_spawn.pas

📁 雷神之锤2(Quake2)Delphi源码
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit g_spawn;

interface

{----------------------------------------------------------------------------}
{                                                                            }
{ File(s): g_spawn.c - nil system driver to aid porting efforts              }
{                                                                            }
{ Initial conversion by : Mani (mani246yahoo.com)                            }
{ Initial conversion on : 30-Apr-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                                                               }
{ 2)                                                                         }
{ 3)                                                                         }
{----------------------------------------------------------------------------}
{ * TODO:                                                                    }
{                                                                            }
{----------------------------------------------------------------------------}

uses
  g_local;

type
  spawn_t = record
    name: pchar;
    spawn: procedure(ent: pedict_t);
  end;
  pspawn_t = ^spawn_t;


procedure SP_item_health(self: pedict_t);
procedure SP_item_health_small(self: pedict_t);
procedure SP_item_health_large(self: pedict_t);
procedure SP_item_health_mega(self: pedict_t);

procedure SP_info_player_start(ent: pedict_t);
procedure SP_info_player_deathmatch(ent: pedict_t);
procedure SP_info_player_coop(ent: pedict_t);
procedure SP_info_player_intermission(ent: pedict_t);

procedure SP_func_plat(ent: pedict_t);
procedure SP_func_rotating(ent: pedict_t);
procedure SP_func_button(ent: pedict_t);
procedure SP_func_door(ent: pedict_t);
procedure SP_func_door_secret(ent: pedict_t);
procedure SP_func_door_rotating(ent: pedict_t);
procedure SP_func_water(ent: pedict_t);
procedure SP_func_train(ent: pedict_t);
procedure SP_func_conveyor(self: pedict_t); 
procedure SP_func_wall(self: pedict_t); 
procedure SP_func_object(self: pedict_t);
procedure SP_func_explosive(self: pedict_t); 
procedure SP_func_timer(self: pedict_t); 
procedure SP_func_areaportal(ent: pedict_t); 
procedure SP_func_clock(ent: pedict_t); 
procedure SP_func_killbox(ent: pedict_t);

procedure SP_trigger_always(ent: pedict_t); 
procedure SP_trigger_once(ent: pedict_t);
procedure SP_trigger_multiple(ent: pedict_t); 
procedure SP_trigger_relay(ent: pedict_t); 
procedure SP_trigger_push(ent: pedict_t); 
procedure SP_trigger_hurt(ent: pedict_t); 
procedure SP_trigger_key(ent: pedict_t); 
procedure SP_trigger_counter(ent: pedict_t); 
procedure SP_trigger_elevator(ent: pedict_t); 
procedure SP_trigger_gravity(ent: pedict_t); 
procedure SP_trigger_monsterjump(ent: pedict_t); 

procedure SP_target_temp_entity(ent: pedict_t);
procedure SP_target_speaker(ent: pedict_t); 
procedure SP_target_explosion(ent: pedict_t); 
procedure SP_target_changelevel(ent: pedict_t); 
procedure SP_target_secret(ent: pedict_t); 
procedure SP_target_goal(ent: pedict_t);
procedure SP_target_splash(ent: pedict_t); 
procedure SP_target_spawner(ent: pedict_t); 

procedure SP_target_blaster(ent: pedict_t); 
procedure SP_target_crosslevel_trigger(ent: pedict_t); 
procedure SP_target_crosslevel_target(ent: pedict_t); 
procedure SP_target_laser(self: pedict_t); 
procedure SP_target_help(ent: pedict_t); 
procedure SP_target_actor(ent: pedict_t); 
procedure SP_target_lightramp(self: pedict_t); 
procedure SP_target_earthquake(ent: pedict_t); 
procedure SP_target_character(ent: pedict_t); 
procedure SP_target_string(ent: pedict_t); 
procedure SP_worldspawn(ent: pedict_t);
procedure SP_viewthing(ent: pedict_t); 

procedure SP_light(self: pedict_t); 
procedure SP_light_mine1(ent: pedict_t); 
procedure SP_light_mine2(ent: pedict_t);
procedure SP_info_null(self: pedict_t); 
procedure SP_info_notnull(self: pedict_t); 
procedure SP_path_corner(self: pedict_t); 
procedure SP_point_combat(self: pedict_t); 

procedure SP_misc_explobox(self: pedict_t); 
procedure SP_misc_banner(self: pedict_t);
procedure SP_misc_satellite_dish(self: pedict_t); 
procedure SP_misc_actor(self: pedict_t); 
procedure SP_misc_gib_arm(self: pedict_t); 

procedure SP_misc_gib_leg(self: pedict_t); 
procedure SP_misc_gib_head(self: pedict_t); 
procedure SP_misc_insane(self: pedict_t);
procedure SP_misc_deadsoldier(self: pedict_t); 
procedure SP_misc_viper(self: pedict_t); 
procedure SP_misc_viper_bomb(self: pedict_t); 
procedure SP_misc_bigviper(self: pedict_t); 
procedure SP_misc_strogg_ship(self: pedict_t);
procedure SP_misc_teleporter(self: pedict_t); 
procedure SP_misc_teleporter_dest(self: pedict_t); 
procedure SP_misc_blackhole(self: pedict_t); 
procedure SP_misc_eastertank(self: pedict_t); 
procedure SP_misc_easterchick(self: pedict_t); 
procedure SP_misc_easterchick2(self: pedict_t); 

procedure SP_monster_berserk(self: pedict_t); 
procedure SP_monster_gladiator(self: pedict_t); 
procedure SP_monster_gunner(self: pedict_t); 
procedure SP_monster_infantry(self: pedict_t); 
procedure SP_monster_soldier_light(self: pedict_t); 
procedure SP_monster_soldier(self: pedict_t); 
procedure SP_monster_soldier_ss(self: pedict_t);
procedure SP_monster_tank(self: pedict_t); 
procedure SP_monster_medic(self: pedict_t); 
procedure SP_monster_flipper(self: pedict_t); 
procedure SP_monster_chick(self: pedict_t); 
procedure SP_monster_parasite(self: pedict_t);
procedure SP_monster_flyer(self: pedict_t); 
procedure SP_monster_brain(self: pedict_t); 
procedure SP_monster_floater(self: pedict_t); 
procedure SP_monster_hover(self: pedict_t); 
procedure SP_monster_mutant(self: pedict_t); 
procedure SP_monster_supertank(self: pedict_t); 
procedure SP_monster_boss2(self: pedict_t);
procedure SP_monster_jorg(self: pedict_t);
procedure SP_monster_boss3_stand(self: pedict_t);
procedure SP_monster_commander_body(self: pedict_t);

procedure SP_turret_breach(self: pedict_t);
procedure SP_turret_base(self: pedict_t);
procedure SP_turret_driver(self: pedict_t);


var
spawns: array [0..108] of spawn_t =
( (name:'item_health'#0;               spawn:SP_item_health),
  (name:'item_health_small'#0;         spawn:SP_item_health_small),
  (name:'item_health_large'#0; spawn:SP_item_health_large),
  (name:'item_health_mega'#0; spawn:SP_item_health_mega),
  (name:'info_player_start'#0; spawn:SP_info_player_start),
  (name:'info_player_deathmatch'#0; spawn:SP_info_player_deathmatch),
  (name:'info_player_coop'#0; spawn:SP_info_player_coop),
  (name:'info_player_intermission'#0; spawn:SP_info_player_intermission),
  (name:'func_plat'#0; spawn:SP_func_plat),
  (name:'func_button'#0; spawn:SP_func_button),
  (name:'func_door'#0; spawn:SP_func_door),
  (name:'func_door_secret'#0; spawn:SP_func_door_secret),
  (name:'func_door_rotating'#0; spawn:SP_func_door_rotating),
  (name:'func_rotating'#0; spawn:SP_func_rotating),
  (name:'func_train'#0; spawn:SP_func_train),
  (name:'func_water'#0; spawn:SP_func_water),
  (name:'func_conveyor'#0; spawn:SP_func_conveyor),
  (name:'func_areaportal'#0; spawn:SP_func_areaportal),
  (name:'func_clock'#0; spawn:SP_func_clock),
  (name:'func_wall'#0; spawn:SP_func_wall),
  (name:'func_object'#0; spawn:SP_func_object),
  (name:'func_timer'#0; spawn:SP_func_timer),
  (name:'func_explosive'#0; spawn:SP_func_explosive),
  (name:'func_killbox'#0; spawn:SP_func_killbox),
  (name:'trigger_always'#0; spawn:SP_trigger_always),
  (name:'trigger_once'#0; spawn:SP_trigger_once),
  (name:'trigger_multiple'#0; spawn:SP_trigger_multiple),
  (name:'trigger_relay'#0; spawn:SP_trigger_relay),
  (name:'trigger_push'#0; spawn:SP_trigger_push),
  (name:'trigger_hurt'#0; spawn:SP_trigger_hurt),
  (name:'trigger_key'#0; spawn:SP_trigger_key),
  (name:'trigger_counter'#0; spawn:SP_trigger_counter),
  (name:'trigger_elevator'#0; spawn:SP_trigger_elevator),
  (name:'trigger_gravity'#0; spawn:SP_trigger_gravity),
  (name:'trigger_monsterjump'#0; spawn:SP_trigger_monsterjump),
  (name:'target_temp_entity'#0; spawn:SP_target_temp_entity),
  (name:'target_speaker'#0; spawn:SP_target_speaker),
  (name:'target_explosion'#0; spawn:SP_target_explosion),
  (name:'target_changelevel'#0; spawn:SP_target_changelevel),
  (name:'target_secret'#0; spawn:SP_target_secret),
  (name:'target_goal'#0; spawn:SP_target_goal),
  (name:'target_splash'#0; spawn:SP_target_splash),
  (name:'target_spawner'#0; spawn:SP_target_spawner),
  (name:'target_blaster'#0; spawn:SP_target_blaster),
  (name:'target_crosslevel_trigger'#0; spawn:SP_target_crosslevel_trigger),
  (name:'target_crosslevel_target'#0; spawn:SP_target_crosslevel_target),
  (name:'target_laser'#0; spawn:SP_target_laser),
  (name:'target_help'#0; spawn:SP_target_help),
  (name:'target_actor'#0; spawn:SP_target_actor),
  (name:'target_lightramp'#0; spawn:SP_target_lightramp),
  (name:'target_earthquake'#0; spawn:SP_target_earthquake),
  (name:'target_character'#0; spawn:SP_target_character),
  (name:'target_string'#0; spawn:SP_target_string),
  (name:'worldspawn'#0; spawn:SP_worldspawn),
  (name:'viewthing'#0; spawn:SP_viewthing),
  (name:'light'#0; spawn:SP_light),
  (name:'light_mine1'#0; spawn:SP_light_mine1),
  (name:'light_mine2'#0; spawn:SP_light_mine2),
  (name:'info_null'#0; spawn:SP_info_null),
  (name:'func_group'#0; spawn:SP_info_null),
  (name:'info_notnull'#0; spawn:SP_info_notnull),
  (name:'path_corner'#0; spawn:SP_path_corner),
  (name:'point_combat'#0; spawn:SP_point_combat),
  (name:'misc_explobox'#0; spawn:SP_misc_explobox),
  (name:'misc_banner'#0; spawn:SP_misc_banner),
  (name:'misc_satellite_dish'#0; spawn:SP_misc_satellite_dish),
  (name:'misc_actor'#0; spawn:SP_misc_actor),
  (name:'misc_gib_arm'#0; spawn:SP_misc_gib_arm),
  (name:'misc_gib_leg'#0; spawn:SP_misc_gib_leg),
  (name:'misc_gib_head'#0; spawn:SP_misc_gib_head),
  (name:'misc_insane'#0; spawn:SP_misc_insane),
  (name:'misc_deadsoldier'#0; spawn:SP_misc_deadsoldier),
  (name:'misc_viper'#0; spawn:SP_misc_viper),
  (name:'misc_viper_bomb'#0; spawn:SP_misc_viper_bomb),
  (name:'misc_bigviper'#0; spawn:SP_misc_bigviper),
  (name:'misc_strogg_ship'#0; spawn:SP_misc_strogg_ship),
  (name:'misc_teleporter'#0; spawn:SP_misc_teleporter),
  (name:'misc_teleporter_dest'#0; spawn:SP_misc_teleporter_dest),
  (name:'misc_blackhole'#0; spawn:SP_misc_blackhole),
  (name:'misc_eastertank'#0; spawn:SP_misc_eastertank),
  (name:'misc_easterchick'#0; spawn:SP_misc_easterchick),
  (name:'misc_easterchick2'#0; spawn:SP_misc_easterchick2),
  (name:'monster_berserk'#0; spawn:SP_monster_berserk),
  (name:'monster_gladiator'#0; spawn:SP_monster_gladiator),
  (name:'monster_gunner'#0; spawn:SP_monster_gunner),
  (name:'monster_infantry'#0; spawn:SP_monster_infantry),
  (name:'monster_soldier_light'#0; spawn:SP_monster_soldier_light),
  (name:'monster_soldier'#0; spawn:SP_monster_soldier),
  (name:'monster_soldier_ss'#0; spawn:SP_monster_soldier_ss),
  (name:'monster_tank'#0; spawn:SP_monster_tank),
  (name:'monster_tank_commander'#0; spawn:SP_monster_tank),
  (name:'monster_medic'#0; spawn:SP_monster_medic),
  (name:'monster_flipper'#0; spawn:SP_monster_flipper),
  (name:'monster_chick'#0; spawn:SP_monster_chick),
  (name:'monster_parasite'#0; spawn:SP_monster_parasite),
  (name:'monster_flyer'#0; spawn:SP_monster_flyer),
  (name:'monster_brain'#0; spawn:SP_monster_brain),
  (name:'monster_floater'#0; spawn:SP_monster_floater),
  (name:'monster_hover'#0; spawn:SP_monster_hover),
  (name:'monster_mutant'#0; spawn:SP_monster_mutant),
  (name:'monster_supertank'#0; spawn:SP_monster_supertank),
  (name:'monster_boss2'#0; spawn:SP_monster_boss2),
  (name:'monster_boss3_stand'#0; spawn:SP_monster_boss3_stand),
  (name:'monster_jorg'#0; spawn:SP_monster_jorg),
  (name:'monster_commander_body'#0; spawn:SP_monster_commander_body),
  (name:'turret_breach'#0; spawn:SP_turret_breach),
  (name:'turret_base'#0; spawn:SP_turret_base),
  (name:'turret_driver'#0; spawn:SP_turret_driver),
  (name: nil; spawn: nil));
(*
===============
ED_CallSpawn

Finds the spawn function for the entity and calls it
===============
*)

implementation

uses
  CPas,
  Game,
  g_items;


procedure ED_CallSpawn(ent: pedict_t);
var
  s: pspawn_t;
  item: pgitem_t;
  i: integer;
begin
  
  
  if (ent.classname=nil) //(!ent->classname)
  then
  begin 
    gi.dprintf('ED_CallSpawn: NULL classname'#13#10'');
    exit;
  end;

  (* check item spawn functions*)
  i:=0;
  item:= @itemlist;
  while i<g_local.game.num_items do
  begin
    {if item.classname<>nil then //if (!item->classname)
    begin
      continue
    end;}

    if strcmp(item.classname,ent.classname)=0 then //if (!strcmp(item->classname, ent->classname))
    begin
      (* found it*)
      SpawnItem(ent,item);
      exit;
    end;
    inc(i);
    inc(item);
  end;

  (* check normal spawn functions*)
  for s:=spawns to s.name do //for (s=spawns ; s->name ; s++)
  begin

⌨️ 快捷键说明

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