Add doors correctly
This commit is contained in:
+21
-21
@@ -521,23 +521,30 @@ remove_boundary_syms()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
maybe_add_door(x,y, droom, i,s)
|
||||||
|
int x,y;
|
||||||
|
struct mkroom *droom;
|
||||||
|
int i,s;
|
||||||
|
{
|
||||||
|
if (droom->hx >= 0 && doorindex < DOORMAX && inside_room(droom, x,y))
|
||||||
|
add_door(x, y, droom);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
link_doors_rooms()
|
link_doors_rooms()
|
||||||
{
|
{
|
||||||
xchar x,y;
|
int x,y;
|
||||||
|
int tmpi, m;
|
||||||
for (y = 0; y < ROWNO; y++)
|
for (y = 0; y < ROWNO; y++)
|
||||||
for (x = 0; x < COLNO; x++)
|
for (x = 0; x < COLNO; x++)
|
||||||
if (IS_DOOR(levl[x][y].typ) || levl[x][y].typ == SDOOR) {
|
if (IS_DOOR(levl[x][y].typ) || levl[x][y].typ == SDOOR) {
|
||||||
struct mkroom *droom = rooms;
|
for (tmpi = 0; tmpi < nroom; tmpi++) {
|
||||||
/* Now the complicated part, list it with each subroom */
|
maybe_add_door(x,y, &rooms[tmpi], tmpi,-1);
|
||||||
/* The dog move and mail daemon routines use this */
|
for (m = 0; m < rooms[tmpi].nsubrooms; m++) {
|
||||||
while(droom->hx >= 0 && doorindex < DOORMAX) {
|
maybe_add_door(x,y, rooms[tmpi].sbrooms[m], tmpi,m);
|
||||||
if(droom->hx >= x-1 && droom->lx <= x+1 &&
|
|
||||||
droom->hy >= y-1 && droom->ly <= y+1) {
|
|
||||||
/* Found it */
|
|
||||||
add_door(x, y, droom);
|
|
||||||
}
|
}
|
||||||
droom++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1983,7 +1990,6 @@ corridor *c;
|
|||||||
coord org, dest;
|
coord org, dest;
|
||||||
|
|
||||||
if (c->src.room == -1) {
|
if (c->src.room == -1) {
|
||||||
/*sort_rooms();*/
|
|
||||||
fix_stair_rooms();
|
fix_stair_rooms();
|
||||||
makecorridors(); /*makecorridors(c->src.door);*/
|
makecorridors(); /*makecorridors(c->src.door);*/
|
||||||
return;
|
return;
|
||||||
@@ -2101,9 +2107,9 @@ struct mkroom *mkr;
|
|||||||
|
|
||||||
if (okroom) {
|
if (okroom) {
|
||||||
#ifdef SPECIALIZATION
|
#ifdef SPECIALIZATION
|
||||||
topologize(aroom,FALSE); /* set roomno */
|
topologize(aroom,FALSE); /* set roomno */
|
||||||
#else
|
#else
|
||||||
topologize(aroom); /* set roomno */
|
topologize(aroom); /* set roomno */
|
||||||
#endif
|
#endif
|
||||||
aroom->needfill = r->filled;
|
aroom->needfill = r->filled;
|
||||||
aroom->needjoining = r->joined;
|
aroom->needjoining = r->joined;
|
||||||
@@ -3681,7 +3687,6 @@ sel_set_door(dx,dy,arg)
|
|||||||
xchar typ = (*(xchar *)arg);
|
xchar typ = (*(xchar *)arg);
|
||||||
xchar x = dx;
|
xchar x = dx;
|
||||||
xchar y = dy;
|
xchar y = dy;
|
||||||
/*get_location(&x, &y, DRY, (struct mkroom *)0);*/
|
|
||||||
if (!IS_DOOR(levl[x][y].typ) && levl[x][y].typ != SDOOR)
|
if (!IS_DOOR(levl[x][y].typ) && levl[x][y].typ != SDOOR)
|
||||||
levl[x][y].typ = (typ & D_SECRET) ? SDOOR : DOOR;
|
levl[x][y].typ = (typ & D_SECRET) ? SDOOR : DOOR;
|
||||||
if (typ & D_SECRET) {
|
if (typ & D_SECRET) {
|
||||||
@@ -3951,9 +3956,9 @@ spo_region(coder)
|
|||||||
add_room(dx1, dy1, dx2, dy2,
|
add_room(dx1, dy1, dx2, dy2,
|
||||||
OV_i(rlit), OV_i(rtype), TRUE);
|
OV_i(rlit), OV_i(rtype), TRUE);
|
||||||
#ifdef SPECIALIZATION
|
#ifdef SPECIALIZATION
|
||||||
topologize(troom,FALSE); /* set roomno */
|
topologize(troom,FALSE); /* set roomno */
|
||||||
#else
|
#else
|
||||||
topologize(troom); /* set roomno */
|
topologize(troom); /* set roomno */
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4592,8 +4597,6 @@ sp_lev *lvl;
|
|||||||
case SPO_OBJECT: spo_object(coder); break;
|
case SPO_OBJECT: spo_object(coder); break;
|
||||||
case SPO_LEVEL_FLAGS: spo_level_flags(coder); break;
|
case SPO_LEVEL_FLAGS: spo_level_flags(coder); break;
|
||||||
case SPO_INITLEVEL: spo_initlevel(coder); break;
|
case SPO_INITLEVEL: spo_initlevel(coder); break;
|
||||||
/*case SPO_MON_GENERATION: spo_mon_generation(coder); break;*/
|
|
||||||
/*case SPO_LEVEL_SOUNDS: spo_level_sounds(coder); break;*/
|
|
||||||
case SPO_ENGRAVING: spo_engraving(coder); break;
|
case SPO_ENGRAVING: spo_engraving(coder); break;
|
||||||
case SPO_MINERALIZE: spo_mineralize(coder); break;
|
case SPO_MINERALIZE: spo_mineralize(coder); break;
|
||||||
case SPO_SUBROOM:
|
case SPO_SUBROOM:
|
||||||
@@ -4620,13 +4623,11 @@ sp_lev *lvl;
|
|||||||
case SPO_SINK:
|
case SPO_SINK:
|
||||||
case SPO_POOL:
|
case SPO_POOL:
|
||||||
case SPO_FOUNTAIN: spo_feature(coder); break;
|
case SPO_FOUNTAIN: spo_feature(coder); break;
|
||||||
/*case SPO_WALLWALK: spo_wallwalk(coder); break;*/
|
|
||||||
case SPO_TRAP: spo_trap(coder); break;
|
case SPO_TRAP: spo_trap(coder); break;
|
||||||
case SPO_GOLD: spo_gold(coder); break;
|
case SPO_GOLD: spo_gold(coder); break;
|
||||||
case SPO_CORRIDOR: spo_corridor(coder); break;
|
case SPO_CORRIDOR: spo_corridor(coder); break;
|
||||||
case SPO_TERRAIN: spo_terrain(coder); break;
|
case SPO_TERRAIN: spo_terrain(coder); break;
|
||||||
case SPO_REPLACETERRAIN: spo_replace_terrain(coder); break;
|
case SPO_REPLACETERRAIN: spo_replace_terrain(coder); break;
|
||||||
/*case SPO_SPILL: spo_spill(coder); break;*/
|
|
||||||
case SPO_LEVREGION: spo_levregion(coder); break;
|
case SPO_LEVREGION: spo_levregion(coder); break;
|
||||||
case SPO_REGION: spo_region(coder); break;
|
case SPO_REGION: spo_region(coder); break;
|
||||||
case SPO_DRAWBRIDGE: spo_drawbridge(coder); break;
|
case SPO_DRAWBRIDGE: spo_drawbridge(coder); break;
|
||||||
@@ -5004,7 +5005,6 @@ sp_lev *lvl;
|
|||||||
x -= xstart;
|
x -= xstart;
|
||||||
y -= ystart;
|
y -= ystart;
|
||||||
}
|
}
|
||||||
/*get_location(&x, &y, DRY|WET, coder->croom);*/
|
|
||||||
splev_stack_push(coder->stack, opvar_new_coord(x,y));
|
splev_stack_push(coder->stack, opvar_new_coord(x,y));
|
||||||
opvar_free(pt);
|
opvar_free(pt);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user