+}
+
+void Remove_GrapplingHook()
+{
+ sound (self, CHAN_PROJECTILE, "misc/null.wav", VOL_BASE, ATTN_NORM);
+}
+
+void Ent_ReadHook(float bIsNew, float type)
+{
+ self.HookType = type;
+
+ float sf;
+ sf = ReadByte();
+
+ self.HookSilent = (sf & 0x80);
+ self.iflags = IFLAG_VELOCITY;
+
+ InterpolateOrigin_Undo();
+
+ if(sf & 1)
+ {
+ self.owner = playerslots[ReadByte() - 1];
+ }
+ if(sf & 2)
+ {
+ self.origin_x = ReadCoord();
+ self.origin_y = ReadCoord();
+ self.origin_z = ReadCoord();
+ setorigin(self, self.origin);
+ }
+ if(sf & 4)
+ {
+ self.velocity_x = ReadCoord();
+ self.velocity_y = ReadCoord();
+ self.velocity_z = ReadCoord();
+ }
+
+ InterpolateOrigin_Note();
+
+ if(bIsNew)