Hello.

I think I figured out why some tiles disappear under weather.

weather.c:change_the_world handles removal of grown items, including
(for instance) grass. It handles ground by simply checking from the
get_ob_map()->above object.

When the overlay for a map is loaded, by map.c:load_overlay_map, items
are inserted, but for some *under* the grass. The revelant code in
object.c:insert_ob_in_map is:

        originator->below = op;
    } else {
        /* If there are other objects, then */
        if((! (flag & INS_MAP_LOAD)) &&
((top=GET_MAP_OB(op->map,op->x,op->y))!=NULL)) {
            object *last=NULL;
            /*
             * If there are multiple objects on this space, we do some trickier
handling.

what happens is that a tmap overloading, INS_MAP_LOAD is set, so items
are inserted *below* other items.

So next run the change_the_world will simply check from eg the grass,
and remove it if weather conditions prevent it.


My proposed check is to change insert_ob_in_map for:

        originator->below = op;
    } else {
        /* If there are other objects, then */
        if((top=GET_MAP_OB(op->map,op->x,op->y))!=NULL) {
            object *last=NULL;
            /*
             * If there are multiple objects on this space, we do some trickier
handling.

ie search floor & such all the time. The code after handles INS_MAP_LOAD
and INS_ABOVE_FLOOR_ONLY flags.

Btw it looks strange to me that an overlay is always on top.

Ryo

_______________________________________________
crossfire mailing list
[email protected]
http://mailman.metalforge.org/mailman/listinfo/crossfire

Reply via email to