From c1eba16dfe8be967e18ccef34b417b4d50cc6270 Mon Sep 17 00:00:00 2001 From: Kestrellius <902X@comcast.net> Date: Wed, 11 Mar 2026 19:52:16 -0700 Subject: [PATCH 1/3] add input --- code/weapon/weapon.h | 1 + code/weapon/weapons.cpp | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/code/weapon/weapon.h b/code/weapon/weapon.h index 40b3cda929b..1e23bca5b7a 100644 --- a/code/weapon/weapon.h +++ b/code/weapon/weapon.h @@ -346,6 +346,7 @@ float weapon_get_lifetime_pct(const weapon& wp); float weapon_get_age(const weapon& wp); float weapon_get_viewing_angle(const weapon& wp); float weapon_get_apparent_size(const weapon& wp); +float weapon_get_target_dot(weapon* wp); float beam_get_warmup_lifetime_pct(const beam& wp); float beam_get_warmdown_lifetime_pct(const beam& wp); diff --git a/code/weapon/weapons.cpp b/code/weapon/weapons.cpp index ef2d2f344bf..f2ca4de8ea3 100644 --- a/code/weapon/weapons.cpp +++ b/code/weapon/weapons.cpp @@ -10283,4 +10283,23 @@ float weapon_get_apparent_size(const weapon& wp) { wep_objp->radius * 2.0f, g3_get_hfov(Eye_fov), gr_screen.max_w) / i2fl(gr_screen.max_w); +} + +float weapon_get_target_dot(weapon* wp) { + object* wep_objp = &Objects[wp->objnum]; + + vec3d target_pos; + + if((weapon_has_homing_object(wp)) && (wp->homing_object->type != 0)) + { + if (!IS_VEC_NULL(&wp->homing_pos)) { + target_pos = wp->homing_pos; + } + } else if(wp->target_num > -1) + { + target_pos = Objects[wp->target_num].pos; + } else { + return 0.f; + } + return vm_vec_dot(&wep_objp->pos, &target_pos); } \ No newline at end of file From 87976757486bdfdb7552dde482d8d5e84746cf7b Mon Sep 17 00:00:00 2001 From: Kestrellius <902X@comcast.net> Date: Wed, 11 Mar 2026 20:01:51 -0700 Subject: [PATCH 2/3] actually add input --- code/weapon/weapon.h | 5 +++-- code/weapon/weapons.cpp | 14 +++++++------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/code/weapon/weapon.h b/code/weapon/weapon.h index 1e23bca5b7a..fa5bb4ae376 100644 --- a/code/weapon/weapon.h +++ b/code/weapon/weapon.h @@ -346,7 +346,7 @@ float weapon_get_lifetime_pct(const weapon& wp); float weapon_get_age(const weapon& wp); float weapon_get_viewing_angle(const weapon& wp); float weapon_get_apparent_size(const weapon& wp); -float weapon_get_target_dot(weapon* wp); +float weapon_get_target_dot(const weapon& wp); float beam_get_warmup_lifetime_pct(const beam& wp); float beam_get_warmdown_lifetime_pct(const beam& wp); @@ -799,7 +799,8 @@ struct weapon_info >{}}, std::pair {"Parent Radius", modular_curves_submember_input<&weapon::objnum, &Objects, &object::parent, &Objects, &object::radius>{}}, std::pair {"Viewing Angle", modular_curves_functional_input{}}, - std::pair {"Apparent Size", modular_curves_functional_input{}} + std::pair {"Apparent Size", modular_curves_functional_input{}}, + std::pair {"Dot To Target", modular_curves_functional_input{}} ); public: diff --git a/code/weapon/weapons.cpp b/code/weapon/weapons.cpp index f2ca4de8ea3..7f9b9625553 100644 --- a/code/weapon/weapons.cpp +++ b/code/weapon/weapons.cpp @@ -10285,19 +10285,19 @@ float weapon_get_apparent_size(const weapon& wp) { gr_screen.max_w) / i2fl(gr_screen.max_w); } -float weapon_get_target_dot(weapon* wp) { - object* wep_objp = &Objects[wp->objnum]; +float weapon_get_target_dot(const weapon& wp) { + object* wep_objp = &Objects[wp.objnum]; vec3d target_pos; - if((weapon_has_homing_object(wp)) && (wp->homing_object->type != 0)) + if(wp.homing_object != &obj_used_list && (wp.homing_object->type != 0)) { - if (!IS_VEC_NULL(&wp->homing_pos)) { - target_pos = wp->homing_pos; + if (!IS_VEC_NULL(&wp.homing_pos)) { + target_pos = wp.homing_pos; } - } else if(wp->target_num > -1) + } else if(wp.target_num > -1) { - target_pos = Objects[wp->target_num].pos; + target_pos = Objects[wp.target_num].pos; } else { return 0.f; } From 4a3bedbb543d5c2bc4567e9b9481b036f181ee39 Mon Sep 17 00:00:00 2001 From: Kestrellius <902X@comcast.net> Date: Thu, 12 Mar 2026 16:44:54 -0700 Subject: [PATCH 3/3] bugfix --- code/weapon/weapons.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/weapon/weapons.cpp b/code/weapon/weapons.cpp index 7f9b9625553..95c0b77f607 100644 --- a/code/weapon/weapons.cpp +++ b/code/weapon/weapons.cpp @@ -10301,5 +10301,7 @@ float weapon_get_target_dot(const weapon& wp) { } else { return 0.f; } - return vm_vec_dot(&wep_objp->pos, &target_pos); + vec3d dir; + vm_vec_sub(&dir, &wep_objp->pos, &target_pos); + return vm_vec_dot(&dir, &wep_objp->orient.vec.fvec); } \ No newline at end of file