28 static char *Default_shockwave_2D_filename =
"shockwave01";
29 static char *Default_shockwave_3D_filename =
"shockwave.pof";
30 static int Default_shockwave_loaded = 0;
41 #define SW_INDEX(sw) (sw-Shockwaves)
66 int i, objnum, real_parent;
67 int info_index = -1, model_id = -1;
76 if (i == MAX_SHOCKWAVES)
81 if ( strlen(sci->
name) )
84 if ( (info_index < 0) && strlen(sci->
pof_name) )
88 if ( (Shockwave_info[0].bitmap_id >= 0) || (Shockwave_info[0].model_id >= 0) ) {
90 model_id = Shockwave_info[0].model_id;
96 model_id = Shockwave_info[info_index].model_id;
100 if (parent_objnum == -1) {
105 real_parent = parent_objnum;
177 while ( sw != &Shockwave_list ) {
196 sw = &Shockwaves[
index];
211 if ( framenum < 0 ) {
232 sw = &Shockwaves[
index];
237 if ( framenum > (num_frames-1) ) {
238 framenum = (num_frames-1);
242 if ( framenum < 0 ) {
265 sw = &Shockwaves[shockwave_objp->
instance];
319 if ( i < sw->num_objs_hit ){
355 Weapons[objp->
instance].lifeleft = 0.01f;
366 float full_damage, vol_scale;
372 if (full_damage != 0.0
f) {
373 vol_scale =
MAX(0.4
f, damage/full_damage);
396 memset(&p, 0,
sizeof(p));
412 float model_Interp_scale_xyz = sw->
radius / 50.0f;
550 for (i = 0; i < Shockwave_info.size(); i++) {
562 Shockwave_info.push_back( si_tmp );
563 s_index = (
int)(Shockwave_info.size() - 1);
567 si = &Shockwave_info[s_index];
577 Shockwave_info.pop_back();
584 Shockwave_info.pop_back();
599 if ( !Default_shockwave_loaded ) {
608 mprintf((
"SHOCKWAVE => Loading default shockwave model... \n"));
613 mprintf((
"SHOCKWAVE => Default model load: SUCCEEDED!!\n"));
615 mprintf((
"SHOCKWAVE => Default model load: FAILED!! Falling back to 2D effect...\n"));
621 mprintf((
"SHOCKWAVE => Loading default shockwave animation... \n"));
626 mprintf((
"SHOCKWAVE => Default animation load: SUCCEEDED!!\n"));
628 mprintf((
"SHOCKWAVE => Default animation load: FAILED!! Checking if 3d effect was already tried...\n"));
635 mprintf((
"SHOCKWAVE => Loading default shockwave model as last resort... \n"));
640 mprintf((
"SHOCKWAVE => Default model load: SUCCEEDED!!\n"));
642 mprintf((
"SHOCKWAVE => Default model load: FAILED!! No effect loaded...\n"));
646 Error(
LOCATION,
"ERROR: Unable to open neither 3D nor 2D default shockwaves!!");
648 Default_shockwave_loaded = 1;
652 if (Shockwave_info[0].model_id >= 0)
653 Shockwave_info[0].model_id =
model_load( Default_shockwave_3D_filename, 0, NULL );
656 Assert( ((Shockwave_info[0].bitmap_id >= 0) || (Shockwave_info[0].model_id >= 0)) );
682 for (i = 0; i < Shockwave_info.size(); i++) {
684 if (Shockwave_info[i].bitmap_id >= 0)
685 bm_unload( Shockwave_info[i].bitmap_id );
686 else if (Shockwave_info[i].model_id >= 0)
692 if (Shockwave_info[i].bitmap_id >= 0)
695 if (Shockwave_info[i].model_id >= 0)
698 Shockwave_info.erase( Shockwave_info.begin() +
i );
714 while ( sw != &Shockwave_list ) {
730 while ( sw != &Shockwave_list ) {
797 for (i = 0; i < Shockwave_info.size(); i++) {
798 if (Shockwave_info[i].bitmap_id >= 0) {
800 }
else if (Shockwave_info[i].model_id >= 0) {
804 Assert(
idx == Shockwave_info[i].model_id );
813 sci->
name[ 0 ] =
'\0';
833 if ( strlen(sci->
name) )
836 if ( (i < 0) && strlen(sci->
pof_name) )
void shockwave_level_close()
shockwave Shockwaves[MAX_SHOCKWAVES]
weapon Weapons[MAX_WEAPONS]
SCP_vector< ArmorType > Armor_types
#define TMAP_FLAG_SOFT_QUAD
int shockwave_get_weapon_index(int index)
#define MISSION_FLAG_FULLNEB
int weapon_area_calc_damage(object *objp, vec3d *pos, float inner_rad, float outer_rad, float max_blast, float max_damage, float *blast, float *damage, float limit)
weapon_info Weapon_info[MAX_WEAPON_TYPES]
SCP_vector< game_snd > Snds
matrix * vm_angles_2_matrix(matrix *m, const angles *a)
void shockwave_render_all()
ubyte g3_transfer_vertex(vertex *dest, const vec3d *src)
#define WIF2_TAKES_SHOCKWAVE_DAMAGE
void shockwave_delete(object *objp)
#define list_append(head, elem)
int shockwave_create(int parent_objnum, vec3d *pos, shockwave_create_info *sci, int flag, int delay)
void shockwave_create_info_load(shockwave_create_info *sci)
#define MR_DEPRECATED_CENTER_ALPHA
char name[MAX_FILENAME_LEN]
int shockwave_load(char *s_name, bool shock_3D)
void set_flags(uint flags)
int shockwave_get_damage_type_idx(int index)
struct vec3d::@225::@227 xyz
#define TMAP_HTL_3D_UNLIT
void shockwave_level_init()
#define END_OF_LIST(head)
void set_detail_level_lock(int detail_level_lock)
int batch_add_bitmap_rotated(int texture, int tmap_flags, vertex *pnt, float angle, float rad, float alpha, float depth)
GLenum GLenum GLenum GLenum GLenum scale
void shockwave_move(object *shockwave_objp, float frametime)
#define TMAP_FLAG_DISTORTION
char pof_name[MAX_FILENAME_LEN]
int bm_release(int handle, int clear_render_targets)
Frees both a bitmap's data and it's associated slot.
int bm_load_animation(const char *real_filename, int *nframes, int *fps, int *keyframe, int can_drop_frames, int dir_type)
Loads a bitmap sequance so we can draw with it.
int distortion_add_bitmap_rotated(int texture, int tmap_flags, vertex *pnt, float angle, float rad, float alpha, float depth)
void shockwave_render_DEPRECATED(object *objp)
void model_render_queue(model_render_params *interp, draw_list *scene, int model_num, matrix *orient, vec3d *pos)
typedef int(SCP_EXT_CALLCONV *SCPDLL_PFVERSION)(SCPDLL_Version *)
#define MR_DEPRECATED_NO_CULL
void shockwave_move_all(float frametime)
int cf_exists_full(const char *filename, int dir_type)
int obj_create(ubyte type, int parent_obj, int instance, matrix *orient, vec3d *pos, float radius, uint flags)
void shockwave_set_framenum(int index)
int ship_get_SIF(ship *shipp)
bool Cmdline_fb_explosions
ubyte g3_rotate_vertex(vertex *dest, const vec3d *src)
int snd_play(game_snd *gs, float pan, float vol_scale, int priority, bool is_voice_msg)
int obj_sig_hitlist[SW_MAX_OBJS_HIT]
int model_load(char *filename, int n_subsystems, model_subsystem *subsystems, int ferror=1, int duplicate=0)
float shockwave_get_max_radius(int index)
void model_page_in_textures(int modelnum, int ship_info_index=-1)
void ship_apply_global_damage(object *ship_objp, object *other_obj, vec3d *force_center, float damage)
void shockwave_render(object *objp, draw_list *scene)
object Objects[MAX_OBJECTS]
void model_page_out_textures(int model_num, bool release=false)
void _cdecl void void _cdecl Error(const char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
int shockwave_get_flags(int index)
__inline void gr_fog_set(int fog_mode, int r, int g, int b, float fog_near=-1.0f, float fog_far=-1.0f)
int shockwave_get_framenum(int index, int num_frames)
void weapon_do_electronics_effect(object *ship_objp, vec3d *blast_pos, int wi_index)
void shockwave_create_info_init(shockwave_create_info *sci)
#define MR_DEPRECATED_NORMAL
float vm_vec_dist_quick(const vec3d *v0, const vec3d *v1)
void model_render_DEPRECATED(int model_num, matrix *orient, vec3d *pos, uint flags=MR_DEPRECATED_NORMAL, int objnum=-1, int lighting_skip=-1, int *replacement_textures=NULL, int render=MODEL_RENDER_ALL, const bool is_skybox=false)
void bm_page_in_texture(int bitmapnum, int nframes)
Marks a texture as being used for this level.
float shockwave_get_min_radius(int index)
void set_warp_params(int bitmap, float alpha, vec3d &scale)
SCP_vector< shockwave_info > Shockwave_info
#define TMAP_FLAG_TEXTURED
#define timestamp_elapsed(stamp)
void shockwave_delete_all()
#define OF_SHOULD_BE_DEAD
#define list_remove(head, elem)
void asteroid_hit(object *pasteroid_obj, object *other_obj, vec3d *hitpos, float damage)
void weapon_area_apply_blast(vec3d *force_apply_pos, object *ship_objp, vec3d *blast_pos, float blast, int make_shockwave)
float shockwave_get_damage(int index)
#define MR_DEPRECATED_NO_LIGHTING
int bm_unload(int handle, int clear_render_targets, bool nodebug)
Unloads a bitmap's data, but not the bitmap info.
void model_set_warp_globals(float scale_x=1.0f, float scale_y=1.0f, float scale_z=1.0f, int bitmap_id=-1, float alpha=-1.0f)
#define WF_DESTROYED_BY_WEAPON
void set_object_number(int num)
int Cmdline_enable_3d_shockwave
char filename[MAX_FILENAME_LEN]
matrix vmd_identity_matrix
#define WIF3_AOE_ELECTRONICS
#define MR_DEPRECATED_NO_FOGGING
void model_set_detail_level(int n)
void model_unload(int modelnum, int force=0)