112 :
next(NULL), prev(NULL),
type(
OBJ_NONE), parent(-1), instance(-1), n_quadrants(0), hull_strength(0.0),
113 sim_hull_strength(0.0), net_signature(0), num_pairs(0), dock_list(NULL), dead_dock_list(NULL), collision_group_id(0)
154 int i, olind, deleted_weapons;
156 int num_already_free, num_to_free, original_num_to_free;
162 num_already_free = 0;
173 return num_already_free;
175 switch (objp->
type) {
207 num_to_free =
MAX_OBJECTS - num_used - num_already_free;
208 original_num_to_free = num_to_free;
210 if (num_to_free > olind) {
211 nprintf((
"allender",
"Warning: Asked to free %i objects, but can only free %i.\n", num_to_free, olind));
215 for (i=0; i<num_to_free; i++)
218 nprintf((
"allender",
"Freeing DEBRIS object %3i\n", obj_list[i]));
223 return original_num_to_free;
225 for (i=0; i<num_to_free; i++) {
226 object *tmp_obj = &Objects[obj_list[
i]];
229 nprintf((
"allender",
"Freeing FIREBALL object %3i\n", obj_list[i]));
235 return original_num_to_free;
240 num_to_free -= deleted_weapons;
242 return original_num_to_free;
245 for (i=0; i<num_to_free; i++){
253 return original_num_to_free;
256 return original_num_to_free - num_to_free;
280 if (total_strength == 0.0
f)
298 if (total_strength == 0.0
f)
318 if (total_strength == 0.0
f)
359 static int num_objects_hwm = 0;
376 mprintf((
"Why hasn't obj_init() been called yet?\n"));
384 nprintf((
"warning",
" *** Freed %i objects\n", num_freed));
389 mprintf((
"Object creation failed - too many objects!\n" ));
396 Assert ( objp != &obj_free_list );
434 mprintf((
"Why hasn't obj_init() been called yet?\n"));
441 objp = &Objects[objnum];
479 obj = &Objects[objnum];
527 objp = &Objects[objnum];
529 mprintf((
"obj_delete() called for already deleted object %d.\n", objnum));
540 switch( objp->
type ) {
589 mprintf((
"Warning: Tried to delete a ghost!\n"));
594 nprintf((
"Network",
"Deleting GHOST object\n"));
606 Error(
LOCATION,
"Unhandled object type %d in obj_delete_all_that_should_be_dead", objp->
type );
629 mprintf((
"Why hasn't obj_init() been called yet?\n"));
681 extern void call_doa(
object *child,
object *parent);
790 float engine_strength;
794 engine_strength=0.0f;
797 if (engine_strength == 0.0
f) {
818 float reload_time = (fire_wait == 0.0f) ? 1.0
f : 1.0
f / fire_wait;
823 if (points > missles_left) {
825 for (
int k = next_point; k < next_point+missles_left; k ++) {
828 s_pct += reload_time * frametime;
834 for (
int k = 0; k <
points; k++) {
837 s_pct += reload_time * frametime;
855 if (objp==Player_obj){
923 angles old_angles, new_angles;
927 new_angles.
p = old_angles.
p;
928 new_angles.
b = old_angles.
b;
932 new_angles.
h = old_angles.
h;
942 #define IMPORTANT_FLAGS (OF_COLLIDES)
946 void obj_check_object(
object *
obj )
955 if ( CheckObjects[objnum].
type != obj->
type ) {
969 mprintf((
"Object type changed! Old: %i, Current: %i\n", CheckObjects[objnum].
type, obj->
type ));
973 if ( CheckObjects[objnum].signature != obj->
signature ) {
974 mprintf((
"Object signature changed!\n" ));
978 mprintf((
"Object flags changed!\n" ));
981 if ( CheckObjects[objnum].parent_sig != obj->
parent_sig ) {
982 mprintf((
"Object parent sig changed!\n" ));
985 if ( CheckObjects[objnum].parent_type != obj->
parent_type ) {
986 mprintf((
"Object's parent type changed!\n" ));
1014 obj->
flags = new_flags;
1017 CheckObjects[objnum].
flags = new_flags;
1025 if ( (!(obj->
flags & OF_COLLIDES)) && (new_flags&OF_COLLIDES) ) {
1030 mprintf((
"Illegal to set collision bit for OBJ_OBSERVER!!\n"));
1043 obj->
flags = new_flags;
1046 CheckObjects[objnum].
flags = new_flags;
1074 if ( (shipp->
wingnum == -1) || (team == -1) || (slot==-1) ) {
1080 obj->
flags = new_flags;
1082 CheckObjects[objnum].
flags = new_flags;
1090 mprintf((
"Unhandled flag changing in obj_set_flags!!\n" ));
1091 mprintf((
"Add code to support it, see John for questions!!\n" ));
1095 obj->
flags = new_flags;
1097 CheckObjects[objnum].
flags = new_flags;
1105 switch( objp->
type ) {
1208 light_add_point( &objp->pos, 10.0f, 20.0f, 1.0f, 1.0f, 1.0f, 1.0f, objp->parent );
1228 shipp = &
Ships[objp->instance];
1267 float r = 0.0f,
g = 0.0f,
b = 0.0f;
1272 if ( (r == 0.0
f) && (
g == 0.0
f) && (
b == 0.0
f) )
1282 float rad = p * (1.0f +
frand() * 0.05f) * objp->radius;
1284 float intensity = 1.0f;
1314 db = &
Debris[objp->instance];
1415 obj_check_object( objp );
1478 if ( &objp->
phys_info == Viewer_physics_info ) {
1549 switch( obj->type ) {
1557 if(Cmdline_dis_weapons)
return;
1580 if(jnp->GetSCPObject() !=
obj)
1596 Error(
LOCATION,
"Unhandled obj type %d in obj_render", obj->type );
1639 switch ( obj->
type ) {
1667 if ( jnp->GetSCPObject() !=
obj ) {
1755 if ( objp != Player_obj ) {
1848 switch ( objp->
type ) {
1856 Assertion(team != -1,
"Obj_team called for a debris object with no team.");
1906 objp = &Objects[objnum];
1914 CheckObjects[objnum].
type = objp->
type;
1956 while( tmp != NULL ) {
1957 if ( (tmp->
a==a) || (tmp->
b==a) ) {
1966 tmp->
a = tmp->
b = NULL;
1968 pair_free_list.
next = tmp;
void beam_move_all_post()
int fire_countermeasure_count
void radar_plot_object(object *objp)
void dock_free_dock_list(object *objp)
#define MULTIPLAYER_CLIENT
void obj_set_flags(object *obj, uint new_flags)
float get_max_shield_quad(object *objp)
fix team_change_timestamp
void call_doa(object *child, object *parent)
weapon Weapons[MAX_WEAPONS]
SCP_string secondary_team_name
bool object_glide_forced(object *objp)
void weapon_process_pre(object *obj, float frame_time)
int debris_get_team(object *objp)
#define OF_LASER_PROTECTED
void obj_client_post_interpolate()
polymodel * model_get(int model_num)
int obj_team(object *objp)
weapon_info Weapon_info[MAX_WEAPON_TYPES]
float shield_get_strength(object *objp)
void obj_render(object *obj)
void RemHookVar(char *name)
void obj_move_all_pre(object *objp, float frametime)
asteroid Asteroids[MAX_ASTEROIDS]
matrix * vm_angles_2_matrix(matrix *m, const angles *a)
void debris_render_DEPRECATED(object *obj)
void obj_reset_all_collisions()
GLsizei const GLfloat * points
char * Object_type_names[MAX_OBJECT_TYPES]
void object_set_gliding(object *objp, bool enable, bool force)
void obj_init_all_ships_physics()
float ship_max_shield_strength
void multi_ts_get_team_and_slot(char *ship_name, int *team_index, int *slot_index, bool mantis2757switch)
void light_add_point(const vec3d *pos, float r1, float r2, float intensity, float r, float g, float b, int light_ignore_objnum, float spec_r, float spec_g, float spec_b, bool specular)
void shockwave_delete(object *objp)
#define NETINFO_FLAG_OBSERVER
int ship_fire_primary(object *obj, int stream_weapons, int force)
void obj_reset_colliders()
float side_slip_time_const
#define list_append(head, elem)
int ship_stop_fire_primary(object *obj)
void obj_snd_delete_type(int objnum, int sndnum, ship_subsys *ss)
vec3d arc_pts[MAX_DEBRIS_ARCS][2]
struct vec3d::@225::@227 xyz
void weapon_render(object *obj, draw_list *scene)
int Object_next_signature
ai_info Ai_info[MAX_AI_INFO]
vec3d * vm_vec_rotate(vec3d *dest, const vec3d *src, const matrix *m)
void ship_process_pre(object *objp, float frametime)
#define Assertion(expr, msg,...)
void obj_free(int objnum)
#define END_OF_LIST(head)
void ship_process_post(object *obj, float frametime)
#define GR_FILL_MODE_SOLID
int ship_fire_secondary(object *obj, int allow_swarm)
void obj_merge_created_list(void)
void dock_move_docked_objects(object *objp)
void profile_begin(const char *name)
int collide_remove_weapons()
void find_homing_object_cmeasures()
void obj_move_one_docked_object(object *objp, object *parent_objp)
void obj_move_call_physics(object *objp, float frametime)
int object_get_model(object *objp)
void obj_remove_collider(int obj_index)
void obj_player_fire_stuff(object *objp, control_info ci)
void multi_do_client_warp(float frame_time)
script_state Script_system("FS2_Open Scripting")
#define PROFILE(name, function)
void debris_process_post(object *obj, float frame_time)
SCP_list< CJumpNode > Jump_nodes
void obj_sort_and_collide()
void gr_set_color(int r, int g, int b)
void obj_observer_move(float frame_time)
#define OF_TARGETABLE_AS_BOMB
void shockwave_render_DEPRECATED(object *objp)
int object_is_docked(object *objp)
int fireball_is_warp(object *obj)
void obj_add_pairs(int objnum)
void weapon_delete(object *obj)
void afterburners_stop(object *objp, int key_released)
float ship_get_subsystem_strength(ship *shipp, int type)
void vm_vec_add2(vec3d *dest, const vec3d *src)
void obj_add_collider(int obj_index)
GLdouble GLdouble GLdouble r
dock_instance * dock_list
int obj_get_SIF(object *objp)
void observer_process_post(object *objp)
float ship_max_hull_strength
void vm_vec_scale(vec3d *dest, float s)
GLboolean GLboolean GLboolean GLboolean a
int obj_create(ubyte type, int parent_obj, int instance, matrix *orient, vec3d *pos, float radius, uint flags)
int ship_subsys_disrupted(ship_subsys *ss)
void fireball_get_color(int idx, float *red, float *green, float *blue)
float get_hull_pct(object *objp)
bool object_get_gliding(object *objp)
void obj_remove_pairs(object *a)
void obj_move_all_post(object *objp, float frametime)
ubyte Obj_weapon_group_id_used[WEAPON_MAX_GROUP_IDS]
int Cmdline_old_collision_sys
int multi_oo_is_interp_object(object *objp)
int object_is_dead_docked(object *objp)
void dock_free_dead_dock_list(object *objp)
void asteroid_render_DEPRECATED(object *obj)
void ship_delete(object *obj)
int Highest_ever_object_index
void physics_init(physics_info *pi)
void obj_clear_weapon_group_id_list()
int secondary_bank_weapons[MAX_SHIP_SECONDARY_BANKS]
#define WEAPON_MAX_GROUP_IDS
int arc_timestamp[MAX_SHIP_ARCS]
void weapon_process_post(object *obj, float frame_time)
#define OF_COULD_BE_PLAYER
#define MONITOR(function_name)
float fireball_lifeleft_percent(object *obj)
void init_render(bool sort=true)
angles * vm_extract_angles_matrix(angles *a, const matrix *m)
#define DEFAULT_SHIELD_SECTIONS
void model_do_intrinsic_rotations(int model_instance_num=-1)
void SetHookObject(char *name, object *objp)
int secondary_bank_ammo[MAX_SHIP_SECONDARY_BANKS]
debris Debris[MAX_DEBRIS_PIECES]
vec3d * vm_vec_unrotate(vec3d *dest, const vec3d *src, const matrix *m)
void shockwave_render(object *objp, draw_list *scene)
object Objects[MAX_OBJECTS]
#define MONITOR_INC(function_name, inc)
int fireball_is_perishable(object *obj)
void asteroid_process_post(object *obj)
void obj_client_pre_interpolate()
void obj_get_average_ship_pos(vec3d *pos)
float get_sim_hull_pct(object *objp)
void ship_render_DEPRECATED(object *obj)
void _cdecl void void _cdecl Error(const char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
void fireball_render(object *obj, draw_list *scene)
void weapon_get_laser_color(color *c, object *objp)
#define OF_MISSILE_PROTECTED
int RunCondition(int condition, char format='\0', void *data=NULL, class object *objp=NULL, int more_data=0)
void SetHookObjects(int num,...)
GLboolean GLboolean GLboolean b
float get_shield_pct(object *objp)
void profile_end(const char *name)
void physics_sim(vec3d *position, matrix *orient, physics_info *pi, float sim_time)
void afterburners_start(object *objp)
checkobject CheckObjects[MAX_OBJECTS]
void asteroid_render(object *obj, draw_list *scene)
void obj_delete(int objnum)
#define DCF_BOOL(function_name, bool_variable)
int ship_launch_countermeasure(object *objp, int rand_val)
void obj_add_pair(object *A, object *B, int check_time, int add_to_end)
int secondary_next_slot[MAX_SHIP_SECONDARY_BANKS]
float frand()
Return random value in range 0.0..1.0- (1.0- means the closest number less than 1.0)
void fireball_delete(object *obj)
void ship_render(object *obj, draw_list *scene)
void multi_oo_interp(object *objp)
float Physics_viewer_bank
void debris_render(object *obj, draw_list *scene)
physics_info * Viewer_physics_info
void RemHookVars(unsigned int num,...)
void render_all(int depth_mode=-1)
#define MULTIPLAYER_MASTER
int arc_timestamp[MAX_DEBRIS_ARCS]
An overhauled/updated debug console to allow monitoring, testing, and general debugging of new featur...
void asteroid_process_pre(object *objp)
SCP_vector< ship_info > Ship_info
#define OF_FLAK_PROTECTED
SCP_vector< float > shield_quadrant
int free_object_slots(int num_used)
float fireball_wormhole_intensity(object *obj)
#define OF_SHOULD_BE_DEAD
void fireball_render_DEPRECATED(object *obj)
void obj_delete_all_that_should_be_dead()
dock_instance * dead_dock_list
#define MISSION_FLAG_2D_MISSION
#define list_remove(head, elem)
GLsizei GLsizei GLuint * obj
void weapon_render_DEPRECATED(object *obj)
#define gr_reset_lighting
void debris_delete(object *obj)
void obj_check_all_collisions()
vec3d arc_pts[MAX_SHIP_ARCS][2]
bool is_minimum_GLSL_version()
void ship_update_artillery_lock()
void turret_swarm_check_validity()
int g3_draw_sphere_ez(const vec3d *pnt, float rad)
void ship_model_update_instance(object *objp)
obj_flag_name Object_flag_names[]
int obj_get_by_signature(int sig)
void obj_render_DEPRECATED(object *obj)
SCP_vector< int > objsnd_num
void observer_delete(object *obj)
void obj_queue_render(object *obj, draw_list *scene)
bool IsConditionOverride(int action, object *objp=NULL)
SCP_vector< asteroid_info > Asteroid_info
void obj_move_all(float frametime)
matrix vmd_identity_matrix
#define timestamp_valid(stamp)
void fireball_process_post(object *obj, float frame_time)
char ship_name[NAME_LENGTH]
void physics_ship_init(object *objp)
#define OF_DOCKED_ALREADY_HANDLED
void asteroid_delete(object *obj)
float secondary_point_reload_pct[MAX_SHIP_SECONDARY_BANKS][MAX_SLOTS]
#define OF_BEAM_PROTECTED