56 { { { -1.0f, 0.0f, 0.0f } } },
57 { { { 1.0f, 0.70f, 0.0f } } },
58 { { { 1.0f, -0.70f, 0.0f } } }
63 { { { -0.05f, 0.0f, 0.0f } } },
64 { { { 0.05f, 0.035f, 0.0f } } },
65 { { { 0.05f, -0.035f, 0.0f } } }
86 DCF(b_scale,
"Sets the scale factor for debug nebula bolts")
90 DCF(b_rand,
"Sets the randomness factor for debug nebula bolts")
94 DCF(b_shrink,
"Sets the shrink factor for debug nebula bolts")
98 DCF(b_poly_pct,
"Sets b_poly_pct")
106 DCF(b_strikes,
"Sets num_strikes")
110 DCF(b_noise,
"Sets noise factor")
114 DCF(b_bright,
"Sets brightness factor")
118 DCF(b_lifetime,
"Sets lifetime duration")
122 DCF(b_list,
"Displays status of debug lightning commands")
124 dc_printf(
"Debug lightning bolt settings :\n");
140 DCF(lightning_intensity,
"Sets lightning intensity between 0.0 and 1.0 (Default is 0.6667)")
230 Bolt_types.push_back(new_bolt_type);
270 Storm_types.push_back(new_storm_type);
275 mprintf((
"TABLES: Unable to parse '%s'! Error message = %s.\n",
"lightning.tbl", e.what()));
317 if(index == (
size_t)-1)
320 Storm = &Storm_types[
index];
341 b = &Nebl_bolts[
idx];
352 if( b->
type >= Bolt_types.size() ){
356 bi = &Bolt_types[b->
type];
420 float dist =
fl_sqrt((x * x) + (y * y));
498 for(idx=0; idx<num_bolts; idx++){
512 if((s1 == 2) && (s2 == 2) && (s3 == 2)){
516 if((e1 == 2) && (e2 == 2) && (e3 == 2)){
522 }
while((s1 == e1) && (s2 == e2) && (s3 == e3));
530 vec3d your_basic_hot_sauce;
531 vm_vec_sub(&your_basic_hot_sauce, &strike, &start);
539 float how_much_of_that_good_wing_sauce_to_add =
vm_vec_normalize(&wing_sauce);
543 if(how_much_of_that_good_wing_sauce_to_add > 1000.0
f){
544 how_much_of_that_good_wing_sauce_to_add = 1000.0f;
546 vm_vec_interp_constant(&the_mixture, &your_basic_hot_sauce, &wing_sauce, how_much_of_that_good_wing_sauce_to_add / 1000.0
f);
582 if(!Nebl_bolts[idx].used){
591 if( type >= Bolt_types.size() ){
594 bi = &Bolt_types[
type];
597 bolt = &Nebl_bolts[
idx];
604 bolt->
type = (char)type;
608 Nebl_bolt_start = *
start;
609 Nebl_bolt_strike = *strike;
612 if(bolt->
delay != -1){
617 if(
vm_vec_same(&Nebl_bolt_start, &Nebl_bolt_strike)){
618 Nebl_bolt_strike.
xyz.z += 150.0f;
621 vm_vec_sub(&dir, &Nebl_bolt_strike, &Nebl_bolt_start);
633 if(!
nebl_gen(&Nebl_bolt_start, &Nebl_bolt_strike, 0, 4, 0, &bolt->
head, &tail)){
634 if(bolt->
head != NULL){
672 nprintf((
"lightning",
"Out of lightning nodes!\n"));
678 Assert( lp != &Nebl_free_list );
732 l_node *child_node = NULL;
736 if ( d < 0.30
f || (depth > max_depth) ){
739 if(new_left == NULL){
742 new_left->
links[0] = NULL; new_left->
links[1] = NULL; new_left->
links[2] = NULL;
745 if(new_right == NULL){
749 new_right->
links[0] = NULL; new_right->
links[1] = NULL; new_right->
links[2] = NULL;
760 *l_right = new_right;
783 if(!
nebl_gen(&tmp, &tmp2, 0, 2, 1, &child_node, &argh)){
784 if(child_node != NULL){
791 float scaler = 0.30f;
792 tmp.
xyz.x += (
frand()-0.5f)*d*scaler;
793 tmp.
xyz.y += (
frand()-0.5f)*d*scaler;
794 tmp.
xyz.z += (
frand()-0.5f)*d*scaler;
799 if(!
nebl_gen( left, &tmp, depth+1, max_depth, child, &ll, &lr )){
800 if(child_node != NULL){
812 if(!
nebl_gen( &tmp, right, depth+1, max_depth, child, &rl, &rr )){
813 if(child_node != NULL){
831 if(child_node != NULL){
871 vertex *verts[4] = {&v[0], &v[1], &v[2], &v[3]};
936 vec3d glow_a, glow_b;
951 for(idx=0; idx<3; idx++){
952 memset(&tempv, 0,
sizeof(tempv));
968 if (tempv.
codes == 0) {
975 memcpy(&c->
vex[idx], &tempv,
sizeof(
vertex));
991 for(idx=0; idx<3; idx++){
1006 if (tempv.
codes == 0) {
1013 memcpy(&cap->
vex[idx], &tempv,
sizeof(
vertex));
1099 if( b->
type >= Bolt_types.size() ){
1102 bi = &Bolt_types[b->
type];
1111 while(moveup != NULL){
1123 for(
size_t idx=0;
idx<Bolt_types.size();
idx++){
1124 if(!strcmp(name, Bolt_types[
idx].name)){
1138 for(
size_t idx=0;
idx<Storm_types.size();
idx++){
1139 if(!strcmp(name, Storm_types[
idx].name)){
void game_flash(float r, float g, float b)
int timestamp(int delta_ms)
struct screen3d::@234::@236 xyw
int nebl_get_active_bolts()
void vm_vec_scale_add(vec3d *dest, const vec3d *src1, const vec3d *src2, float k)
#define MISSION_FLAG_FULLNEB
float frand_range(float min, float max)
Return a floating point number in the range min..max.
SCP_vector< game_snd > Snds
ubyte g3_transfer_vertex(vertex *dest, const vec3d *src)
float vm_vec_normalize_quick(vec3d *src)
int nebl_get_active_nodes()
GLint GLint GLsizei GLsizei GLsizei depth
#define list_append(head, elem)
vec3d Nebl_ring_pinched[3]
struct vec3d::@225::@227 xyz
int nebl_gen(vec3d *left, vec3d *right, float depth, float max_depth, int child, l_node **l_left, l_node **l_right)
#define TMAP_HTL_3D_UNLIT
vec3d * vm_vec_rotate(vec3d *dest, const vec3d *src, const matrix *m)
size_t bolt_types[MAX_BOLT_TYPES_PER_STORM]
cube_poof Neb2_cubes[MAX_CPTS][MAX_CPTS][MAX_CPTS]
#define MAX_LIGHTNING_NODES
void vm_vec_scale_add2(vec3d *dest, const vec3d *src, float k)
void gr_set_bitmap(int bitmap_num, int alphablend_mode, int bitblt_mode, float alpha)
void nebl_bolt(size_t type, vec3d *start, vec3d *strike)
void stuff_float(float *f)
#define IS_VEC_NULL_SQ_SAFE(v)
#define SND_PRIORITY_DOUBLE_INSTANCE
SCP_vector< bolt_type > Bolt_types
typedef int(SCP_EXT_CALLCONV *SCPDLL_PFVERSION)(SCPDLL_Version *)
matrix * vm_vector_2_matrix(matrix *m, const vec3d *fvec, const vec3d *uvec, const vec3d *rvec)
void vm_vec_add2(vec3d *dest, const vec3d *src)
#define GR_ALPHABLEND_FILTER
void vm_vec_scale(vec3d *dest, float s)
void nebl_jitter(l_bolt *b)
GLboolean GLboolean GLboolean GLboolean a
DCF(b_scale,"Sets the scale factor for debug nebula bolts")
void nebl_release(l_node *whee)
void stuff_string(char *outstr, int type, int len, char *terminators)
SCP_vector< storm_type > Storm_types
void nebl_render(bolt_type *bi, l_node *whee, float width, l_section *prev)
Thunder 1 sound in neblua.
ubyte g3_rotate_vertex(vertex *dest, const vec3d *src)
int required_string(const char *pstr)
int snd_play(game_snd *gs, float pan, float vol_scale, int priority, bool is_voice_msg)
float vm_vec_dist(const vec3d *v0, const vec3d *v1)
int optional_string(const char *pstr)
Thunder 2 sound in neblua.
void emp_apply(vec3d *pos, float inner_radius, float outer_radius, float emp_intensity, float emp_time, bool use_emp_time_for_capship_turrets)
void read_file_text(const char *filename, int mode, char *processed_text, char *raw_text)
size_t nebl_get_storm_index(char *name)
int g3_project_vertex(vertex *point)
GLint GLint GLint GLint GLint x
void vm_vec_interp_constant(vec3d *out, const vec3d *v0, const vec3d *v1, float t)
void vm_vec_copy_scale(vec3d *dest, const vec3d *src, float s)
#define TMAP_FLAG_CORRECT
void dc_stuff_float(float *f)
Stuffs a float to the given variable.
void vm_vec_random_in_circle(vec3d *out, const vec3d *in, const matrix *orient, float radius, int on_edge)
void reset_parse(char *text)
void dc_stuff_int(int *i)
Stuffs an int to the given variable. Supports binary (0b), hexadecimal (0x), and octal (0o) formats...
GLuint const GLchar * name
#define MAX_BOLT_TYPES_PER_STORM
void vm_vec_sub(vec3d *dest, const vec3d *src0, const vec3d *src1)
int bm_load(const char *real_filename)
Loads a bitmap so we can draw with it later.
void nebl_generate_section(bolt_type *bi, float width, l_node *a, l_node *b, l_section *c, l_section *cap, int pinch_a, int pinch_b)
GLboolean GLboolean GLboolean b
typedef float(SCP_EXT_CALLCONV *SCPTRACKIR_PFFLOATVOID)()
int vm_vec_same(const vec3d *v1, const vec3d *v2)
void nebl_render_section(bolt_type *bi, l_section *a, l_section *b)
float vm_vec_dist_quick(const vec3d *v0, const vec3d *v1)
float frand()
Return random value in range 0.0..1.0- (1.0- means the closest number less than 1.0)
GLubyte GLubyte GLubyte GLubyte w
float vm_vec_copy_normalize(vec3d *dest, const vec3d *src)
#define MULTIPLAYER_MASTER
An overhauled/updated debug console to allow monitoring, testing, and general debugging of new featur...
vec3d * vm_vec_avg(vec3d *dest, const vec3d *src0, const vec3d *src1)
#define TMAP_FLAG_TEXTURED
#define timestamp_elapsed(stamp)
#define list_remove(head, elem)
void nebl_delete(l_node *lp)
GLenum GLuint GLenum GLsizei length
#define GR_BITBLT_MODE_NORMAL
size_t nebl_get_bolt_index(char *name)
void dc_printf(const char *format,...)
Prints the given char string to the debug console.
void nebl_calc_facing_pts_smart(vec3d *top, vec3d *bot, vec3d *fvec, vec3d *pos, float w, float z_add)
l_node Nebl_nodes[MAX_LIGHTNING_NODES]
vec3d * vm_vec_cross(vec3d *dest, const vec3d *src0, const vec3d *src1)
#define MAX_LIGHTNING_BOLTS
int g3_draw_poly(int nv, vertex **pointlist, uint tmap_flags)
GLdouble GLdouble GLdouble GLdouble top
l_bolt Nebl_bolts[MAX_LIGHTNING_BOLTS]
void vm_vec_add(vec3d *dest, const vec3d *src0, const vec3d *src1)
void send_lightning_packet(int bolt_type_internal, vec3d *start, vec3d *strike)
void nebl_set_storm(char *name)
float vm_vec_normalize(vec3d *v)