Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions code/ai/aiturret.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2061,9 +2061,9 @@ bool turret_fire_weapon(int weapon_num,
subsys_index = ship_get_subsys_index(turret);
Assert( subsys_index != -1 );
if(wip->wi_flags[Weapon::Info_Flags::Flak]){
send_flak_fired_packet( parent_objnum, subsys_index, weapon_objnum, flak_range, launch_curve_data.distance_to_target, launch_curve_data.target_radius );
send_flak_fired_packet( parent_objnum, subsys_index, weapon_objnum, flak_range, launch_curve_data.distance_to_target, launch_curve_data.target_radius, launch_curve_data.target_forward_speed );
} else {
send_turret_fired_packet( parent_objnum, subsys_index, weapon_objnum, launch_curve_data.distance_to_target, launch_curve_data.target_radius );
send_turret_fired_packet( parent_objnum, subsys_index, weapon_objnum, launch_curve_data.distance_to_target, launch_curve_data.target_radius, launch_curve_data.target_forward_speed );
}
}

Expand Down Expand Up @@ -2137,6 +2137,7 @@ void turret_swarm_fire_from_turret(turret_swarm_info *tsi)
tsi->turret->system_info->turret_num_firing_points,
0.f,
0.f,
0.f,
};

// create weapon and homing info
Expand Down Expand Up @@ -2188,7 +2189,7 @@ void turret_swarm_fire_from_turret(turret_swarm_info *tsi)

subsys_index = ship_get_subsys_index(tsi->turret);
Assert( subsys_index != -1 );
send_turret_fired_packet( tsi->parent_objnum, subsys_index, weapon_objnum, 0.f, 0.f);
send_turret_fired_packet( tsi->parent_objnum, subsys_index, weapon_objnum, 0.f, 0.f, 0.f);
}
}
}
Expand Down Expand Up @@ -2361,16 +2362,19 @@ void ai_turret_execute_behavior(const ship *shipp, ship_subsys *ss)
float turret_barrel_length = -1.0f;

float target_radius = 0.f;
float target_forward_speed = 0.f;

if (lep != nullptr) {
target_radius = lep->radius;
target_forward_speed = lep->phys_info.fspeed;
}

// grab the data for the launch curve inputs
auto launch_curve_data = WeaponLaunchCurveData {
ss->system_info->turret_num_firing_points,
base_dist_to_enemy,
target_radius,
target_forward_speed,
};

//WMC - go through all valid weapons. Fire spawns if there are any.
Expand Down
3 changes: 2 additions & 1 deletion code/network/multi.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,10 @@ class player;
// Version 60 - 3/27/2023 - Added generic lua data packet
// Version 61 - 4/17/2023 - Added compatibility for whackable asteroids (added force)
// Version 62 - 5/26/2025 - Added some modular curve input data to turret firing packets; 5/31/2025 - Added another input
// Version 63 - 8/4/2026 - Added target forward speed to turret and flak fired packets
// STANDALONE_ONLY
Comment thread
wookieejedi marked this conversation as resolved.

#define MULTI_FS_SERVER_VERSION 62
#define MULTI_FS_SERVER_VERSION 63
Comment thread
Goober5000 marked this conversation as resolved.

#define MULTI_FS_SERVER_COMPATIBLE_VERSION MULTI_FS_SERVER_VERSION

Expand Down
14 changes: 12 additions & 2 deletions code/network/multimsgs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3317,7 +3317,7 @@ void process_countermeasure_fired_packet( ubyte *data, header *hinfo )
}

// send a packet indicating that a turret has been fired
void send_turret_fired_packet( int ship_objnum, int subsys_index, int weapon_objnum, float dist_to_target, float target_radius )
void send_turret_fired_packet( int ship_objnum, int subsys_index, int weapon_objnum, float dist_to_target, float target_radius, float target_forward_speed )
{
int packet_size;
ushort pnet_signature;
Expand Down Expand Up @@ -3376,6 +3376,8 @@ void send_turret_fired_packet( int ship_objnum, int subsys_index, int weapon_obj
ADD_FLOAT(dist_to_target);

ADD_FLOAT(target_radius);

ADD_FLOAT(target_forward_speed);

multi_io_send_to_all(data, packet_size);

Expand All @@ -3398,6 +3400,7 @@ void process_turret_fired_packet( ubyte *data, header *hinfo )
float angle1, angle2;
float dist_to_target;
float target_radius;
float target_forward_speed;

// get the data for the turret fired packet
offset = HEADER_LENGTH;
Expand All @@ -3415,6 +3418,7 @@ void process_turret_fired_packet( ubyte *data, header *hinfo )
GET_FLOAT( angle2 );
GET_FLOAT( dist_to_target );
GET_FLOAT( target_radius );
GET_FLOAT( target_forward_speed );
PACKET_SET_SIZE(); // move our counter forward the number of bytes we have read

// if we don't have a valid weapon index then bail
Expand Down Expand Up @@ -3463,6 +3467,7 @@ void process_turret_fired_packet( ubyte *data, header *hinfo )
ssp->system_info->turret_num_firing_points,
dist_to_target,
target_radius,
target_forward_speed,
};

// create the weapon object
Expand Down Expand Up @@ -8633,7 +8638,7 @@ void process_weapon_detonate_packet(ubyte *data, header *hinfo)
}

