--- deliantra/server/common/object.C 2008/05/06 21:04:37 1.237 +++ deliantra/server/common/object.C 2008/05/07 13:40:30 1.240 @@ -906,7 +906,7 @@ if (!drop_to_ground || !map || map->in_memory != MAP_ACTIVE - || map->nodrop + || map->no_drop || ms ().move_block == MOVE_ALL) { while (inv) @@ -945,11 +945,12 @@ { freed_map () { - path = ""; - name = "/internal/freed_objects_map"; - width = 3; - height = 3; - nodrop = 1; + path = ""; + name = "/internal/freed_objects_map"; + width = 3; + height = 3; + no_drop = 1; + no_reset = 1; alloc (); in_memory = MAP_ACTIVE; @@ -1392,27 +1393,24 @@ if (flag & INS_ABOVE_FLOOR_ONLY) top = floor; - /* Top is the object that our object (op) is going to get inserted above. - */ - - /* no top found, insert on top */ + // insert object above top, or bottom-most if top = 0 if (!top) { - op->above = 0; - op->below = ms.top; - ms.top = op; + op->below = 0; + op->above = ms.bot; + ms.bot = op; - *(op->below ? &op->below->above : &ms.bot) = op; + *(op->above ? &op->above->below : &ms.top) = op; } else - { /* get inserted into the stack above top */ + { op->above = top->above; top->above = op; op->below = top; *(op->above ? &op->above->below : &ms.top) = op; } - } /* else not INS_BELOW_ORIGINATOR */ + } if (op->type == PLAYER) {