From e2d776d23fa33f110786defeaf983dcfd295d878 Mon Sep 17 00:00:00 2001 From: zilpin Date: Thu, 21 Oct 2010 19:00:12 -0400 Subject: [PATCH] tested, working. many extensions, hellhole should probably be renamed. --- tools/playground/hellhole.cpp | 71 +++++++++++++++++++++++------------ 1 file changed, 46 insertions(+), 25 deletions(-) diff --git a/tools/playground/hellhole.cpp b/tools/playground/hellhole.cpp index 4767d4700..e42fe992c 100644 --- a/tools/playground/hellhole.cpp +++ b/tools/playground/hellhole.cpp @@ -41,8 +41,8 @@ void waitmsec (int delay) X(pitTypeEerie,"Bottomless Eerie Pit" ) \ X(pitTypeFloor,"Pit with floor" ) \ X(pitTypeSolid,"Solid Pillar" ) \ - X(pitTypeOasis,"Oasis, with partial aquifer (no hell access)" ) \ - X(pitTypeOPool,"Oasis Pool, with partial aquifer (default 5 deep)" ) \ + X(pitTypeOasis,"Oasis Pit (ends at magma, no hell access)" ) \ + X(pitTypeOPool,"Oasis Pool, with partial aquifer (default 5 z-levels)" ) \ X(pitTypeMagma,"Magma Pit (similar to volcano, no hell access)" ) \ X(pitTypeMPool,"Magma Pool (default 5 z-levels)" ) //end PITTYPEMACRO @@ -305,34 +305,43 @@ int main (void) floor=344; floorvar=3; break; + case pitTypeSolid: + holeradius=0; + wallthickness=7; + wallpillar=4; + break; case pitTypeOasis: stopatmagma=-1; - //fillwater=-1; + fillwater=-1; + holeradius=5; wallthickness=2; - aquify=-1; + //aquify=-1; floor=340; floorvar=3; break; case pitTypeOPool: - //fillwater=-1; + pitdepth=5; + fillwater=-1; + holeradius=5; wallthickness=2; - aquify=-1; + //aquify=-1; floor=340; floorvar=3; break; case pitTypeMagma: stopatmagma=-1; exposemagma=-1; + wallthickness=2; fillmagma=-1; floor=264; break; case pitTypeMPool: + pitdepth=5; + wallthickness=2; fillmagma=-1; floor=340; floorvar=3; break; - default: - floor=35; } @@ -362,12 +371,13 @@ int main (void) //Stop when magma sea is hit? stopatmagma=getyesno("Stop at magma sea?",stopatmagma); + exposemagma=getyesno("Expose magma sea (no walls)?",exposemagma); //Fill? fillmagma=getyesno("Fill with magma?",fillmagma); if(fillmagma) aquify=fillwater=0; fillwater=getyesno("Fill with water?",fillwater); - aquify=getyesno("Aquifer?",aquify); + //aquify=getyesno("Aquifer?",aquify); /////////////////////////////////////////////////////////////////////////////////////////////// @@ -375,12 +385,14 @@ int main (void) //If a settings struct existed, this could be in a routine printf("Using Settings:\n"); printf("Pit Type......: %d = %s\n", pittype, pitTypeDesc[pittype]); + printf("Depth.........: %d\n", pitdepth); printf("Hole Radius...: %d\n", holeradius); printf("Wall Thickness: %d\n", wallthickness); printf("Pillars, Hole.: %d\n", holepillar); printf("Pillars, Wall.: %d\n", wallpillar); printf("Expose Hell...: %c\n", (exposehell?'Y':'N') ); printf("Stop at Magma.: %c\n", (stopatmagma?'Y':'N') ); + printf("Expose Magma..: %c\n", (exposemagma?'Y':'N') ); printf("Magma Fill....: %c\n", (fillmagma?'Y':'N') ); printf("Water Fill....: %c\n", (fillwater?'Y':'N') ); printf("Aquifer.......: %c\n", (aquify?'Y':'N') ); @@ -582,7 +594,7 @@ int main (void) t_designation * d; ////////////////////////////////////// - //From top to bottom, dig this dude. + //From top to bottom, dig this thing. ////////////////////////////////////// //Top level, cap. @@ -646,8 +658,10 @@ int main (void) } //Pre-process this z-level, to get some tile statistics. - for(int32_t x=0;x<16;++x){ - for(int32_t y=0;y<16;++y){ + for(int32_t x=0;x<16;++x) + { + for(int32_t y=0;y<16;++y) + { t=0; tp = getTileTypeP(block.tiletypes[x][y]); d = &block.designation[x][y]; @@ -753,7 +767,7 @@ int main (void) cout << "error: illegal breach of hell!"; } - + ///////////////////////////////////////////////////////////////////////////////////////////////// //Actually process the current z-level. //These loops do the work. @@ -764,6 +778,11 @@ int main (void) d = &block.designation[x][y]; tpat=pattern[x][y]; + //Up front, remove aquifer, to prevent bugginess + //It may be added back if aquify is set. + d->bits.water_table=0; + + //Change behaviour based on settings and stats from this z-level //In hell? @@ -778,7 +797,6 @@ int main (void) //Leave certain tiles unchanged. switch( tp->m ){ case MAGMA: - case VEIN: case FEATSTONE: case HFS: tpat=0; @@ -807,8 +825,8 @@ int main (void) //d->bits.skyview = topblock.designation[x][y].bits.skyview; //d->bits.subterranean = topblock.designation[x][y].bits.subterranean; - //Erase special markers - d->bits.feature_global = d->bits.feature_local = 0; + //Erase special markers? + //d->bits.feature_global = d->bits.feature_local = 0; //Water? Magma? if(fillmagma || fillwater){ @@ -838,7 +856,7 @@ int main (void) t=wmolten; break; case HFS: - t=whell; + //t=whell; break; case VEIN: t=440; //Solid vein block @@ -861,6 +879,7 @@ int main (void) case feature_Underworld: case feature_Hell_Temple: //Whatever the feature is made of. "featstone wall" + d->bits.feature_global = 0; d->bits.feature_local = 1; t=335; break; @@ -902,7 +921,9 @@ int main (void) case 3: //No obsidian walls on bottom of map! - if(z<1) continue; + if(z<1 && (d->bits.feature_global || d->bits.feature_local) ) { + t=335; + } //Special wall, always sets to obsidian, to give a stairway t=331; @@ -930,8 +951,6 @@ int main (void) //unlock fluids, so they fall down the pit. d->bits.flow_forbid = d->bits.liquid_static=0; block.blockflags.bits.liquid_1 = block.blockflags.bits.liquid_2 = 1; - //Remove aquifer, to prevent bugginess - d->bits.water_table=0; //Set the tile. block.tiletypes[x][y] = t; @@ -961,7 +980,9 @@ int main (void) /////////////////////////////////////////////////////////////////////////////////////////////// //The bottom level is special. if(-1){ - Mapz->ReadBlock40d( bx, by, z , &block ); + if(!Mapz->ReadBlock40d( bx, by, z , &block )){ + cout << "Bad block! " << bx << "," << by << "," << z << endl; + } for(uint32_t x=0;x<16;++x){ for(uint32_t y=0;y<16;++y){ t=floor; @@ -1048,10 +1069,10 @@ int main (void) } } //Write the block. - Mapz->WriteBlockFlags(bx,by,0, block.blockflags ); - Mapz->WriteDesignations(bx,by,0, &block.designation ); - Mapz->WriteTileTypes(bx,by,0, &block.tiletypes ); - Mapz->WriteDirtyBit(bx,by,0,1); + Mapz->WriteBlockFlags(bx,by,z, block.blockflags ); + Mapz->WriteDesignations(bx,by,z, &block.designation ); + Mapz->WriteTileTypes(bx,by,z, &block.tiletypes ); + Mapz->WriteDirtyBit(bx,by,z,1); }