dropz - really put dropped object at its destination... */
| 804 | |
| 805 | /* dropz - really put dropped object at its destination... */ |
| 806 | void |
| 807 | dropz(struct obj *obj, boolean with_impact) |
| 808 | { |
| 809 | if (obj == uwep) |
| 810 | setuwep((struct obj *) 0); |
| 811 | if (obj == uquiver) |
| 812 | setuqwep((struct obj *) 0); |
| 813 | if (obj == uswapwep) |
| 814 | setuswapwep((struct obj *) 0); |
| 815 | |
| 816 | if (u.uswallow) { |
| 817 | /* hero has dropped an item while inside an engulfer */ |
| 818 | if (obj != uball) { /* mon doesn't pick up ball */ |
| 819 | /* moving shop item into engulfer's inventory treated as theft */ |
| 820 | if (is_unpaid(obj)) |
| 821 | (void) stolen_value(obj, u.ux, u.uy, TRUE, FALSE); |
| 822 | /* add to engulfer's inventory if not immediately eaten */ |
| 823 | if (!engulfer_digests_food(obj)) |
| 824 | (void) mpickobj(u.ustuck, obj); |
| 825 | } |
| 826 | } else { |
| 827 | if (flooreffects(obj, u.ux, u.uy, "drop")) |
| 828 | return; |
| 829 | place_object(obj, u.ux, u.uy); |
| 830 | if (with_impact) |
| 831 | container_impact_dmg(obj, u.ux, u.uy); |
| 832 | impact_disturbs_zombies(obj, with_impact); |
| 833 | if (obj == uball) |
| 834 | drop_ball(u.ux, u.uy); |
| 835 | else if (svl.level.flags.has_shop) |
| 836 | sellobj(obj, u.ux, u.uy); |
| 837 | stackobj(obj); |
| 838 | if (Blind && Levitation) |
| 839 | map_object(obj, 0); |
| 840 | newsym(u.ux, u.uy); /* remap location under self */ |
| 841 | } |
| 842 | encumber_msg(); |
| 843 | } |
| 844 | |
| 845 | /* when swallowed, move dropped object from OBJ_FREE to u.ustuck's inventory; |
| 846 | for purple worm, immediately eat any corpse, glob, or special meat item |
no test coverage detected