MCPcopy Create free account
hub / github.com/DescentDevelopers/Descent3 / CreateExtraFireballs

Function CreateExtraFireballs

Descent3/fireball.cpp:975–1028  ·  view source on GitHub ↗

Create extra fireballs for an exploding object

Source from the content-addressed store, hash-verified

973}
974// Create extra fireballs for an exploding object
975void CreateExtraFireballs(object *obj, float size_scale) {
976 // Create some extra explosions to start later
977 float expl_size = obj->size * size_scale;
978 int size_add = expl_size / EXTRA_EXPLOSION_THRESHOLD;
979 int extras = size_add + (ps_rand() % 4);
980 int i;
981 if (obj->type == OBJ_BUILDING && OBJECT_OUTSIDE(obj))
982 extras += 4;
983 // Cap at 12
984 extras = std::min(12, extras);
985 // mprintf(0,"Creating %d extra explosions\n",extras);
986 CreateRandomSparks(extras, &obj->pos, obj->roomnum);
987 for (i = 0; i < extras; i++) {
988 vector pos = obj->pos;
989 float vals[10], add_time;
990 float upwards;
991 // Make this a billowing explosion
992 if (obj->type == OBJ_BUILDING && OBJECT_OUTSIDE(obj)) {
993 float increment = (obj->size * 1.5) / extras;
994 pos.y += (increment * i);
995 add_time = (1.0 / extras) * i;
996 upwards = 60;
997 } else {
998 pos.x += (((ps_rand() % 100) / 50.0) - 1.0) * (obj->size / 2);
999 pos.y += (((ps_rand() % 100) / 50.0) - 1.0) * (obj->size / 2);
1000 pos.z += (((ps_rand() % 100) / 50.0) - 1.0) * (obj->size / 2);
1001 add_time = .3 + ((ps_rand() % 100) / 200.0);
1002 upwards = 0;
1003 }
1004
1005 vals[0] = pos.x;
1006 vals[1] = pos.y;
1007 vals[2] = pos.z;
1008 if (size_add > 0) {
1009 if (ps_rand() % 2)
1010 vals[3] = BIG_EXPLOSION_INDEX;
1011 else
1012 vals[3] = GetRandomMediumExplosion();
1013 } else
1014 vals[3] = GetRandomMediumExplosion();
1015 vals[4] = obj->roomnum;
1016 vals[5] = expl_size;
1017 vals[6] = upwards;
1018 // Bash some values for billowing explosions
1019 if ((obj->type == OBJ_BUILDING) && (OBJECT_OUTSIDE(obj))) {
1020 float norm = ((float)(i + 1)) / extras;
1021 // norm=1.0-norm;
1022 vals[3] = GetRandomBillowingExplosion();
1023 vals[5] *= (.5 + (.5 * norm));
1024 }
1025
1026 CreateNewEvent(0, 0, add_time, vals, sizeof(float) * 7, DoExplosionEvent);
1027 }
1028}
1029// Break apart a polygon model into pieces of debris
1030void BreakApartModel(object *obj, float explosion_mag, int death_flags) {
1031 poly_model *pm = GetPolymodelPointer(obj->rtype.pobj_info.model_num);

Callers 1

DestroyObjectFunction · 0.85

Calls 5

ps_randFunction · 0.85
CreateRandomSparksFunction · 0.85
GetRandomMediumExplosionFunction · 0.85
CreateNewEventFunction · 0.85

Tested by

no test coverage detected