| 1756 | } |
| 1757 | } |
| 1758 | void MakeShockwave(object *explode_obj_ptr, int parent_handle) { |
| 1759 | if (explode_obj_ptr->impact_time > 0.0) { |
| 1760 | object *p = ObjGet(parent_handle); |
| 1761 | object *top_parent = p; |
| 1762 | int handle; |
| 1763 | ASSERT(explode_obj_ptr); |
| 1764 | while (p) { |
| 1765 | p = ObjGet(p->parent_handle); |
| 1766 | if (p) { |
| 1767 | top_parent = p; |
| 1768 | } |
| 1769 | } |
| 1770 | if (top_parent) { |
| 1771 | handle = top_parent->handle; |
| 1772 | } else { |
| 1773 | handle = OBJECT_HANDLE_NONE; |
| 1774 | } |
| 1775 | int objnum = ObjCreate(OBJ_SHOCKWAVE, 0, explode_obj_ptr->roomnum, &explode_obj_ptr->pos, NULL, handle); |
| 1776 | if (objnum >= 0) { |
| 1777 | Objects[objnum].control_type = CT_NONE; |
| 1778 | Objects[objnum].movement_type = MT_SHOCKWAVE; |
| 1779 | Objects[objnum].render_type = RT_NONE; |
| 1780 | Objects[objnum].lifeleft = explode_obj_ptr->impact_time; |
| 1781 | Objects[objnum].impact_size = explode_obj_ptr->impact_size; |
| 1782 | Objects[objnum].impact_force = explode_obj_ptr->impact_force; |
| 1783 | Objects[objnum].impact_player_damage = explode_obj_ptr->impact_player_damage; |
| 1784 | Objects[objnum].impact_generic_damage = explode_obj_ptr->impact_generic_damage; |
| 1785 | Objects[objnum].impact_time = explode_obj_ptr->impact_time; |
| 1786 | Objects[objnum].flags |= OF_USES_LIFELEFT; |
| 1787 | } |
| 1788 | } else { |
| 1789 | DoConcussiveForce(explode_obj_ptr, parent_handle); |
| 1790 | } |
| 1791 | } |
| 1792 | // object *object_create_explosion_sub(object *explode_obj_ptr, int16_t segnum, vms_vector * position, fix size, int |
| 1793 | // vclip_type, fix maxdamage, fix maxdistance, fix maxforce, int parent ) |
| 1794 | void DoConcussiveForce(object *explode_obj_ptr, int parent_handle, float player_scalar) { |
no test coverage detected