mirror of
https://github.com/ReactionQuake3/reaction.git
synced 2024-11-10 23:32:06 +00:00
Cleaning up Makro's WinCVS # files that only jerks use.
This commit is contained in:
parent
8459270663
commit
9ccb150073
40 changed files with 0 additions and 121162 deletions
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,945 +0,0 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Id: g_spawn.c,v 1.45 2003/08/10 20:13:26 makro Exp $
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Log: g_spawn.c,v $
|
||||
// Revision 1.45 2003/08/10 20:13:26 makro
|
||||
// no message
|
||||
//
|
||||
// Revision 1.44 2003/04/26 22:33:06 jbravo
|
||||
// Wratted all calls to G_FreeEnt() to avoid crashing and provide debugging
|
||||
//
|
||||
// Revision 1.43 2003/02/27 19:52:34 makro
|
||||
// dlights
|
||||
//
|
||||
// Revision 1.42 2003/01/06 00:23:29 makro
|
||||
// no message
|
||||
//
|
||||
// Revision 1.41 2003/01/05 22:36:50 makro
|
||||
// Added "inactive" field for entities
|
||||
// New "target_activate" entity
|
||||
//
|
||||
// Revision 1.40 2002/09/01 21:15:08 makro
|
||||
// Sky portal tweaks
|
||||
//
|
||||
// Revision 1.39 2002/08/30 00:00:16 makro
|
||||
// Sky portals
|
||||
//
|
||||
// Revision 1.38 2002/08/25 00:46:52 niceass
|
||||
// q3f atmosphere
|
||||
//
|
||||
// Revision 1.37 2002/07/19 04:29:18 niceass
|
||||
// typo fix
|
||||
//
|
||||
// Revision 1.36 2002/07/13 22:43:59 makro
|
||||
// Semi-working fog hull, semi-working sky portals (cgame code commented out)
|
||||
// Basically, semi-working stuff :P
|
||||
//
|
||||
// Revision 1.35 2002/06/29 04:15:15 jbravo
|
||||
// CTF is now CTB. no weapons while the case is in hand other than pistol or knife
|
||||
//
|
||||
// Revision 1.34 2002/06/24 05:51:51 jbravo
|
||||
// CTF mode is now semi working
|
||||
//
|
||||
// Revision 1.33 2002/06/21 21:02:07 niceass
|
||||
// worldspawn laserfog check
|
||||
//
|
||||
// Revision 1.32 2002/06/16 20:06:14 jbravo
|
||||
// Reindented all the source files with "indent -kr -ut -i8 -l120 -lc120 -sob -bad -bap"
|
||||
//
|
||||
// Revision 1.31 2002/06/16 17:38:00 jbravo
|
||||
// Removed the MISSIONPACK ifdefs and missionpack only code.
|
||||
//
|
||||
// Revision 1.30 2002/06/12 11:14:35 makro
|
||||
// Fixed knives/pistols not spawning bug
|
||||
//
|
||||
// Revision 1.29 2002/06/08 11:41:48 makro
|
||||
// weapon_grenadelauncher = weapon_pistol
|
||||
//
|
||||
// Revision 1.28 2002/05/30 21:18:28 makro
|
||||
// Bots should reload/bandage when roaming around
|
||||
// Added "pathtarget" key to all the entities
|
||||
//
|
||||
// Revision 1.27 2002/05/25 10:40:31 makro
|
||||
// Loading screen
|
||||
//
|
||||
// Revision 1.26 2002/05/23 15:55:25 makro
|
||||
// Elevators
|
||||
//
|
||||
// Revision 1.25 2002/05/11 12:45:25 makro
|
||||
// Spectators can go through breakables and doors with
|
||||
// a targetname or health. Bots should crouch more/jump less
|
||||
// often when attacking at long range
|
||||
//
|
||||
// Revision 1.24 2002/05/05 15:18:02 makro
|
||||
// Fixed some crash bugs. Bot stuff. Triggerable func_statics.
|
||||
// Made flags only spawn in CTF mode
|
||||
//
|
||||
// Revision 1.23 2002/05/04 06:28:58 makro
|
||||
// no message
|
||||
//
|
||||
// Revision 1.22 2002/05/04 01:03:43 makro
|
||||
// Bots
|
||||
//
|
||||
// Revision 1.21 2002/05/02 23:05:25 makro
|
||||
// Loading screen. Jump kicks. Bot stuff
|
||||
//
|
||||
// Revision 1.20 2002/05/02 12:44:58 makro
|
||||
// Customizable color for the loading screen text. Bot stuff
|
||||
//
|
||||
// Revision 1.19 2002/04/30 12:23:35 jbravo
|
||||
// Warningfix
|
||||
//
|
||||
// Revision 1.18 2002/04/30 11:54:37 makro
|
||||
// Bots rule ! Also, added clips to give all. Maybe some other things
|
||||
//
|
||||
// Revision 1.17 2002/04/23 06:01:39 niceass
|
||||
// pressure stuff
|
||||
//
|
||||
// Revision 1.16 2002/04/20 02:34:57 jbravo
|
||||
// Changed weapon and ammo classnames at Sze's request
|
||||
//
|
||||
// Revision 1.15 2002/04/03 15:51:01 jbravo
|
||||
// Small warning fixes
|
||||
//
|
||||
// Revision 1.14 2002/04/03 03:13:16 blaze
|
||||
// NEW BREAKABLE CODE - will break all old breakables(wont appear in maps)
|
||||
//
|
||||
// Revision 1.13 2002/03/31 03:31:24 jbravo
|
||||
// Compiler warning cleanups
|
||||
//
|
||||
// Revision 1.12 2002/03/23 05:17:43 jbravo
|
||||
// Major cleanup of game -> cgame communication with LCA vars.
|
||||
//
|
||||
// Revision 1.11 2002/03/20 22:58:27 blaze
|
||||
// changed dlight to light_d
|
||||
//
|
||||
// Revision 1.10 2002/03/10 21:42:44 blaze
|
||||
// allow RQ3_weapon_name to map to weapon_name to make radiant work better
|
||||
//
|
||||
// Revision 1.9 2002/01/24 14:20:53 jbravo
|
||||
// Adding func_explosive and a few new surfaceparms
|
||||
//
|
||||
// Revision 1.8 2002/01/11 20:20:58 jbravo
|
||||
// Adding TP to main branch
|
||||
//
|
||||
// Revision 1.7 2002/01/11 19:48:30 jbravo
|
||||
// Formatted the source in non DOS format.
|
||||
//
|
||||
// Revision 1.6 2001/12/31 16:28:42 jbravo
|
||||
// I made a Booboo with the Log tag.
|
||||
//
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
// Copyright (C) 1999-2000 Id Software, Inc.
|
||||
//
|
||||
|
||||
#include "g_local.h"
|
||||
|
||||
qboolean G_SpawnString(const char *key, const char *defaultString, char **out)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!level.spawning) {
|
||||
*out = (char *) defaultString;
|
||||
// G_Error( "G_SpawnString() called while not spawning" );
|
||||
}
|
||||
|
||||
for (i = 0; i < level.numSpawnVars; i++) {
|
||||
if (!Q_stricmp(key, level.spawnVars[i][0])) {
|
||||
*out = level.spawnVars[i][1];
|
||||
return qtrue;
|
||||
}
|
||||
}
|
||||
|
||||
*out = (char *) defaultString;
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
qboolean G_SpawnFloat(const char *key, const char *defaultString, float *out)
|
||||
{
|
||||
char *s;
|
||||
qboolean present;
|
||||
|
||||
present = G_SpawnString(key, defaultString, &s);
|
||||
*out = atof(s);
|
||||
return present;
|
||||
}
|
||||
|
||||
qboolean G_SpawnInt(const char *key, const char *defaultString, int *out)
|
||||
{
|
||||
char *s;
|
||||
qboolean present;
|
||||
|
||||
present = G_SpawnString(key, defaultString, &s);
|
||||
*out = atoi(s);
|
||||
return present;
|
||||
}
|
||||
|
||||
qboolean G_SpawnVector(const char *key, const char *defaultString, float *out)
|
||||
{
|
||||
char *s;
|
||||
qboolean present;
|
||||
|
||||
present = G_SpawnString(key, defaultString, &s);
|
||||
sscanf(s, "%f %f %f", &out[0], &out[1], &out[2]);
|
||||
return present;
|
||||
}
|
||||
|
||||
//
|
||||
// fields are needed for spawning from the entity string
|
||||
//
|
||||
typedef enum {
|
||||
F_INT,
|
||||
F_FLOAT,
|
||||
F_LSTRING, // string on disk, pointer in memory, TAG_LEVEL
|
||||
F_GSTRING, // string on disk, pointer in memory, TAG_GAME
|
||||
F_VECTOR,
|
||||
F_ANGLEHACK,
|
||||
F_ENTITY, // index on disk, pointer in memory
|
||||
F_ITEM, // index on disk, pointer in memory
|
||||
F_CLIENT, // index on disk, pointer in memory
|
||||
F_IGNORE
|
||||
} fieldtype_t;
|
||||
|
||||
typedef struct {
|
||||
char *name;
|
||||
int ofs;
|
||||
fieldtype_t type;
|
||||
int flags;
|
||||
} field_t;
|
||||
|
||||
field_t fields[] = {
|
||||
{"classname", FOFS(classname), F_LSTRING},
|
||||
{"origin", FOFS(s.origin), F_VECTOR},
|
||||
{"model", FOFS(model), F_LSTRING},
|
||||
{"model2", FOFS(model2), F_LSTRING},
|
||||
{"spawnflags", FOFS(spawnflags), F_INT},
|
||||
{"speed", FOFS(speed), F_FLOAT},
|
||||
{"target", FOFS(target), F_LSTRING},
|
||||
{"targetname", FOFS(targetname), F_LSTRING},
|
||||
{"message", FOFS(message), F_LSTRING},
|
||||
{"team", FOFS(team), F_LSTRING},
|
||||
{"wait", FOFS(wait), F_FLOAT},
|
||||
{"random", FOFS(random), F_FLOAT},
|
||||
{"count", FOFS(count), F_INT},
|
||||
{"health", FOFS(health), F_INT},
|
||||
{"light", 0, F_IGNORE},
|
||||
{"dmg", FOFS(damage), F_INT},
|
||||
{"angles", FOFS(s.angles), F_VECTOR},
|
||||
{"angle", FOFS(s.angles), F_ANGLEHACK},
|
||||
{"targetShaderName", FOFS(targetShaderName), F_LSTRING},
|
||||
{"targetShaderNewName", FOFS(targetShaderNewName), F_LSTRING},
|
||||
{"distance", FOFS(distance), F_FLOAT}, // VALKYRIE: for rotating doors
|
||||
{"targetinactive", FOFS(targetInactive), F_LSTRING}, // Makro - target to be fired when inactive
|
||||
{"pathtarget", FOFS(pathtarget), F_LSTRING}, // Makro - for func_trains
|
||||
{"inactive", FOFS(inactive), F_INT}, // Makro - added
|
||||
{"activatename", FOFS(activatename), F_LSTRING},
|
||||
{NULL}
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
char *name;
|
||||
void (*spawn) (gentity_t * ent);
|
||||
} spawn_t;
|
||||
|
||||
void SP_info_player_start(gentity_t * ent);
|
||||
void SP_info_player_deathmatch(gentity_t * ent);
|
||||
void SP_info_player_intermission(gentity_t * ent);
|
||||
void SP_info_firstplace(gentity_t * ent);
|
||||
void SP_info_secondplace(gentity_t * ent);
|
||||
void SP_info_thirdplace(gentity_t * ent);
|
||||
void SP_info_podium(gentity_t * ent);
|
||||
|
||||
void SP_func_plat(gentity_t * ent);
|
||||
void SP_func_static(gentity_t * ent);
|
||||
void SP_func_rotating(gentity_t * ent);
|
||||
void SP_func_bobbing(gentity_t * ent);
|
||||
void SP_func_pendulum(gentity_t * ent);
|
||||
void SP_func_button(gentity_t * ent);
|
||||
void SP_func_door(gentity_t * ent);
|
||||
void SP_func_train(gentity_t * ent);
|
||||
void SP_func_timer(gentity_t * self);
|
||||
void SP_func_breakable(gentity_t * ent); //Blaze: Breakable glass
|
||||
void SP_func_pressure(gentity_t * ent); //NiceAss: pressure entity
|
||||
|
||||
void SP_trigger_always(gentity_t * ent);
|
||||
void SP_trigger_multiple(gentity_t * ent);
|
||||
void SP_trigger_push(gentity_t * ent);
|
||||
void SP_trigger_teleport(gentity_t * ent);
|
||||
void SP_trigger_hurt(gentity_t * ent);
|
||||
|
||||
void SP_target_remove_powerups(gentity_t * ent);
|
||||
void SP_target_give(gentity_t * ent);
|
||||
void SP_target_delay(gentity_t * ent);
|
||||
void SP_target_speaker(gentity_t * ent);
|
||||
void SP_target_print(gentity_t * ent);
|
||||
void SP_target_laser(gentity_t * self);
|
||||
void SP_target_character(gentity_t * ent);
|
||||
void SP_target_score(gentity_t * ent);
|
||||
void SP_target_teleporter(gentity_t * ent);
|
||||
void SP_target_relay(gentity_t * ent);
|
||||
void SP_target_kill(gentity_t * ent);
|
||||
//Makro - added
|
||||
void SP_target_activate(gentity_t * ent);
|
||||
void SP_target_position(gentity_t * ent);
|
||||
void SP_target_location(gentity_t * ent);
|
||||
void SP_target_push(gentity_t * ent);
|
||||
|
||||
void SP_light(gentity_t * self);
|
||||
void SP_dlight(gentity_t * self); // Elder: dlight entity
|
||||
void SP_info_null(gentity_t * self);
|
||||
void SP_info_notnull(gentity_t * self);
|
||||
void SP_info_camp(gentity_t * self);
|
||||
void SP_path_corner(gentity_t * self);
|
||||
|
||||
void SP_misc_teleporter_dest(gentity_t * self);
|
||||
void SP_misc_model(gentity_t * ent);
|
||||
void SP_misc_portal_camera(gentity_t * ent);
|
||||
void SP_misc_portal_surface(gentity_t * ent);
|
||||
//Makro - sky portals
|
||||
void SP_misc_sky_portal(gentity_t * ent);
|
||||
|
||||
//Blaze: These functions are nolonger here
|
||||
//void SP_shooter_rocket( gentity_t *ent );
|
||||
//void SP_shooter_plasma( gentity_t *ent );
|
||||
//void SP_shooter_grenade( gentity_t *ent );
|
||||
|
||||
void SP_team_CTF_redplayer(gentity_t * ent);
|
||||
void SP_team_CTF_blueplayer(gentity_t * ent);
|
||||
|
||||
void SP_team_CTF_redspawn(gentity_t * ent);
|
||||
void SP_team_CTF_bluespawn(gentity_t * ent);
|
||||
|
||||
void SP_func_door_rotating(gentity_t * ent); // VALKYRIE: for rotating doors
|
||||
|
||||
// JBravo: SP_item_botroam doesnt really exsist.
|
||||
// Makro - still, bots are supposed to use these
|
||||
void SP_item_botroam(gentity_t * ent);
|
||||
|
||||
//Blaze: merged func_explosive into func_breakable
|
||||
|
||||
// JBravo: adding explosive
|
||||
//void SP_func_explosive (gentity_t *self);
|
||||
|
||||
spawn_t spawns[] = {
|
||||
// info entities don't do anything at all, but provide positional
|
||||
// information for things controlled by other processes
|
||||
{"info_player_start", SP_info_player_start},
|
||||
{"info_player_deathmatch", SP_info_player_deathmatch},
|
||||
{"info_player_intermission", SP_info_player_intermission},
|
||||
{"info_null", SP_info_null},
|
||||
{"info_notnull", SP_info_notnull}, // use target_position instead
|
||||
{"info_camp", SP_info_camp},
|
||||
|
||||
{"func_plat", SP_func_plat},
|
||||
{"func_button", SP_func_button},
|
||||
{"func_door", SP_func_door},
|
||||
{"func_static", SP_func_static},
|
||||
{"func_rotating", SP_func_rotating},
|
||||
{"func_bobbing", SP_func_bobbing},
|
||||
{"func_pendulum", SP_func_pendulum},
|
||||
{"func_train", SP_func_train},
|
||||
{"func_group", SP_info_null},
|
||||
{"func_timer", SP_func_timer}, // rename trigger_timer?
|
||||
{"func_breakable", SP_func_breakable}, // Blaze: Breakable glass
|
||||
{"func_pressure", SP_func_pressure}, // NiceAss: pressure entity
|
||||
|
||||
// Triggers are brush objects that cause an effect when contacted
|
||||
// by a living player, usually involving firing targets.
|
||||
// While almost everything could be done with
|
||||
// a single trigger class and different targets, triggered effects
|
||||
// could not be client side predicted (push and teleport).
|
||||
{"trigger_always", SP_trigger_always},
|
||||
{"trigger_multiple", SP_trigger_multiple},
|
||||
{"trigger_push", SP_trigger_push},
|
||||
{"trigger_teleport", SP_trigger_teleport},
|
||||
{"trigger_hurt", SP_trigger_hurt},
|
||||
|
||||
// targets perform no action by themselves, but must be triggered
|
||||
// by another entity
|
||||
{"target_give", SP_target_give},
|
||||
{"target_remove_powerups", SP_target_remove_powerups},
|
||||
{"target_delay", SP_target_delay},
|
||||
{"target_speaker", SP_target_speaker},
|
||||
{"target_print", SP_target_print},
|
||||
{"target_laser", SP_target_laser},
|
||||
{"target_score", SP_target_score},
|
||||
{"target_teleporter", SP_target_teleporter},
|
||||
{"target_relay", SP_target_relay},
|
||||
{"target_kill", SP_target_kill},
|
||||
//Makro - added
|
||||
{"target_activate", SP_target_activate},
|
||||
{"target_position", SP_target_position},
|
||||
{"target_location", SP_target_location},
|
||||
{"target_push", SP_target_push},
|
||||
|
||||
{"light", SP_light},
|
||||
{"func_dlite", SP_dlight}, // Elder: dlight entity
|
||||
{"light_d", SP_dlight}, //Makro - for compatibility with older maps
|
||||
{"path_corner", SP_path_corner},
|
||||
|
||||
{"misc_teleporter_dest", SP_misc_teleporter_dest},
|
||||
{"misc_model", SP_misc_model},
|
||||
{"misc_portal_surface", SP_misc_portal_surface},
|
||||
{"misc_portal_camera", SP_misc_portal_camera},
|
||||
//Makro - sky portal !
|
||||
{"misc_sky_portal", SP_misc_sky_portal},
|
||||
//Blaze: This removes rocket traps I think
|
||||
// {"shooter_rocket", SP_shooter_rocket},
|
||||
// {"shooter_grenade", SP_shooter_grenade},
|
||||
// {"shooter_plasma", SP_shooter_plasma},
|
||||
|
||||
{"team_CTF_redplayer", SP_team_CTF_redplayer},
|
||||
{"team_CTF_blueplayer", SP_team_CTF_blueplayer},
|
||||
|
||||
{"team_CTF_redspawn", SP_team_CTF_redspawn},
|
||||
{"team_CTF_bluespawn", SP_team_CTF_bluespawn},
|
||||
|
||||
{"func_door_rotating", SP_func_door_rotating}, // VALKYRIE: for rotating doors
|
||||
|
||||
//Blaze: Merged func_explosive into func_breakable
|
||||
// {"func_explosive", SP_func_explosive}, // JBravo: for explosive.
|
||||
{"item_botroam", SP_item_botroam},
|
||||
|
||||
{0, 0}
|
||||
};
|
||||
|
||||
// JBravo: Compiler warning shutup
|
||||
void SP_item_botroam(gentity_t * ent)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
G_CallSpawn
|
||||
|
||||
Finds the spawn function for the entity and calls it,
|
||||
returning qfalse if not found
|
||||
===============
|
||||
*/
|
||||
qboolean G_CallSpawn(gentity_t * ent)
|
||||
{
|
||||
spawn_t *s;
|
||||
gitem_t *item;
|
||||
|
||||
if (!ent->classname) {
|
||||
G_Printf("G_CallSpawn: NULL classname\n");
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
//Blaze: allow for Reaction specific spawns to be used
|
||||
//Elder: map Q3DM weapons -> RQ3 weapons
|
||||
if (!strcmp(ent->classname, "weapon_gauntlet"))
|
||||
ent->classname = "weapon_knife";
|
||||
else if (!strcmp(ent->classname, "weapon_machinegun"))
|
||||
ent->classname = "weapon_pistol";
|
||||
else if (!strcmp(ent->classname, "weapon_shotgun"))
|
||||
ent->classname = "weapon_m3";
|
||||
else if (!strcmp(ent->classname, "weapon_plasmagun"))
|
||||
ent->classname = "weapon_mp5";
|
||||
else if (!strcmp(ent->classname, "weapon_rocketlauncher"))
|
||||
ent->classname = "weapon_handcannon";
|
||||
else if (!strcmp(ent->classname, "weapon_railgun"))
|
||||
ent->classname = "weapon_ssg3000";
|
||||
else if (!strcmp(ent->classname, "weapon_bfg"))
|
||||
ent->classname = "weapon_m4";
|
||||
else if (!strcmp(ent->classname, "ammo_grenades"))
|
||||
ent->classname = "weapon_grenade";
|
||||
//Makro - this was missing
|
||||
else if (!strcmp(ent->classname, "weapon_grenadelauncher"))
|
||||
ent->classname = "weapon_pistol";
|
||||
|
||||
//Elder: map Q3DM ammo -> RQ3 ammo
|
||||
if (!strcmp(ent->classname, "ammo_bullets"))
|
||||
ent->classname = "ammo_mk23";
|
||||
else if (!strcmp(ent->classname, "ammo_slugs"))
|
||||
ent->classname = "ammo_ssg3000";
|
||||
else if (!strcmp(ent->classname, "ammo_cells"))
|
||||
ent->classname = "ammo_mp5";
|
||||
else if (!strcmp(ent->classname, "ammo_bfg"))
|
||||
ent->classname = "ammo_m4";
|
||||
else if (!strcmp(ent->classname, "ammo_rockets"))
|
||||
ent->classname = "ammo_shells";
|
||||
|
||||
//Blaze: let us support RQ3_weapon name so radiant works nicer
|
||||
if (!strcmp(ent->classname, "RQ3weapon_knife"))
|
||||
ent->classname = "weapon_knife";
|
||||
else if (!strcmp(ent->classname, "RQ3weapon_pistol"))
|
||||
ent->classname = "weapon_pistol";
|
||||
else if (!strcmp(ent->classname, "RQ3weapon_m3"))
|
||||
ent->classname = "weapon_m3";
|
||||
else if (!strcmp(ent->classname, "RQ3weapon_mp5"))
|
||||
ent->classname = "weapon_mp5";
|
||||
else if (!strcmp(ent->classname, "RQ3weapon_handcannon"))
|
||||
ent->classname = "weapon_handcannon";
|
||||
else if (!strcmp(ent->classname, "RQ3weapon_ssg3000"))
|
||||
ent->classname = "weapon_ssg3000";
|
||||
else if (!strcmp(ent->classname, "RQ3weapon_m4"))
|
||||
ent->classname = "weapon_m4";
|
||||
else if (!strcmp(ent->classname, "RQ3weapon_grenade"))
|
||||
ent->classname = "weapon_grenade";
|
||||
// JBravo: Briefcases
|
||||
else if (!strcmp(ent->classname, "RQ3case_black"))
|
||||
ent->classname = "team_CTF_blueflag";
|
||||
else if (!strcmp(ent->classname, "RQ3case_silver"))
|
||||
ent->classname = "team_CTF_redflag";
|
||||
//Elder: map Q3DM ammo -> RQ3 ammo
|
||||
if (!strcmp(ent->classname, "RQ3ammo_mk23"))
|
||||
ent->classname = "ammo_mk23";
|
||||
else if (!strcmp(ent->classname, "RQ3ammo_ssg3000"))
|
||||
ent->classname = "ammo_ssg3000";
|
||||
else if (!strcmp(ent->classname, "RQ3ammo_mp5"))
|
||||
ent->classname = "ammo_mp5";
|
||||
else if (!strcmp(ent->classname, "RQ3ammo_m4"))
|
||||
ent->classname = "ammo_m4";
|
||||
else if (!strcmp(ent->classname, "RQ3ammo_shells"))
|
||||
ent->classname = "ammo_shells";
|
||||
|
||||
/*
|
||||
//Elder: old stuff
|
||||
if (!strcmp(ent->classname,"weapon_gauntlet")) ent->classname = "weapon_knife";
|
||||
else if (!strcmp(ent->classname,"weapon_railgun")) ent->classname = "weapon_ssg3000";
|
||||
else if (!strcmp(ent->classname,"weapon_shotgun")) ent->classname = "weapon_m3";
|
||||
else if (!strcmp(ent->classname,"weapon_machinegun")) ent->classname = "weapon_mp5";
|
||||
else if (!strcmp(ent->classname,"weapon_rocketlauncher")) ent->classname = "weapon_handcannon";
|
||||
else if (!strcmp(ent->classname,"weapon_bfg")) ent->classname = "weapon_m4";
|
||||
else if (!strcmp(ent->classname,"weapon_grenadelauncher")) ent->classname = "weapon_pistol";
|
||||
else if (!strcmp(ent->classname,"ammo_grenades")) ent->classname = "weapon_grenade";
|
||||
*/
|
||||
// check item spawn functions
|
||||
|
||||
// JBravo: No weapons and items on the maps in teamplay
|
||||
/*
|
||||
if (g_gametype.integer != GT_TEAMPLAY) {
|
||||
for ( item=bg_itemlist+1 ; item->classname ; item++ ) {
|
||||
if ( !strcmp(item->classname, ent->classname) ) {
|
||||
G_SpawnItem( ent, item );
|
||||
return qtrue;
|
||||
}
|
||||
}
|
||||
} */
|
||||
//Makro - new code
|
||||
|
||||
for (item = bg_itemlist + 1; item->classname; item++) {
|
||||
if (!strcmp(item->classname, ent->classname)) {
|
||||
//only spawn flags in CTF mode
|
||||
if (item->giType == IT_TEAM && (item->giTag == PW_REDFLAG || item->giTag == PW_BLUEFLAG)) {
|
||||
// JBravo: no spawning in CTF
|
||||
if (g_gametype.integer == GT_CTF) {
|
||||
G_SpawnItem(ent, item);
|
||||
return qtrue;
|
||||
}
|
||||
} else {
|
||||
if (g_gametype.integer != GT_CTF)
|
||||
G_SpawnItem(ent, item);
|
||||
return qtrue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check normal spawn functions
|
||||
for (s = spawns; s->name; s++) {
|
||||
if (!strcmp(s->name, ent->classname)) {
|
||||
// found it
|
||||
s->spawn(ent);
|
||||
return qtrue;
|
||||
}
|
||||
}
|
||||
// JBravo: getting rid of warnings when the game starts up.
|
||||
// JBravo: FIXME! This is just supressing the message, not the problem.
|
||||
if (g_gametype.integer != GT_TEAMPLAY)
|
||||
G_Printf("%s doesn't have a spawn function\n", ent->classname);
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
G_NewString
|
||||
|
||||
Builds a copy of the string, translating \n to real linefeeds
|
||||
so message texts can be multi-line
|
||||
=============
|
||||
*/
|
||||
char *G_NewString(const char *string)
|
||||
{
|
||||
char *newb, *new_p;
|
||||
int i, l;
|
||||
|
||||
l = strlen(string) + 1;
|
||||
|
||||
newb = G_Alloc(l);
|
||||
|
||||
new_p = newb;
|
||||
|
||||
// turn \n into a real linefeed
|
||||
for (i = 0; i < l; i++) {
|
||||
if (string[i] == '\\' && i < l - 1) {
|
||||
i++;
|
||||
if (string[i] == 'n') {
|
||||
*new_p++ = '\n';
|
||||
} else {
|
||||
*new_p++ = '\\';
|
||||
}
|
||||
} else {
|
||||
*new_p++ = string[i];
|
||||
}
|
||||
}
|
||||
|
||||
return newb;
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
G_ParseField
|
||||
|
||||
Takes a key/value pair and sets the binary values
|
||||
in a gentity
|
||||
===============
|
||||
*/
|
||||
void G_ParseField(const char *key, const char *value, gentity_t * ent)
|
||||
{
|
||||
field_t *f;
|
||||
byte *b;
|
||||
float v;
|
||||
vec3_t vec;
|
||||
|
||||
for (f = fields; f->name; f++) {
|
||||
if (!Q_stricmp(f->name, key)) {
|
||||
// found it
|
||||
b = (byte *) ent;
|
||||
|
||||
switch (f->type) {
|
||||
case F_LSTRING:
|
||||
*(char **) (b + f->ofs) = G_NewString(value);
|
||||
break;
|
||||
case F_VECTOR:
|
||||
sscanf(value, "%f %f %f", &vec[0], &vec[1], &vec[2]);
|
||||
((float *) (b + f->ofs))[0] = vec[0];
|
||||
((float *) (b + f->ofs))[1] = vec[1];
|
||||
((float *) (b + f->ofs))[2] = vec[2];
|
||||
break;
|
||||
case F_INT:
|
||||
*(int *) (b + f->ofs) = atoi(value);
|
||||
break;
|
||||
case F_FLOAT:
|
||||
*(float *) (b + f->ofs) = atof(value);
|
||||
break;
|
||||
case F_ANGLEHACK:
|
||||
v = atof(value);
|
||||
((float *) (b + f->ofs))[0] = 0;
|
||||
((float *) (b + f->ofs))[1] = v;
|
||||
((float *) (b + f->ofs))[2] = 0;
|
||||
break;
|
||||
default:
|
||||
case F_IGNORE:
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
===================
|
||||
G_SpawnGEntityFromSpawnVars
|
||||
|
||||
Spawn an entity and fill in all of the level fields from
|
||||
level.spawnVars[], then call the class specfic spawn function
|
||||
===================
|
||||
*/
|
||||
void G_SpawnGEntityFromSpawnVars(void)
|
||||
{
|
||||
int i;
|
||||
gentity_t *ent;
|
||||
char *s, *value, *gametypeName;
|
||||
|
||||
// JBravo: added teamplay
|
||||
static char *gametypeNames[] =
|
||||
{ "ffa", "tournament", "single", "team", "teamplay", "ctf", "oneflag", "obelisk", "harvester",
|
||||
"teamtournament"
|
||||
};
|
||||
|
||||
// get the next free entity
|
||||
ent = G_Spawn();
|
||||
|
||||
for (i = 0; i < level.numSpawnVars; i++) {
|
||||
G_ParseField(level.spawnVars[i][0], level.spawnVars[i][1], ent);
|
||||
}
|
||||
|
||||
// check for "notsingle" flag
|
||||
if (g_gametype.integer == GT_SINGLE_PLAYER) {
|
||||
G_SpawnInt("notsingle", "0", &i);
|
||||
if (i) {
|
||||
G_FreeEntity(ent, __LINE__, __FILE__);
|
||||
return;
|
||||
}
|
||||
}
|
||||
// check for "notteam" flag (GT_FFA, GT_TOURNAMENT, GT_SINGLE_PLAYER)
|
||||
if (g_gametype.integer >= GT_TEAM) {
|
||||
G_SpawnInt("notteam", "0", &i);
|
||||
if (i) {
|
||||
G_FreeEntity(ent, __LINE__, __FILE__);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
G_SpawnInt("notfree", "0", &i);
|
||||
if (i) {
|
||||
G_FreeEntity(ent, __LINE__, __FILE__);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
G_SpawnInt("notq3a", "0", &i);
|
||||
if (i) {
|
||||
G_FreeEntity(ent, __LINE__, __FILE__);
|
||||
return;
|
||||
}
|
||||
|
||||
if (G_SpawnString("gametype", NULL, &value)) {
|
||||
if (g_gametype.integer >= GT_FFA && g_gametype.integer < GT_MAX_GAME_TYPE) {
|
||||
gametypeName = gametypeNames[g_gametype.integer];
|
||||
|
||||
s = strstr(value, gametypeName);
|
||||
if (!s) {
|
||||
G_FreeEntity(ent, __LINE__, __FILE__);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
// move editor origin to pos
|
||||
VectorCopy(ent->s.origin, ent->s.pos.trBase);
|
||||
VectorCopy(ent->s.origin, ent->r.currentOrigin);
|
||||
|
||||
// if we didn't get a classname, don't bother spawning anything
|
||||
if (!G_CallSpawn(ent)) {
|
||||
G_FreeEntity(ent, __LINE__, __FILE__);
|
||||
}
|
||||
|
||||
//Makro - is the entity in a sky portal ?
|
||||
if (G_SpawnInt("skyportalent", "0", &i)) {
|
||||
if (i) {
|
||||
ent->s.eFlags |= EF_HEADLESS;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
====================
|
||||
G_AddSpawnVarToken
|
||||
====================
|
||||
*/
|
||||
char *G_AddSpawnVarToken(const char *string)
|
||||
{
|
||||
int l;
|
||||
char *dest;
|
||||
|
||||
l = strlen(string);
|
||||
if (level.numSpawnVarChars + l + 1 > MAX_SPAWN_VARS_CHARS) {
|
||||
G_Error("G_AddSpawnVarToken: MAX_SPAWN_CHARS");
|
||||
}
|
||||
|
||||
dest = level.spawnVarChars + level.numSpawnVarChars;
|
||||
memcpy(dest, string, l + 1);
|
||||
|
||||
level.numSpawnVarChars += l + 1;
|
||||
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*
|
||||
====================
|
||||
G_ParseSpawnVars
|
||||
|
||||
Parses a brace bounded set of key / value pairs out of the
|
||||
level's entity strings into level.spawnVars[]
|
||||
|
||||
This does not actually spawn an entity.
|
||||
====================
|
||||
*/
|
||||
qboolean G_ParseSpawnVars(void)
|
||||
{
|
||||
char keyname[MAX_TOKEN_CHARS];
|
||||
char com_token[MAX_TOKEN_CHARS];
|
||||
|
||||
level.numSpawnVars = 0;
|
||||
level.numSpawnVarChars = 0;
|
||||
|
||||
// parse the opening brace
|
||||
if (!trap_GetEntityToken(com_token, sizeof(com_token))) {
|
||||
// end of spawn string
|
||||
return qfalse;
|
||||
}
|
||||
if (com_token[0] != '{') {
|
||||
G_Error("G_ParseSpawnVars: found %s when expecting {", com_token);
|
||||
}
|
||||
// go through all the key / value pairs
|
||||
while (1) {
|
||||
// parse key
|
||||
if (!trap_GetEntityToken(keyname, sizeof(keyname))) {
|
||||
G_Error("G_ParseSpawnVars: EOF without closing brace");
|
||||
}
|
||||
|
||||
if (keyname[0] == '}') {
|
||||
break;
|
||||
}
|
||||
// parse value
|
||||
if (!trap_GetEntityToken(com_token, sizeof(com_token))) {
|
||||
G_Error("G_ParseSpawnVars: EOF without closing brace");
|
||||
}
|
||||
|
||||
if (com_token[0] == '}') {
|
||||
G_Error("G_ParseSpawnVars: closing brace without data");
|
||||
}
|
||||
if (level.numSpawnVars == MAX_SPAWN_VARS) {
|
||||
G_Error("G_ParseSpawnVars: MAX_SPAWN_VARS");
|
||||
}
|
||||
level.spawnVars[level.numSpawnVars][0] = G_AddSpawnVarToken(keyname);
|
||||
level.spawnVars[level.numSpawnVars][1] = G_AddSpawnVarToken(com_token);
|
||||
level.numSpawnVars++;
|
||||
}
|
||||
|
||||
return qtrue;
|
||||
}
|
||||
|
||||
/*QUAKED worldspawn (0 0 0) ?
|
||||
|
||||
Every map should have exactly one worldspawn.
|
||||
"music" music wav file
|
||||
"gravity" 800 is default gravity
|
||||
"message" Text to print during connection process
|
||||
*/
|
||||
void SP_worldspawn(void)
|
||||
{
|
||||
char *s;
|
||||
|
||||
vec3_t color;
|
||||
//int nodetail = 0;
|
||||
int i;
|
||||
char info[MAX_INFO_STRING];
|
||||
|
||||
G_SpawnString("classname", "", &s);
|
||||
if (Q_stricmp(s, "worldspawn")) {
|
||||
G_Error("SP_worldspawn: The first entity isn't 'worldspawn'");
|
||||
}
|
||||
// make some data visible to connecting client
|
||||
trap_SetConfigstring(CS_GAME_VERSION, GAME_VERSION);
|
||||
|
||||
trap_SetConfigstring(CS_LEVEL_START_TIME, va("%i", level.startTime));
|
||||
|
||||
G_SpawnString("music", "", &s);
|
||||
trap_SetConfigstring(CS_MUSIC, s);
|
||||
|
||||
G_SpawnString("message", "", &s);
|
||||
trap_SetConfigstring(CS_MESSAGE, s); // map specific message
|
||||
|
||||
/* Makro - no longer
|
||||
//Makro - color for the loading screen text
|
||||
G_SpawnVector( "_text_color", "0.75 0.75 0.75", color );
|
||||
Info_SetValueForKey(info, "r1", va("%f", color[0]));
|
||||
Info_SetValueForKey(info, "g1", va("%f", color[1]));
|
||||
Info_SetValueForKey(info, "b1", va("%f", color[2]));
|
||||
G_SpawnVector( "_text_color2", "1 1 1", color );
|
||||
Info_SetValueForKey(info, "r2", va("%f", color[0]));
|
||||
Info_SetValueForKey(info, "g2", va("%f", color[1]));
|
||||
Info_SetValueForKey(info, "b2", va("%f", color[2]));
|
||||
//skip detail ?
|
||||
G_SpawnInt( "nodetail", "0", &nodetail );
|
||||
Info_SetValueForKey(info, "nodetail", va("%i", nodetail));
|
||||
//save settings
|
||||
trap_SetConfigstring( CS_LOADINGSCREEN, info );
|
||||
*/
|
||||
|
||||
//Makro - fog hull
|
||||
G_SpawnVector("_rq3_fog_color", "0 0 0", color);
|
||||
memset(info, 0, sizeof(info));
|
||||
Info_SetValueForKey(info, "r", va("%f", color[0]));
|
||||
Info_SetValueForKey(info, "g", va("%f", color[1]));
|
||||
Info_SetValueForKey(info, "b", va("%f", color[2]));
|
||||
//G_Printf("^4 FOG HULL: %s\n", vtos(color));
|
||||
trap_SetConfigstring( CS_FOGHULL, info );
|
||||
|
||||
trap_SetConfigstring(CS_MOTD, g_motd.string); // message of the day
|
||||
|
||||
G_SpawnString("gravity", "800", &s);
|
||||
trap_Cvar_Set("g_gravity", s);
|
||||
|
||||
G_SpawnString("enableDust", "0", &s);
|
||||
trap_Cvar_Set("g_enableDust", s);
|
||||
|
||||
G_SpawnString("enableBreath", "0", &s);
|
||||
trap_Cvar_Set("g_enableBreath", s);
|
||||
|
||||
//Makro - read func_breakable types
|
||||
if (G_SpawnInt("numbreakabletypes", "0", &i)) {
|
||||
int j;
|
||||
for (j=0; j<i && j<RQ3_MAX_BREAKABLES; j++) {
|
||||
char *type, *force, *lift;
|
||||
if (!G_SpawnString(va("b%d_type", j), "", &type))
|
||||
continue;
|
||||
G_SpawnString(va("b%d_force", j), "7", &force);
|
||||
G_SpawnString(va("b%d_lift", j), "5", &lift);
|
||||
info[0] = 0;
|
||||
Info_SetValueForKey(info, "type", type);
|
||||
Info_SetValueForKey(info, "velocity", force);
|
||||
Info_SetValueForKey(info, "jump", lift);
|
||||
trap_SetConfigstring(CS_BREAKABLES + j, info);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// q3f atmospheric stuff:
|
||||
G_SpawnString( "atmosphere", "", &s );
|
||||
trap_SetConfigstring( CS_ATMOSEFFECT, s ); // Atmospheric effect
|
||||
|
||||
G_SpawnString("enableLaserFog", "1", &s);
|
||||
trap_Cvar_Set("g_enableLaserFog", s);
|
||||
|
||||
|
||||
g_entities[ENTITYNUM_WORLD].s.number = ENTITYNUM_WORLD;
|
||||
g_entities[ENTITYNUM_WORLD].classname = "worldspawn";
|
||||
|
||||
// see if we want a warmup time
|
||||
trap_SetConfigstring(CS_WARMUP, "");
|
||||
if (g_restarted.integer) {
|
||||
trap_Cvar_Set("g_restarted", "0");
|
||||
level.warmupTime = 0;
|
||||
} else if (g_doWarmup.integer) { // Turn it on
|
||||
level.warmupTime = -1;
|
||||
trap_SetConfigstring(CS_WARMUP, va("%i", level.warmupTime));
|
||||
G_LogPrintf("Warmup:\n");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
==============
|
||||
G_SpawnEntitiesFromString
|
||||
|
||||
Parses textual entity definitions out of an entstring and spawns gentities.
|
||||
==============
|
||||
*/
|
||||
void G_SpawnEntitiesFromString(void)
|
||||
{
|
||||
// allow calls to G_Spawn*()
|
||||
level.spawning = qtrue;
|
||||
level.numSpawnVars = 0;
|
||||
|
||||
// the worldspawn is not an actual entity, but it still
|
||||
// has a "spawn" function to perform any global setup
|
||||
// needed by a level (setting configstrings or cvars, etc)
|
||||
if (!G_ParseSpawnVars()) {
|
||||
G_Error("SpawnEntities: no entities");
|
||||
}
|
||||
SP_worldspawn();
|
||||
|
||||
// parse ents
|
||||
while (G_ParseSpawnVars()) {
|
||||
G_SpawnGEntityFromSpawnVars();
|
||||
}
|
||||
|
||||
level.spawning = qfalse; // any future calls to G_Spawn*() will be errors
|
||||
}
|
|
@ -1,874 +0,0 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Id: g_utils.c,v 1.21 2003/04/26 22:33:07 jbravo Exp $
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Log: g_utils.c,v $
|
||||
// Revision 1.21 2003/04/26 22:33:07 jbravo
|
||||
// Wratted all calls to G_FreeEnt() to avoid crashing and provide debugging
|
||||
//
|
||||
// Revision 1.20 2003/03/22 20:29:26 jbravo
|
||||
// wrapping linkent and unlinkent calls
|
||||
//
|
||||
// Revision 1.19 2002/08/24 07:58:15 niceass
|
||||
// moved sanitizestring to g_util
|
||||
//
|
||||
// Revision 1.18 2002/08/21 03:42:04 niceass
|
||||
// move of some vector functions outside of just game
|
||||
//
|
||||
// Revision 1.17 2002/07/19 04:28:39 niceass
|
||||
// no end line fix
|
||||
//
|
||||
// Revision 1.16 2002/07/16 04:06:21 niceass
|
||||
// temporary hack solution for map rotation and ctb
|
||||
//
|
||||
// Revision 1.15 2002/07/11 04:26:46 niceass
|
||||
// new debug function to save a string to a file
|
||||
//
|
||||
// Revision 1.14 2002/07/09 03:31:25 niceass
|
||||
// oops
|
||||
//
|
||||
// Revision 1.13 2002/07/09 03:23:14 niceass
|
||||
// added a alive function
|
||||
//
|
||||
// Revision 1.12 2002/06/16 20:06:14 jbravo
|
||||
// Reindented all the source files with "indent -kr -ut -i8 -l120 -lc120 -sob -bad -bap"
|
||||
//
|
||||
// Revision 1.11 2002/06/06 18:08:01 makro
|
||||
// Removed pathtarget code for trigger_pushes for now
|
||||
//
|
||||
// Revision 1.10 2002/05/23 15:55:25 makro
|
||||
// Elevators
|
||||
//
|
||||
// Revision 1.9 2002/05/20 16:25:48 makro
|
||||
// Triggerable cameras
|
||||
//
|
||||
// Revision 1.8 2002/01/11 20:20:58 jbravo
|
||||
// Adding TP to main branch
|
||||
//
|
||||
// Revision 1.7 2002/01/11 19:48:30 jbravo
|
||||
// Formatted the source in non DOS format.
|
||||
//
|
||||
// Revision 1.6 2001/12/31 16:28:42 jbravo
|
||||
// I made a Booboo with the Log tag.
|
||||
//
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
// Copyright (C) 1999-2000 Id Software, Inc.
|
||||
//
|
||||
// g_utils.c -- misc utility functions for game module
|
||||
|
||||
#include "g_local.h"
|
||||
|
||||
typedef struct {
|
||||
char oldShader[MAX_QPATH];
|
||||
char newShader[MAX_QPATH];
|
||||
float timeOffset;
|
||||
} shaderRemap_t;
|
||||
|
||||
#define MAX_SHADER_REMAPS 128
|
||||
|
||||
int remapCount = 0;
|
||||
shaderRemap_t remappedShaders[MAX_SHADER_REMAPS];
|
||||
|
||||
void AddRemap(const char *oldShader, const char *newShader, float timeOffset)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < remapCount; i++) {
|
||||
if (Q_stricmp(oldShader, remappedShaders[i].oldShader) == 0) {
|
||||
// found it, just update this one
|
||||
strcpy(remappedShaders[i].newShader, newShader);
|
||||
remappedShaders[i].timeOffset = timeOffset;
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (remapCount < MAX_SHADER_REMAPS) {
|
||||
strcpy(remappedShaders[remapCount].newShader, newShader);
|
||||
strcpy(remappedShaders[remapCount].oldShader, oldShader);
|
||||
remappedShaders[remapCount].timeOffset = timeOffset;
|
||||
remapCount++;
|
||||
}
|
||||
}
|
||||
|
||||
const char *BuildShaderStateConfig()
|
||||
{
|
||||
static char buff[MAX_STRING_CHARS * 4];
|
||||
char out[(MAX_QPATH * 2) + 5];
|
||||
int i;
|
||||
|
||||
memset(buff, 0, MAX_STRING_CHARS);
|
||||
for (i = 0; i < remapCount; i++) {
|
||||
Com_sprintf(out, (MAX_QPATH * 2) + 5, "%s=%s:%5.2f@", remappedShaders[i].oldShader,
|
||||
remappedShaders[i].newShader, remappedShaders[i].timeOffset);
|
||||
Q_strcat(buff, sizeof(buff), out);
|
||||
}
|
||||
return buff;
|
||||
}
|
||||
|
||||
/*
|
||||
=========================================================================
|
||||
|
||||
model / sound configstring indexes
|
||||
|
||||
=========================================================================
|
||||
*/
|
||||
|
||||
/*
|
||||
================
|
||||
G_FindConfigstringIndex
|
||||
|
||||
================
|
||||
*/
|
||||
int G_FindConfigstringIndex(char *name, int start, int max, qboolean create)
|
||||
{
|
||||
int i;
|
||||
char s[MAX_STRING_CHARS];
|
||||
|
||||
if (!name || !name[0]) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (i = 1; i < max; i++) {
|
||||
trap_GetConfigstring(start + i, s, sizeof(s));
|
||||
if (!s[0]) {
|
||||
break;
|
||||
}
|
||||
if (!strcmp(s, name)) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
if (!create) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (i == max) {
|
||||
G_Error("G_FindConfigstringIndex: overflow");
|
||||
}
|
||||
|
||||
trap_SetConfigstring(start + i, name);
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
int G_ModelIndex(char *name)
|
||||
{
|
||||
return G_FindConfigstringIndex(name, CS_MODELS, MAX_MODELS, qtrue);
|
||||
}
|
||||
|
||||
int G_SoundIndex(char *name)
|
||||
{
|
||||
return G_FindConfigstringIndex(name, CS_SOUNDS, MAX_SOUNDS, qtrue);
|
||||
}
|
||||
|
||||
//=====================================================================
|
||||
|
||||
/*
|
||||
================
|
||||
G_TeamCommand
|
||||
|
||||
Broadcasts a command to only a specific team
|
||||
================
|
||||
*/
|
||||
void G_TeamCommand(team_t team, char *cmd)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < level.maxclients; i++) {
|
||||
if (level.clients[i].pers.connected == CON_CONNECTED) {
|
||||
if (level.clients[i].sess.sessionTeam == team) {
|
||||
trap_SendServerCommand(i, va("%s", cmd));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
G_Find
|
||||
|
||||
Searches all active entities for the next one that holds
|
||||
the matching string at fieldofs (use the FOFS() macro) in the structure.
|
||||
|
||||
Searches beginning at the entity after from, or the beginning if NULL
|
||||
NULL will be returned if the end of the list is reached.
|
||||
|
||||
=============
|
||||
*/
|
||||
gentity_t *G_Find(gentity_t * from, int fieldofs, const char *match)
|
||||
{
|
||||
char *s;
|
||||
|
||||
if (!from)
|
||||
from = g_entities;
|
||||
else
|
||||
from++;
|
||||
|
||||
for (; from < &g_entities[level.num_entities]; from++) {
|
||||
if (!from->inuse)
|
||||
continue;
|
||||
s = *(char **) ((byte *) from + fieldofs);
|
||||
if (!s)
|
||||
continue;
|
||||
if (!Q_stricmp(s, match))
|
||||
return from;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//Makro - returns the first entity that matches both fieldofs
|
||||
gentity_t *G_Find2(gentity_t * from, int fieldofs, const char *match, int fieldofs2, const char *match2)
|
||||
{
|
||||
gentity_t *ent;
|
||||
|
||||
for (ent = G_Find(from, fieldofs, match); ent; ent = G_Find(ent, fieldofs, match)) {
|
||||
char *s = *(char **) ((byte *) ent + fieldofs2);
|
||||
|
||||
if (!s)
|
||||
continue;
|
||||
if (!Q_stricmp(s, match2))
|
||||
return ent;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
G_PickTarget
|
||||
|
||||
Selects a random entity from among the targets
|
||||
=============
|
||||
*/
|
||||
#define MAXCHOICES 32
|
||||
|
||||
gentity_t *G_PickTarget(char *targetname)
|
||||
{
|
||||
gentity_t *ent = NULL;
|
||||
int num_choices = 0;
|
||||
gentity_t *choice[MAXCHOICES];
|
||||
|
||||
if (!targetname) {
|
||||
G_Printf("G_PickTarget called with NULL targetname\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
while (1) {
|
||||
ent = G_Find(ent, FOFS(targetname), targetname);
|
||||
if (!ent)
|
||||
break;
|
||||
choice[num_choices++] = ent;
|
||||
if (num_choices == MAXCHOICES)
|
||||
break;
|
||||
}
|
||||
|
||||
if (!num_choices) {
|
||||
G_Printf("G_PickTarget: target %s not found\n", targetname);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return choice[rand() % num_choices];
|
||||
}
|
||||
|
||||
/*
|
||||
==============================
|
||||
G_UseTargets
|
||||
|
||||
"activator" should be set to the entity that initiated the firing.
|
||||
|
||||
Search for (string)targetname in all entities that
|
||||
match (string)self.target and call their .use function
|
||||
|
||||
==============================
|
||||
*/
|
||||
//Makro - added
|
||||
void G_UseEntities(gentity_t * ent, char *target, gentity_t * activator)
|
||||
{
|
||||
gentity_t *t;
|
||||
|
||||
if (!ent || !target) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (ent->targetShaderName && ent->targetShaderNewName) {
|
||||
float f = level.time * 0.001;
|
||||
|
||||
AddRemap(ent->targetShaderName, ent->targetShaderNewName, f);
|
||||
trap_SetConfigstring(CS_SHADERSTATE, BuildShaderStateConfig());
|
||||
}
|
||||
|
||||
t = NULL;
|
||||
while ((t = G_Find(t, FOFS(targetname), target)) != NULL) {
|
||||
if (t == ent) {
|
||||
G_Printf("WARNING: Entity used itself.\n");
|
||||
} else {
|
||||
if (t->use) {
|
||||
t->use(t, ent, activator);
|
||||
}
|
||||
}
|
||||
if (!ent->inuse) {
|
||||
G_Printf("entity was removed while using targets\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void G_UseTargets(gentity_t * ent, gentity_t * activator)
|
||||
{
|
||||
//Makro - moved the code to the function above
|
||||
G_UseEntities(ent, ent->target, activator);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
===============
|
||||
G_SetMovedir
|
||||
|
||||
The editor only specifies a single value for angles (yaw),
|
||||
but we have special constants to generate an up or down direction.
|
||||
Angles will be cleared, because it is being used to represent a direction
|
||||
instead of an orientation.
|
||||
===============
|
||||
*/
|
||||
void G_SetMovedir(vec3_t angles, vec3_t movedir)
|
||||
{
|
||||
static vec3_t VEC_UP = { 0, -1, 0 };
|
||||
static vec3_t MOVEDIR_UP = { 0, 0, 1 };
|
||||
static vec3_t VEC_DOWN = { 0, -2, 0 };
|
||||
static vec3_t MOVEDIR_DOWN = { 0, 0, -1 };
|
||||
|
||||
if (VectorCompare(angles, VEC_UP)) {
|
||||
VectorCopy(MOVEDIR_UP, movedir);
|
||||
} else if (VectorCompare(angles, VEC_DOWN)) {
|
||||
VectorCopy(MOVEDIR_DOWN, movedir);
|
||||
} else {
|
||||
AngleVectors(angles, movedir, NULL, NULL);
|
||||
}
|
||||
VectorClear(angles);
|
||||
}
|
||||
|
||||
float vectoyaw(const vec3_t vec)
|
||||
{
|
||||
float yaw;
|
||||
|
||||
if (vec[YAW] == 0 && vec[PITCH] == 0) {
|
||||
yaw = 0;
|
||||
} else {
|
||||
if (vec[PITCH]) {
|
||||
yaw = (atan2(vec[YAW], vec[PITCH]) * 180 / M_PI);
|
||||
} else if (vec[YAW] > 0) {
|
||||
yaw = 90;
|
||||
} else {
|
||||
yaw = 270;
|
||||
}
|
||||
if (yaw < 0) {
|
||||
yaw += 360;
|
||||
}
|
||||
}
|
||||
|
||||
return yaw;
|
||||
}
|
||||
|
||||
void G_InitGentity(gentity_t * e)
|
||||
{
|
||||
e->inuse = qtrue;
|
||||
e->classname = "noclass";
|
||||
e->s.number = e - g_entities;
|
||||
e->r.ownerNum = ENTITYNUM_NONE;
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
G_Spawn
|
||||
|
||||
Either finds a free entity, or allocates a new one.
|
||||
|
||||
The slots from 0 to MAX_CLIENTS-1 are always reserved for clients, and will
|
||||
never be used by anything else.
|
||||
|
||||
Try to avoid reusing an entity that was recently freed, because it
|
||||
can cause the client to think the entity morphed into something else
|
||||
instead of being removed and recreated, which can cause interpolated
|
||||
angles and bad trails.
|
||||
=================
|
||||
*/
|
||||
gentity_t *G_Spawn(void)
|
||||
{
|
||||
int i, force;
|
||||
gentity_t *e;
|
||||
|
||||
e = NULL; // shut up warning
|
||||
i = 0; // shut up warning
|
||||
for (force = 0; force < 2; force++) {
|
||||
// if we go through all entities and can't find one to free,
|
||||
// override the normal minimum times before use
|
||||
e = &g_entities[MAX_CLIENTS];
|
||||
for (i = MAX_CLIENTS; i < level.num_entities; i++, e++) {
|
||||
if (e->inuse) {
|
||||
continue;
|
||||
}
|
||||
// the first couple seconds of server time can involve a lot of
|
||||
// freeing and allocating, so relax the replacement policy
|
||||
if (!force && e->freetime > level.startTime + 2000 && level.time - e->freetime < 1000) {
|
||||
continue;
|
||||
}
|
||||
// reuse this slot
|
||||
G_InitGentity(e);
|
||||
return e;
|
||||
}
|
||||
if (i != MAX_GENTITIES) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i == ENTITYNUM_MAX_NORMAL) {
|
||||
for (i = 0; i < MAX_GENTITIES; i++) {
|
||||
G_Printf("%4i: %s\n", i, g_entities[i].classname);
|
||||
}
|
||||
G_Error("G_Spawn: no free entities");
|
||||
}
|
||||
// open up a new slot
|
||||
level.num_entities++;
|
||||
|
||||
// let the server system know that there are more entities
|
||||
trap_LocateGameData(level.gentities, level.num_entities, sizeof(gentity_t),
|
||||
&level.clients[0].ps, sizeof(level.clients[0]));
|
||||
|
||||
G_InitGentity(e);
|
||||
return e;
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
G_EntitiesFree
|
||||
=================
|
||||
*/
|
||||
qboolean G_EntitiesFree(void)
|
||||
{
|
||||
int i;
|
||||
gentity_t *e;
|
||||
|
||||
e = &g_entities[MAX_CLIENTS];
|
||||
for (i = MAX_CLIENTS; i < level.num_entities; i++, e++) {
|
||||
if (e->inuse) {
|
||||
continue;
|
||||
}
|
||||
// slot available
|
||||
return qtrue;
|
||||
}
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
G_FreeEntity
|
||||
|
||||
Marks the entity as free
|
||||
=================
|
||||
*/
|
||||
void G_FreeEntity(gentity_t * ed, int line, char *file)
|
||||
{
|
||||
if (ed == NULL || ed-g_entities < 0 || ed-g_entities > level.num_entities || ed->s.number <0 || ed->s.number > level.num_entities) {
|
||||
trap_SendServerCommand(-1, va("print \"^1G_FreeEntity got called with a bad ent from line %d of file %s. PLEASE report this to the RQ3 team\"", line, file));
|
||||
G_LogPrintf("G_FreeEntity got called with a bad ent from line %d of file %s. PLEASE report this to the RQ3 team", line, file);
|
||||
return;
|
||||
}
|
||||
|
||||
trap_RQ3UnlinkEntity(ed, __LINE__, __FILE__); // unlink from world
|
||||
|
||||
if (ed->neverFree) {
|
||||
return;
|
||||
}
|
||||
|
||||
memset(ed, 0, sizeof(*ed));
|
||||
ed->classname = "freed";
|
||||
ed->freetime = level.time;
|
||||
ed->inuse = qfalse;
|
||||
}
|
||||
|
||||
void G_RealFreeEntity(gentity_t * ed)
|
||||
{
|
||||
if (ed == NULL || ed-g_entities < 0 || ed-g_entities > level.num_entities || ed->s.number <0 || ed->s.number > level.num_entities) {
|
||||
trap_SendServerCommand(-1, va("print \"^1G_FreeEntity got called with a bad ent with no tracing. PLEASE report this to the RQ3 team\""));
|
||||
G_LogPrintf("G_FreeEntity got called with a bad ent with no tracing. PLEASE report this to the RQ3 team");
|
||||
return;
|
||||
}
|
||||
|
||||
trap_RQ3UnlinkEntity(ed, __LINE__, __FILE__); // unlink from world
|
||||
|
||||
if (ed->neverFree) {
|
||||
return;
|
||||
}
|
||||
|
||||
memset(ed, 0, sizeof(*ed));
|
||||
ed->classname = "freed";
|
||||
ed->freetime = level.time;
|
||||
ed->inuse = qfalse;
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
G_TempEntity
|
||||
|
||||
Spawns an event entity that will be auto-removed
|
||||
The origin will be snapped to save net bandwidth, so care
|
||||
must be taken if the origin is right on a surface (snap towards start vector first)
|
||||
=================
|
||||
*/
|
||||
gentity_t *G_TempEntity(vec3_t origin, int event)
|
||||
{
|
||||
gentity_t *e;
|
||||
vec3_t snapped;
|
||||
|
||||
e = G_Spawn();
|
||||
e->s.eType = ET_EVENTS + event;
|
||||
|
||||
e->classname = "tempEntity";
|
||||
e->eventTime = level.time;
|
||||
e->freeAfterEvent = qtrue;
|
||||
|
||||
VectorCopy(origin, snapped);
|
||||
SnapVector(snapped); // save network bandwidth
|
||||
G_SetOrigin(e, snapped);
|
||||
|
||||
// find cluster for PVS
|
||||
trap_RQ3LinkEntity(e, __LINE__, __FILE__);
|
||||
|
||||
return e;
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
G_TempEntity2
|
||||
Elder: Like above, except can sneak in event parameters
|
||||
=================
|
||||
*/
|
||||
gentity_t *G_TempEntity2(vec3_t origin, int event, int eParm)
|
||||
{
|
||||
gentity_t *e;
|
||||
vec3_t snapped;
|
||||
|
||||
e = G_Spawn();
|
||||
e->s.eType = ET_EVENTS + event;
|
||||
e->s.eventParm = eParm;
|
||||
|
||||
e->classname = "tempEntity";
|
||||
e->eventTime = level.time;
|
||||
e->freeAfterEvent = qtrue;
|
||||
|
||||
VectorCopy(origin, snapped);
|
||||
SnapVector(snapped); // save network bandwidth
|
||||
G_SetOrigin(e, snapped);
|
||||
|
||||
// find cluster for PVS
|
||||
trap_RQ3LinkEntity(e, __LINE__, __FILE__);
|
||||
|
||||
return e;
|
||||
}
|
||||
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
Kill box
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
/*
|
||||
=================
|
||||
G_KillBox
|
||||
|
||||
Kills all entities that would touch the proposed new positioning
|
||||
of ent. Ent should be unlinked before calling this!
|
||||
=================
|
||||
*/
|
||||
void G_KillBox(gentity_t * ent)
|
||||
{
|
||||
int i, num;
|
||||
int touch[MAX_GENTITIES];
|
||||
gentity_t *hit;
|
||||
vec3_t mins, maxs;
|
||||
|
||||
// JBravo attempting to stop telefrags
|
||||
if (g_gametype.integer == GT_TEAMPLAY) { // && level.lights_camera_action) {
|
||||
return;
|
||||
}
|
||||
|
||||
VectorAdd(ent->client->ps.origin, ent->r.mins, mins);
|
||||
VectorAdd(ent->client->ps.origin, ent->r.maxs, maxs);
|
||||
num = trap_EntitiesInBox(mins, maxs, touch, MAX_GENTITIES);
|
||||
|
||||
for (i = 0; i < num; i++) {
|
||||
hit = &g_entities[touch[i]];
|
||||
if (!hit->client) {
|
||||
continue;
|
||||
}
|
||||
// nail it
|
||||
G_Damage(hit, ent, ent, NULL, NULL, 100000, DAMAGE_NO_PROTECTION, MOD_TELEFRAG);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
||||
/*
|
||||
===============
|
||||
G_AddPredictableEvent
|
||||
|
||||
Use for non-pmove events that would also be predicted on the
|
||||
client side: jumppads and item pickups
|
||||
Adds an event+parm and twiddles the event counter
|
||||
===============
|
||||
*/
|
||||
void G_AddPredictableEvent(gentity_t * ent, int event, int eventParm)
|
||||
{
|
||||
if (!ent->client) {
|
||||
return;
|
||||
}
|
||||
BG_AddPredictableEventToPlayerstate(event, eventParm, &ent->client->ps);
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
G_AddEvent
|
||||
|
||||
Adds an event+parm and twiddles the event counter
|
||||
===============
|
||||
*/
|
||||
void G_AddEvent(gentity_t * ent, int event, int eventParm)
|
||||
{
|
||||
int bits;
|
||||
|
||||
if (!event) {
|
||||
G_Printf("G_AddEvent: zero event added for entity %i\n", ent->s.number);
|
||||
return;
|
||||
}
|
||||
// clients need to add the event in playerState_t instead of entityState_t
|
||||
if (ent->client) {
|
||||
bits = ent->client->ps.externalEvent & EV_EVENT_BITS;
|
||||
bits = (bits + EV_EVENT_BIT1) & EV_EVENT_BITS;
|
||||
ent->client->ps.externalEvent = event | bits;
|
||||
ent->client->ps.externalEventParm = eventParm;
|
||||
ent->client->ps.externalEventTime = level.time;
|
||||
} else {
|
||||
bits = ent->s.event & EV_EVENT_BITS;
|
||||
bits = (bits + EV_EVENT_BIT1) & EV_EVENT_BITS;
|
||||
ent->s.event = event | bits;
|
||||
ent->s.eventParm = eventParm;
|
||||
}
|
||||
ent->eventTime = level.time;
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
G_Sound
|
||||
=============
|
||||
*/
|
||||
void G_Sound(gentity_t * ent, int channel, int soundIndex)
|
||||
{
|
||||
gentity_t *te;
|
||||
|
||||
te = G_TempEntity(ent->r.currentOrigin, EV_GENERAL_SOUND);
|
||||
te->s.eventParm = soundIndex;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
||||
/*
|
||||
================
|
||||
G_SetOrigin
|
||||
|
||||
Sets the pos trajectory for a fixed position
|
||||
================
|
||||
*/
|
||||
void G_SetOrigin(gentity_t * ent, vec3_t origin)
|
||||
{
|
||||
VectorCopy(origin, ent->s.pos.trBase);
|
||||
ent->s.pos.trType = TR_STATIONARY;
|
||||
ent->s.pos.trTime = 0;
|
||||
ent->s.pos.trDuration = 0;
|
||||
VectorClear(ent->s.pos.trDelta);
|
||||
|
||||
VectorCopy(origin, ent->r.currentOrigin);
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
DebugLine
|
||||
|
||||
debug polygons only work when running a local game
|
||||
with r_debugSurface set to 2
|
||||
================
|
||||
*/
|
||||
int DebugLine(vec3_t start, vec3_t end, int color)
|
||||
{
|
||||
vec3_t points[4], dir, cross, up = { 0, 0, 1 };
|
||||
float dot;
|
||||
|
||||
VectorCopy(start, points[0]);
|
||||
VectorCopy(start, points[1]);
|
||||
//points[1][2] -= 2;
|
||||
VectorCopy(end, points[2]);
|
||||
//points[2][2] -= 2;
|
||||
VectorCopy(end, points[3]);
|
||||
|
||||
VectorSubtract(end, start, dir);
|
||||
VectorNormalize(dir);
|
||||
dot = DotProduct(dir, up);
|
||||
if (dot > 0.99 || dot < -0.99)
|
||||
VectorSet(cross, 1, 0, 0);
|
||||
else
|
||||
CrossProduct(dir, up, cross);
|
||||
|
||||
VectorNormalize(cross);
|
||||
|
||||
VectorMA(points[0], 2, cross, points[0]);
|
||||
VectorMA(points[1], -2, cross, points[1]);
|
||||
VectorMA(points[2], -2, cross, points[2]);
|
||||
VectorMA(points[3], 2, cross, points[3]);
|
||||
|
||||
return trap_DebugPolygonCreate(color, 4, points);
|
||||
}
|
||||
|
||||
// Blaze: Find radius
|
||||
//
|
||||
gentity_t *findradius(gentity_t * from, vec3_t org, float rad)
|
||||
{
|
||||
vec3_t eorg;
|
||||
int j;
|
||||
|
||||
if (!from)
|
||||
from = g_entities;
|
||||
else
|
||||
from++;
|
||||
|
||||
for (; from < &g_entities[level.num_entities]; from++) {
|
||||
if (!from->inuse)
|
||||
continue;
|
||||
for (j = 0; j < 3; j++)
|
||||
eorg[j] = org[j] - (from->r.currentOrigin[j] + (from->r.mins[j] + from->r.maxs[j]) * 0.5);
|
||||
if (VectorLength(eorg) > rad)
|
||||
continue;
|
||||
return from;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
Added by Elder
|
||||
|
||||
RQ3_SaveZoomLevel
|
||||
|
||||
Quick function to save the last zoom setting
|
||||
================
|
||||
*/
|
||||
void RQ3_SaveZoomLevel(gentity_t * ent)
|
||||
{
|
||||
if (ent->client) {
|
||||
if ((ent->client->ps.stats[STAT_RQ3] & RQ3_ZOOM_LOW) == RQ3_ZOOM_LOW)
|
||||
ent->client->lastzoom |= RQ3_ZOOM_LOW;
|
||||
if ((ent->client->ps.stats[STAT_RQ3] & RQ3_ZOOM_MED) == RQ3_ZOOM_MED)
|
||||
ent->client->lastzoom |= RQ3_ZOOM_MED;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
Added by Elder
|
||||
|
||||
RQ3_isZoomed
|
||||
|
||||
Quick function to determine if player is zoomed in
|
||||
================
|
||||
*/
|
||||
int RQ3_isZoomed(gentity_t * ent)
|
||||
{
|
||||
if (!ent->client) {
|
||||
G_Error("RQ3_isZoomed: passed non-client entity");
|
||||
return -1;
|
||||
} else {
|
||||
return ((ent->client->ps.stats[STAT_RQ3] & RQ3_ZOOM_LOW) == RQ3_ZOOM_LOW ||
|
||||
(ent->client->ps.stats[STAT_RQ3] & RQ3_ZOOM_MED) == RQ3_ZOOM_MED);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
G_PlayerAlive by NiceAss
|
||||
|
||||
Created to fix complications when inbetween death and being a spectator in TP
|
||||
*/
|
||||
int G_PlayerAlive(gentity_t *ent)
|
||||
{
|
||||
if (g_gametype.integer < GT_TEAM)
|
||||
{
|
||||
if ( ent->health > 0 )
|
||||
return qtrue;
|
||||
else
|
||||
return qfalse;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( ent->health > 0 && ( ent->client->sess.sessionTeam == TEAM_RED || ent->client->sess.sessionTeam == TEAM_BLUE ) )
|
||||
return qtrue;
|
||||
else
|
||||
return qfalse;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Want to save data right before RQ3 crashes? Ues this =D
|
||||
*/
|
||||
void G_DebugSaveData(char *Data) {
|
||||
fileHandle_t f;
|
||||
|
||||
if (trap_FS_FOpenFile("debugout.txt", &f, FS_WRITE) >= 0) {
|
||||
trap_FS_Write(Data, strlen(Data), f);
|
||||
trap_FS_FCloseFile(f);
|
||||
}
|
||||
}
|
||||
|
||||
qboolean G_FileSearch(char *Filename, char *Text) {
|
||||
fileHandle_t file;
|
||||
char *buf;
|
||||
int len;
|
||||
|
||||
len = trap_FS_FOpenFile(Filename, &file, FS_READ);
|
||||
|
||||
if (!file)
|
||||
return qfalse;
|
||||
|
||||
buf = G_Alloc(len);
|
||||
trap_FS_Read(buf, len, file);
|
||||
|
||||
trap_FS_FCloseFile(file);
|
||||
|
||||
return ( strstr(buf, Text) != NULL );
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
SanitizeString
|
||||
|
||||
Remove case and control characters
|
||||
==================
|
||||
*/
|
||||
void SanitizeString(char *in, char *out)
|
||||
{
|
||||
while (*in) {
|
||||
if (*in == 27) {
|
||||
in += 2; // skip color code
|
||||
continue;
|
||||
}
|
||||
if (*in < 32) {
|
||||
in++;
|
||||
continue;
|
||||
}
|
||||
*out++ = tolower(*in++);
|
||||
}
|
||||
|
||||
*out = 0;
|
||||
}
|
|
@ -1,148 +0,0 @@
|
|||
<html>
|
||||
<body>
|
||||
<pre>
|
||||
<h1>Build Log</h1>
|
||||
<h3>
|
||||
--------------------Configuration: game - Win32 Release--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
Creating temporary file "D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP465.tmp" with contents
|
||||
[
|
||||
/nologo /G6 /ML /W4 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FR"c:\reactionoutput/" /Fp"c:\reactionoutput/game.pch" /YX /Fo"c:\reactionoutput/" /Fd"c:\reactionoutput/" /FD /c
|
||||
"C:\Games\Quake3\rq3source\reaction\game\ai_chat.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\ai_cmd.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\ai_dmnet.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\ai_dmq3.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\ai_main.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\ai_team.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\ai_vcmd.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\bg_misc.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\bg_pmove.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\bg_slidemove.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_active.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_arenas.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_bot.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_client.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_cmds.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_combat.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_fileio.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_items.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_main.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_matchmode.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_mem.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_misc.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_missile.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_mover.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_session.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_spawn.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_svcmds.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_syscalls.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_target.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_team.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_teamplay.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_trigger.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_utils.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_weapon.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\q_math.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\q_shared.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\rxn_game.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\zcam.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\zcam_target.c"
|
||||
]
|
||||
Creating command line "cl.exe @D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP465.tmp"
|
||||
Creating temporary file "D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP466.tmp" with contents
|
||||
[
|
||||
kernel32.lib user32.lib winmm.lib /nologo /base:"0x20000000" /subsystem:windows /dll /incremental:no /pdb:"c:\reactionoutput/qagamex86.pdb" /map:"c:\reactionoutput/qagamex86.map" /machine:I386 /def:".\game.def" /out:"..\Release/qagamex86.dll" /implib:"c:\reactionoutput/qagamex86.lib"
|
||||
\reactionoutput\ai_chat.obj
|
||||
\reactionoutput\ai_cmd.obj
|
||||
\reactionoutput\ai_dmnet.obj
|
||||
\reactionoutput\ai_dmq3.obj
|
||||
\reactionoutput\ai_main.obj
|
||||
\reactionoutput\ai_team.obj
|
||||
\reactionoutput\ai_vcmd.obj
|
||||
\reactionoutput\bg_misc.obj
|
||||
\reactionoutput\bg_pmove.obj
|
||||
\reactionoutput\bg_slidemove.obj
|
||||
\reactionoutput\g_active.obj
|
||||
\reactionoutput\g_arenas.obj
|
||||
\reactionoutput\g_bot.obj
|
||||
\reactionoutput\g_client.obj
|
||||
\reactionoutput\g_cmds.obj
|
||||
\reactionoutput\g_combat.obj
|
||||
\reactionoutput\g_fileio.obj
|
||||
\reactionoutput\g_items.obj
|
||||
\reactionoutput\g_main.obj
|
||||
\reactionoutput\g_matchmode.obj
|
||||
\reactionoutput\g_mem.obj
|
||||
\reactionoutput\g_misc.obj
|
||||
\reactionoutput\g_missile.obj
|
||||
\reactionoutput\g_mover.obj
|
||||
\reactionoutput\g_session.obj
|
||||
\reactionoutput\g_spawn.obj
|
||||
\reactionoutput\g_svcmds.obj
|
||||
\reactionoutput\g_syscalls.obj
|
||||
\reactionoutput\g_target.obj
|
||||
\reactionoutput\g_team.obj
|
||||
\reactionoutput\g_teamplay.obj
|
||||
\reactionoutput\g_trigger.obj
|
||||
\reactionoutput\g_utils.obj
|
||||
\reactionoutput\g_weapon.obj
|
||||
\reactionoutput\q_math.obj
|
||||
\reactionoutput\q_shared.obj
|
||||
\reactionoutput\rxn_game.obj
|
||||
\reactionoutput\zcam.obj
|
||||
\reactionoutput\zcam_target.obj
|
||||
]
|
||||
Creating command line "link.exe @D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP466.tmp"
|
||||
<h3>Output Window</h3>
|
||||
Compiling...
|
||||
ai_chat.c
|
||||
ai_cmd.c
|
||||
ai_dmnet.c
|
||||
ai_dmq3.c
|
||||
ai_main.c
|
||||
ai_team.c
|
||||
ai_vcmd.c
|
||||
bg_misc.c
|
||||
bg_pmove.c
|
||||
bg_slidemove.c
|
||||
g_active.c
|
||||
g_arenas.c
|
||||
g_bot.c
|
||||
g_client.c
|
||||
g_cmds.c
|
||||
g_combat.c
|
||||
g_fileio.c
|
||||
g_items.c
|
||||
g_main.c
|
||||
g_matchmode.c
|
||||
g_mem.c
|
||||
g_misc.c
|
||||
g_missile.c
|
||||
g_mover.c
|
||||
g_session.c
|
||||
g_spawn.c
|
||||
g_svcmds.c
|
||||
g_syscalls.c
|
||||
g_target.c
|
||||
g_team.c
|
||||
g_teamplay.c
|
||||
g_trigger.c
|
||||
g_utils.c
|
||||
g_weapon.c
|
||||
q_math.c
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_weapon.c(2210) : warning C4701: local variable 'tr' may be used without having been initialized
|
||||
q_shared.c
|
||||
rxn_game.c
|
||||
zcam.c
|
||||
zcam_target.c
|
||||
Linking...
|
||||
Creating library c:\reactionoutput/qagamex86.lib and object c:\reactionoutput/qagamex86.exp
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
qagamex86.dll - 0 error(s), 1 warning(s)
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
|
@ -1,204 +0,0 @@
|
|||
<html>
|
||||
<body>
|
||||
<pre>
|
||||
<h1>Build Log</h1>
|
||||
<h3>
|
||||
--------------------Configuration: game - Win32 Release--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
<<<<<<< game.plg
|
||||
Creating temporary file "D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP465.tmp" with contents
|
||||
=======
|
||||
Creating temporary file "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSPC.tmp" with contents
|
||||
>>>>>>> 1.60
|
||||
[
|
||||
<<<<<<< game.plg
|
||||
/nologo /G6 /ML /W4 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FR"c:\reactionoutput/" /Fp"c:\reactionoutput/game.pch" /YX /Fo"c:\reactionoutput/" /Fd"c:\reactionoutput/" /FD /c
|
||||
"C:\Games\Quake3\rq3source\reaction\game\ai_chat.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\ai_cmd.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\ai_dmnet.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\ai_dmq3.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\ai_main.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\ai_team.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\ai_vcmd.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\bg_misc.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\bg_pmove.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\bg_slidemove.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_active.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_arenas.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_bot.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_client.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_cmds.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_combat.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_fileio.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_items.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_main.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_matchmode.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_mem.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_misc.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_missile.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_mover.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_session.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_spawn.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_svcmds.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_syscalls.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_target.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_team.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_teamplay.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_trigger.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_utils.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_weapon.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\q_math.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\q_shared.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\rxn_game.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\zcam.c"
|
||||
"C:\Games\Quake3\rq3source\reaction\game\zcam_target.c"
|
||||
=======
|
||||
/nologo /G5 /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "BUILDING_REF_GL" /D "DEBUG" /FR"c:\reactionoutput/" /Fp"c:\reactionoutput/game.pch" /YX /Fo"c:\reactionoutput/" /Fd"c:\reactionoutput/" /FD /c
|
||||
"C:\Development\reaction\game\ai_chat.c"
|
||||
"C:\Development\reaction\game\ai_cmd.c"
|
||||
"C:\Development\reaction\game\ai_dmnet.c"
|
||||
"C:\Development\reaction\game\ai_dmq3.c"
|
||||
"C:\Development\reaction\game\ai_main.c"
|
||||
"C:\Development\reaction\game\ai_team.c"
|
||||
"C:\Development\reaction\game\ai_vcmd.c"
|
||||
"C:\Development\reaction\game\bg_misc.c"
|
||||
"C:\Development\reaction\game\bg_pmove.c"
|
||||
"C:\Development\reaction\game\bg_slidemove.c"
|
||||
"C:\Development\reaction\game\g_active.c"
|
||||
"C:\Development\reaction\game\g_arenas.c"
|
||||
"C:\Development\reaction\game\g_bot.c"
|
||||
"C:\Development\reaction\game\g_client.c"
|
||||
"C:\Development\reaction\game\g_cmds.c"
|
||||
"C:\Development\reaction\game\g_combat.c"
|
||||
"C:\Development\reaction\game\g_fileio.c"
|
||||
"C:\Development\reaction\game\g_items.c"
|
||||
"C:\Development\reaction\game\g_main.c"
|
||||
"C:\Development\reaction\game\g_matchmode.c"
|
||||
"C:\Development\reaction\game\g_mem.c"
|
||||
"C:\Development\reaction\game\g_misc.c"
|
||||
"C:\Development\reaction\game\g_missile.c"
|
||||
"C:\Development\reaction\game\g_mover.c"
|
||||
"C:\Development\reaction\game\g_session.c"
|
||||
"C:\Development\reaction\game\g_spawn.c"
|
||||
"C:\Development\reaction\game\g_svcmds.c"
|
||||
"C:\Development\reaction\game\g_syscalls.c"
|
||||
"C:\Development\reaction\game\g_target.c"
|
||||
"C:\Development\reaction\game\g_team.c"
|
||||
"C:\Development\reaction\game\g_teamplay.c"
|
||||
"C:\Development\reaction\game\g_trigger.c"
|
||||
"C:\Development\reaction\game\g_utils.c"
|
||||
"C:\Development\reaction\game\g_weapon.c"
|
||||
"C:\Development\reaction\game\q_math.c"
|
||||
"C:\Development\reaction\game\q_shared.c"
|
||||
"C:\Development\reaction\game\rxn_game.c"
|
||||
"C:\Development\reaction\game\zcam.c"
|
||||
"C:\Development\reaction\game\zcam_target.c"
|
||||
>>>>>>> 1.60
|
||||
]
|
||||
<<<<<<< game.plg
|
||||
Creating command line "cl.exe @D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP465.tmp"
|
||||
Creating temporary file "D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP466.tmp" with contents
|
||||
=======
|
||||
Creating command line "cl.exe @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSPC.tmp"
|
||||
Creating temporary file "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSPD.tmp" with contents
|
||||
>>>>>>> 1.60
|
||||
[
|
||||
kernel32.lib user32.lib winmm.lib /nologo /base:"0x20000000" /subsystem:windows /dll /incremental:no /pdb:"c:\reactionoutput/qagamex86.pdb" /map:"c:\reactionoutput/qagamex86.map" /machine:I386 /def:".\game.def" /out:"..\Release/qagamex86.dll" /implib:"c:\reactionoutput/qagamex86.lib"
|
||||
\reactionoutput\ai_chat.obj
|
||||
\reactionoutput\ai_cmd.obj
|
||||
\reactionoutput\ai_dmnet.obj
|
||||
\reactionoutput\ai_dmq3.obj
|
||||
\reactionoutput\ai_main.obj
|
||||
\reactionoutput\ai_team.obj
|
||||
\reactionoutput\ai_vcmd.obj
|
||||
\reactionoutput\bg_misc.obj
|
||||
\reactionoutput\bg_pmove.obj
|
||||
\reactionoutput\bg_slidemove.obj
|
||||
\reactionoutput\g_active.obj
|
||||
\reactionoutput\g_arenas.obj
|
||||
\reactionoutput\g_bot.obj
|
||||
\reactionoutput\g_client.obj
|
||||
\reactionoutput\g_cmds.obj
|
||||
\reactionoutput\g_combat.obj
|
||||
\reactionoutput\g_fileio.obj
|
||||
\reactionoutput\g_items.obj
|
||||
\reactionoutput\g_main.obj
|
||||
\reactionoutput\g_matchmode.obj
|
||||
\reactionoutput\g_mem.obj
|
||||
\reactionoutput\g_misc.obj
|
||||
\reactionoutput\g_missile.obj
|
||||
\reactionoutput\g_mover.obj
|
||||
\reactionoutput\g_session.obj
|
||||
\reactionoutput\g_spawn.obj
|
||||
\reactionoutput\g_svcmds.obj
|
||||
\reactionoutput\g_syscalls.obj
|
||||
\reactionoutput\g_target.obj
|
||||
\reactionoutput\g_team.obj
|
||||
\reactionoutput\g_teamplay.obj
|
||||
\reactionoutput\g_trigger.obj
|
||||
\reactionoutput\g_utils.obj
|
||||
\reactionoutput\g_weapon.obj
|
||||
\reactionoutput\q_math.obj
|
||||
\reactionoutput\q_shared.obj
|
||||
\reactionoutput\rxn_game.obj
|
||||
\reactionoutput\zcam.obj
|
||||
\reactionoutput\zcam_target.obj
|
||||
]
|
||||
<<<<<<< game.plg
|
||||
Creating command line "link.exe @D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP466.tmp"
|
||||
=======
|
||||
Creating command line "link.exe @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSPD.tmp"
|
||||
>>>>>>> 1.60
|
||||
<h3>Output Window</h3>
|
||||
Compiling...
|
||||
ai_chat.c
|
||||
ai_cmd.c
|
||||
ai_dmnet.c
|
||||
ai_dmq3.c
|
||||
ai_main.c
|
||||
ai_team.c
|
||||
ai_vcmd.c
|
||||
bg_misc.c
|
||||
bg_pmove.c
|
||||
bg_slidemove.c
|
||||
g_active.c
|
||||
g_arenas.c
|
||||
g_bot.c
|
||||
g_client.c
|
||||
g_cmds.c
|
||||
g_combat.c
|
||||
g_fileio.c
|
||||
g_items.c
|
||||
g_main.c
|
||||
g_matchmode.c
|
||||
g_mem.c
|
||||
g_misc.c
|
||||
g_missile.c
|
||||
g_mover.c
|
||||
g_session.c
|
||||
g_spawn.c
|
||||
g_svcmds.c
|
||||
g_syscalls.c
|
||||
g_target.c
|
||||
g_team.c
|
||||
g_teamplay.c
|
||||
g_trigger.c
|
||||
g_utils.c
|
||||
g_weapon.c
|
||||
q_math.c
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_weapon.c(2210) : warning C4701: local variable 'tr' may be used without having been initialized
|
||||
q_shared.c
|
||||
rxn_game.c
|
||||
zcam.c
|
||||
zcam_target.c
|
||||
Linking...
|
||||
Creating library c:\reactionoutput/qagamex86.lib and object c:\reactionoutput/qagamex86.exp
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
qagamex86.dll - 0 error(s), 0 warning(s)
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
|
@ -1,75 +0,0 @@
|
|||
<html>
|
||||
<body>
|
||||
<pre>
|
||||
<h1>Build Log</h1>
|
||||
<h3>
|
||||
--------------------Configuration: cgame - Win32 Release--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
Creating temporary file "D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP410.tmp" with contents
|
||||
[
|
||||
/nologo /G6 /ML /W4 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Fp"Release/cgame.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c
|
||||
"C:\Games\Quake3\rq3source\reaction\cgame\cg_ents.c"
|
||||
]
|
||||
Creating command line "cl.exe @D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP410.tmp"
|
||||
Creating temporary file "D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP411.tmp" with contents
|
||||
[
|
||||
/nologo /base:"0x30000000" /subsystem:windows /dll /incremental:no /pdb:"Release/cgamex86.pdb" /map:"Release/cgamex86.map" /machine:I386 /def:".\cgame.def" /out:"../Release/cgamex86.dll" /implib:"Release/cgamex86.lib"
|
||||
.\Release\bg_misc.obj
|
||||
.\Release\bg_pmove.obj
|
||||
.\Release\bg_slidemove.obj
|
||||
.\Release\cg_consolecmds.obj
|
||||
.\Release\cg_draw.obj
|
||||
.\Release\cg_drawtools.obj
|
||||
.\Release\cg_effects.obj
|
||||
.\Release\cg_ents.obj
|
||||
.\Release\cg_event.obj
|
||||
.\Release\cg_info.obj
|
||||
.\Release\cg_localents.obj
|
||||
.\Release\cg_main.obj
|
||||
.\Release\cg_marks.obj
|
||||
.\Release\cg_players.obj
|
||||
.\Release\cg_playerstate.obj
|
||||
.\Release\cg_predict.obj
|
||||
.\Release\cg_scoreboard.obj
|
||||
.\Release\cg_servercmds.obj
|
||||
.\Release\cg_snapshot.obj
|
||||
.\Release\cg_syscalls.obj
|
||||
.\Release\cg_view.obj
|
||||
.\Release\cg_weapons.obj
|
||||
.\Release\q_math.obj
|
||||
.\Release\q_shared.obj
|
||||
.\Release\ui_shared.obj
|
||||
]
|
||||
Creating command line "link.exe @D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP411.tmp"
|
||||
<h3>Output Window</h3>
|
||||
Compiling...
|
||||
cg_ents.c
|
||||
Linking...
|
||||
Creating library Release/cgamex86.lib and object Release/cgamex86.exp
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
cgamex86.dll - 0 error(s), 0 warning(s)
|
||||
<h3>
|
||||
--------------------Configuration: game - Win32 Release--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
qagamex86.dll - 0 error(s), 0 warning(s)
|
||||
<h3>
|
||||
--------------------Configuration: ui - Win32 Release TA--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
uix86.dll - 0 error(s), 0 warning(s)
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
|
@ -1,76 +0,0 @@
|
|||
<html>
|
||||
<body>
|
||||
<pre>
|
||||
<h1>Build Log</h1>
|
||||
<h3>
|
||||
--------------------Configuration: cgame - Win32 Release--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
Creating temporary file "D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP4F.tmp" with contents
|
||||
[
|
||||
/nologo /G6 /ML /W4 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Fp"Release/cgame.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c
|
||||
"C:\Games\Quake3\rq3source\reaction\cgame\cg_ents.c"
|
||||
]
|
||||
Creating command line "cl.exe @D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP4F.tmp"
|
||||
Creating temporary file "D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP50.tmp" with contents
|
||||
[
|
||||
/nologo /base:"0x30000000" /subsystem:windows /dll /incremental:no /pdb:"Release/cgamex86.pdb" /map:"Release/cgamex86.map" /machine:I386 /def:".\cgame.def" /out:"../Release/cgamex86.dll" /implib:"Release/cgamex86.lib"
|
||||
.\Release\bg_misc.obj
|
||||
.\Release\bg_pmove.obj
|
||||
.\Release\bg_slidemove.obj
|
||||
.\Release\cg_atmospheric.obj
|
||||
.\Release\cg_consolecmds.obj
|
||||
.\Release\cg_draw.obj
|
||||
.\Release\cg_drawtools.obj
|
||||
.\Release\cg_effects.obj
|
||||
.\Release\cg_ents.obj
|
||||
.\Release\cg_event.obj
|
||||
.\Release\cg_info.obj
|
||||
.\Release\cg_localents.obj
|
||||
.\Release\cg_main.obj
|
||||
.\Release\cg_marks.obj
|
||||
.\Release\cg_players.obj
|
||||
.\Release\cg_playerstate.obj
|
||||
.\Release\cg_predict.obj
|
||||
.\Release\cg_scoreboard.obj
|
||||
.\Release\cg_servercmds.obj
|
||||
.\Release\cg_snapshot.obj
|
||||
.\Release\cg_syscalls.obj
|
||||
.\Release\cg_view.obj
|
||||
.\Release\cg_weapons.obj
|
||||
.\Release\q_math.obj
|
||||
.\Release\q_shared.obj
|
||||
.\Release\ui_shared.obj
|
||||
]
|
||||
Creating command line "link.exe @D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP50.tmp"
|
||||
<h3>Output Window</h3>
|
||||
Compiling...
|
||||
cg_ents.c
|
||||
Linking...
|
||||
Creating library Release/cgamex86.lib and object Release/cgamex86.exp
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
cgamex86.dll - 0 error(s), 0 warning(s)
|
||||
<h3>
|
||||
--------------------Configuration: game - Win32 Release--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
qagamex86.dll - 0 error(s), 0 warning(s)
|
||||
<h3>
|
||||
--------------------Configuration: ui - Win32 Release TA--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
uix86.dll - 0 error(s), 0 warning(s)
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
|
@ -1,120 +0,0 @@
|
|||
<html>
|
||||
<body>
|
||||
<pre>
|
||||
<h1>Build Log</h1>
|
||||
<h3>
|
||||
--------------------Configuration: game - Win32 Release--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
Creating temporary file "D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP4D3.tmp" with contents
|
||||
[
|
||||
/nologo /G6 /ML /W4 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FR"c:\reactionoutput/" /Fp"c:\reactionoutput/game.pch" /YX /Fo"c:\reactionoutput/" /Fd"c:\reactionoutput/" /FD /c
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_misc.c"
|
||||
]
|
||||
Creating command line "cl.exe @D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP4D3.tmp"
|
||||
Creating temporary file "D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP4D4.tmp" with contents
|
||||
[
|
||||
kernel32.lib user32.lib winmm.lib /nologo /base:"0x20000000" /subsystem:windows /dll /incremental:no /pdb:"c:\reactionoutput/qagamex86.pdb" /map:"c:\reactionoutput/qagamex86.map" /machine:I386 /def:".\game.def" /out:"..\Release/qagamex86.dll" /implib:"c:\reactionoutput/qagamex86.lib"
|
||||
\reactionoutput\ai_chat.obj
|
||||
\reactionoutput\ai_cmd.obj
|
||||
\reactionoutput\ai_dmnet.obj
|
||||
\reactionoutput\ai_dmq3.obj
|
||||
\reactionoutput\ai_main.obj
|
||||
\reactionoutput\ai_team.obj
|
||||
\reactionoutput\ai_vcmd.obj
|
||||
\reactionoutput\bg_misc.obj
|
||||
\reactionoutput\bg_pmove.obj
|
||||
\reactionoutput\bg_slidemove.obj
|
||||
\reactionoutput\g_active.obj
|
||||
\reactionoutput\g_arenas.obj
|
||||
\reactionoutput\g_bot.obj
|
||||
\reactionoutput\g_client.obj
|
||||
\reactionoutput\g_cmds.obj
|
||||
\reactionoutput\g_combat.obj
|
||||
\reactionoutput\g_fileio.obj
|
||||
\reactionoutput\g_items.obj
|
||||
\reactionoutput\g_main.obj
|
||||
\reactionoutput\g_matchmode.obj
|
||||
\reactionoutput\g_mem.obj
|
||||
\reactionoutput\g_misc.obj
|
||||
\reactionoutput\g_missile.obj
|
||||
\reactionoutput\g_mover.obj
|
||||
\reactionoutput\g_session.obj
|
||||
\reactionoutput\g_spawn.obj
|
||||
\reactionoutput\g_svcmds.obj
|
||||
\reactionoutput\g_syscalls.obj
|
||||
\reactionoutput\g_target.obj
|
||||
\reactionoutput\g_team.obj
|
||||
\reactionoutput\g_teamplay.obj
|
||||
\reactionoutput\g_trigger.obj
|
||||
\reactionoutput\g_utils.obj
|
||||
\reactionoutput\g_weapon.obj
|
||||
\reactionoutput\q_math.obj
|
||||
\reactionoutput\q_shared.obj
|
||||
\reactionoutput\rxn_game.obj
|
||||
\reactionoutput\zcam.obj
|
||||
\reactionoutput\zcam_target.obj
|
||||
]
|
||||
Creating command line "link.exe @D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP4D4.tmp"
|
||||
<h3>Output Window</h3>
|
||||
Compiling...
|
||||
g_misc.c
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(312) : error C2143: syntax error : missing ';' before '<<'
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(385) : error C2143: syntax error : missing ';' before '=='
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(387) : error C2143: syntax error : missing ';' before '>>'
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(412) : error C2065: 'player' : undeclared identifier
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(412) : error C2223: left of '->client' must point to struct/union
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(413) : error C2065: 'tent' : undeclared identifier
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(413) : error C2223: left of '->client' must point to struct/union
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(413) : warning C4047: 'function' : 'float *' differs in levels of indirection from 'int '
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(413) : warning C4024: 'G_TempEntity' : different types for formal and actual parameter 1
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(413) : error C2198: 'G_TempEntity' : too few actual parameters
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(413) : warning C4047: '=' : 'int ' differs in levels of indirection from 'struct gentity_s *'
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(414) : error C2223: left of '->s' must point to struct/union
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(414) : error C2223: left of '->s' must point to struct/union
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(416) : error C2065: 'origin' : undeclared identifier
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(416) : warning C4047: 'function' : 'float *' differs in levels of indirection from 'int '
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(416) : warning C4024: 'G_TempEntity' : different types for formal and actual parameter 1
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(416) : warning C4047: '=' : 'int ' differs in levels of indirection from 'struct gentity_s *'
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(417) : error C2223: left of '->s' must point to struct/union
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(417) : error C2223: left of '->s' must point to struct/union
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(420) : warning C4047: 'function' : 'struct gentity_s *' differs in levels of indirection from 'int '
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(420) : warning C4024: 'trap_RQ3UnlinkEntity' : different types for formal and actual parameter 1
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(422) : error C2223: left of '->client' must point to struct/union
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(422) : error C2109: subscript requires array or pointer type
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(422) : error C2223: left of '->client' must point to struct/union
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(422) : error C2109: subscript requires array or pointer type
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(422) : error C2223: left of '->client' must point to struct/union
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(422) : error C2109: subscript requires array or pointer type
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(423) : error C2223: left of '->client' must point to struct/union
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(428) : error C2223: left of '->client' must point to struct/union
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(429) : error C2223: left of '->client' must point to struct/union
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(432) : error C2223: left of '->client' must point to struct/union
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(435) : warning C4047: 'function' : 'struct gentity_s *' differs in levels of indirection from 'int '
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(435) : warning C4024: 'G_ResetHistory' : different types for formal and actual parameter 1
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(441) : error C2223: left of '->client' must point to struct/union
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(442) : warning C4047: 'function' : 'struct gentity_s *' differs in levels of indirection from 'int '
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(442) : warning C4024: 'G_KillBox' : different types for formal and actual parameter 1
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(445) : error C2223: left of '->client' must point to struct/union
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(445) : error C2223: left of '->s' must point to struct/union
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(445) : warning C4047: 'function' : 'struct playerState_s *' differs in levels of indirection from 'int '
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(445) : warning C4024: 'BG_PlayerStateToEntityState' : different types for formal and actual parameter 1
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(445) : error C2198: 'BG_PlayerStateToEntityState' : too few actual parameters
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(448) : error C2223: left of '->r' must point to struct/union
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(448) : error C2223: left of '->client' must point to struct/union
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(448) : error C2223: left of '->r' must point to struct/union
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(448) : error C2223: left of '->client' must point to struct/union
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(448) : error C2223: left of '->r' must point to struct/union
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(448) : error C2223: left of '->client' must point to struct/union
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(450) : error C2223: left of '->client' must point to struct/union
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(451) : warning C4047: 'function' : 'struct gentity_s *' differs in levels of indirection from 'int '
|
||||
C:\Games\Quake3\rq3source\reaction\game\g_misc.c(451) : warning C4024: 'trap_RQ3LinkEntity' : different types for formal and actual parameter 1
|
||||
Error executing cl.exe.
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
qagamex86.dll - 34 error(s), 16 warning(s)
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
|
@ -1,118 +0,0 @@
|
|||
<html>
|
||||
<body>
|
||||
<pre>
|
||||
<h1>Build Log</h1>
|
||||
<h3>
|
||||
--------------------Configuration: game - Win32 Release--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
Creating temporary file "D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP8F5.tmp" with contents
|
||||
[
|
||||
/nologo /G6 /ML /W4 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FR"c:\reactionoutput/" /Fp"c:\reactionoutput/game.pch" /YX /Fo"c:\reactionoutput/" /Fd"c:\reactionoutput/" /FD /c
|
||||
"C:\Games\Quake3\rq3source\reaction\game\g_misc.c"
|
||||
]
|
||||
Creating command line "cl.exe @D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP8F5.tmp"
|
||||
Creating temporary file "D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP8F6.tmp" with contents
|
||||
[
|
||||
kernel32.lib user32.lib winmm.lib /nologo /base:"0x20000000" /subsystem:windows /dll /incremental:no /pdb:"c:\reactionoutput/qagamex86.pdb" /map:"c:\reactionoutput/qagamex86.map" /machine:I386 /def:".\game.def" /out:"..\Release/qagamex86.dll" /implib:"c:\reactionoutput/qagamex86.lib"
|
||||
\reactionoutput\ai_chat.obj
|
||||
\reactionoutput\ai_cmd.obj
|
||||
\reactionoutput\ai_dmnet.obj
|
||||
\reactionoutput\ai_dmq3.obj
|
||||
\reactionoutput\ai_main.obj
|
||||
\reactionoutput\ai_team.obj
|
||||
\reactionoutput\ai_vcmd.obj
|
||||
\reactionoutput\bg_misc.obj
|
||||
\reactionoutput\bg_pmove.obj
|
||||
\reactionoutput\bg_slidemove.obj
|
||||
\reactionoutput\g_active.obj
|
||||
\reactionoutput\g_arenas.obj
|
||||
\reactionoutput\g_bot.obj
|
||||
\reactionoutput\g_client.obj
|
||||
\reactionoutput\g_cmds.obj
|
||||
\reactionoutput\g_combat.obj
|
||||
\reactionoutput\g_fileio.obj
|
||||
\reactionoutput\g_items.obj
|
||||
\reactionoutput\g_main.obj
|
||||
\reactionoutput\g_matchmode.obj
|
||||
\reactionoutput\g_mem.obj
|
||||
\reactionoutput\g_misc.obj
|
||||
\reactionoutput\g_missile.obj
|
||||
\reactionoutput\g_mover.obj
|
||||
\reactionoutput\g_session.obj
|
||||
\reactionoutput\g_spawn.obj
|
||||
\reactionoutput\g_svcmds.obj
|
||||
\reactionoutput\g_syscalls.obj
|
||||
\reactionoutput\g_target.obj
|
||||
\reactionoutput\g_team.obj
|
||||
\reactionoutput\g_teamplay.obj
|
||||
\reactionoutput\g_trigger.obj
|
||||
\reactionoutput\g_unlagged.obj
|
||||
\reactionoutput\g_utils.obj
|
||||
\reactionoutput\g_weapon.obj
|
||||
\reactionoutput\q_math.obj
|
||||
\reactionoutput\q_shared.obj
|
||||
\reactionoutput\rxn_game.obj
|
||||
\reactionoutput\zcam.obj
|
||||
\reactionoutput\zcam_target.obj
|
||||
]
|
||||
Creating command line "link.exe @D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP8F6.tmp"
|
||||
<h3>Output Window</h3>
|
||||
Compiling...
|
||||
g_misc.c
|
||||
Linking...
|
||||
Creating library c:\reactionoutput/qagamex86.lib and object c:\reactionoutput/qagamex86.exp
|
||||
Creating temporary file "D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP8FA.tmp" with contents
|
||||
[
|
||||
/nologo /o"c:\reactionoutput/game.bsc"
|
||||
\reactionoutput\ai_chat.sbr
|
||||
\reactionoutput\ai_cmd.sbr
|
||||
\reactionoutput\ai_dmnet.sbr
|
||||
\reactionoutput\ai_dmq3.sbr
|
||||
\reactionoutput\ai_main.sbr
|
||||
\reactionoutput\ai_team.sbr
|
||||
\reactionoutput\ai_vcmd.sbr
|
||||
\reactionoutput\bg_misc.sbr
|
||||
\reactionoutput\bg_pmove.sbr
|
||||
\reactionoutput\bg_slidemove.sbr
|
||||
\reactionoutput\g_active.sbr
|
||||
\reactionoutput\g_arenas.sbr
|
||||
\reactionoutput\g_bot.sbr
|
||||
\reactionoutput\g_client.sbr
|
||||
\reactionoutput\g_cmds.sbr
|
||||
\reactionoutput\g_combat.sbr
|
||||
\reactionoutput\g_fileio.sbr
|
||||
\reactionoutput\g_items.sbr
|
||||
\reactionoutput\g_main.sbr
|
||||
\reactionoutput\g_matchmode.sbr
|
||||
\reactionoutput\g_mem.sbr
|
||||
\reactionoutput\g_misc.sbr
|
||||
\reactionoutput\g_missile.sbr
|
||||
\reactionoutput\g_mover.sbr
|
||||
\reactionoutput\g_session.sbr
|
||||
\reactionoutput\g_spawn.sbr
|
||||
\reactionoutput\g_svcmds.sbr
|
||||
\reactionoutput\g_syscalls.sbr
|
||||
\reactionoutput\g_target.sbr
|
||||
\reactionoutput\g_team.sbr
|
||||
\reactionoutput\g_teamplay.sbr
|
||||
\reactionoutput\g_trigger.sbr
|
||||
\reactionoutput\g_unlagged.sbr
|
||||
\reactionoutput\g_utils.sbr
|
||||
\reactionoutput\g_weapon.sbr
|
||||
\reactionoutput\q_math.sbr
|
||||
\reactionoutput\q_shared.sbr
|
||||
\reactionoutput\rxn_game.sbr
|
||||
\reactionoutput\zcam.sbr
|
||||
\reactionoutput\zcam_target.sbr]
|
||||
Creating command line "bscmake.exe @D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP8FA.tmp"
|
||||
Creating browse info file...
|
||||
<h3>Output Window</h3>
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
qagamex86.dll - 0 error(s), 0 warning(s)
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
|
@ -1,58 +0,0 @@
|
|||
<html>
|
||||
<body>
|
||||
<pre>
|
||||
<h1>Build Log</h1>
|
||||
<h3>
|
||||
--------------------Configuration: ui - Win32 Release TA--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
Creating temporary file "D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP535.tmp" with contents
|
||||
[
|
||||
/nologo /G6 /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UI_EXPORTS" /FR"Release_TA/" /Fp"Release_TA/ta_ui.pch" /YX /Fo"Release_TA/" /Fd"Release_TA/" /FD /c
|
||||
"C:\Games\Quake3\rq3source\reaction\ta_ui\ui_shared.c"
|
||||
]
|
||||
Creating command line "cl.exe @D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP535.tmp"
|
||||
Creating temporary file "D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP536.tmp" with contents
|
||||
[
|
||||
/nologo /base:"0x40000000" /dll /incremental:no /pdb:"Release_TA/uix86.pdb" /map:"Release_TA/uix86.map" /machine:I386 /def:".\ui.def" /out:"../Release/uix86.dll" /implib:"Release_TA/uix86.lib"
|
||||
.\Release_TA\bg_misc.obj
|
||||
.\Release_TA\q_math.obj
|
||||
.\Release_TA\q_shared.obj
|
||||
.\Release_TA\ui_atoms.obj
|
||||
.\Release_TA\ui_gameinfo.obj
|
||||
.\Release_TA\ui_main.obj
|
||||
.\Release_TA\ui_players.obj
|
||||
.\Release_TA\ui_shared.obj
|
||||
.\Release_TA\ui_syscalls.obj
|
||||
.\Release_TA\ui_util.obj
|
||||
]
|
||||
Creating command line "link.exe @D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP536.tmp"
|
||||
<h3>Output Window</h3>
|
||||
Compiling...
|
||||
ui_shared.c
|
||||
Linking...
|
||||
Creating library Release_TA/uix86.lib and object Release_TA/uix86.exp
|
||||
Creating temporary file "D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP53A.tmp" with contents
|
||||
[
|
||||
/nologo /o"Release_TA/ta_ui.bsc"
|
||||
.\Release_TA\bg_misc.sbr
|
||||
.\Release_TA\q_math.sbr
|
||||
.\Release_TA\q_shared.sbr
|
||||
.\Release_TA\ui_atoms.sbr
|
||||
.\Release_TA\ui_gameinfo.sbr
|
||||
.\Release_TA\ui_main.sbr
|
||||
.\Release_TA\ui_players.sbr
|
||||
.\Release_TA\ui_shared.sbr
|
||||
.\Release_TA\ui_syscalls.sbr
|
||||
.\Release_TA\ui_util.sbr]
|
||||
Creating command line "bscmake.exe @D:\DOCUME~1\Andrei\LOCALS~1\Temp\RSP53A.tmp"
|
||||
Creating browse info file...
|
||||
<h3>Output Window</h3>
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
uix86.dll - 0 error(s), 0 warning(s)
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,555 +0,0 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Id: ui_credits.c,v 1.13 2002/01/11 20:20:58 jbravo Exp $
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Log: ui_credits.c,v $
|
||||
// Revision 1.13 2002/01/11 20:20:58 jbravo
|
||||
// Adding TP to main branch
|
||||
//
|
||||
// Revision 1.12 2002/01/11 19:48:30 jbravo
|
||||
// Formatted the source in non DOS format.
|
||||
//
|
||||
// Revision 1.11 2001/12/31 16:28:42 jbravo
|
||||
// I made a Booboo with the Log tag.
|
||||
//
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
/*
|
||||
===========================================
|
||||
SCROLLING CREDITS CODE
|
||||
Author: Iain McGinniss
|
||||
Company: AZ Development Team
|
||||
|
||||
Produced for Code 3 Arena, feel free
|
||||
to use this code in your own projects
|
||||
just please remember to give credit
|
||||
to AZ Development team for this.
|
||||
That should be easy now with this
|
||||
new credits system!
|
||||
===========================================
|
||||
|
||||
Elder's modifications
|
||||
-Letterbox simulation
|
||||
-Fixed width string drawing
|
||||
-Movie style "character -- actor" layout
|
||||
-Configurable fade-to-color sequence
|
||||
*/
|
||||
|
||||
// INCLUDE FILES
|
||||
#include "ui_local.h"
|
||||
|
||||
// CONSTANT DEFINITIONS
|
||||
|
||||
#define SCROLLSPEED 2.00 // The scrolling speed in pixels per second.
|
||||
// modify as appropriate for our credits
|
||||
|
||||
#define BACKGROUND_SHADER
|
||||
// uncomment this to use a background shader, otherwise a solid color
|
||||
// defined in the vec4_t "color_background" is filled to the screen
|
||||
|
||||
//Elder: added to choose drawFixed
|
||||
#define PROPWIDTH 0
|
||||
#define FIXEDWIDTH 1
|
||||
|
||||
#define RIGHT_JUSTIFY_POSITION 310
|
||||
#define LEFT_JUSTIFY_POSITION 330
|
||||
|
||||
//Elder: fader code parameters - plus nicer to access vec4_t with COLOR_*
|
||||
#define FADE_START_TIME 4000
|
||||
#define FADE_DURATION 10000
|
||||
#define COLOR_R 0
|
||||
#define COLOR_G 1
|
||||
#define COLOR_B 2
|
||||
#define COLOR_A 3
|
||||
|
||||
// STRUCTURES
|
||||
|
||||
typedef struct {
|
||||
menuframework_s menu;
|
||||
} creditsmenu_t;
|
||||
|
||||
static creditsmenu_t s_credits;
|
||||
|
||||
int starttime = 0; // game time at which credits are started
|
||||
float mvolume; // records the original music volume level, as we will
|
||||
// modify it for the credits
|
||||
|
||||
//Elder: fader variables
|
||||
static float fade = 0.00;
|
||||
//Elder: Fade color - leave alpha component at 0.00
|
||||
vec4_t color_fader = {0.00, 0.00, 0.00, 0.00};
|
||||
|
||||
vec4_t color_background = {0.00, 0.00, 0.00, 1.00};
|
||||
// these are just example colours that are used in credits[]
|
||||
vec4_t color_headertext = {0.80, 0.00, 0.00, 1.00};
|
||||
vec4_t color_maintext = {1.00, 1.00, 1.00, 1.00};
|
||||
|
||||
// definition of the background shader pointer
|
||||
qhandle_t BackgroundShader;
|
||||
|
||||
/*
|
||||
Constants to be used for the "style" field of the cr_line credits[] structure...
|
||||
UI_LEFT - Align to the left of the screen
|
||||
UI_CENTER - Align to the center
|
||||
UI_RIGHT - Align to the right of the screen
|
||||
UI_SMALLFONT - Small font
|
||||
UI_BIGFONT - Big font
|
||||
UI_GIANTFONT - Giant font
|
||||
UI_DROPSHADOW - A drop shadow is created behind the text
|
||||
UI_BLINK - The text blinks
|
||||
UI_PULSE - The text pulses
|
||||
*/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char *string;
|
||||
int style;
|
||||
vec4_t *colour;
|
||||
//Elder: added
|
||||
int drawFixed;
|
||||
} cr_line;
|
||||
|
||||
cr_line credits[] = { // edit this as necessary for your credits
|
||||
|
||||
{ "CAST", UI_CENTER|UI_BIGFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "GRUNT", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "CYRUS", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "KGB", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "M LOWREY", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "MASON", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "MR. TEE", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "NUT", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "PSYCHO", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "ROBBER", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "SWAT", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
|
||||
{ "REACTION QUAKE 3 TEAM", UI_CENTER|UI_BIGFONT, &color_headertext, FIXEDWIDTH },
|
||||
|
||||
// Programming
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "PROGRAMMING", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "MALCOLM BECHARD (TSUNAMI)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "SCOTT BROOKS (BLAZE)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "VICTOR CHOW (ELDER_MMHS)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "BRYCE HUTCHINGS (NICEASS)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "RICHARD ALLEN (JBRAVO)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
|
||||
// Additional programming -- snippets
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "ADDITIONAL PROGRAMMING", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "MICHAEL BRUCE (AGTORANGE)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "DAN CHIN (LT. HAWKINS)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "MIKE CONNOR (HOMER)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
|
||||
|
||||
// Artwork - models, textures, whatever
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "ART", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "IAN MCEACHERN (FROST)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "BRIAN MILLS (BIRDMAN)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "LINH NGUYEN (SONIC128)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "MARK POTNICK (CLOUD)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "RYAN VANCE (BRAGOBLIN)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
|
||||
// Additional artwork - a few extra things
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "ADDITIONAL ART", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "VICTOR CHOW (ELDER_MMHS)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "TOMI ISOAHO (T.T.I.)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "SHAY MCCARTY (SHAYMON)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "KYLE VANMEURS (R0OK)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
|
||||
// Mappers
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "LEVEL DESIGN", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "DAVID COSTELLO (SZE)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "ANDREI DREXLER (MAKRO)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "TOMI ISOAHO (T.T.I.)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "SHAY MCCARTY (SHAYMON)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "DAVID PIKE (CENTURION)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "KELLY RUSH (HEXYDES)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "JESSE SMITH (SPYDER)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "WALTER SOMOL (JOHNNY_ROCKET)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
|
||||
// Extra mappers/strictly ports
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "ADDITIONAL LEVEL DESIGN", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "GREGORY SIMMONS (SMOKE)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "JASON IRBY (IRBY)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
|
||||
// Sound guys
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "SOUND DESIGN", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "ERWIN PEIL (SPECOPS)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
|
||||
// Organization -- rare :)
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "ORGANIZATION", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "ERWIN PEIL (SPECOPS)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
|
||||
// Additional organization -- past peeps
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "ADDITIONAL ORGANIZATION", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "LUCY CONNOR (LUCY)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
|
||||
// Website
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "WEBSITE DESIGN", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "VICTOR CHOW (ELDER_MMHS)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "RICHARD WATT (C00T)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
|
||||
// Beta Testers
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "TESTERS AND ADVISORS", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "NON FICTION (FICTION)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "SETH CHABOT (WOOK!EBOY)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "STEVE EWALD (PSYCHOTAKES)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "LUKE PAUL (ALICE)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "ANDREW PROSNIK (BLACK MONK)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
|
||||
// TBC
|
||||
//{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
//{ "..TO BE FINISHED..", UI_CENTER|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
//{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
|
||||
{ "REACTION QUAKE 3 CONTRIBUTIONS", UI_CENTER|UI_BIGFONT, &color_headertext, FIXEDWIDTH },
|
||||
|
||||
// Additional artwork -- handcannon, hands
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "ADDITIONAL ARTWORK", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "DWAYNE DOUGLASS", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
|
||||
// Additional testers -- Elder's test subjects ;)
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "ADDITIONAL TESTING", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "WINSTON CHOW (SHISHKABOB)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "STEPHEN LOOI (DUD)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
|
||||
// Music Contributions
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "REACTION QUAKE 3 TITLE SCORE", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "JESPER KYD", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
|
||||
{ "THE REACTION QUAKE 3 TEAM THANKS", UI_CENTER|UI_BIGFONT, &color_headertext, FIXEDWIDTH },
|
||||
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "A-TEAM REPRESENTATIVE", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "DWAYNE DOUGLASS", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
|
||||
// Art resources/etc.
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "ART RESOURCES", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "MASTABA SOLUTIONS", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "POLYCOUNT", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "QWORKSHOP3", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "SHADERLAB", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
|
||||
// Coding help/ideas/snippets
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "CODING RESOURCES", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "CODE3ARENA", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "IAIN MCGINNISS", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "INOLEN", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "JUZ'S SLIPGATE", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "QUAKE3WORLD FORUMS (MOD PROGRAMMING)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "WANG (ATF)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "TOMAS EDWARDSSON (FREUD)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "JOHANN THORIRSSON (VONDIKALL)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
|
||||
// Fex for the public board
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "PRE-RELEASE MESSAGEBOARD GOD", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "THE GREAT FEX", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
|
||||
// Groups?
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "GROUPS", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "ABOVE INTELLIGENCE", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "ALL THE LITTLE PEOPLE", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "FAMILY AND FRIENDS", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "FEAR.NET FREQUENTERS", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "id SOFTWARE", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "THE A-TEAM (AQ2 DEVELOPERS)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "THE GRAMMAR RANGERS", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "#MODELING @ GAMESNET", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
|
||||
|
||||
// Commodities -- food, drugs, you name it
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "COMMODITIES", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "CAFFEINE", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "CHEX MIX", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "DR. PEPPER", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "HOME-COOKED MEALS (MM, MM, MMM!)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "HOT POCKETS", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "MOUNTAIN DEW", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "PEPSI", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "PHO", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "VARIOUS PIZZA PLACES", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "WACOM TABLETS", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
|
||||
// Mapping help
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "MAPPING RESOURCES", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "QERADIANT.COM", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "GAMEDESIGN.NET", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "QUAKE3WORLD FORUMS (LEVEL DESIGN)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
|
||||
// The great webhosts
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "WEB HOSTS", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "TELEFRAGGED AND AFFILIATES", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "ALL MIRRORS (TOO MANY TO LIST)", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
|
||||
// Fan sites?
|
||||
|
||||
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
|
||||
// This point on: id credits -- try to match up with the latest PR
|
||||
{ "id SOFTWARE", UI_CENTER|UI_BIGFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "PROGRAMMERS", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "JOHN CARMACK", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "ROBERT A. DUFFY", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "JIM DOSE'", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "ART", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "ADRIAN CARMACK", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "KEVIN CLOUD", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "KENNETH SCOTT", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "SENECA MENARD", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "FRED NILSSON", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "GAME DESIGNER", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "GRAEME DEVINE", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "LEVEL DESIGN", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "TIM WILLITS", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "CHRISTIAN ANTKOW", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "PAUL JAQUAYS", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "CEO", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "TODD HOLLENSHEAD", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "DIRECTOR OF BUSINESS DEVELOPMENT", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "MARTY STRATTON", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "BIZ ASSIST AND ID MOM", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "DONNA JACKSON", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "DEVELOPMENT ASSISTANCE", UI_RIGHT|UI_SMALLFONT, &color_headertext, FIXEDWIDTH },
|
||||
{ "ERIC WEBB", UI_LEFT|UI_SMALLFONT, &color_maintext, FIXEDWIDTH },
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
{ "", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
|
||||
// TODO: make something better
|
||||
{ "THIS HAS BEEN A REACTION QUAKE 3 TEAM PRODUCTION Copyright 2000 - 2001", UI_CENTER|UI_SMALLFONT, &color_blue, FIXEDWIDTH },
|
||||
|
||||
{NULL}
|
||||
};
|
||||
|
||||
/*
|
||||
=================
|
||||
UI_CreditMenu_Key
|
||||
=================
|
||||
*/
|
||||
static sfxHandle_t UI_CreditMenu_Key( int key ) {
|
||||
if( key & K_CHAR_FLAG ) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// pressing the escape key or clicking the mouse will exit
|
||||
// we also reset the music volume to the user's original
|
||||
// choice here, by setting s_musicvolume to the stored var
|
||||
|
||||
//Elder: doesn't appear to restore music volume
|
||||
//trap_Cmd_ExecuteText( EXEC_APPEND, va("s_musicvolume %f;quit\n", mvolume));
|
||||
//trap_Cvar_SetValue( "s_musicvolume", mvolume);
|
||||
//trap_S_StopBackgroundTrack();
|
||||
trap_Cmd_ExecuteText( EXEC_APPEND, va("s_musicvolume %f\n", mvolume));
|
||||
trap_Cmd_ExecuteText( EXEC_APPEND, "quit\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
ScrollingCredits_Draw
|
||||
This is the main drawing function for the credits.
|
||||
Most of the code is self-explanatory.
|
||||
=================
|
||||
*/
|
||||
static void ScrollingCredits_Draw(void) {
|
||||
int x = 320, y, n, ysize = 0;
|
||||
|
||||
// ysize is used to determine the entire length
|
||||
// of the credits in pixels.
|
||||
// We can then use this in further calculations
|
||||
if(!ysize) {
|
||||
// ysize not calculated, so calculate it dammit!
|
||||
for(n = 0; n <= sizeof(credits) - 1; n++) {
|
||||
//Elder: don't add right-justified stuff to height
|
||||
if (!(credits[n].style & UI_RIGHT)) {
|
||||
// fixed width font
|
||||
if(credits[n].drawFixed) {
|
||||
ysize += SMALLCHAR_HEIGHT;
|
||||
}
|
||||
// it is a small character
|
||||
else if(credits[n].style & UI_SMALLFONT) {
|
||||
// add small character height
|
||||
ysize += PROP_HEIGHT * PROP_SMALL_SIZE_SCALE;
|
||||
}
|
||||
// it is a big character
|
||||
else if(credits[n].style & UI_BIGFONT) {
|
||||
// add big character size
|
||||
ysize += PROP_HEIGHT;
|
||||
}
|
||||
// it is a huge character
|
||||
else if(credits[n].style & UI_GIANTFONT) {
|
||||
// add giant character size.
|
||||
ysize += PROP_HEIGHT * (1 / PROP_SMALL_SIZE_SCALE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// first, fill the background with the specified colour/shader
|
||||
// we are drawing a shader
|
||||
#ifdef BACKGROUND_SHADER
|
||||
UI_DrawHandlePic(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, BackgroundShader);
|
||||
//Elder: added and then removed for fader
|
||||
//UI_FillRect( 0, 0, 640, 480, color_deepdim );
|
||||
#else
|
||||
// we are just filling a color
|
||||
UI_FillRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, color_background);
|
||||
#endif
|
||||
//Elder: my simple fader code - vec4_t doesn't like var parameters
|
||||
//so we'll have to access the alpha channel once it's initialized
|
||||
if ( (uis.realtime - starttime) >= FADE_START_TIME ) {
|
||||
if (fade < 1.00) {
|
||||
fade += (1.00 / FADE_DURATION) * 10;
|
||||
}
|
||||
//safety clamp
|
||||
else {
|
||||
fade = 1.00;
|
||||
}
|
||||
color_fader[COLOR_A] = fade;
|
||||
UI_FillRect( 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, color_fader );
|
||||
}
|
||||
|
||||
// let's draw the stuff
|
||||
// set initial y location
|
||||
y = 480 - SCROLLSPEED * (float)(uis.realtime - starttime) / 100;
|
||||
|
||||
for(n = 0; n <= sizeof(credits) - 1; n++) {
|
||||
// this NULL string marks the end of the credits struct
|
||||
if(credits[n].string == NULL) {
|
||||
// credits sequence is completely off screen
|
||||
if(y < -16) {
|
||||
trap_Cmd_ExecuteText( EXEC_APPEND, va("s_musicvolume %f; quit\n", mvolume));
|
||||
break;
|
||||
// end of credits
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if( strlen(credits[n].string) == 1) // spacer string, no need to draw
|
||||
continue;
|
||||
|
||||
// if the line is within the visible range of the screen
|
||||
if( y > -(PROP_HEIGHT * (1 / PROP_SMALL_SIZE_SCALE))) {
|
||||
//Elder: added to support fixed width display and movie-style alignment
|
||||
if ( credits[n].drawFixed ) {
|
||||
if (credits[n].style & UI_RIGHT) {
|
||||
UI_DrawString(RIGHT_JUSTIFY_POSITION, y, credits[n].string, credits[n].style, *credits[n].colour );
|
||||
}
|
||||
else if (credits[n].style & UI_CENTER) {
|
||||
UI_DrawString(x, y, credits[n].string, credits[n].style, *credits[n].colour );
|
||||
}
|
||||
else {
|
||||
UI_DrawString(LEFT_JUSTIFY_POSITION, y, credits[n].string, credits[n].style, *credits[n].colour );
|
||||
}
|
||||
}
|
||||
else {
|
||||
UI_DrawProportionalString(x, y, credits[n].string,
|
||||
credits[n].style, *credits[n].colour );
|
||||
}
|
||||
}
|
||||
|
||||
// re-adjust y for next line
|
||||
//Elder: right-justified stuff doesn't bump up the line
|
||||
if (!(credits[n].style & UI_RIGHT)) {
|
||||
//Elder: added for fixed width
|
||||
if (credits[n].drawFixed) {
|
||||
y += SMALLCHAR_HEIGHT;
|
||||
}
|
||||
else if(credits[n].style & UI_SMALLFONT) {
|
||||
y += PROP_HEIGHT * PROP_SMALL_SIZE_SCALE;
|
||||
}
|
||||
else if(credits[n].style & UI_BIGFONT) {
|
||||
y += PROP_HEIGHT;
|
||||
}
|
||||
else if(credits[n].style & UI_GIANTFONT) {
|
||||
y += PROP_HEIGHT * (1 / PROP_SMALL_SIZE_SCALE);
|
||||
}
|
||||
}
|
||||
|
||||
// if y is off the screen, break out of loop
|
||||
if (y > 480)
|
||||
break;
|
||||
}
|
||||
|
||||
//Elder: "Letterbox" mask
|
||||
UI_FillRect( 0, 0, SCREEN_WIDTH, 54, color_black);
|
||||
UI_FillRect( 0, 426, SCREEN_WIDTH, 54, color_black);
|
||||
UI_FillRect( 0, 54, SCREEN_WIDTH, 2, color_red);
|
||||
UI_FillRect( 0, 426, SCREEN_WIDTH, 2, color_red);
|
||||
|
||||
//Elder: debug information for fader
|
||||
//UI_DrawString( 635, 464, va( "Time index: %i", uis.realtime - starttime), UI_RIGHT|UI_SMALLFONT, color_white);
|
||||
//UI_DrawString (0, 464, va("Fade alpha: %f", fade), UI_SMALLFONT, color_white);
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
UI_CreditMenu
|
||||
===============
|
||||
*/
|
||||
void UI_CreditMenu( void ) {
|
||||
memset( &s_credits, 0 ,sizeof(s_credits) );
|
||||
|
||||
s_credits.menu.draw = ScrollingCredits_Draw;
|
||||
s_credits.menu.key = UI_CreditMenu_Key;
|
||||
s_credits.menu.fullscreen = qtrue;
|
||||
UI_PushMenu ( &s_credits.menu );
|
||||
|
||||
starttime = uis.realtime; // record start time for credits to scroll properly
|
||||
mvolume = trap_Cvar_VariableValue( "s_musicvolume" );
|
||||
if(mvolume < 0.5)
|
||||
trap_Cmd_ExecuteText( EXEC_APPEND, "s_musicvolume 0.5\n" );
|
||||
|
||||
//void trap_S_StopBackgroundTrack( void )
|
||||
//void trap_S_StartBackgroundTrack( const char *intro, const char *loop) {
|
||||
//trap_S_StartBackgroundTrack( "music/win", "music/win");
|
||||
|
||||
trap_Cmd_ExecuteText( EXEC_APPEND, "music music/win music/win\n" );
|
||||
|
||||
// load the background shader
|
||||
#ifdef BACKGROUND_SHADER
|
||||
//Elder: changed to rq3 fire
|
||||
BackgroundShader = trap_R_RegisterShaderNoMip("rq3-menuback");
|
||||
#endif
|
||||
}
|
Loading…
Reference in a new issue