mirror of
				https://github.com/zenorogue/hyperrogue.git
				synced 2025-10-30 13:32:59 +00:00 
			
		
		
		
	autohdr.h applied in more files
This commit is contained in:
		
							
								
								
									
										104
									
								
								bigstuff.cpp
									
									
									
									
									
								
							
							
						
						
									
										104
									
								
								bigstuff.cpp
									
									
									
									
									
								
							| @@ -9,11 +9,11 @@ | ||||
|  | ||||
| namespace hr { | ||||
|  | ||||
| int newRoundTableRadius() { | ||||
| EX int newRoundTableRadius() { | ||||
|   return 28 + 2 * items[itHolyGrail]; | ||||
|   } | ||||
|  | ||||
| int getAnthraxData(cell *c, bool b) { | ||||
| EX int getAnthraxData(cell *c, bool b) { | ||||
|   int d = celldistAlt(c); | ||||
|   int rad = 28 + 3 * anthraxBonus; | ||||
|   while(d < -rad) {  | ||||
| @@ -29,14 +29,14 @@ int getAnthraxData(cell *c, bool b) { | ||||
|   return d; | ||||
|   } | ||||
|  | ||||
| int roundTableRadius(cell *c) { | ||||
| EX int roundTableRadius(cell *c) { | ||||
|   if(eubinary) return 28; | ||||
|   if(tactic::on) return getAnthraxData(c, true); | ||||
|   if(!c->master->alt) return 28; | ||||
|   return c->master->alt->alt->emeraldval & GRAIL_RADIUS_MASK; | ||||
|   } | ||||
|  | ||||
| int celldistAltRelative(cell *c) { | ||||
| EX int celldistAltRelative(cell *c) { | ||||
|   #if CAP_CRYSTAL | ||||
|   if(geometry == gCrystal) return crystal::dist_relative(c); | ||||
|   #endif | ||||
| @@ -51,7 +51,7 @@ int celldistAltRelative(cell *c) { | ||||
|   return celldistAlt(c) - roundTableRadius(c); | ||||
|   } | ||||
|  | ||||
| int euclidAlt(short x, short y) { | ||||
| EX int euclidAlt(short x, short y) { | ||||
|   if(among(specialland, laTemple, laClearing, laCanvas)) { | ||||
|     if(euclid6) | ||||
|       return max(int(x), x+y); | ||||
| @@ -78,7 +78,7 @@ int euclidAlt(short x, short y) { | ||||
|   else return eudist(x-(a4 ? 21 : 20), y-10); | ||||
|   } | ||||
|  | ||||
| int cylinder_alt(cell *c) { | ||||
| EX int cylinder_alt(cell *c) { | ||||
|   if(specialland == laPrincessQuest) | ||||
|     return celldistance(c, vec_to_cellwalker(pair_to_vec(EPX, EPY)).at); | ||||
|   if(specialland == laCamelot) | ||||
| @@ -93,14 +93,14 @@ int cylinder_alt(cell *c) { | ||||
|  | ||||
| const int NOCOMPASS = 1000000; | ||||
|  | ||||
| int compassDist(cell *c) { | ||||
| EX int compassDist(cell *c) { | ||||
|   if(sphere || quotient) return 0; | ||||
|   if(eubinary || c->master->alt) return celldistAlt(c); | ||||
|   if(isHaunted(c->land) || c->land == laGraveyard) return getHauntedDepth(c); | ||||
|   return NOCOMPASS; | ||||
|   } | ||||
|  | ||||
| cell *findcompass(cell *c) { | ||||
| EX cell *findcompass(cell *c) { | ||||
|   int d = compassDist(c); | ||||
|   if(d == NOCOMPASS) return NULL; | ||||
|    | ||||
| @@ -119,7 +119,7 @@ cell *findcompass(cell *c) { | ||||
|   return c; | ||||
|   } | ||||
|  | ||||
| bool grailWasFound(cell *c) { | ||||
| EX bool grailWasFound(cell *c) { | ||||
|   if(eubinary || quotient || sphere) return items[itHolyGrail]; | ||||
|   return c->master->alt->alt->emeraldval & GRAIL_FOUND; | ||||
|   } | ||||
| @@ -173,7 +173,7 @@ void hrmap::generateAlts(heptagon *h, int levs, bool link_cdata) { | ||||
|     } | ||||
|   } | ||||
|  | ||||
| heptagon *createAlternateMap(cell *c, int rad, hstate firststate, int special) { | ||||
| EX heptagon *createAlternateMap(cell *c, int rad, hstate firststate, int special IS(0)) { | ||||
|  | ||||
|   // check for direction | ||||
|   int gdir = -1; | ||||
| @@ -262,7 +262,7 @@ heptagon *createAlternateMap(cell *c, int rad, hstate firststate, int special) { | ||||
| //for(int d=rad; d>=0; d--) printf("%3d. %p {%d}\n", d, cx[d]->master, cx[d]->master->alt->distance); | ||||
|   } | ||||
|  | ||||
| void beCIsland(cell *c) { | ||||
| EX void beCIsland(cell *c) { | ||||
|   int i = hrand(3); | ||||
|   if(i == 0) c->wall = waCIsland; | ||||
|   if(i == 1) c->wall = waCIsland2; | ||||
| @@ -270,7 +270,7 @@ void beCIsland(cell *c) { | ||||
|   return; | ||||
|   } | ||||
|  | ||||
| void generateTreasureIsland(cell *c) { | ||||
| EX void generateTreasureIsland(cell *c) { | ||||
|   if(!eubinary) currentmap->generateAlts(c->master); | ||||
|   if(isOnCIsland(c)) return; | ||||
|    | ||||
| @@ -332,11 +332,9 @@ void generateTreasureIsland(cell *c) { | ||||
|  | ||||
| // equidistants  | ||||
|  | ||||
| extern bool generatingEquidistant; | ||||
| EX bool generatingEquidistant = false; | ||||
|  | ||||
| bool generatingEquidistant = false; | ||||
|  | ||||
| cell *buildAnotherEquidistant(cell *c, int radius) { | ||||
| EX cell *buildAnotherEquidistant(cell *c, int radius) { | ||||
|   int gdir = -1; | ||||
|   for(int i=0; i<c->type; i++) { | ||||
|     if(c->move(i) && c->move(i)->mpdist < c->mpdist) gdir = i; | ||||
| @@ -427,7 +425,7 @@ cell *buildAnotherEquidistant(cell *c, int radius) { | ||||
|   return c2; | ||||
|   } | ||||
|  | ||||
| void buildAnotherEquidistant(cell *c) { | ||||
| EX void buildAnotherEquidistant(cell *c) { | ||||
|   //printf("building another coast\n"); | ||||
|    | ||||
|   if(yendor::on) return; | ||||
| @@ -441,7 +439,7 @@ void buildAnotherEquidistant(cell *c) { | ||||
|   generatingEquidistant = false; | ||||
|   } | ||||
|  | ||||
| int coastval(cell *c, eLand base) { | ||||
| EX int coastval(cell *c, eLand base) { | ||||
|   if(!c) return UNKNOWN; | ||||
|   if(c->land == laNone) return UNKNOWN; | ||||
|   if(base == laGraveyard) { | ||||
| @@ -466,7 +464,7 @@ int coastval(cell *c, eLand base) { | ||||
|   return c->landparam; | ||||
|   } | ||||
|  | ||||
| bool checkInTree(cell *c, int maxv) { | ||||
| EX bool checkInTree(cell *c, int maxv) { | ||||
|   if(c->landparam <= 3) return false; | ||||
|   if(!maxv && WDIM == 3 && binarytiling) { | ||||
|     forCellEx(c2, c) if(c2->landflags) return true; | ||||
| @@ -486,7 +484,7 @@ struct loopchecker { | ||||
|   ~loopchecker() { loopval--; } | ||||
|   }; | ||||
|  | ||||
| void buildEquidistant(cell *c) { | ||||
| EX void buildEquidistant(cell *c) { | ||||
|   loopchecker lc; | ||||
|   // sometimes crashes in Archimedean | ||||
|   if(loopval > 100) { c->landparam = 0; return; } | ||||
| @@ -751,7 +749,7 @@ void buildEquidistant(cell *c) { | ||||
|     buildAnotherEquidistant(c); | ||||
|   } | ||||
|  | ||||
| cell *randomDown(cell *c) { | ||||
| EX cell *randomDown(cell *c) { | ||||
|   cell *tab[MAX_EDGE]; | ||||
|   int q=0; | ||||
|   for(int i=0; i<c->type; i++)  | ||||
| @@ -762,7 +760,7 @@ cell *randomDown(cell *c) { | ||||
|   return tab[hrand(q)]; | ||||
|   } | ||||
|  | ||||
| int edgeDepth(cell *c) { | ||||
| EX int edgeDepth(cell *c) { | ||||
|   if(c->land == laIvoryTower || c->land == laEndorian || c->land == laDungeon || c->land == laWestWall)  | ||||
|     return coastvalEdge(c); | ||||
|   else if(c->land != laBarrier) { | ||||
| @@ -772,7 +770,7 @@ int edgeDepth(cell *c) { | ||||
|   return 0; | ||||
|   } | ||||
|  | ||||
| int getHauntedDepth(cell *c) { | ||||
| EX int getHauntedDepth(cell *c) { | ||||
|   if((tactic::on || euclid) && c->land == laHaunted) return celldist(c); | ||||
|   if(c->land == laHaunted) return c->landparam; | ||||
|   if(c->land == laHauntedWall) return 0; | ||||
| @@ -780,7 +778,7 @@ int getHauntedDepth(cell *c) { | ||||
|   return -100; | ||||
|   } | ||||
|  | ||||
| int towerval(cell *c, const cellfunction& cf) { | ||||
| EX int towerval(cell *c, const cellfunction& cf) { | ||||
|   cell *cp1 = ts::left_of(c, cf); | ||||
|   if(!cp1) return 0;   | ||||
|   int under = 0; | ||||
| @@ -791,7 +789,7 @@ int towerval(cell *c, const cellfunction& cf) { | ||||
|  | ||||
| /* other geometries */ | ||||
|  | ||||
| void setLandWeird(cell *c) { | ||||
| EX void setLandWeird(cell *c) { | ||||
|   // replaced with standard CR4 | ||||
|   /* if(specialland == laIvoryTower || specialland == laEndorian || specialland == laDungeon || specialland == laOcean) { | ||||
|     int d = celldist(c) - (getDistLimit() - 2); | ||||
| @@ -802,7 +800,7 @@ void setLandWeird(cell *c) { | ||||
|     } */ | ||||
|   } | ||||
|  | ||||
| void setLandQuotient(cell *c) { | ||||
| EX void setLandQuotient(cell *c) { | ||||
|   setland(c, specialland); | ||||
|   int fv = zebra40(c); | ||||
|   if(fv/4 == 4 || fv/4 == 6 || fv/4 == 5 || fv/4 == 10) fv ^= 2; | ||||
| @@ -822,7 +820,7 @@ void setLandQuotient(cell *c) { | ||||
|   if(specialland == laWestWall) c->land = laCrossroads4; | ||||
|   } | ||||
|  | ||||
| void elementalXY(cell *c, int x, int y, bool make_wall) { | ||||
| EX void elementalXY(cell *c, int x, int y, bool make_wall) { | ||||
|   if(x > 0 && y > 0) setland(c, laEFire); | ||||
|   else if(x > 0 && y < 0) setland(c, laEAir); | ||||
|   else if(x < 0 && y < 0) setland(c, laEWater); | ||||
| @@ -841,7 +839,7 @@ void elementalXY(cell *c, int x, int y, bool make_wall) { | ||||
|     c->wall = getElementalWall(hrand(2) ? c->barleft : c->barright); | ||||
|   } | ||||
|  | ||||
| void setLandSphere(cell *c) { | ||||
| EX void setLandSphere(cell *c) { | ||||
|   setland(c, specialland); | ||||
|   if(specialland == laWarpCoast) | ||||
|     setland(c, getHemisphere(c, 0) > 0 ? laWarpCoast : laWarpSea); | ||||
| @@ -877,12 +875,12 @@ vector<eLand> euland; | ||||
| map<int, eLand> euland3; | ||||
| map<int, eLand> euland3_hash; | ||||
|  | ||||
| eLand& get_euland(int c) { | ||||
| EX eLand& get_euland(int c) { | ||||
|   euland.resize(max_vec); | ||||
|   return euland[c & (max_vec-1)]; | ||||
|   } | ||||
|  | ||||
| void clear_euland(eLand first) { | ||||
| EX void clear_euland(eLand first) { | ||||
|   euland.resize(max_vec); | ||||
|   for(int i=0; i<max_vec; i++) euland[i] = laNone; | ||||
|   if(!nonisotropic) euland[0] = euland[1] = euland[max_vec-1] = first; | ||||
| @@ -895,7 +893,7 @@ bool valid_wall_at(int c) { | ||||
|   return short(c) % 3 == 0; | ||||
|   } | ||||
|    | ||||
| eLand switchable(eLand nearland, eLand farland, int c) { | ||||
| EX eLand switchable(eLand nearland, eLand farland, int c) { | ||||
|   if(chaosmode) { | ||||
|     if(hrand(6) == 0) | ||||
|       return getNewLand(nearland); | ||||
| @@ -926,7 +924,7 @@ eLand switchable(eLand nearland, eLand farland, int c) { | ||||
|     } | ||||
|   } | ||||
|  | ||||
| eLand getEuclidLand(int c) { | ||||
| EX eLand getEuclidLand(int c) { | ||||
|   if(nonorientable && c < 0) c = -c; | ||||
|   auto& la = get_euland(c); | ||||
|   if(la) return la; | ||||
| @@ -939,7 +937,7 @@ eLand getEuclidLand(int c) { | ||||
|   return la = laCrossroads; | ||||
|   } | ||||
|  | ||||
| void setLandSol(cell *c) { | ||||
| EX void setLandSol(cell *c) { | ||||
|   setland(c, specialland); | ||||
|   if(chaosmode) { | ||||
|     setland(c, getEuclidLand(c->master->distance)); | ||||
| @@ -964,7 +962,7 @@ void setLandSol(cell *c) { | ||||
|     } | ||||
|   } | ||||
|  | ||||
| void setLandNil(cell *c) { | ||||
| EX void setLandNil(cell *c) { | ||||
|   setland(c, specialland); | ||||
|    | ||||
|   if(chaosmode) { | ||||
| @@ -1018,7 +1016,7 @@ void setLandNil(cell *c) { | ||||
|     } | ||||
|   } | ||||
|  | ||||
| void setLandEuclid(cell *c) { | ||||
| EX void setLandEuclid(cell *c) { | ||||
|   #if CAP_RACING | ||||
|   if(racing::track_ready) { | ||||
|     setland(c, laMemory); | ||||
| @@ -1141,14 +1139,14 @@ void setLandEuclid(cell *c) { | ||||
|     } | ||||
|   } | ||||
|  | ||||
| eLand get_euland3(int x) { | ||||
| EX eLand get_euland3(int x) { | ||||
|   if(euland3.count(x)) return euland3[x];  | ||||
|   if(x > 0) return euland3[x] = getNewLand(euland3[x-1]); | ||||
|   if(x < 0) return euland3[x] = getNewLand(euland3[x+1]); | ||||
|   return euland3[x] = laCrossroads; | ||||
|   } | ||||
|  | ||||
| void set_euland3(cell *c, int co10, int co11, int alt, int hash) { | ||||
| EX void set_euland3(cell *c, int co10, int co11, int alt, int hash) { | ||||
|  | ||||
|   if(chaosmode) { | ||||
|     setland(c, get_euland3(gdiv(co10, 60))); | ||||
| @@ -1206,7 +1204,7 @@ void set_euland3(cell *c, int co10, int co11, int alt, int hash) { | ||||
|  | ||||
| // the main big stuff function | ||||
|  | ||||
| bool quickfind(eLand l) { | ||||
| EX bool quickfind(eLand l) { | ||||
|   if(l == cheatdest) return true; | ||||
|   if(l == specialland && (weirdhyperbolic || specialland != laIce || cheater)) return true; | ||||
| #if CAP_TOUR | ||||
| @@ -1219,7 +1217,7 @@ bool quickfind(eLand l) { | ||||
| #define I2000 (INVLUCK?600:2000) | ||||
| #define I10000 (INVLUCK?3000:10000) | ||||
|  | ||||
| int wallchance(cell *c, bool deepOcean) { | ||||
| EX int wallchance(cell *c, bool deepOcean) { | ||||
|   eLand l = c->land; | ||||
|   return | ||||
|     showoff ? (cwt.at->mpdist > 7 ? 0 : 10000) :  | ||||
| @@ -1252,12 +1250,12 @@ int wallchance(cell *c, bool deepOcean) { | ||||
|     50; | ||||
|   } | ||||
|  | ||||
| bool horo_ok() { | ||||
| EX bool horo_ok() { | ||||
|   // do the horocycles work in the current geometry? | ||||
|   return hyperbolic && !binarytiling && !archimedean && !penrose; | ||||
|   } | ||||
|  | ||||
| bool gp_wall_test() { | ||||
| EX bool gp_wall_test() { | ||||
|   #if CAP_GP | ||||
|   if(GOLDBERG) return hrand(gp::dist_3()) == 0; | ||||
|   #endif | ||||
| @@ -1267,7 +1265,7 @@ bool gp_wall_test() { | ||||
|   return true; | ||||
|   } | ||||
|  | ||||
| bool deep_ocean_at(cell *c, cell *from) { | ||||
| EX bool deep_ocean_at(cell *c, cell *from) { | ||||
|  | ||||
|   if(generatingEquidistant) return false; | ||||
|    | ||||
| @@ -1297,13 +1295,13 @@ bool deep_ocean_at(cell *c, cell *from) { | ||||
|   return false; | ||||
|   } | ||||
|  | ||||
| bool good_for_wall(cell *c) { | ||||
| EX bool good_for_wall(cell *c) { | ||||
|   if(archimedean) return true; | ||||
|   if(WDIM == 3) return true; | ||||
|   return pseudohept(c); | ||||
|   } | ||||
|    | ||||
| void buildBigStuff(cell *c, cell *from) { | ||||
| EX void buildBigStuff(cell *c, cell *from) { | ||||
|   if(sphere || quotient || nonisotropic || (penrose && !binarytiling)) return; | ||||
|   if(chaosmode > 1) return; | ||||
|   bool deepOcean = deep_ocean_at(c, from); | ||||
| @@ -1455,7 +1453,7 @@ void buildBigStuff(cell *c, cell *from) { | ||||
|   if(hasbardir(c)) extendBarrier(c); | ||||
|   } | ||||
|  | ||||
| bool openplains(cell *c) { | ||||
| EX bool openplains(cell *c) { | ||||
|   if(chaosmode) { | ||||
|     forCellEx(c2, c) if(c2->land != laHunting) return false; | ||||
|     return true; | ||||
| @@ -1481,7 +1479,7 @@ bool openplains(cell *c) { | ||||
|     }     | ||||
|   } | ||||
|  | ||||
| void buildCamelotWall(cell *c) { | ||||
| EX void buildCamelotWall(cell *c) { | ||||
|   c->wall = waCamelot; | ||||
|   for(int i=0; i<c->type; i++) { | ||||
|     cell *c2 = createMov(c, i); | ||||
| @@ -1490,13 +1488,13 @@ void buildCamelotWall(cell *c) { | ||||
|     } | ||||
|   } | ||||
|  | ||||
| bool no_barriers_in_radius(cell *c, int rad) { | ||||
| EX bool no_barriers_in_radius(cell *c, int rad) { | ||||
|   celllister cl(c, 2, 1000000, NULL); | ||||
|   for(cell *c: cl.lst) if(c->bardir != NODIR) return false; | ||||
|   return true; | ||||
|   } | ||||
|  | ||||
| void buildCamelot(cell *c) { | ||||
| EX void buildCamelot(cell *c) { | ||||
|   int d = celldistAltRelative(c); | ||||
|   if(tactic::on || (d <= 14 && roundTableRadius(c) > 20)) { | ||||
|     if(!eubinary) currentmap->generateAlts(c->master); | ||||
| @@ -1568,14 +1566,14 @@ void buildCamelot(cell *c) { | ||||
|     } | ||||
|   } | ||||
|  | ||||
| int masterAlt(cell *c) { | ||||
| EX int masterAlt(cell *c) { | ||||
|   #if MAXMDIM >= 4 | ||||
|   if(WDIM == 3 && hyperbolic) return reg3::altdist(c->master); | ||||
|   #endif | ||||
|   return c->master->alt->distance; | ||||
|   } | ||||
|  | ||||
| void moreBigStuff(cell *c) { | ||||
| EX void moreBigStuff(cell *c) { | ||||
|  | ||||
|   if((bearsCamelot(c->land) && !euclid && !quotient && !nil) || c->land == laCamelot)  | ||||
|   if(eubinary || binarytiling || c->master->alt) if(!(binarytiling && specialland != laCamelot))  | ||||
| @@ -1704,7 +1702,7 @@ void moreBigStuff(cell *c) { | ||||
|     }       | ||||
|   } | ||||
|  | ||||
| void generate_mines() { | ||||
| EX void generate_mines() { | ||||
|   vector<cell*> candidates; | ||||
|   for(cell *c: currentmap->allcells()) | ||||
|     if(c->wall == waMineUnknown)  | ||||
| @@ -1715,9 +1713,9 @@ void generate_mines() { | ||||
|   for(int i=0; i<bounded_mine_quantity; i++) candidates[i]->wall = waMineMine; | ||||
|   } | ||||
|  | ||||
| vector<eLand> currentlands; | ||||
| EX vector<eLand> currentlands; | ||||
|  | ||||
| void pregen() { | ||||
| EX void pregen() { | ||||
|   currentlands.clear(); | ||||
|   if(chaosmode > 1) | ||||
|     for(eLand l: land_over) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Zeno Rogue
					Zeno Rogue