Skip to content

Commit

Permalink
Merge branch 'master' into feature/weaponsDialog
Browse files Browse the repository at this point in the history
  • Loading branch information
TheForce172 authored Jun 21, 2024
2 parents 144822c + 3d285f2 commit d86bee5
Show file tree
Hide file tree
Showing 190 changed files with 4,923 additions and 2,835 deletions.
2 changes: 1 addition & 1 deletion ci/post/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
Mako==1.2.2
requests==2.31.0
requests==2.32.0
semantic-version==2.8.5
2 changes: 1 addition & 1 deletion code/actions/types/MoveToSubmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ ActionResult MoveToSubmodel::execute(ProgramLocals& locals) const
// The calling code should ensure that this never happens
Assertion(locals.hostSubobject >= 0, "Did not have a valid host subobject.");

auto instance = object_get_model_instance(locals.host.objp);
auto instance = object_get_model_instance(locals.host.objp());
Assertion(instance != -1, "Model instances are required if a host subobject is specified.");

auto pmi = model_get_instance(instance);
Expand Down
4 changes: 2 additions & 2 deletions code/actions/types/ParticleEffectAction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ ActionResult ParticleEffectAction::execute(ProgramLocals& locals) const
vec3d local_pos;
matrix local_orient;
if (locals.hostSubobject != -1) {
auto instance = object_get_model_instance(locals.host.objp);
auto instance = object_get_model_instance(locals.host.objp());
Assertion(instance != -1, "Model instances are required if a host subobject is specified.");

auto pmi = model_get_instance(instance);
Expand All @@ -59,7 +59,7 @@ ActionResult ParticleEffectAction::execute(ProgramLocals& locals) const

auto direction = locals.variables.getValue({"locals", "direction"}).getVector();

source.moveToObject(locals.host.objp, &local_pos);
source.moveToObject(locals.host.objp(), &local_pos);
source.setOrientationFromNormalizedVec(&direction, true);

source.finish();
Expand Down
6 changes: 3 additions & 3 deletions code/actions/types/PlaySoundAction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ ActionResult PlaySoundAction::execute(ProgramLocals& locals) const
vec3d local_pos;
matrix local_orient;
if (locals.hostSubobject != -1) {
auto instance = object_get_model_instance(locals.host.objp);
auto instance = object_get_model_instance(locals.host.objp());
Assertion(instance != -1, "Model instances are required if a host subobject is specified.");

auto pmi = model_get_instance(instance);
Expand All @@ -47,8 +47,8 @@ ActionResult PlaySoundAction::execute(ProgramLocals& locals) const
local_pos += locals.variables.getValue({"locals", "position"}).getVector();

vec3d global_pos;
vm_vec_unrotate(&global_pos, &local_pos, &locals.host.objp->orient);
global_pos += locals.host.objp->pos;
vm_vec_unrotate(&global_pos, &local_pos, &locals.host.objp()->orient);
global_pos += locals.host.objp()->pos;

const auto soundId = gamesnd_get_by_name(m_soundIdExpression.execute(locals.variables).c_str());

Expand Down
2 changes: 1 addition & 1 deletion code/ai/ai.h
Original file line number Diff line number Diff line change
Expand Up @@ -635,6 +635,6 @@ void do_random_sidethrust(ai_info *aip, ship_info *sip);
void ai_formation_object_recalculate_slotnums(int form_objnum, int exiting_objnum = -1);


bool test_line_of_sight(vec3d* from, vec3d* to, std::unordered_set<const object*>&& excluded_objects = {}, float threshold = 10.0f, bool test_for_shields = false, bool test_for_hull = true, float* first_intersect_dist = nullptr, object** first_intersect_obj = nullptr);
bool test_line_of_sight(vec3d* from, vec3d* to, std::unordered_set<int>&& excluded_object_ids = {}, float threshold = 10.0f, bool test_for_shields = false, bool test_for_hull = true, float* first_intersect_dist = nullptr, object** first_intersect_obj = nullptr);

#endif
1 change: 1 addition & 0 deletions code/ai/ai_profiles.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -836,5 +836,6 @@ void ai_profile_t::reset()
}
if (mod_supports_version(24, 2, 0)) {
flags.set(AI::Profile_Flags::Debris_respects_big_damage);
flags.set(AI::Profile_Flags::Force_beam_turret_fov);
}
}
8 changes: 4 additions & 4 deletions code/ai/aicode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6703,7 +6703,7 @@ bool check_los(int objnum, int target_objnum, float threshold, int primary_bank,
vec3d end = Objects[target_objnum].pos;

//Don't collision check against ourselves or our target
return test_line_of_sight(&start, &end, {&Objects[objnum], &Objects[target_objnum]}, threshold);
return test_line_of_sight(&start, &end, {objnum, target_objnum}, threshold);
}

// --------------------------------------------------------------------------
Expand Down Expand Up @@ -16698,15 +16698,15 @@ void maybe_cheat_fire_synaptic(object *objp)
}
}

