diff --git a/ewext/src/modules/entity_sync.rs b/ewext/src/modules/entity_sync.rs index 2f4063bf..2d6379af 100644 --- a/ewext/src/modules/entity_sync.rs +++ b/ewext/src/modules/entity_sync.rs @@ -430,6 +430,7 @@ impl Module for EntitySync { } if ctx.sync_rate == 1 || frame_num % ctx.sync_rate == 0 { + let (diff, dead) = self.local_diff_model.make_diff(ctx); self.local_diff_model .update_tracked_entities(ctx) .wrap_err("Failed to update locally tracked entities")?; @@ -437,7 +438,6 @@ impl Module for EntitySync { //game_print("Got new interested"); self.local_diff_model.reset_diff_encoding(); } - let (diff, dead) = self.local_diff_model.make_diff(ctx); // FIXME (perf): allow a Destination that can send to several peers at once, to prevent cloning and stuff. for peer in self.interest_tracker.iter_interested() { send_remotedes( diff --git a/ewext/src/modules/entity_sync/diff_model.rs b/ewext/src/modules/entity_sync/diff_model.rs index 7e138359..a201d4ea 100644 --- a/ewext/src/modules/entity_sync/diff_model.rs +++ b/ewext/src/modules/entity_sync/diff_model.rs @@ -1269,6 +1269,23 @@ impl RemoteDiffModel { None, None, )?; + } else { + if current_hp < 0.0 { + damage.set_hp(f32::MIN_POSITIVE as f64)?; + } + noita_api::raw::entity_inflict_damage( + entity.raw() as i32, + (current_hp - entity_info.hp) as f64, + "DAMAGE_HEALING".into(), //TODO should be enum + "hp sync".into(), + "NONE".into(), + 0.0, + 0.0, + None, + None, + None, + None, + )?; } }