// flak fired packet
void send_flak_fired_packet(int ship_objnum, int subsys_index, int weapon_objnum, float flak_range, float dist_to_target, float target_radius)
void send_flak_fired_packet(int ship_objnum, int subsys_index, int weapon_objnum, float flak_range, float dist_to_target, float target_radius, float target_forward_speed)
{
int packet_size;
ushort pnet_signature;
Expand Down Expand Up @@ -8685,6 +8690,8 @@ void send_flak_fired_packet(int ship_objnum, int subsys_index, int weapon_objnum
ADD_FLOAT( dist_to_target );

ADD_FLOAT( target_radius );

ADD_FLOAT( target_forward_speed );

multi_io_send_to_all(data, packet_size);

Expand All @@ -8706,6 +8713,7 @@ void process_flak_fired_packet(ubyte *data, header *hinfo)
float flak_range;
float dist_to_target;
float target_radius;
float target_forward_speed;

// get the data for the turret fired packet
offset = HEADER_LENGTH;
Expand All @@ -8718,6 +8726,7 @@ void process_flak_fired_packet(ubyte *data, header *hinfo)
GET_FLOAT( flak_range );
GET_FLOAT( dist_to_target );
GET_FLOAT( target_radius );
GET_FLOAT( target_forward_speed );
PACKET_SET_SIZE(); // move our counter forward the number of bytes we have read

// if we don't have a valid weapon index then bail
Expand Down Expand Up @@ -8765,6 +8774,7 @@ void process_flak_fired_packet(ubyte *data, header *hinfo)
ssp->system_info->turret_num_firing_points,
dist_to_target,
target_radius,
target_forward_speed,
};

// create the weapon object
Expand Down
4 changes: 2 additions & 2 deletions code/network/multimsgs.h
Original file line number Diff line number Diff line change
Expand Up @@ -528,11 +528,11 @@ void send_weapon_detonate_packet(object *objp);
void process_weapon_detonate_packet(ubyte *data, header *hinfo);

// turret fired packet
void send_turret_fired_packet( int objnum, int subsys_index, int weapon_objnum, float dist_to_target, float target_radius );
void send_turret_fired_packet( int objnum, int subsys_index, int weapon_objnum, float dist_to_target, float target_radius, float target_forward_speed );
void process_turret_fired_packet( ubyte *data, header *hinfo );

// flak fired packet
void send_flak_fired_packet(int ship_objnum, int subsys_index, int weapon_objnum, float flak_range, float dist_to_target, float target_radius );
void send_flak_fired_packet(int ship_objnum, int subsys_index, int weapon_objnum, float flak_range, float dist_to_target, float target_radius, float target_forward_speed );
void process_flak_fired_packet(ubyte *data, header *hinfo);

// player pain packet
Expand Down
1 change: 1 addition & 0 deletions code/scripting/api/objs/subsystem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -946,6 +946,7 @@ ADE_FUNC(fireWeapon, l_Subsystem, "[number TurretWeaponIndex = 1, number FlakRan
sso->ss->system_info->turret_num_firing_points,
0.f,
0.f,
0.f,
};

bool rtn = turret_fire_weapon(wnum, sso->ss, sso->objh.objnum, launch_curve_data, &gpos, &gvec, nullptr, flak_range);
Expand Down
6 changes: 6 additions & 0 deletions code/ship/ship.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12961,15 +12961,18 @@ int ship_fire_primary(object * obj, int force, bool rollback_shot)

int num_slots = pm->gun_banks[bank_to_fire].num_slots;
float target_radius = 0.f;
float target_forward_speed = 0.f;

if (aip->target_objnum >= 0) {
target_radius = Objects[aip->target_objnum].radius;
target_forward_speed = Objects[aip->target_objnum].phys_info.fspeed;
}

auto launch_curve_data = WeaponLaunchCurveData {
num_slots,
dist_to_target,
target_radius,
target_forward_speed,
};

// do timestamp stuff for next firing time
Expand Down Expand Up @@ -14257,15 +14260,18 @@ int ship_fire_secondary( object *obj, int allow_swarm, bool rollback_shot )

num_slots = pm->missile_banks[bank].num_slots;
float target_radius = 0.f;
float target_forward_speed = 0.f;

if (tinfo.objnum >= 0) {
target_radius = Objects[tinfo.objnum].radius;
target_forward_speed = Objects[tinfo.objnum].phys_info.fspeed;
}

auto launch_curve_data = WeaponLaunchCurveData {
num_slots,
dist_to_target,
target_radius,
target_forward_speed,
};

// determine if there is enough ammo left to fire weapons on this bank. As with primary
Expand Down
5 changes: 4 additions & 1 deletion code/weapon/weapon.h
Original file line number Diff line number Diff line change
Expand Up @@ -370,6 +370,7 @@ struct WeaponLaunchCurveData {
int num_firepoints;
float distance_to_target;
float target_radius;
float target_forward_speed;
};

struct weapon_info;
Expand Down Expand Up @@ -748,7 +749,8 @@ struct weapon_info
},
std::pair {"Num Firepoints", modular_curves_submember_input<&WeaponLaunchCurveData::num_firepoints>{}},
std::pair {"Distance to Target", modular_curves_submember_input<&WeaponLaunchCurveData::distance_to_target>{}},
std::pair {"Target Radius", modular_curves_submember_input<&WeaponLaunchCurveData::target_radius>{}}
std::pair {"Target Radius", modular_curves_submember_input<&WeaponLaunchCurveData::target_radius>{}},
std::pair {"Target Forward Speed", modular_curves_submember_input<&WeaponLaunchCurveData::target_forward_speed>{}}
);

public:
Expand Down Expand Up @@ -1033,6 +1035,7 @@ int weapon_create( const vec3d *pos,
const WeaponLaunchCurveData& launch_curve_data = WeaponLaunchCurveData {
0,
0.f,
0.f,
0.f
});
void weapon_set_tracking_info(int weapon_objnum, int parent_objnum, int target_objnum, int target_is_locked = 0, ship_subsys *target_subsys = NULL);
Expand Down
Loading