View Issue Details

IDProjectCategoryView StatusLast Update
0002804FSSCPbeamspublic2014-09-27 02:20
ReporterSpoon Assigned Toniffiwan  
PriorityhighSeverityfeatureReproducibilityalways
Status resolvedResolutionfixed 
Product Version3.6.19 
Summary0002804: Beam damage is unaffected by Armor/Shield/Subsystem factor
DescriptionAs it says on the tin, a (player ship fighter, I haven't actually confirmed if this is also the case for turreted weapons, but I *assume* it is.) beam weapon will always deal its full 1x damage to anything it hits. It completely ignores any of the $Armor Factor and such.

I'd love it if beams would be affected by the Factors so we can get a bit more creative with beams. And to avoid breaking any backwards compatibility or whatnot, make it a game_settings.tbl flag.
TagsNo tags attached.

Activities

Woolie Wool

2013-03-07 01:04

reporter   ~0014755

Last edited: 2013-03-07 01:11

Fighter beams do not appear to respect difficulty level scaling either (despite the fix of 2788).

EDIT: Subsystem damage appears to scale with difficulty, but not hull damage.

niffiwan

2014-08-25 10:49

developer  

mantis2804.patch (4,104 bytes)   
commit b509a5b4ca5cbad1c2b0dfe23da2871ff69f2501
Author: niffiwan <niffiwan.scp@gmail.com>
Date:   Mon Aug 25 19:56:00 2014 +1000

    Fix mantis 2804: beams can now use factors
    
    Add game_setting.tbl option that allows beams to use tabled
    Armor/Shield/Subsystem factor values
    Contains extra debug code that'll be removed before its added to trunk

diff --git a/code/mod_table/mod_table.cpp b/code/mod_table/mod_table.cpp
index e45f4bb..f9a4530 100644
--- a/code/mod_table/mod_table.cpp
+++ b/code/mod_table/mod_table.cpp
@@ -31,6 +31,7 @@ int FS2NetD_port = 0;
 float Briefing_window_FOV = 0.29375f;
 bool Disable_hc_message_ani = false;
 bool Red_alert_applies_to_delayed_ships = false;
+bool Beams_use_armour_shield_subsys_factors = false;
 
 
 void parse_mod_table(const char *filename)
@@ -259,6 +260,15 @@ void parse_mod_table(const char *filename)
 			mprintf(("Game Settings Table: Flight controls follow eyepoint orientation\n"));
 	}
 
+	if (optional_string("$Beams Use Armor/Shield/Subsystem Factors:")) {
+		stuff_boolean(&Beams_use_armour_shield_subsys_factors);
+		if (Beams_use_armour_shield_subsys_factors) {
+			mprintf(("Game Settings Table: Beams will use Armor/Shield/Subsystem Factors\n"));
+		} else {
+			mprintf(("Game Settings Table: Beams will ignore Armor/Shield/Subsystem Factors (retail behavior)\n"));
+		}
+	}
+
 	required_string("#END");
 }
 
diff --git a/code/mod_table/mod_table.h b/code/mod_table/mod_table.h
index 129d09e..8f82725 100644
--- a/code/mod_table/mod_table.h
+++ b/code/mod_table/mod_table.h
@@ -26,5 +26,6 @@ extern int FS2NetD_port;
 extern float Briefing_window_FOV;
 extern bool Disable_hc_message_ani;
 extern bool Red_alert_applies_to_delayed_ships;
+extern bool Beams_use_armour_shield_subsys_factors;
 
 void mod_table_init();
diff --git a/code/ship/shiphit.cpp b/code/ship/shiphit.cpp
index 0a5438c..19cf8c1 100644
--- a/code/ship/shiphit.cpp
+++ b/code/ship/shiphit.cpp
@@ -327,6 +327,11 @@ int shiphit_get_damage_weapon(object *damaging_objp)
 		case OBJ_SHOCKWAVE:
 			weapon_info_index = shockwave_get_weapon_index(damaging_objp->instance);
 			break;
+		case OBJ_BEAM:
+			if (Beams_use_armour_shield_subsys_factors) {
+				weapon_info_index = beam_get_weapon_info_index(damaging_objp);
+			}
+			break;
 		default:
 			weapon_info_index = -1;
 			break;
