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