True, its some work. If you have time, look for TRAPDOOR and HOLE in the code - but i am out of patch sync for CF, so its fixed perhaps. I had done some more interesting stuff: For tiled maps, which builds a bigger meta map, it is a bad thing that teleporters can't teleport items & monster over map borders (aka to a new map) - only players. Also, the enter_map()/enter_exit() functions are player only/single arch only. I had advanced this functions to work for items & monsters (multi arch too) and it was easier as i thought. Problems are only random maps & unique maps - but there i can't see why we need it. Also, i added a "no_teleport" flag for TELEPORTERS. The i advanced them to teleport ALL whats in the spot of the TELEPORTER and don't have the flag set - also i added to teleport multi arch too when only one part is on the teleporter. This added really new features to maps. In daimonin, system objects are autosorted when put on a map (no need to put them explicit under the floor). Now, i can put some system objects or stuff like traps on the map and a invisible teleporter to it. One handle pull - and the map part is cleared - all teleported out to a save area... then you move over it, pull another handle and all is teleported back. This will allow new dynamic effects to maps and map makers. To avoid problems with old maps, just create a NEW_TELEPORTER object... > > > Fixed in CVS. > > There have been some of those in the past also - slowly they > get fixed as > discovered, as the fix is easy. Just no one has bothered to look > at all the > code which could generate such cases. > > > > Michael Toennies wrote: > > I find some bad bug in player movement, > > which can course this client affects too. > > > > Because we track in the client now more accurate > > what happens on the map, this bug will come in effect - > > missing > > > > esrv_map_scroll(&op->contr->socket, freearr_x[dir],freearr_y[dir]); > > > > functions when the player moves. > > > > This is the right way to move a player (from move_ob() ). > > > > remove_ob(op); > > op->x+=freearr_x[dir]; > > op->y+=freearr_y[dir]; > > insert_ob_in_map(op,op->map,originator,0); > > /* Currently, assume that players will only be single space > objects */ > > if (op->type==PLAYER) { > > esrv_map_scroll(&op->contr->socket, > freearr_x[dir],freearr_y[dir]); > > op->contr->socket.update_look=1; > > op->contr->socket.look_position=0; > > } > > > > This is, how for example the shop_mat function teleports a player back > > in the shop when he can't pay all unpaid items: > > > > else { > > /* if we get here, a player tried to leave a shop but was not able > > * to afford the items he has. We try to move the player so that > > * they are not on the mat anymore > > */ > > > > int i = find_free_spot (op->arch, op->map, op->x, op->y, 1, 9); > > if(i == -1) { > > LOG (llevError, "Internal shop-mat problem.\n"); > > } else { > > remove_ob (op); > > op->x += freearr_x[i]; > > op->y += freearr_y[i]; > > rv = insert_ob_in_map (op, op->map, shop_mat,0) == NULL; > > } > > } > > > > The map scroll cmd is missed. This will bring every feature out > of track, > > which > > depends on exactly map data & position data. > > > > You will notice this effect sometimes, when you get ported/moved, and a > > "shadow" > > of your player char animation stays on the position where you > was before. > > > > This missing scroll cmds are numerous in the code - better to > check every > > insert_ob_in_map() and add it when needed. > > > > > > _______________________________________________ > > crossfire-devel mailing list > > crossfire-devel at lists.real-time.com > > https://mailman.real-time.com/mailman/listinfo/crossfire-devel > > > > _______________________________________________ > crossfire-devel mailing list > crossfire-devel at lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel _______________________________________________ crossfire-devel mailing list crossfire-devel at lists.real-time.com https://mailman.real-time.com/mailman/listinfo/crossfire-devel