@@ -486,7 +491,8 @@ float do_subobj_hit_stuff(object *ship_objp, object *other_obj, vec3d *hitpos, i
 
 	// scale subsystem damage if appropriate
 	weapon_info_index = shiphit_get_damage_weapon(other_obj);	// Goober5000 - a NULL other_obj returns -1
-	if ((weapon_info_index >= 0) && (other_obj->type == OBJ_WEAPON)) {
+	if ((weapon_info_index >= 0) && ((other_obj->type == OBJ_WEAPON) ||
+				(Beams_use_armour_shield_subsys_factors && (other_obj->type == OBJ_BEAM)))) {
 		if ( Weapon_info[weapon_info_index].wi_flags2 & WIF2_TRAINING ) {
 			return damage_left;
 		}
@@ -729,6 +735,7 @@ float do_subobj_hit_stuff(object *ship_objp, object *other_obj, vec3d *hitpos, i
 			}
 
 			subsystem->current_hits -= damage_to_apply;
+			nprintf(("Damage", "Damage Subsys: %.1f, %s\n", damage_to_apply, ship_p->ship_name));
 			if (!(subsystem->flags & SSF_NO_AGGREGATE)) {
 				ship_p->subsys_info[subsystem->system_info->type].aggregate_current_hits -= damage_to_apply;
 			}
@@ -2097,8 +2104,12 @@ static void ship_do_damage(object *ship_objp, object *other_obj, vec3d *hitpos,
 				damage *= difficulty_scale_factor;
 			}
 
+			nprintf(("Damage", "Damage Shield: %.1f", damage)); // damage applied to shield
+
 			damage = apply_damage_to_shield(ship_objp, quadrant, damage);
 
+			nprintf(("Damage", " (%.1f), %s\n", damage, shipp->ship_name)); // damage leftover for hull, etc
+
 			if(damage > 0.0f){
 				subsystem_damage *= (damage / pre_shield);
 			} else {
@@ -2200,6 +2211,7 @@ static void ship_do_damage(object *ship_objp, object *other_obj, vec3d *hitpos,
 					}
 				}
 				ship_objp->hull_strength -= damage;
+				nprintf(("Damage", "Damage Hull  : %.1f, %s\n", damage, shipp->ship_name));
 			}
 
 			// let damage gauge know that player ship just took damage
mantis2804.patch (4,104 bytes)   

niffiwan

2014-08-25 10:49

developer  

mantis2804-mod.7z (729,844 bytes)

niffiwan

2014-08-25 10:57

developer   ~0016256

Last edited: 2014-08-25 22:52

I've created a patch, see attached and on github:
https://github.com/niffiwan/fs2open.github.com/commit/b509a5b4ca5cbad1c2b0dfe23da2871ff69f2501#diff-d41d8cd98f00b204e9800998ecf8427e

This adds a new game_settings.tbl option:
$Beams Use Armor/Shield/Subsystem Factors:
(let me know if you have any betters suggestions for the name).

I've also attached a small mod that I was using to test the changes. This should test all three types of weapon factors on "normal" beams and fighter beams. Normal beams are weak vs their target (i.e. see the relevant cruisers name) and the fighter beams are stronger vs one factor (the opposite of the normal beams). Using beams vs the friendlies should test difficulty level scaling.

The code also has a new debug_filter.cfg option: +Damage to more easily let you see exactly what damage a given ship is taking.

Unfortunately my Windows laptop is refusing to build execs at the moment :( I'm hoping I can build & post them tomorrow with a different machine.

edit:
Execs are ready for testing:
http://www.mediafire.com/download/c5a5okfcf8g8end/mantis2804-execs.7z

Spoon

2014-08-26 00:38

reporter   ~0016258

Super neat, Niffiwan! I'll make some time to test this good and proper some time during this week and then cast feedback like a protoss high templar.

niffiwan

2014-08-29 02:17

developer   ~0016263

Niffi is a derp :(

Here are some *real* execs for testing with (not redundant trunk execs...)

http://www.mediafire.com/download/70pjspa9q9hgbro/mantis2804_execs_mk2.7z

As per the suggestion, I will also change (before committing) the game_settings.tbl flag to be:
$Beams Use Damage Factors:

Spoon

2014-09-07 22:26

reporter   ~0016272

Okay so I have tested this quite a bit now and haven't spotted any errors, bugs or other nasty bits. As far as I can see, this new flag works greato for both player and capship mounted beams~

niffiwan

2014-09-11 10:17

developer  

mantis2804-2.patch (2,406 bytes)   
diff --git a/code/mod_table/mod_table.cpp b/code/mod_table/mod_table.cpp
index e45f4bb..391068a 100644
--- a/code/mod_table/mod_table.cpp
+++ b/code/mod_table/mod_table.cpp
@@ -31,6 +31,7 @@ int FS2NetD_port = 0;
 float Briefing_window_FOV = 0.29375f;
 bool Disable_hc_message_ani = false;
 bool Red_alert_applies_to_delayed_ships = false;
+bool Beams_use_damage_factors = false;
 
 
 void parse_mod_table(const char *filename)
@@ -259,6 +260,15 @@ void parse_mod_table(const char *filename)
 			mprintf(("Game Settings Table: Flight controls follow eyepoint orientation\n"));
 	}
 
+	if (optional_string("$Beams Use Damage Factors:")) {
+		stuff_boolean(&Beams_use_damage_factors);
+		if (Beams_use_damage_factors) {
+			mprintf(("Game Settings Table: Beams will use Damage Factors\n"));
+		} else {
+			mprintf(("Game Settings Table: Beams will ignore Damage Factors (retail behavior)\n"));
+		}
+	}
+
 	required_string("#END");
 }
 
diff --git a/code/mod_table/mod_table.h b/code/mod_table/mod_table.h
index 129d09e..f394813 100644
--- a/code/mod_table/mod_table.h
+++ b/code/mod_table/mod_table.h
@@ -26,5 +26,6 @@ extern int FS2NetD_port;
 extern float Briefing_window_FOV;
 extern bool Disable_hc_message_ani;
 extern bool Red_alert_applies_to_delayed_ships;
+extern bool Beams_use_damage_factors;
 
 void mod_table_init();
diff --git a/code/ship/shiphit.cpp b/code/ship/shiphit.cpp
index 0a5438c..6e6a9bf 100644
--- a/code/ship/shiphit.cpp
+++ b/code/ship/shiphit.cpp
@@ -327,6 +327,11 @@ int shiphit_get_damage_weapon(object *damaging_objp)
 		case OBJ_SHOCKWAVE:
 			weapon_info_index = shockwave_get_weapon_index(damaging_objp->instance);
 			break;
+		case OBJ_BEAM:
+			if (Beams_use_damage_factors) {
+				weapon_info_index = beam_get_weapon_info_index(damaging_objp);
+			}
+			break;
 		default:
 			weapon_info_index = -1;
 			break;
@@ -486,7 +491,8 @@ float do_subobj_hit_stuff(object *ship_objp, object *other_obj, vec3d *hitpos, i
 
 	// scale subsystem damage if appropriate
 	weapon_info_index = shiphit_get_damage_weapon(other_obj);	// Goober5000 - a NULL other_obj returns -1
-	if ((weapon_info_index >= 0) && (other_obj->type == OBJ_WEAPON)) {
+	if ((weapon_info_index >= 0) && ((other_obj->type == OBJ_WEAPON) ||
+				(Beams_use_damage_factors && (other_obj->type == OBJ_BEAM)))) {
 		if ( Weapon_info[weapon_info_index].wi_flags2 & WIF2_TRAINING ) {
 			return damage_left;
 		}
mantis2804-2.patch (2,406 bytes)   

niffiwan

2014-09-11 10:23

developer   ~0016275

New patch uploaded with the option name changed to "$Beams Use Damage Factors:". I also removed the nprintf statements, I'll add them in separately when I've spruced them up a bit.

The patch itself is quite simple, I suppose the most important thing to review would be to ensure I didn't miss any places where the factors should apply.

niffiwan

2014-09-27 02:20

developer   ~0016304

Fix committed to trunk@11089.

Related Changesets

fs2open: trunk r11089

2014-09-26 22:56

niffiwan


Ported: N/A

Details Diff
Fix mantis 2804: beams can use damage factors

Add game_setting.tbl option that allows beams to use weapons table
Armor/Shield/Subsystem damage factors
Affected Issues
0002804
mod - /trunk/fs2_open/code/ship/shiphit.cpp Diff File
mod - /trunk/fs2_open/code/mod_table/mod_table.cpp Diff File
mod - /trunk/fs2_open/code/mod_table/mod_table.h Diff File

Issue History

Date Modified Username Field Change
2013-03-06 02:10 Spoon New Issue
2013-03-07 01:04 Woolie Wool Note Added: 0014755
2013-03-07 01:11 Woolie Wool Note Edited: 0014755
2014-08-23 23:02 niffiwan Assigned To => niffiwan
2014-08-23 23:02 niffiwan Status new => assigned
2014-08-25 10:49 niffiwan File Added: mantis2804.patch
2014-08-25 10:49 niffiwan File Added: mantis2804-mod.7z
2014-08-25 10:57 niffiwan Note Added: 0016256
2014-08-25 10:57 niffiwan Note Edited: 0016256
2014-08-25 22:52 niffiwan Note Edited: 0016256
2014-08-25 22:52 niffiwan Status assigned => feedback
2014-08-26 00:38 Spoon Note Added: 0016258
2014-08-26 00:38 Spoon Status feedback => assigned
2014-08-29 02:17 niffiwan Note Added: 0016263
2014-09-07 22:26 Spoon Note Added: 0016272
2014-09-11 10:17 niffiwan File Added: mantis2804-2.patch
2014-09-11 10:23 niffiwan Note Added: 0016275
2014-09-11 10:23 niffiwan Status assigned => code review
2014-09-27 02:20 niffiwan Changeset attached => fs2open trunk r11089
2014-09-27 02:20 niffiwan Note Added: 0016304
2014-09-27 02:20 niffiwan Status code review => resolved
2014-09-27 02:20 niffiwan Resolution open => fixed