35 #define WARPHOLE_GROW_TIME (2.35f) // time for warphole to reach max size (also time to shrink to nothing once it begins to shrink)
37 #define MAX_FIREBALL_LOD 4
39 #define MAX_FIREBALLS 200
41 #define MAX_WARP_LOD 0
57 #define FB_INDEX(fb) (fb-Fireballs)
65 float range_multiplier = 1.0f;
66 object *fireball_objp;
69 if((fb == NULL) || (fb->
objnum < 0)){
78 }
else if ((ship_class >= 0) && (ship_class < static_cast<int>(
Ship_info.size()))) {
83 range_multiplier = 6.0f;
98 object *fireball_objp;
118 static void fireball_set_default_color(
int idx)
233 memset(&fb_color, 0,
sizeof(
color));
237 LOD_checker.push_back(lod_check);
238 LOD_color.push_back(fb_color);
245 mprintf((
"TABLES: Unable to parse '%s'! Error message = %s.\n", filename, e.what()));
265 for (lod = LOD_checker.begin(); lod != LOD_checker.end(); ++
lod) {
266 if ( (i < MAX_FIREBALL_TYPES) && (lod->override < 0) ) {
271 if (LOD_color[i].
alpha == 255) {
272 Fireball_info[
i].
exp_color[0] = (LOD_color[
i].red / 255.0f);
273 Fireball_info[
i].
exp_color[1] = (LOD_color[
i].green / 255.0f);
274 Fireball_info[
i].
exp_color[2] = (LOD_color[
i].blue / 255.0f);
276 fireball_set_default_color(i);
285 for (lod = LOD_checker.begin(); lod != LOD_checker.end(); ++
lod) {
289 Fireball_info[lod->override].
lod_count = lod->num_lods;
291 if (LOD_color[i].
alpha == 255) {
292 Fireball_info[lod->override].
exp_color[0] = (LOD_color[
i].red / 255.0f);
293 Fireball_info[lod->override].
exp_color[1] = (LOD_color[
i].green / 255.0f);
294 Fireball_info[lod->override].
exp_color[2] = (LOD_color[
i].blue / 255.0f);
296 fireball_set_default_color(lod->override);
303 for (j = 1; j < Fireball_info[
i].
lod_count; j++) {
304 sprintf( Fireball_info[i].lod[j].
filename,
"%s_%d", Fireball_info[i].lod[0].filename, j);
319 fd = &Fireball_info[
i];
363 mprintf((
"Loading warp model\n"));
385 memset(&p, 0,
sizeof(p));
388 fb = &Fireballs[
num];
390 if ( Fireballs[num].current_bitmap < 0 )
408 Fireballs[num].current_bitmap,
419 Fireballs[num].current_bitmap,
464 fb = &Fireballs[
num];
496 fb = &Fireballs[
num];
502 fl = &Fireball_info[Fireballs[
num].fireball_info_index].
lod[fb->
lod];
514 if ( framenum < 0 ) framenum = 0;
535 if ( framenum < 0 ) framenum = 0;
548 Assert( Fireballs[num].objnum == objnum );
550 fb = &Fireballs[
num];
576 int oldest_objnum = -1, oldest_slotnum = -1;
577 float lifeleft, oldest_lifeleft = 0.0f;
586 if ( (oldest_objnum < 0) || (lifeleft < oldest_lifeleft) ) {
588 oldest_lifeleft = lifeleft;
589 oldest_objnum = fb->
objnum;
595 if ( oldest_objnum > -1 ) {
598 return oldest_slotnum;
608 Assert( Fireballs[num].objnum == objnum );
610 fb = &Fireballs[
num];
652 Assert( Fireballs[num].objnum == objnum );
654 fb = &Fireballs[
num];
676 Assert( Fireballs[num].objnum == objnum );
678 fb = &Fireballs[
num];
693 Assert( Fireballs[num].objnum == objnum );
695 fb = &Fireballs[
num];
708 int x,
y,
w,
h, bm_size;
750 }
else if(w <= bm_size/2){
752 }
else if(w <= (1.56*bm_size)){
761 }
else if(w <= bm_size/3){
763 }
else if(w <= (1.2*bm_size)){
788 int fireball_create(
vec3d *
pos,
int fireball_type,
int render_type,
int parent_obj,
float size,
int reverse,
vec3d *velocity,
float warp_lifetime,
int ship_class,
matrix *orient_override,
int low_res,
int extra_flags,
int warp_open_sound,
int warp_close_sound)
790 int n, objnum, fb_lod;
796 Assert( fireball_type > -1 );
799 fd = &Fireball_info[fireball_type];
820 if ( Fireballs[n].objnum < 0 ) {
824 Assert( n != MAX_FIREBALLS );
842 fl = &fd->
lod[fb_lod];
844 fb->
lod = (char)fb_lod;
846 fb->
flags = extra_flags;
851 if(orient_override != NULL){
852 orient = *orient_override;
854 if ( parent_obj < 0 ) {
907 Assert( warp_lifetime >= 4.0
f );
908 if ( warp_lifetime < 4.0
f )
909 warp_lifetime = 4.0f;
952 fd = &Fireball_info[
i];
974 Assert( red && blue && green );
999 int objecttype_fireballs = -1;
1005 if(ship_fireballs > 0){
1007 }
else if(objecttype_fireballs > 0){
1024 if (roid_fireballs > 0) {
1038 Assertion( Fireballs[num].objnum == objnum,
"Basic sanity check. Fireballs[num].objnum (%d) should == objnum (%d)", Fireballs[num].objnum, objnum );
1040 fb = &Fireballs[
num];
1064 fb = &Fireballs[
num];
1066 if ( Fireballs[num].current_bitmap < 0 )
1079 Fireballs[num].current_bitmap,
1091 Fireballs[num].current_bitmap,
#define FIREBALL_EXPLOSION_LARGE2
#define TMAP_FLAG_SOFT_QUAD
GLfloat GLfloat GLfloat GLfloat h
void vm_vec_scale_add(vec3d *dest, const vec3d *src1, const vec3d *src2, float k)
#define MISSION_FLAG_FULLNEB
int fireball_asteroid_explosion_type(asteroid_info *aip)
#define DETAIL_FLAG_FIREBALLS
SCP_vector< lod_checker > LOD_checker
warp hole opening up for departing (Same as warp in for now)
SCP_vector< game_snd > Snds
float vm_vec_mag(const vec3d *v)
#define FIREBALL_LARGE_EXPLOSION
ubyte g3_transfer_vertex(vertex *dest, const vec3d *src)
void fireball_parse_tbl()
float side_slip_time_const
char filename[MAX_FILENAME_LEN]
#define TMAP_HTL_3D_UNLIT
#define Assertion(expr, msg,...)
int fireball_used[MAX_FIREBALL_TYPES]
void fireball_play_warphole_close_sound(fireball *fb)
int Knossos_warp_ani_used
#define FIREBALL_EXPLOSION_LARGE1
int batch_add_bitmap_rotated(int texture, int tmap_flags, vertex *pnt, float angle, float rad, float alpha, float depth)
int warp_open_sound_index
void fireball_set_framenum(int num)
int required_string_either(char *str1, char *str2)
Checks for one of two required strings.
#define MAX_FIREBALL_TYPES
char filename[MAX_FILENAME_LEN]
int warp_close_sound_index
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.
#define CLAMP(x, min, max)
#define SND_PRIORITY_DOUBLE_INSTANCE
typedef int(SCP_EXT_CALLCONV *SCPDLL_PFVERSION)(SCPDLL_Version *)
int fireball_is_warp(object *obj)
#define FIREBALL_MEDIUM_EXPLOSION
GLdouble GLdouble GLdouble r
#define NUM_DEFAULT_FIREBALLS
struct matrix::@228::@230 vec
void vm_vec_scale(vec3d *dest, float s)
int fireball_ship_explosion_type(ship_info *sip)
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 fireball_get_color(int idx, float *red, float *green, float *blue)
void g3_set_view_matrix(const vec3d *view_pos, const matrix *view_matrix, float zoom)
int snd_play_3d(game_snd *gs, vec3d *source_pos, vec3d *listen_pos, float radius, vec3d *source_vel, int looping, float vol_scale, int priority, vec3d *sound_fvec, float range_factor, int force, bool is_ambient)
void stuff_string(char *outstr, int type, int len, char *terminators)
sprintf(buf,"(%f,%f,%f)", v3->xyz.x, v3->xyz.y, v3->xyz.z)
void warpin_render(object *obj, matrix *orient, vec3d *pos, int texture_bitmap_num, float radius, float life_percent, float max_radius, int warp_3d=0)
void warpin_queue_render(draw_list *scene, object *obj, matrix *orient, vec3d *pos, int texture_bitmap_num, float radius, float life_percent, float max_radius, int warp_3d)
ubyte g3_rotate_vertex(vertex *dest, const vec3d *src)
int required_string(const char *pstr)
int optional_string(const char *pstr)
float fireball_lifeleft(object *obj)
#define MONITOR(function_name)
float fireball_lifeleft_percent(object *obj)
int model_load(char *filename, int n_subsystems, model_subsystem *subsystems, int ferror=1, int duplicate=0)
void read_file_text(const char *filename, int mode, char *processed_text, char *raw_text)
bool Parsing_modular_table
warp hole opening up for arriving
GLint GLint GLint GLint GLint x
object Objects[MAX_OBJECTS]
#define MONITOR_INC(function_name, inc)
int fireball_is_perishable(object *obj)
void fireball_play_warphole_open_sound(int ship_class, fireball *fb)
int g3_get_bitmap_dims(int bitmap, vertex *pos, float radius, int *x, int *y, int *w, int *h, int *size)
void fireball_load_data()
#define WARPHOLE_GROW_TIME
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)
typedef void(APIENTRY *PFNGLARRAYELEMENTEXTPROC)(GLint i)
void reset_parse(char *text)
int bm_load(const char *real_filename)
Loads a bitmap so we can draw with it later.
GLboolean GLboolean GLboolean b
__inline void gr_fog_set(int fog_mode, int r, int g, int b, float fog_near=-1.0f, float fog_far=-1.0f)
typedef float(SCP_EXT_CALLCONV *SCPTRACKIR_PFFLOATVOID)()
void obj_delete(int objnum)
float vm_vec_dist_quick(const vec3d *v0, const vec3d *v1)
void fireball_delete(object *obj)
SCP_vector< int > explosion_bitmap_anims
void fireball_maybe_play_warp_close_sound(fireball *fb)
void bm_page_in_texture(int bitmapnum, int nframes)
Marks a texture as being used for this level.
int batch_add_bitmap(int texture, int tmap_flags, vertex *pnt, int orient, float rad, float alpha, float depth)
void parse_fireball_tbl(const char *filename)
fireball Fireballs[MAX_FIREBALLS]
#define FBF_WARP_CLOSE_SOUND_PLAYED
#define FBF_WARP_CRUISER_SIZE
capital warp hole closing
SCP_vector< ship_info > Ship_info
#define TMAP_FLAG_TEXTURED
float fireball_wormhole_intensity(object *obj)
#define OF_SHOULD_BE_DEAD
void fireball_render_DEPRECATED(object *obj)
GLsizei GLsizei GLuint * obj
fireball_info Fireball_info[MAX_FIREBALL_TYPES]
int parse_modular_table(const char *name_check, void(*parse_callback)(const char *filename), int path_type, int sort_type)
void fireball_delete_all()
capital warp hole opening
#define FBF_WARP_CAPITAL_SIZE
#define FIREBALL_ASTEROID
SCP_vector< int > explosion_bitmap_anims
#define FIREBALL_EXPLOSION_MEDIUM
#define FIREBALL_WARP_EFFECT
GLclampf GLclampf GLclampf alpha
int fireball_get_lod(vec3d *pos, fireball_info *fd, float size)
void gr_init_color(color *c, int r, int g, int b)
matrix vmd_identity_matrix
void fireball_process_post(object *obj, float frame_time)
SCP_vector< ship_type_info > Ship_types
#define g3_start_frame(zbuffer_flag)
int fireball_create(vec3d *pos, int fireball_type, int render_type, int parent_obj, float size, int reverse, vec3d *velocity, float warp_lifetime, int ship_class, matrix *orient_override, int low_res, int extra_flags, int warp_open_sound, int warp_close_sound)