mirror of
				https://github.com/zenorogue/hyperrogue.git
				synced 2025-10-31 22:12:59 +00:00 
			
		
		
		
	landscape structure is now based on BCC honeycomb
This commit is contained in:
		| @@ -3332,9 +3332,10 @@ EX int config3 = addHook(hooks_configfile, 100, [] { | |||||||
|     "land size in randomwalk mode", |     "land size in randomwalk mode", | ||||||
|     "The average size of a land in randomwalk mode.", 'R') |     "The average size of a land in randomwalk mode.", 'R') | ||||||
|   ->set_reaction([] { if(game_active) { stop_game(); start_game(); } }); |   ->set_reaction([] { if(game_active) { stop_game(); start_game(); } }); | ||||||
|   param_i(landscape_div, "landscape_div", 32)->editable(1, 100, 1, |   param_i(landscape_div, "landscape_div")->editable(1, 100, 1, | ||||||
|     "land size in landscape mode", |     "land size in landscape structure", | ||||||
|     "The bigger the value, the larger the lands.", 'R') |     "Each cell gets three coordinates, each of which change smoothly, using the same method as used for the generation of landscapes e.g. in Dragon Chasms. " | ||||||
|  |     "Then, we find a cell of the bitruncated cubic honeycomb at these cordinates, and this cell determines which land it is. The bigger the value, the larger the lands.", 'R') | ||||||
|   ->set_reaction([] { if(game_active) { stop_game(); start_game(); } }); |   ->set_reaction([] { if(game_active) { stop_game(); start_game(); } }); | ||||||
|  |  | ||||||
|   param_f(global_boundary_ratio, "global_boundary_ratio") |   param_f(global_boundary_ratio, "global_boundary_ratio") | ||||||
|   | |||||||
							
								
								
									
										27
									
								
								landgen.cpp
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								landgen.cpp
									
									
									
									
									
								
							| @@ -2900,7 +2900,8 @@ EX void share_land(cell *c, cell *c2) { | |||||||
|   c->land = c2->land; |   c->land = c2->land; | ||||||
|   } |   } | ||||||
|  |  | ||||||
| EX int landscape_div = 32; | // odd landscape_div are better | ||||||
|  | EX int landscape_div = 25; | ||||||
|  |  | ||||||
| EX void set_land_for_geometry(cell *c) { | EX void set_land_for_geometry(cell *c) { | ||||||
|   if(!c->land && isize(currentlands)) { |   if(!c->land && isize(currentlands)) { | ||||||
| @@ -2909,12 +2910,24 @@ EX void set_land_for_geometry(cell *c) { | |||||||
|       return; |       return; | ||||||
|       } |       } | ||||||
|     if(land_structure == lsLandscape) { |     if(land_structure == lsLandscape) { | ||||||
|       if(landscape_div < 0) landscape_div = 0; |       if(landscape_div < 0) landscape_div = 1; | ||||||
|       int shift = landscape_div / 2; |       array<int, 3> a; | ||||||
|       int a0 = getCdata(c, 0) + shift; |       for(int i=0; i<3; i++) a[i] = getCdata(c, i); | ||||||
|       int a1 = getCdata(c, 1) + shift; |       auto ca = a; | ||||||
|       int a2 = getCdata(c, 2) + shift; |       auto& ld = landscape_div; | ||||||
|       eLand& l = landscape_lands[{a0/landscape_div,a1/landscape_div,a2/landscape_div}]; |       auto ld2 = ld * 2; | ||||||
|  |       int sh = 0; | ||||||
|  |       for(int i=0; i<3; i++) { | ||||||
|  |         int x = a[i]; | ||||||
|  |         x = gmod(x, ld2); | ||||||
|  |         if(x >= ld) sh += x - ld; | ||||||
|  |         else sh += ld - 1 - x; | ||||||
|  |         } | ||||||
|  |       for(int i=0; i<3; i++) { | ||||||
|  |         if(sh * 2 < ld * 3) a[i] = gdiv(a[i], ld2)*2+1; | ||||||
|  |         else a[i] = gdiv(a[i]+ld, ld2)*2; | ||||||
|  |         } | ||||||
|  |       eLand& l = landscape_lands[{a[0], a[1], a[2]}]; | ||||||
|       if(l == laNone) l = random_land(); |       if(l == laNone) l = random_land(); | ||||||
|       setland(c, l); |       setland(c, l); | ||||||
|       return; |       return; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Zeno Rogue
					Zeno Rogue