Move */main/fireball.c -> similar/main/fireball.c
This commit is contained in:
parent
148dd00eeb
commit
18aea17f9e
|
@ -932,6 +932,7 @@ class DXXProgram(DXXCommon):
|
||||||
'main/digiobj.cpp',
|
'main/digiobj.cpp',
|
||||||
'main/effects.cpp',
|
'main/effects.cpp',
|
||||||
'main/endlevel.cpp',
|
'main/endlevel.cpp',
|
||||||
|
'main/fireball.c',
|
||||||
'main/fuelcen.cpp',
|
'main/fuelcen.cpp',
|
||||||
'main/fvi.cpp',
|
'main/fvi.cpp',
|
||||||
'main/game.cpp',
|
'main/game.cpp',
|
||||||
|
@ -1223,7 +1224,6 @@ class D1XProgram(DXXProgram):
|
||||||
'main/bmread.cpp',
|
'main/bmread.cpp',
|
||||||
'main/collide.c',
|
'main/collide.c',
|
||||||
'main/custom.cpp',
|
'main/custom.cpp',
|
||||||
'main/fireball.c',
|
|
||||||
'main/snddecom.cpp',
|
'main/snddecom.cpp',
|
||||||
#'tracker/client/tracker_client.c'
|
#'tracker/client/tracker_client.c'
|
||||||
]
|
]
|
||||||
|
@ -1276,7 +1276,6 @@ class D2XProgram(DXXProgram):
|
||||||
'libmve/mveplay.cpp',
|
'libmve/mveplay.cpp',
|
||||||
'main/collide.c',
|
'main/collide.c',
|
||||||
'main/escort.cpp',
|
'main/escort.cpp',
|
||||||
'main/fireball.c',
|
|
||||||
'main/gamepal.cpp',
|
'main/gamepal.cpp',
|
||||||
'main/movie.cpp',
|
'main/movie.cpp',
|
||||||
'main/segment.cpp',
|
'main/segment.cpp',
|
||||||
|
|
|
@ -230,6 +230,8 @@ enum secondary_weapon_index_t
|
||||||
PROXIMITY_INDEX = 2,
|
PROXIMITY_INDEX = 2,
|
||||||
SMART_INDEX = 3,
|
SMART_INDEX = 3,
|
||||||
MEGA_INDEX = 4,
|
MEGA_INDEX = 4,
|
||||||
|
#define NUM_SMART_CHILDREN 6 // Number of smart children created by default.
|
||||||
|
|
||||||
#if defined(DXX_BUILD_DESCENT_I)
|
#if defined(DXX_BUILD_DESCENT_I)
|
||||||
#define NUM_SHAREWARE_WEAPONS 3 //in shareware, old get first 3 of each
|
#define NUM_SHAREWARE_WEAPONS 3 //in shareware, old get first 3 of each
|
||||||
|
|
||||||
|
@ -245,8 +247,6 @@ enum secondary_weapon_index_t
|
||||||
|
|
||||||
#define VULCAN_AMMO_SCALE 0xcc163 //(0x198300/2) //multiply ammo by this before displaying
|
#define VULCAN_AMMO_SCALE 0xcc163 //(0x198300/2) //multiply ammo by this before displaying
|
||||||
|
|
||||||
#define NUM_SMART_CHILDREN 6 // Number of smart children created by default.
|
|
||||||
|
|
||||||
#define HAS_FLASH_FLAG HAS_SECONDARY_FLAG(SMISSILE1_INDEX)
|
#define HAS_FLASH_FLAG HAS_SECONDARY_FLAG(SMISSILE1_INDEX)
|
||||||
#define HAS_GUIDED_FLAG HAS_SECONDARY_FLAG(GUIDED_INDEX)
|
#define HAS_GUIDED_FLAG HAS_SECONDARY_FLAG(GUIDED_INDEX)
|
||||||
#define HAS_SMART_BOMB_FLAG HAS_SECONDARY_FLAG(SMART_MINE_INDEX)
|
#define HAS_SMART_BOMB_FLAG HAS_SECONDARY_FLAG(SMART_MINE_INDEX)
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -60,8 +60,10 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
|
||||||
|
|
||||||
//--unused-- ubyte Frame_processed[MAX_OBJECTS];
|
//--unused-- ubyte Frame_processed[MAX_OBJECTS];
|
||||||
|
|
||||||
|
#if defined(DXX_BUILD_DESCENT_II)
|
||||||
fix Flash_effect=0;
|
fix Flash_effect=0;
|
||||||
static const int PK1=1, PK2=8;
|
static const int PK1=1, PK2=8;
|
||||||
|
#endif
|
||||||
|
|
||||||
static object *object_create_explosion_sub(object *objp, short segnum, vms_vector * position, fix size, int vclip_type, fix maxdamage, fix maxdistance, fix maxforce, int parent )
|
static object *object_create_explosion_sub(object *objp, short segnum, vms_vector * position, fix size, int vclip_type, fix maxdamage, fix maxdistance, fix maxforce, int parent )
|
||||||
{
|
{
|
||||||
|
@ -104,6 +106,11 @@ static object *object_create_explosion_sub(object *objp, short segnum, vms_vecto
|
||||||
if ((Objects[parent].type != OBJ_ROBOT) || (get_robot_id(&Objects[parent]) != obj0p->id))
|
if ((Objects[parent].type != OBJ_ROBOT) || (get_robot_id(&Objects[parent]) != obj0p->id))
|
||||||
parent_check = 1;
|
parent_check = 1;
|
||||||
|
|
||||||
|
#if defined(DXX_BUILD_DESCENT_I)
|
||||||
|
if ( (obj0p->type == OBJ_CNTRLCEN) ||
|
||||||
|
(obj0p->type==OBJ_PLAYER) ||
|
||||||
|
((obj0p->type==OBJ_ROBOT) && parent_check))
|
||||||
|
#elif defined(DXX_BUILD_DESCENT_II)
|
||||||
if ( (obj0p!=objp) &&
|
if ( (obj0p!=objp) &&
|
||||||
!(obj0p->flags&OF_SHOULD_BE_DEAD) &&
|
!(obj0p->flags&OF_SHOULD_BE_DEAD) &&
|
||||||
((obj0p->type==OBJ_WEAPON && (obj0p->id==PROXIMITY_ID || obj0p->id==SUPERPROX_ID || obj0p->id==PMINE_ID)) ||
|
((obj0p->type==OBJ_WEAPON && (obj0p->id==PROXIMITY_ID || obj0p->id==SUPERPROX_ID || obj0p->id==PMINE_ID)) ||
|
||||||
|
@ -111,6 +118,7 @@ static object *object_create_explosion_sub(object *objp, short segnum, vms_vecto
|
||||||
(obj0p->type==OBJ_PLAYER) ||
|
(obj0p->type==OBJ_PLAYER) ||
|
||||||
((obj0p->type==OBJ_ROBOT) && parent_check)
|
((obj0p->type==OBJ_ROBOT) && parent_check)
|
||||||
))
|
))
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
dist = vm_vec_dist_quick( &obj0p->pos, &obj->pos );
|
dist = vm_vec_dist_quick( &obj0p->pos, &obj->pos );
|
||||||
// Make damage be from 'maxdamage' to 0.0, where 0.0 is 'maxdistance' away;
|
// Make damage be from 'maxdamage' to 0.0, where 0.0 is 'maxdistance' away;
|
||||||
|
@ -128,6 +136,7 @@ static object *object_create_explosion_sub(object *objp, short segnum, vms_vecto
|
||||||
vm_vec_scale(vm_vec_sub(&pos_hit, &obj->pos, &obj0p->pos), fixdiv(obj0p->size, obj0p->size + dist));
|
vm_vec_scale(vm_vec_sub(&pos_hit, &obj->pos, &obj0p->pos), fixdiv(obj0p->size, obj0p->size + dist));
|
||||||
|
|
||||||
switch ( obj0p->type ) {
|
switch ( obj0p->type ) {
|
||||||
|
#if defined(DXX_BUILD_DESCENT_II)
|
||||||
case OBJ_WEAPON:
|
case OBJ_WEAPON:
|
||||||
phys_apply_force(obj0p,&vforce);
|
phys_apply_force(obj0p,&vforce);
|
||||||
|
|
||||||
|
@ -138,11 +147,11 @@ static object *object_create_explosion_sub(object *objp, short segnum, vms_vecto
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
case OBJ_ROBOT:
|
case OBJ_ROBOT:
|
||||||
{
|
{
|
||||||
phys_apply_force(obj0p,&vforce);
|
phys_apply_force(obj0p,&vforce);
|
||||||
|
#if defined(DXX_BUILD_DESCENT_II)
|
||||||
// If not a boss, stun for 2 seconds at 32 force, 1 second at 16 force
|
// If not a boss, stun for 2 seconds at 32 force, 1 second at 16 force
|
||||||
if ((objp != NULL) && (!Robot_info[obj0p->id].boss_flag) && (Weapon_info[objp->id].flash)) {
|
if ((objp != NULL) && (!Robot_info[obj0p->id].boss_flag) && (Weapon_info[objp->id].flash)) {
|
||||||
ai_static *aip = &obj0p->ctype.ai_info;
|
ai_static *aip = &obj0p->ctype.ai_info;
|
||||||
|
@ -159,8 +168,8 @@ static object *object_create_explosion_sub(object *objp, short segnum, vms_vecto
|
||||||
//@@ buddy_message("Daisy, Daisy, Give me...");
|
//@@ buddy_message("Daisy, Daisy, Give me...");
|
||||||
} else
|
} else
|
||||||
aip->SKIP_AI_COUNT--;
|
aip->SKIP_AI_COUNT--;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// When a robot gets whacked by a badass force, he looks towards it because robots tend to get blasted from behind.
|
// When a robot gets whacked by a badass force, he looks towards it because robots tend to get blasted from behind.
|
||||||
{
|
{
|
||||||
|
@ -171,15 +180,16 @@ static object *object_create_explosion_sub(object *objp, short segnum, vms_vecto
|
||||||
phys_apply_rot(obj0p,&neg_vforce);
|
phys_apply_rot(obj0p,&neg_vforce);
|
||||||
}
|
}
|
||||||
if ( obj0p->shields >= 0 ) {
|
if ( obj0p->shields >= 0 ) {
|
||||||
|
#if defined(DXX_BUILD_DESCENT_II)
|
||||||
if (Robot_info[obj0p->id].boss_flag)
|
if (Robot_info[obj0p->id].boss_flag)
|
||||||
if (Boss_invulnerable_matter[Robot_info[obj0p->id].boss_flag-BOSS_D2])
|
if (Boss_invulnerable_matter[Robot_info[obj0p->id].boss_flag-BOSS_D2])
|
||||||
damage /= 4;
|
damage /= 4;
|
||||||
|
#endif
|
||||||
if (apply_damage_to_robot(obj0p, damage, parent))
|
if (apply_damage_to_robot(obj0p, damage, parent))
|
||||||
if ((objp != NULL) && (parent == Players[Player_num].objnum))
|
if ((objp != NULL) && (parent == Players[Player_num].objnum))
|
||||||
add_points_to_score(Robot_info[obj0p->id].score_value);
|
add_points_to_score(Robot_info[get_robot_id(obj0p)].score_value);
|
||||||
}
|
}
|
||||||
|
#if defined(DXX_BUILD_DESCENT_II)
|
||||||
if ((objp != NULL) && (Robot_info[obj0p->id].companion) && (!Weapon_info[objp->id].flash)) {
|
if ((objp != NULL) && (Robot_info[obj0p->id].companion) && (!Weapon_info[objp->id].flash)) {
|
||||||
int i, count;
|
int i, count;
|
||||||
char ouch_str[6*4 + 2];
|
char ouch_str[6*4 + 2];
|
||||||
|
@ -195,6 +205,7 @@ static object *object_create_explosion_sub(object *objp, short segnum, vms_vecto
|
||||||
|
|
||||||
buddy_message("%s", ouch_str);
|
buddy_message("%s", ouch_str);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case OBJ_CNTRLCEN:
|
case OBJ_CNTRLCEN:
|
||||||
|
@ -205,7 +216,7 @@ static object *object_create_explosion_sub(object *objp, short segnum, vms_vecto
|
||||||
case OBJ_PLAYER: {
|
case OBJ_PLAYER: {
|
||||||
object * killer=NULL;
|
object * killer=NULL;
|
||||||
vms_vector vforce2;
|
vms_vector vforce2;
|
||||||
|
#if defined(DXX_BUILD_DESCENT_II)
|
||||||
// Hack! Warning! Test code!
|
// Hack! Warning! Test code!
|
||||||
if ((objp != NULL) && Weapon_info[objp->id].flash && obj0p->id==Player_num) {
|
if ((objp != NULL) && Weapon_info[objp->id].flash && obj0p->id==Player_num) {
|
||||||
int fe;
|
int fe;
|
||||||
|
@ -221,7 +232,7 @@ static object *object_create_explosion_sub(object *objp, short segnum, vms_vecto
|
||||||
PALETTE_FLASH_ADD(PK1 + f2i(PK2*force), PK1 + f2i(PK2*force), PK1 + f2i(PK2*force));
|
PALETTE_FLASH_ADD(PK1 + f2i(PK2*force), PK1 + f2i(PK2*force), PK1 + f2i(PK2*force));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
if ((objp != NULL) && (Game_mode & GM_MULTI) && (objp->type == OBJ_PLAYER)) {
|
if ((objp != NULL) && (Game_mode & GM_MULTI) && (objp->type == OBJ_PLAYER)) {
|
||||||
killer = objp;
|
killer = objp;
|
||||||
}
|
}
|
||||||
|
@ -235,8 +246,10 @@ static object *object_create_explosion_sub(object *objp, short segnum, vms_vecto
|
||||||
|
|
||||||
phys_apply_force(obj0p,&vforce);
|
phys_apply_force(obj0p,&vforce);
|
||||||
phys_apply_rot(obj0p,&vforce2);
|
phys_apply_rot(obj0p,&vforce2);
|
||||||
|
#if defined(DXX_BUILD_DESCENT_II)
|
||||||
if (Difficulty_level == 0)
|
if (Difficulty_level == 0)
|
||||||
damage /= 4;
|
damage /= 4;
|
||||||
|
#endif
|
||||||
if ( obj0p->shields >= 0 )
|
if ( obj0p->shields >= 0 )
|
||||||
apply_damage_to_player(obj0p, killer, damage, 0 );
|
apply_damage_to_player(obj0p, killer, damage, 0 );
|
||||||
}
|
}
|
||||||
|
@ -288,10 +301,10 @@ object *explode_badass_weapon(object *obj,vms_vector *pos)
|
||||||
weapon_info *wi = &Weapon_info[get_weapon_id(obj)];
|
weapon_info *wi = &Weapon_info[get_weapon_id(obj)];
|
||||||
|
|
||||||
Assert(wi->damage_radius);
|
Assert(wi->damage_radius);
|
||||||
|
#if defined(DXX_BUILD_DESCENT_II)
|
||||||
if ((obj->id == EARTHSHAKER_ID) || (obj->id == ROBOT_EARTHSHAKER_ID))
|
if ((obj->id == EARTHSHAKER_ID) || (obj->id == ROBOT_EARTHSHAKER_ID))
|
||||||
smega_rock_stuff();
|
smega_rock_stuff();
|
||||||
|
#endif
|
||||||
digi_link_sound_to_object(SOUND_BADASS_EXPLOSION, obj-Objects, 0, F1_0);
|
digi_link_sound_to_object(SOUND_BADASS_EXPLOSION, obj-Objects, 0, F1_0);
|
||||||
|
|
||||||
return object_create_badass_explosion(obj, obj->segnum, pos,
|
return object_create_badass_explosion(obj, obj->segnum, pos,
|
||||||
|
@ -453,7 +466,6 @@ int pick_connected_segment(object *objp, int max_depth)
|
||||||
side_rand[i] = temp;
|
side_rand[i] = temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
while (tail != head) {
|
while (tail != head) {
|
||||||
int sidenum, count;
|
int sidenum, count;
|
||||||
segment *segp;
|
segment *segp;
|
||||||
|
@ -511,7 +523,11 @@ int pick_connected_segment(object *objp, int max_depth)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(DXX_BUILD_DESCENT_I)
|
||||||
|
#define BASE_NET_DROP_DEPTH 10
|
||||||
|
#elif defined(DXX_BUILD_DESCENT_II)
|
||||||
#define BASE_NET_DROP_DEPTH 8
|
#define BASE_NET_DROP_DEPTH 8
|
||||||
|
#endif
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------------
|
||||||
// Choose segment to drop a powerup in.
|
// Choose segment to drop a powerup in.
|
||||||
|
@ -537,7 +553,11 @@ static int choose_drop_segment()
|
||||||
while ((segnum == -1) && (cur_drop_depth > BASE_NET_DROP_DEPTH/2)) {
|
while ((segnum == -1) && (cur_drop_depth > BASE_NET_DROP_DEPTH/2)) {
|
||||||
pnum = (d_rand() * N_players) >> 15;
|
pnum = (d_rand() * N_players) >> 15;
|
||||||
count = 0;
|
count = 0;
|
||||||
|
#if defined(DXX_BUILD_DESCENT_I)
|
||||||
|
while ((count < N_players) && ((Players[pnum].connected == CONNECT_DISCONNECTED) || (pnum==Player_num)))
|
||||||
|
#elif defined(DXX_BUILD_DESCENT_II)
|
||||||
while ((count < N_players) && ((Players[pnum].connected == CONNECT_DISCONNECTED) || (pnum==Player_num) || ((Game_mode & (GM_TEAM|GM_CAPTURE)) && (get_team(pnum)==get_team(Player_num)))))
|
while ((count < N_players) && ((Players[pnum].connected == CONNECT_DISCONNECTED) || (pnum==Player_num) || ((Game_mode & (GM_TEAM|GM_CAPTURE)) && (get_team(pnum)==get_team(Player_num)))))
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
pnum = (pnum+1)%N_players;
|
pnum = (pnum+1)%N_players;
|
||||||
count++;
|
count++;
|
||||||
|
@ -704,10 +724,12 @@ void maybe_replace_powerup_with_energy(object *del_obj)
|
||||||
case POW_SPREADFIRE_WEAPON: weapon_index = SPREADFIRE_INDEX; break;
|
case POW_SPREADFIRE_WEAPON: weapon_index = SPREADFIRE_INDEX; break;
|
||||||
case POW_PLASMA_WEAPON: weapon_index = PLASMA_INDEX; break;
|
case POW_PLASMA_WEAPON: weapon_index = PLASMA_INDEX; break;
|
||||||
case POW_FUSION_WEAPON: weapon_index = FUSION_INDEX; break;
|
case POW_FUSION_WEAPON: weapon_index = FUSION_INDEX; break;
|
||||||
|
#if defined(DXX_BUILD_DESCENT_II)
|
||||||
case POW_GAUSS_WEAPON: weapon_index = GAUSS_INDEX; break;
|
case POW_GAUSS_WEAPON: weapon_index = GAUSS_INDEX; break;
|
||||||
case POW_HELIX_WEAPON: weapon_index = HELIX_INDEX; break;
|
case POW_HELIX_WEAPON: weapon_index = HELIX_INDEX; break;
|
||||||
case POW_PHOENIX_WEAPON: weapon_index = PHOENIX_INDEX; break;
|
case POW_PHOENIX_WEAPON: weapon_index = PHOENIX_INDEX; break;
|
||||||
case POW_OMEGA_WEAPON: weapon_index = OMEGA_INDEX; break;
|
case POW_OMEGA_WEAPON: weapon_index = OMEGA_INDEX; break;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// Don't drop vulcan ammo if player maxed out.
|
// Don't drop vulcan ammo if player maxed out.
|
||||||
|
@ -716,6 +738,9 @@ void maybe_replace_powerup_with_energy(object *del_obj)
|
||||||
else if (weapon_index != -1) {
|
else if (weapon_index != -1) {
|
||||||
if ((player_has_weapon(weapon_index, 0) & HAS_WEAPON_FLAG) || weapon_nearby(del_obj, del_obj->contains_id)) {
|
if ((player_has_weapon(weapon_index, 0) & HAS_WEAPON_FLAG) || weapon_nearby(del_obj, del_obj->contains_id)) {
|
||||||
if (d_rand() > 16384) {
|
if (d_rand() > 16384) {
|
||||||
|
#if defined(DXX_BUILD_DESCENT_I)
|
||||||
|
del_obj->contains_count = 1;
|
||||||
|
#endif
|
||||||
del_obj->contains_type = OBJ_POWERUP;
|
del_obj->contains_type = OBJ_POWERUP;
|
||||||
if (weapon_index_uses_vulcan_ammo(weapon_index)) {
|
if (weapon_index_uses_vulcan_ammo(weapon_index)) {
|
||||||
del_obj->contains_id = POW_VULCAN_AMMO;
|
del_obj->contains_id = POW_VULCAN_AMMO;
|
||||||
|
@ -724,18 +749,29 @@ void maybe_replace_powerup_with_energy(object *del_obj)
|
||||||
del_obj->contains_id = POW_ENERGY;
|
del_obj->contains_id = POW_ENERGY;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
#if defined(DXX_BUILD_DESCENT_I)
|
||||||
|
del_obj->contains_count = 0;
|
||||||
|
#elif defined(DXX_BUILD_DESCENT_II)
|
||||||
del_obj->contains_type = OBJ_POWERUP;
|
del_obj->contains_type = OBJ_POWERUP;
|
||||||
del_obj->contains_id = POW_SHIELD_BOOST;
|
del_obj->contains_id = POW_SHIELD_BOOST;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (del_obj->contains_id == POW_QUAD_FIRE)
|
} else if (del_obj->contains_id == POW_QUAD_FIRE)
|
||||||
if ((Players[Player_num].flags & PLAYER_FLAGS_QUAD_LASERS) || weapon_nearby(del_obj, del_obj->contains_id)) {
|
if ((Players[Player_num].flags & PLAYER_FLAGS_QUAD_LASERS) || weapon_nearby(del_obj, del_obj->contains_id)) {
|
||||||
if (d_rand() > 16384) {
|
if (d_rand() > 16384) {
|
||||||
|
#if defined(DXX_BUILD_DESCENT_I)
|
||||||
|
del_obj->contains_count = 1;
|
||||||
|
#endif
|
||||||
del_obj->contains_type = OBJ_POWERUP;
|
del_obj->contains_type = OBJ_POWERUP;
|
||||||
del_obj->contains_id = POW_ENERGY;
|
del_obj->contains_id = POW_ENERGY;
|
||||||
} else {
|
} else {
|
||||||
|
#if defined(DXX_BUILD_DESCENT_I)
|
||||||
|
del_obj->contains_count = 0;
|
||||||
|
#elif defined(DXX_BUILD_DESCENT_II)
|
||||||
del_obj->contains_type = OBJ_POWERUP;
|
del_obj->contains_type = OBJ_POWERUP;
|
||||||
del_obj->contains_id = POW_SHIELD_BOOST;
|
del_obj->contains_id = POW_SHIELD_BOOST;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -752,6 +788,9 @@ void maybe_replace_powerup_with_energy(object *del_obj)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(DXX_BUILD_DESCENT_I)
|
||||||
|
static
|
||||||
|
#endif
|
||||||
int drop_powerup(int type, int id, int num, vms_vector *init_vel, vms_vector *pos, int segnum)
|
int drop_powerup(int type, int id, int num, vms_vector *init_vel, vms_vector *pos, int segnum)
|
||||||
{
|
{
|
||||||
int objnum=-1;
|
int objnum=-1;
|
||||||
|
@ -796,8 +835,10 @@ int drop_powerup(int type, int id, int num, vms_vector *init_vel, vms_vector *po
|
||||||
{
|
{
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
#if defined(DXX_BUILD_DESCENT_II)
|
||||||
if ((Game_mode & GM_NETWORK) && Network_status == NETSTAT_ENDLEVEL)
|
if ((Game_mode & GM_NETWORK) && Network_status == NETSTAT_ENDLEVEL)
|
||||||
return (-1);
|
return (-1);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
objnum = obj_create( type, id, segnum, &new_pos, &vmd_identity_matrix, Powerup_info[id].size, CT_POWERUP, MT_PHYSICS, RT_POWERUP);
|
objnum = obj_create( type, id, segnum, &new_pos, &vmd_identity_matrix, Powerup_info[id].size, CT_POWERUP, MT_PHYSICS, RT_POWERUP);
|
||||||
|
|
||||||
|
@ -867,7 +908,11 @@ int drop_powerup(int type, int id, int num, vms_vector *init_vel, vms_vector *po
|
||||||
// new_pos.y += (d_rand()-16384)*7;
|
// new_pos.y += (d_rand()-16384)*7;
|
||||||
// new_pos.z += (d_rand()-16384)*6;
|
// new_pos.z += (d_rand()-16384)*6;
|
||||||
|
|
||||||
|
#if defined(DXX_BUILD_DESCENT_I)
|
||||||
|
objnum = obj_create(OBJ_ROBOT, id, segnum, &new_pos, &vmd_identity_matrix, Polygon_models[Robot_info[ObjId[type]].model_num].rad, CT_AI, MT_PHYSICS, RT_POLYOBJ);
|
||||||
|
#elif defined(DXX_BUILD_DESCENT_II)
|
||||||
objnum = obj_create(OBJ_ROBOT, id, segnum, &new_pos, &vmd_identity_matrix, Polygon_models[Robot_info[id].model_num].rad, CT_AI, MT_PHYSICS, RT_POLYOBJ);
|
objnum = obj_create(OBJ_ROBOT, id, segnum, &new_pos, &vmd_identity_matrix, Polygon_models[Robot_info[id].model_num].rad, CT_AI, MT_PHYSICS, RT_POLYOBJ);
|
||||||
|
#endif
|
||||||
|
|
||||||
if ( objnum < 0 ) {
|
if ( objnum < 0 ) {
|
||||||
Int3();
|
Int3();
|
||||||
|
@ -905,11 +950,12 @@ int drop_powerup(int type, int id, int num, vms_vector *init_vel, vms_vector *po
|
||||||
obj->ctype.ai_info.REMOTE_OWNER = -1;
|
obj->ctype.ai_info.REMOTE_OWNER = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(DXX_BUILD_DESCENT_II)
|
||||||
// At JasenW's request, robots which contain robots
|
// At JasenW's request, robots which contain robots
|
||||||
// sometimes drop shields.
|
// sometimes drop shields.
|
||||||
if (d_rand() > 16384)
|
if (d_rand() > 16384)
|
||||||
drop_powerup(OBJ_POWERUP, POW_SHIELD_BOOST, 1, init_vel, pos, segnum);
|
drop_powerup(OBJ_POWERUP, POW_SHIELD_BOOST, 1, init_vel, pos, segnum);
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -925,7 +971,7 @@ int drop_powerup(int type, int id, int num, vms_vector *init_vel, vms_vector *po
|
||||||
int object_create_egg(object *objp)
|
int object_create_egg(object *objp)
|
||||||
{
|
{
|
||||||
int rval;
|
int rval;
|
||||||
|
#if defined(DXX_BUILD_DESCENT_II)
|
||||||
if (!(Game_mode & GM_MULTI) & (objp->type != OBJ_PLAYER))
|
if (!(Game_mode & GM_MULTI) & (objp->type != OBJ_PLAYER))
|
||||||
{
|
{
|
||||||
if (objp->contains_type == OBJ_POWERUP)
|
if (objp->contains_type == OBJ_POWERUP)
|
||||||
|
@ -953,9 +999,9 @@ int object_create_egg(object *objp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
rval = drop_powerup(objp->contains_type, objp->contains_id, objp->contains_count, &objp->mtype.phys_info.velocity, &objp->pos, objp->segnum);
|
rval = drop_powerup(objp->contains_type, objp->contains_id, objp->contains_count, &objp->mtype.phys_info.velocity, &objp->pos, objp->segnum);
|
||||||
|
#if defined(DXX_BUILD_DESCENT_II)
|
||||||
if (rval != -1)
|
if (rval != -1)
|
||||||
{
|
{
|
||||||
if ((objp->type == OBJ_PLAYER) && (objp->id == Player_num))
|
if ((objp->type == OBJ_PLAYER) && (objp->id == Player_num))
|
||||||
|
@ -969,7 +1015,7 @@ int object_create_egg(object *objp)
|
||||||
Objects[rval].ctype.powerup_info.count = MAX_OMEGA_CHARGE;
|
Objects[rval].ctype.powerup_info.count = MAX_OMEGA_CHARGE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
return rval;
|
return rval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1019,7 +1065,9 @@ static void explode_model(object *obj)
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i=1;i<Polygon_models[obj->rtype.pobj_info.model_num].n_models;i++)
|
for (i=1;i<Polygon_models[obj->rtype.pobj_info.model_num].n_models;i++)
|
||||||
|
#if defined(DXX_BUILD_DESCENT_II)
|
||||||
if (!(obj->type == OBJ_ROBOT && get_robot_id(obj) == 44 && i == 5)) //energy sucker energy part
|
if (!(obj->type == OBJ_ROBOT && get_robot_id(obj) == 44 && i == 5)) //energy sucker energy part
|
||||||
|
#endif
|
||||||
object_create_debris(obj,i);
|
object_create_debris(obj,i);
|
||||||
|
|
||||||
//make parent object only draw center part
|
//make parent object only draw center part
|
||||||
|
@ -1151,9 +1199,11 @@ void do_explosion_sequence(object *obj)
|
||||||
|
|
||||||
vclip_num = get_explosion_vclip(del_obj,1);
|
vclip_num = get_explosion_vclip(del_obj,1);
|
||||||
|
|
||||||
|
#if defined(DXX_BUILD_DESCENT_II)
|
||||||
if (del_obj->type == OBJ_ROBOT && Robot_info[del_obj->id].badass)
|
if (del_obj->type == OBJ_ROBOT && Robot_info[del_obj->id].badass)
|
||||||
expl_obj = object_create_badass_explosion( NULL, del_obj->segnum, spawn_pos, fixmul(del_obj->size, EXPLOSION_SCALE), vclip_num, F1_0*Robot_info[del_obj->id].badass, i2f(4)*Robot_info[del_obj->id].badass, i2f(35)*Robot_info[del_obj->id].badass, -1 );
|
expl_obj = object_create_badass_explosion( NULL, del_obj->segnum, spawn_pos, fixmul(del_obj->size, EXPLOSION_SCALE), vclip_num, F1_0*Robot_info[del_obj->id].badass, i2f(4)*Robot_info[del_obj->id].badass, i2f(35)*Robot_info[del_obj->id].badass, -1 );
|
||||||
else
|
else
|
||||||
|
#endif
|
||||||
expl_obj = object_create_explosion( del_obj->segnum, spawn_pos, fixmul(del_obj->size, EXPLOSION_SCALE), vclip_num );
|
expl_obj = object_create_explosion( del_obj->segnum, spawn_pos, fixmul(del_obj->size, EXPLOSION_SCALE), vclip_num );
|
||||||
|
|
||||||
if ((del_obj->contains_count > 0) && !(Game_mode & GM_MULTI)) { // Multiplayer handled outside of this code!!
|
if ((del_obj->contains_count > 0) && !(Game_mode & GM_MULTI)) { // Multiplayer handled outside of this code!!
|
||||||
|
@ -1172,12 +1222,14 @@ void do_explosion_sequence(object *obj)
|
||||||
object_create_egg(del_obj);
|
object_create_egg(del_obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if defined(DXX_BUILD_DESCENT_II)
|
||||||
if (robot_is_thief(robptr))
|
if (robot_is_thief(robptr))
|
||||||
drop_stolen_items(del_obj);
|
drop_stolen_items(del_obj);
|
||||||
|
|
||||||
if (robot_is_companion(robptr)) {
|
if (robot_is_companion(robptr)) {
|
||||||
DropBuddyMarker(del_obj);
|
DropBuddyMarker(del_obj);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
const robot_info *robptr = &Robot_info[get_robot_id(del_obj)];
|
const robot_info *robptr = &Robot_info[get_robot_id(del_obj)];
|
||||||
|
@ -1226,7 +1278,11 @@ void do_explosion_sequence(object *obj)
|
||||||
|
|
||||||
#define EXPL_WALL_TIME (f1_0)
|
#define EXPL_WALL_TIME (f1_0)
|
||||||
#define EXPL_WALL_TOTAL_FIREBALLS 32
|
#define EXPL_WALL_TOTAL_FIREBALLS 32
|
||||||
|
#if defined(DXX_BUILD_DESCENT_I)
|
||||||
|
#define EXPL_WALL_FIREBALL_SIZE 0x48000 //smallest size
|
||||||
|
#elif defined(DXX_BUILD_DESCENT_II)
|
||||||
#define EXPL_WALL_FIREBALL_SIZE (0x48000*6/10) //smallest size
|
#define EXPL_WALL_FIREBALL_SIZE (0x48000*6/10) //smallest size
|
||||||
|
#endif
|
||||||
|
|
||||||
expl_wall expl_wall_list[MAX_EXPLODING_WALLS];
|
expl_wall expl_wall_list[MAX_EXPLODING_WALLS];
|
||||||
|
|
||||||
|
@ -1359,7 +1415,7 @@ void do_exploding_wall_frame()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(DXX_BUILD_DESCENT_II)
|
||||||
//creates afterburner blobs behind the specified object
|
//creates afterburner blobs behind the specified object
|
||||||
void drop_afterburner_blobs(object *obj, int count, fix size_scale, fix lifetime)
|
void drop_afterburner_blobs(object *obj, int count, fix size_scale, fix lifetime)
|
||||||
{
|
{
|
||||||
|
@ -1411,4 +1467,4 @@ void expl_wall_read_n_swap(expl_wall *ew, int n, int swap, PHYSFS_file *fp)
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
expl_wall_swap(&ew[i], swap);
|
expl_wall_swap(&ew[i], swap);
|
||||||
}
|
}
|
||||||
|
#endif
|
Loading…
Reference in a new issue