--- deliantra/server/random_maps/wall.C 2006/12/20 09:14:22 1.10 +++ deliantra/server/random_maps/wall.C 2007/01/06 14:42:30 1.15 @@ -1,6 +1,8 @@ + /* CrossFire, A Multiplayer game for X-windows + Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team Copyright (C) 2002 Mark Wedel & Crossfire Development Team Copyright (C) 1992 Frank Tore Johansen @@ -32,7 +34,7 @@ are occupied. */ int -surround_flag (char **layout, int i, int j, RMParms * RP) +surround_flag (char **layout, int i, int j, random_map_params *RP) { /* 1 = wall to left, 2 = wall to right, @@ -56,7 +58,7 @@ */ int -surround_flag2 (char **layout, int i, int j, RMParms * RP) +surround_flag2 (char **layout, int i, int j, random_map_params *RP) { /* 1 = wall to left, 2 = wall to right, @@ -82,7 +84,7 @@ * What is considered blocking and not is somewhat hard coded. */ int -surround_flag3 (maptile *map, sint16 i, sint16 j, RMParms * RP) +surround_flag3 (maptile *map, sint16 i, sint16 j, random_map_params *RP) { /* * 1 = blocked to left, @@ -108,7 +110,7 @@ /* like surround_flag2, except it checks a map, not a layout. */ int -surround_flag4 (maptile *map, int i, int j, RMParms * RP) +surround_flag4 (maptile *map, int i, int j, random_map_params *RP) { /* 1 = blocked to left, 2 = blocked to right, @@ -132,10 +134,10 @@ w_style) at '#' marks. */ void -make_map_walls (maptile *map, char **layout, char *w_style, RMParms * RP) +make_map_walls (maptile *map, char **layout, char *w_style, random_map_params *RP) { - char styledirname[256]; - char stylefilepath[256]; + char styledirname[1024]; + char stylefilepath[1024]; maptile *style_map = 0; object *the_wall; @@ -186,7 +188,7 @@ and have everything nicely joined. It uses the layout. */ object * -pick_joined_wall (object *the_wall, char **layout, int i, int j, RMParms * RP) +pick_joined_wall (object *the_wall, char **layout, int i, int j, random_map_params *RP) { /* 1 = wall to left, 2 = wall to right, @@ -194,7 +196,7 @@ 8 = wall below */ int surround_index = 0; int l; - char wall_name[64]; + char wall_name[1024]; archetype *wall_arch = 0; strcpy (wall_name, the_wall->arch->name); @@ -219,65 +221,58 @@ switch (surround_index) { - case 0: - strcat (wall_name, "_0"); - break; - case 1: - strcat (wall_name, "_1_3"); - break; - case 2: - strcat (wall_name, "_1_4"); - break; - case 3: - strcat (wall_name, "_2_1_2"); - break; - case 4: - strcat (wall_name, "_1_2"); - break; - case 5: - strcat (wall_name, "_2_2_4"); - break; - case 6: - strcat (wall_name, "_2_2_1"); - break; - case 7: - strcat (wall_name, "_3_1"); - break; - case 8: - strcat (wall_name, "_1_1"); - break; - case 9: - strcat (wall_name, "_2_2_3"); - break; - case 10: - strcat (wall_name, "_2_2_2"); - break; - case 11: - strcat (wall_name, "_3_3"); - break; - case 12: - strcat (wall_name, "_2_1_1"); - break; - case 13: - strcat (wall_name, "_3_4"); - break; - case 14: - strcat (wall_name, "_3_2"); - break; - case 15: - strcat (wall_name, "_4"); - break; + case 0: + strcat (wall_name, "_0"); + break; + case 1: + strcat (wall_name, "_1_3"); + break; + case 2: + strcat (wall_name, "_1_4"); + break; + case 3: + strcat (wall_name, "_2_1_2"); + break; + case 4: + strcat (wall_name, "_1_2"); + break; + case 5: + strcat (wall_name, "_2_2_4"); + break; + case 6: + strcat (wall_name, "_2_2_1"); + break; + case 7: + strcat (wall_name, "_3_1"); + break; + case 8: + strcat (wall_name, "_1_1"); + break; + case 9: + strcat (wall_name, "_2_2_3"); + break; + case 10: + strcat (wall_name, "_2_2_2"); + break; + case 11: + strcat (wall_name, "_3_3"); + break; + case 12: + strcat (wall_name, "_2_1_1"); + break; + case 13: + strcat (wall_name, "_3_4"); + break; + case 14: + strcat (wall_name, "_3_2"); + break; + case 15: + strcat (wall_name, "_4"); + break; } wall_arch = archetype::find (wall_name); - if (wall_arch) - return arch_to_object (wall_arch); - else - { - nroferrors--; - return arch_to_object (the_wall->arch); - } - + return wall_arch ? arch_to_object (wall_arch) : arch_to_object (the_wall->arch); } @@ -290,7 +285,7 @@ */ object * -retrofit_joined_wall (maptile *the_map, int i, int j, int insert_flag, RMParms * RP) +retrofit_joined_wall (maptile *the_map, int i, int j, int insert_flag, random_map_params *RP) { /* 1 = wall to left, * 2 = wall to right, @@ -340,70 +335,73 @@ */ switch (surround_index) { - case 0: - strcat (RP->wall_name, "_0"); - break; - case 1: - strcat (RP->wall_name, "_1_3"); - break; - case 2: - strcat (RP->wall_name, "_1_4"); - break; - case 3: - strcat (RP->wall_name, "_2_1_2"); - break; - case 4: - strcat (RP->wall_name, "_1_2"); - break; - case 5: - strcat (RP->wall_name, "_2_2_4"); - break; - case 6: - strcat (RP->wall_name, "_2_2_1"); - break; - case 7: - strcat (RP->wall_name, "_3_1"); - break; - case 8: - strcat (RP->wall_name, "_1_1"); - break; - case 9: - strcat (RP->wall_name, "_2_2_3"); - break; - case 10: - strcat (RP->wall_name, "_2_2_2"); - break; - case 11: - strcat (RP->wall_name, "_3_3"); - break; - case 12: - strcat (RP->wall_name, "_2_1_1"); - break; - case 13: - strcat (RP->wall_name, "_3_4"); - break; - case 14: - strcat (RP->wall_name, "_3_2"); - break; - case 15: - strcat (RP->wall_name, "_4"); - break; + case 0: + strcat (RP->wall_name, "_0"); + break; + case 1: + strcat (RP->wall_name, "_1_3"); + break; + case 2: + strcat (RP->wall_name, "_1_4"); + break; + case 3: + strcat (RP->wall_name, "_2_1_2"); + break; + case 4: + strcat (RP->wall_name, "_1_2"); + break; + case 5: + strcat (RP->wall_name, "_2_2_4"); + break; + case 6: + strcat (RP->wall_name, "_2_2_1"); + break; + case 7: + strcat (RP->wall_name, "_3_1"); + break; + case 8: + strcat (RP->wall_name, "_1_1"); + break; + case 9: + strcat (RP->wall_name, "_2_2_3"); + break; + case 10: + strcat (RP->wall_name, "_2_2_2"); + break; + case 11: + strcat (RP->wall_name, "_3_3"); + break; + case 12: + strcat (RP->wall_name, "_2_1_1"); + break; + case 13: + strcat (RP->wall_name, "_3_4"); + break; + case 14: + strcat (RP->wall_name, "_3_2"); + break; + case 15: + strcat (RP->wall_name, "_4"); + break; } + wall_arch = archetype::find (RP->wall_name); - if (wall_arch != NULL) + + if (!wall_arch) { new_wall = arch_to_object (wall_arch); new_wall->x = i; new_wall->y = j; + if (the_wall && the_wall->map) { the_wall->remove (); the_wall->destroy (); } + the_wall->move_block = MOVE_ALL; insert_ob_in_map (new_wall, the_map, new_wall, INS_NO_MERGE | INS_NO_WALK_ON); } - else - nroferrors--; /* it's OK not to find an arch. */ + return new_wall; }