MCPcopy Create free account
hub / github.com/demoth/jake2 / CheckPowerArmor

Method CheckPowerArmor

game/src/main/java/jake2/game/GameCombat.java:154–229  ·  view source on GitHub ↗
(SubgameEntity ent, float[] point, float[] normal,
                                       int damage, int dflags, GameExportsImpl gameExports)

Source from the content-addressed store, hash-verified

152 }
153
154 private static int CheckPowerArmor(SubgameEntity ent, float[] point, float[] normal,
155 int damage, int dflags, GameExportsImpl gameExports) {
156 gclient_t client;
157 int save;
158 int power_armor_type;
159 int index = 0;
160 int damagePerCell;
161 int pa_te_type;
162 int power = 0;
163 int power_used;
164
165 if (damage == 0)
166 return 0;
167
168 client = ent.getClient();
169
170 if ((dflags & DamageFlags.DAMAGE_NO_ARMOR) != 0)
171 return 0;
172
173 if (client != null) {
174 power_armor_type = GameItems.PowerArmorType(ent, gameExports);
175 if (power_armor_type != GameDefines.POWER_ARMOR_NONE) {
176 index = GameItems.FindItem("Cells", gameExports).index;
177 power = client.pers.inventory[index];
178 }
179 } else if ((ent.svflags & Defines.SVF_MONSTER) != 0) {
180 power_armor_type = ent.monsterinfo.power_armor_type;
181 power = ent.monsterinfo.power_armor_power;
182 } else
183 return 0;
184
185 if (power_armor_type == GameDefines.POWER_ARMOR_NONE)
186 return 0;
187 if (power == 0)
188 return 0;
189
190 if (power_armor_type == GameDefines.POWER_ARMOR_SCREEN) {
191 float[] vec = { 0, 0, 0 };
192 float dot;
193 float[] forward = { 0, 0, 0 };
194
195 // only works if damage point is in front
196 Math3D.AngleVectors(ent.s.angles, forward, null, null);
197 Math3D.VectorSubtract(point, ent.s.origin, vec);
198 Math3D.VectorNormalize(vec);
199 dot = Math3D.DotProduct(vec, forward);
200 if (dot <= 0.3)
201 return 0;
202
203 damagePerCell = 1;
204 pa_te_type = Defines.TE_SCREEN_SPARKS;
205 damage = damage / 3;
206 } else {
207 damagePerCell = 2;
208 pa_te_type = Defines.TE_SHIELD_SPARKS;
209 damage = (2 * damage) / 3;
210 }
211

Callers 1

T_DamageMethod · 0.95

Calls 8

PowerArmorTypeMethod · 0.95
FindItemMethod · 0.95
AngleVectorsMethod · 0.95
VectorSubtractMethod · 0.95
VectorNormalizeMethod · 0.95
DotProductMethod · 0.95
SpawnDamageMethod · 0.95
getClientMethod · 0.45

Tested by

no test coverage detected