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

Method applyWaterEffects

game/src/main/java/jake2/game/M.java:263–362  ·  view source on GitHub ↗

M_WorldEffects Apply water drowning, lava or slime effects

(SubgameEntity ent, GameExportsImpl gameExports)

Source from the content-addressed store, hash-verified

261 * Apply water drowning, lava or slime effects
262 */
263 static void applyWaterEffects(SubgameEntity ent, GameExportsImpl gameExports) {
264
265 if (ent.health > 0) {
266 int dmg;
267 if (0 == (ent.flags & GameDefines.FL_SWIM)) {
268 if (ent.waterlevel < 3) {
269 // refresh air
270 ent.air_finished = gameExports.level.time + 12;
271 } else if (ent.air_finished < gameExports.level.time) {
272 // drown!
273 if (ent.pain_debounce_time < gameExports.level.time) {
274 dmg = (int) (2f + 2f * Math.floor(gameExports.level.time
275 - ent.air_finished));
276 if (dmg > 15)
277 dmg = 15;
278 GameCombat.T_Damage(ent, gameExports.g_edicts[0],
279 gameExports.g_edicts[0], Globals.vec3_origin,
280 ent.s.origin, Globals.vec3_origin, dmg, 0,
281 DamageFlags.DAMAGE_NO_ARMOR, GameDefines.MOD_WATER, gameExports);
282 ent.pain_debounce_time = gameExports.level.time + 1;
283 }
284 }
285 } else {
286 if (ent.waterlevel > 0) {
287 ent.air_finished = gameExports.level.time + 9;
288 } else if (ent.air_finished < gameExports.level.time) {
289 // suffocate!
290 if (ent.pain_debounce_time < gameExports.level.time) {
291 dmg = (int) (2 + 2 * Math.floor(gameExports.level.time
292 - ent.air_finished));
293 if (dmg > 15)
294 dmg = 15;
295 GameCombat.T_Damage(ent, gameExports.g_edicts[0],
296 gameExports.g_edicts[0], Globals.vec3_origin,
297 ent.s.origin, Globals.vec3_origin, dmg, 0,
298 DamageFlags.DAMAGE_NO_ARMOR, GameDefines.MOD_WATER, gameExports);
299 ent.pain_debounce_time = gameExports.level.time + 1;
300 }
301 }
302 }
303 }
304
305 // get out of water
306 if (ent.waterlevel == 0) {
307 if ((ent.flags & GameDefines.FL_INWATER) != 0) {
308 gameExports.gameImports.sound(ent, Defines.CHAN_BODY, gameExports.gameImports
309 .soundindex("player/watr_out.wav"), 1,
310 Defines.ATTN_NORM, 0);
311 ent.flags &= ~GameDefines.FL_INWATER;
312 }
313 return;
314 }
315
316 if ((ent.watertype & Defines.CONTENTS_LAVA) != 0
317 && 0 == (ent.flags & GameDefines.FL_IMMUNE_LAVA)) {
318 if (ent.damage_debounce_time < gameExports.level.time) {
319 ent.damage_debounce_time = gameExports.level.time + 0.2f;
320 GameCombat.T_Damage(ent, gameExports.g_edicts[0],

Callers 1

thinkMethod · 0.95

Calls 3

T_DamageMethod · 0.95
soundMethod · 0.65
soundindexMethod · 0.65

Tested by

no test coverage detected