g_spawn.c
来自「著名物理引擎Hawk的源代码」· C语言 代码 · 共 414 行
C
414 行
/* G_spawn.c, HAWK game engine
*
* Copyright 1997-1998 by Phil Frisbie, Jr.
* for Hawk Software
*
*/
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "G_main.h"
#include "M_player.h"
typedef struct
{
char *name;
void (*spawn)(entity_t *entity);
} spawn_t;
void SP_item_health(entity_t *entity);
void SP_item_health_small(entity_t *entity);
void SP_item_health_large(entity_t *entity);
void SP_item_health_mega(entity_t *entity);
void SP_info_player_start(entity_t *entity);
void SP_info_player_deathmatch(entity_t *entity);
void SP_info_player_coop(entity_t *entity);
void SP_info_player_intermission(entity_t *entity);
void SP_func_plat(entity_t *entity);
void SP_func_rotating(entity_t *entity);
void SP_func_button(entity_t *entity);
void SP_func_door(entity_t *entity);
void SP_func_door_secret(entity_t *entity);
void SP_func_door_rotating(entity_t *entity);
void SP_func_water(entity_t *entity);
void SP_func_train(entity_t *entity);
void SP_func_conveyor(entity_t *entity);
void SP_func_wall(entity_t *entity);
void SP_func_object(entity_t *entity);
void SP_func_explosive(entity_t *entity);
void SP_func_timer(entity_t *entity);
void SP_func_areaportal(entity_t *entity);
void SP_func_clock(entity_t *entity);
void SP_func_killbox(entity_t *entity);
void SP_trigger_always(entity_t *entity);
void SP_trigger_once(entity_t *entity);
void SP_trigger_multiple(entity_t *entity);
void SP_trigger_relay(entity_t *entity);
void SP_trigger_push(entity_t *entity);
void SP_trigger_hurt(entity_t *entity);
void SP_trigger_key(entity_t *entity);
void SP_trigger_counter(entity_t *entity);
void SP_trigger_elevator(entity_t *entity);
void SP_trigger_gravity(entity_t *entity);
void SP_trigger_monsterjump(entity_t *entity);
void SP_target_temp_entity(entity_t *entity);
void SP_target_speaker(entity_t *entity);
void SP_target_explosion(entity_t *entity);
void SP_target_changelevel(entity_t *entity);
void SP_target_secret(entity_t *entity);
void SP_target_goal(entity_t *entity);
void SP_target_splash(entity_t *entity);
void SP_target_spawner(entity_t *entity);
void SP_target_blaster(entity_t *entity);
void SP_target_crosslevel_trigger(entity_t *entity);
void SP_target_crosslevel_target(entity_t *entity);
void SP_target_laser(entity_t *entity);
void SP_target_help(entity_t *entity);
void SP_target_actor(entity_t *entity);
void SP_target_lightramp(entity_t *entity);
void SP_target_earthquake(entity_t *entity);
void SP_target_character(entity_t *entity);
void SP_target_string(entity_t *entity);
void SP_worldspawn(entity_t *entity);
void SP_viewthing(entity_t *entity);
void SP_light(entity_t *entity);
void SP_light_mine1(entity_t *entity);
void SP_light_mine2(entity_t *entity);
void SP_info_null(entity_t *entity);
void SP_info_notnull(entity_t *entity);
void SP_path_corner(entity_t *entity);
void SP_point_combat(entity_t *entity);
void SP_misc_explobox(entity_t *entity);
void SP_misc_banner(entity_t *entity);
void SP_misc_satellite_dish(entity_t *entity);
void SP_misc_actor(entity_t *entity);
void SP_misc_gib_arm(entity_t *entity);
void SP_misc_gib_leg(entity_t *entity);
void SP_misc_gib_head(entity_t *entity);
void SP_misc_insane(entity_t *entity);
void SP_misc_deadsoldier(entity_t *entity);
void SP_misc_viper(entity_t *entity);
void SP_misc_viper_bomb(entity_t *entity);
void SP_misc_bigviper(entity_t *entity);
void SP_misc_strogg_ship(entity_t *entity);
void SP_misc_teleporter(entity_t *entity);
void SP_misc_teleporter_dest(entity_t *entity);
void SP_misc_blackhole(entity_t *entity);
void SP_misc_eastertank(entity_t *entity);
void SP_misc_easterchick(entity_t *entity);
void SP_misc_easterchick2(entity_t *entity);
void SP_monster_berserk(entity_t *entity);
void SP_monster_gladiator(entity_t *entity);
void SP_monster_gunner(entity_t *entity);
void SP_monster_infantry(entity_t *entity);
void SP_monster_soldier_light(entity_t *entity);
void SP_monster_soldier(entity_t *entity);
void SP_monster_soldier_ss(entity_t *entity);
void SP_monster_tank(entity_t *entity);
void SP_monster_medic(entity_t *entity);
void SP_monster_flipper(entity_t *entity);
void SP_monster_chick(entity_t *entity);
void SP_monster_parasite(entity_t *entity);
void SP_monster_flyer(entity_t *entity);
void SP_monster_brain(entity_t *entity);
void SP_monster_floater(entity_t *entity);
void SP_monster_hover(entity_t *entity);
void SP_monster_mutant(entity_t *entity);
void SP_monster_supertank(entity_t *entity);
void SP_monster_boss2(entity_t *entity);
void SP_monster_jorg(entity_t *entity);
void SP_monster_boss3_stand(entity_t *entity);
void SP_monster_commander_body(entity_t *entity);
void SP_turret_breach(entity_t *entity);
void SP_turret_base(entity_t *entity);
void SP_turret_driver(entity_t *entity);
void SP_item_armor_body(entity_t *entity);
void SP_item_armor_combat(entity_t *entity);
void SP_item_armor_jacket(entity_t *entity);
void SP_item_armor_shard(entity_t *entity);
void SP_item_power_screen(entity_t *entity);
void SP_item_power_shield(entity_t *entity);
void SP_item_quad(entity_t *entity);
void SP_item_invulnerability(entity_t *entity);
void SP_item_silencer(entity_t *entity);
void SP_item_breather(entity_t *entity);
void SP_item_enviro(entity_t *entity);
void SP_item_ancient_head(entity_t *entity);
void SP_item_adrenaline(entity_t *entity);
void SP_item_bandolier(entity_t *entity);
void SP_item_pack(entity_t *entity);
void SP_key_data_cd(entity_t *entity);
void SP_key_power_cube(entity_t *entity);
void SP_key_pyramid(entity_t *entity);
void SP_key_data_spinner(entity_t *entity);
void SP_key_pass(entity_t *entity);
void SP_key_blue_key(entity_t *entity);
void SP_key_red_key(entity_t *entity);
void SP_key_commander_head(entity_t *entity);
void SP_key_airstrike_target(entity_t *entity);
void SP_weapon_blaster(entity_t *entity);
void SP_weapon_shotgun(entity_t *entity);
void SP_weapon_supershotgun(entity_t *entity);
void SP_weapon_machinegun(entity_t *entity);
void SP_weapon_chaingun(entity_t *entity);
void SP_weapon_grenadelauncher(entity_t *entity);
void SP_weapon_rocketlauncher(entity_t *entity);
void SP_weapon_hyperblaster(entity_t *entity);
void SP_weapon_railgun(entity_t *entity);
void SP_weapon_bfg(entity_t *entity);
void SP_ammo_shells(entity_t *entity);
void SP_ammo_bullets(entity_t *entity);
void SP_ammo_cells(entity_t *entity);
void SP_ammo_grenades(entity_t *entity);
void SP_ammo_rockets(entity_t *entity);
void SP_ammo_slugs(entity_t *entity);
spawn_t spawns[] = {
{"item_health", SP_item_health},
{"item_health_small", SP_item_health_small},
{"item_health_large", SP_item_health_large},
{"item_health_mega", SP_item_health_mega},
{"info_player_start", SP_info_player_start},
{"info_player_deathmatch", SP_info_player_deathmatch},
{"info_player_coop", SP_info_player_coop},
{"info_player_intermission", SP_info_player_intermission},
{"func_plat", SP_func_plat},
{"func_button", SP_func_button},
{"func_door", SP_func_door},
{"func_door_secret", SP_func_door_secret},
{"func_door_rotating", SP_func_door_rotating},
{"func_rotating", SP_func_rotating},
{"func_train", SP_func_train},
{"func_water", SP_func_water},
{"func_conveyor", SP_func_conveyor},
{"func_areaportal", SP_func_areaportal},
{"func_clock", SP_func_clock},
{"func_wall", SP_func_wall},
{"func_object", SP_func_object},
{"func_timer", SP_func_timer},
{"func_explosive", SP_func_explosive},
{"func_killbox", SP_func_killbox},
{"trigger_always", SP_trigger_always},
{"trigger_once", SP_trigger_once},
{"trigger_multiple", SP_trigger_multiple},
{"trigger_relay", SP_trigger_relay},
{"trigger_push", SP_trigger_push},
{"trigger_hurt", SP_trigger_hurt},
{"trigger_key", SP_trigger_key},
{"trigger_counter", SP_trigger_counter},
{"trigger_elevator", SP_trigger_elevator},
{"trigger_gravity", SP_trigger_gravity},
{"trigger_monsterjump", SP_trigger_monsterjump},
{"target_temp_entity", SP_target_temp_entity},
{"target_speaker", SP_target_speaker},
{"target_explosion", SP_target_explosion},
{"target_changelevel", SP_target_changelevel},
{"target_secret", SP_target_secret},
{"target_goal", SP_target_goal},
{"target_splash", SP_target_splash},
{"target_spawner", SP_target_spawner},
{"target_blaster", SP_target_blaster},
{"target_crosslevel_trigger", SP_target_crosslevel_trigger},
{"target_crosslevel_target", SP_target_crosslevel_target},
{"target_laser", SP_target_laser},
{"target_help", SP_target_help},
{"target_actor", SP_target_actor},
{"target_lightramp", SP_target_lightramp},
{"target_earthquake", SP_target_earthquake},
{"target_character", SP_target_character},
{"target_string", SP_target_string},
{"worldspawn", SP_worldspawn},
{"viewthing", SP_viewthing},
{"light", SP_light},
{"light_mine1", SP_light_mine1},
{"light_mine2", SP_light_mine2},
{"info_null", SP_info_null},
{"func_group", SP_info_null},
{"info_notnull", SP_info_notnull},
{"path_corner", SP_path_corner},
{"point_combat", SP_point_combat},
{"misc_explobox", SP_misc_explobox},
{"misc_banner", SP_misc_banner},
{"misc_satellite_dish", SP_misc_satellite_dish},
{"misc_actor", SP_misc_actor},
{"misc_gib_arm", SP_misc_gib_arm},
{"misc_gib_leg", SP_misc_gib_leg},
{"misc_gib_head", SP_misc_gib_head},
{"misc_insane", SP_misc_insane},
{"misc_deadsoldier", SP_misc_deadsoldier},
{"misc_viper", SP_misc_viper},
{"misc_viper_bomb", SP_misc_viper_bomb},
{"misc_bigviper", SP_misc_bigviper},
{"misc_strogg_ship", SP_misc_strogg_ship},
{"misc_teleporter", SP_misc_teleporter},
{"misc_teleporter_dest", SP_misc_teleporter_dest},
{"misc_blackhole", SP_misc_blackhole},
{"misc_eastertank", SP_misc_eastertank},
{"misc_easterchick", SP_misc_easterchick},
{"misc_easterchick2", SP_misc_easterchick2},
{"monster_berserk", SP_monster_berserk},
{"monster_gladiator", SP_monster_gladiator},
{"monster_gunner", SP_monster_gunner},
{"monster_infantry", SP_monster_infantry},
{"monster_soldier_light", SP_monster_soldier_light},
{"monster_soldier", SP_monster_soldier},
{"monster_soldier_ss", SP_monster_soldier_ss},
{"monster_tank", SP_monster_tank},
{"monster_tank_commander", SP_monster_tank},
{"monster_medic", SP_monster_medic},
{"monster_flipper", SP_monster_flipper},
{"monster_chick", SP_monster_chick},
{"monster_parasite", SP_monster_parasite},
{"monster_flyer", SP_monster_flyer},
{"monster_brain", SP_monster_brain},
{"monster_floater", SP_monster_floater},
{"monster_hover", SP_monster_hover},
{"monster_mutant", SP_monster_mutant},
{"monster_supertank", SP_monster_supertank},
{"monster_boss2", SP_monster_boss2},
{"monster_boss3_stand", SP_monster_boss3_stand},
{"monster_jorg", SP_monster_jorg},
{"monster_commander_body", SP_monster_commander_body},
{"turret_breach", SP_turret_breach},
{"turret_base", SP_turret_base},
{"turret_driver", SP_turret_driver},
/* all the rest are items, and are in G_items.c */
{"item_armor_body", SP_item_armor_body},
{"item_armor_combat", SP_item_armor_combat},
{"item_armor_jacket", SP_item_armor_jacket},
{"item_armor_shard", SP_item_armor_shard},
{"item_power_screen", SP_item_power_screen},
{"item_power_shield", SP_item_power_shield},
{"item_quad", SP_item_quad},
{"item_invulnerability", SP_item_invulnerability},
{"item_silencer", SP_item_silencer},
{"item_breather", SP_item_breather},
{"item_enviro", SP_item_enviro},
{"item_ancient_head", SP_item_ancient_head},
{"item_adrenaline", SP_item_adrenaline},
{"item_bandolier", SP_item_bandolier},
{"item_pack", SP_item_pack},
{"key_data_cd", SP_key_data_cd},
{"key_power_cube", SP_key_power_cube},
{"key_pyramid", SP_key_pyramid},
{"key_data_spinner", SP_key_data_spinner},
{"key_pass", SP_key_pass},
{"key_blue_key", SP_key_blue_key},
{"key_red_key", SP_key_red_key},
{"key_commander_head", SP_key_commander_head},
{"key_airstrike_target", SP_key_airstrike_target},
{"weapon_blaster", SP_weapon_blaster},
{"weapon_shotgun", SP_weapon_shotgun},
{"weapon_supershotgun", SP_weapon_supershotgun},
{"weapon_machinegun", SP_weapon_machinegun},
{"weapon_chaingun", SP_weapon_chaingun},
{"weapon_grenadelauncher", SP_weapon_grenadelauncher},
{"weapon_rocketlauncher", SP_weapon_rocketlauncher},
{"weapon_hyperblaster", SP_weapon_hyperblaster},
{"weapon_railgun", SP_weapon_railgun},
{"weapon_bfg", SP_weapon_bfg},
{"ammo_shells", SP_ammo_shells},
{"ammo_bullets", SP_ammo_bullets},
{"ammo_cells", SP_ammo_cells},
{"ammo_grenades", SP_ammo_grenades},
{"ammo_rockets", SP_ammo_rockets},
{"ammo_slugs", SP_ammo_slugs},
{NULL, NULL}
};
void G_spwnObject(int e)
{
char *classname;
spawn_t *s;
entity_t *entity;
entity = GetEntity(e);
classname = ValueForKey(entity, "classname");
if(!classname)
return;
for (s=spawns ; s->name ; s++)
{
if (!strcmp(s->name, classname))
{
logf("Spawning %s\n", classname);
s->spawn(entity);
return;
}
}
}
char *default_sky = "env/unit1_";
char *default_map = "map/base1.bsp";
void SP_worldspawn (entity_t *entity)
{
char *temp;
int len;
temp = ValueForKey(entity, "message");
len = strlen(temp);
Level->message = gi.TagMalloc(len+1, TAG_LEVEL);
strcpy(Level->message, temp);
temp = ValueForKey(entity, "sky");
if(!(temp && temp[0]))
Level->sky = default_sky;
else
{
len = strlen(temp);
Level->sky = gi.TagMalloc(len+5, TAG_LEVEL);
strcpy(Level->sky, "env/");
strcat(Level->sky, temp);
}
Level->skyrotate = FloatForKey(entity, "skyrotate");
GetVectorForKey(entity, "skyaxis", Level->skyaxis);
temp = ValueForKey(entity, "nextmap");
if(!temp)
Level->sky = default_map;
else
{
len = strlen(temp);
Level->nextmap = gi.TagMalloc(len+9, TAG_LEVEL);
strcpy(Level->nextmap, "map/");
strcat(Level->nextmap, temp);
strcat(Level->nextmap, ".bsp");
}
Level->cdtrack = (int)FloatForKey(entity, "sounds");
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?