bool test_line_of_sight(vec3d* from, vec3d* to, std::unordered_set<const object*>&& excluded_objects, float threshold, bool test_for_shields, bool test_for_hull, float* first_intersect_dist, object** first_intersect_obj) {
bool test_line_of_sight(vec3d* from, vec3d* to, std::unordered_set<int>&& excluded_object_ids, float threshold, bool test_for_shields, bool test_for_hull, float* first_intersect_dist, object** first_intersect_obj) {
bool collides = false;

for (object* objp = GET_FIRST(&obj_used_list); objp != END_OF_LIST(&obj_used_list); objp = GET_NEXT(objp)) {
if (objp->flags[Object::Object_Flags::Should_be_dead])
continue;

//Don't collision check against excluded objects
if (excluded_objects.count(objp) > 0)
if (excluded_object_ids.count(OBJ_INDEX(objp)) > 0)
continue;

int model_num = 0;
Expand All @@ -16719,7 +16719,7 @@ bool test_line_of_sight(vec3d* from, vec3d* to, std::unordered_set<const object*
model_instance_num = -1;
}
else if (type == OBJ_ASTEROID) {
model_num = Asteroid_info[Asteroids[objp->instance].asteroid_type].model_num[Asteroids[objp->instance].asteroid_subtype];
model_num = Asteroid_info[Asteroids[objp->instance].asteroid_type].subtypes[Asteroids[objp->instance].asteroid_subtype].model_number;
model_instance_num = Asteroids[objp->instance].model_instance_num;
}
else if (type == OBJ_SHIP) {
Expand Down
78 changes: 40 additions & 38 deletions code/ai/aiturret.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ bool object_in_turret_fov(const object *objp, const ship_subsys *ss, const vec3d
model_num = Ship_info[Ships[objp->instance].ship_info_index].model_num;
break;
case OBJ_ASTEROID:
model_num = Asteroid_info[Asteroids[objp->instance].asteroid_type].model_num[Asteroids[objp->instance].asteroid_subtype];
model_num = Asteroid_info[Asteroids[objp->instance].asteroid_type].subtypes[Asteroids[objp->instance].asteroid_subtype].model_number;
break;
default:
vm_vec_normalized_dir(&v2e, &objp->pos, tpos);
Expand Down Expand Up @@ -1781,45 +1781,47 @@ bool turret_fire_weapon(int weapon_num, ship_subsys *turret, int parent_objnum,
if (!(turret->weapons.flags[Ship::Weapon_Flags::Beam_Free])) {
return false;
}
beam_fire_info fire_info;

// stuff beam firing info
memset(&fire_info, 0, sizeof(beam_fire_info));
fire_info.accuracy = 1.0f;
fire_info.beam_info_index = turret_weapon_class;
fire_info.beam_info_override = nullptr;
fire_info.shooter = &Objects[parent_objnum];
fire_info.target = turret_enemy_objp;
if (wip->wi_flags[Weapon::Info_Flags::Antisubsysbeam])
fire_info.target_subsys = turret->targeted_subsys;
else
fire_info.target_subsys = nullptr;
fire_info.turret = turret;
fire_info.burst_seed = old_burst_seed;
fire_info.fire_method = BFM_TURRET_FIRED;
fire_info.per_burst_rotation = swp->per_burst_rot;
fire_info.burst_index = old_burst_counter;

// fire a beam weapon
weapon_objnum = beam_fire(&fire_info);

if (weapon_objnum != -1) {
objp = &Objects[weapon_objnum];

parent_ship->last_fired_turret = turret;
turret->last_fired_weapon_info_index = turret_weapon_class;
turret->turret_last_fired = _timestamp();

if (scripting::hooks::OnTurretFired->isActive()) {
scripting::hooks::OnTurretFired->run(scripting::hooks::WeaponUsedConditions{ parent_ship , turret_enemy_objp, SCP_vector<int>{ turret_weapon_class }, true },
scripting::hook_param_list(
scripting::hook_param("Ship", 'o', &Objects[parent_objnum]),
scripting::hook_param("Beam", 'o', objp),
scripting::hook_param("Target", 'o', turret_enemy_objp)
));

for (int i = 0; i < wip->shots; i++) {
beam_fire_info fire_info;

// stuff beam firing info
memset(&fire_info, 0, sizeof(beam_fire_info));
fire_info.accuracy = 1.0f;
fire_info.beam_info_index = turret_weapon_class;
fire_info.beam_info_override = nullptr;
fire_info.shooter = &Objects[parent_objnum];
fire_info.target = turret_enemy_objp;
if (wip->wi_flags[Weapon::Info_Flags::Antisubsysbeam])
fire_info.target_subsys = turret->targeted_subsys;
else
fire_info.target_subsys = nullptr;
fire_info.turret = turret;
fire_info.burst_seed = old_burst_seed;
fire_info.fire_method = BFM_TURRET_FIRED;
fire_info.per_burst_rotation = swp->per_burst_rot;
fire_info.burst_index = (old_burst_counter * wip->shots) + i;

// fire a beam weapon
weapon_objnum = beam_fire(&fire_info);

if (weapon_objnum != -1) {
objp = &Objects[weapon_objnum];

parent_ship->last_fired_turret = turret;
turret->last_fired_weapon_info_index = turret_weapon_class;
turret->turret_last_fired = _timestamp();

if (scripting::hooks::OnTurretFired->isActive()) {
scripting::hooks::OnTurretFired->run(scripting::hooks::WeaponUsedConditions{ parent_ship , turret_enemy_objp, SCP_vector<int>{ turret_weapon_class }, true },
scripting::hook_param_list(
scripting::hook_param("Ship", 'o', &Objects[parent_objnum]),
scripting::hook_param("Beam", 'o', objp),
scripting::hook_param("Target", 'o', turret_enemy_objp)
));
}
}
}

turret->flags.set(Ship::Subsystem_Flags::Has_fired); //set fired flag for scripting -nike
return true;
}
Expand Down
Loading

0 comments on commit d86bee5

Please sign in to comment.