Neroxis Map Generator

also I've only seen one type of civilian base, it would be interesting to have more

On some maps it is hard to tell where you can walk or not, which is critical for early build decisions.

For example this replay I realise early on that there is only one chokepoint on the map so I dont defend the expansion even though it looks open. The other player doesnt realise the choke points, and at minute 7 is defending an expansion that is not under threat - and has less units than me in the middle. So I can get an advantage that is game defining but not fun at all. https://replay.faforever.com/13282178.

What would be cool is if there was a way to visualize where you can walk.

It is possible to generate a useful 'strategic overlay' image where red is unpathable, blue is underwater, etc. Then you can put the image on the screen as a decal and change the LOD so that it only appears when totally zoomed out. In this screenshot you can see one i made manually. It's not perfectly positioned but you can see its marking red & yellow where you cant walk and white where you can walk.

unknown.png

Not sure if its possible but perhaps a shortcut key could toggle the decal on and off.

This feature would be useful for all maps to be honest (including non mapgen) but with mapgen its much more important because you dont know the map before you play it. It's no fun to spend 15 minutes on a dud game because one player fatally misunderstood the map.

@nine2
Perhaps something like cartographic mode but with either finer elevation lines, or slope?catographer.PNG

I wonder if it is possible to mod this.

You must deceive the enemy, sometimes your allies, but you must always deceive yourself!

Ah nice point. The cartographic shader already renders lines based of slope. We just need to make it more selective. You can sort-of-mod shaders because they are cached and you can overwrite the cache. Now we just need a shader author...

maybe randomizing the sun colour and angle will make the maps feel a bit more different

@nine2 You can also add them to the repo, as is done with other shaders.

What would you like for it to do specifically? At the moment it is an edge detection algorithm:

// phase 0
float4 TerrainPS0( TerrainPixel pixel) : COLOR0
{
	float2 v0 = terrainSizeCoeff * pixel.world.xz;
	float2 v1 = v0 + float2(1,0);
	float2 v2 = v0 + float2(0,1);
	float2 v3 = v0 + float2(1,1);
	
	float2 t = v0 - floor(v0);
	
	float2 h0 = tex2D(elevSampler,gridSizeCoeff*v0).rg;
	float2 h1 = tex2D(elevSampler,gridSizeCoeff*v1).rg;
	float2 h2 = tex2D(elevSampler,gridSizeCoeff*v2).rg;
	float2 h3 = tex2D(elevSampler,gridSizeCoeff*v3).rg;
	float2 h  = clamp(lerp(lerp(h0,h1,t.x),lerp(h2,h3,t.x),t.y) - 0.0001,0,1);
	
	float3 hypsometric = tex1D(hypsometricSampler,h.x).rgb;
	float1 topographic = tex1D(topographicSampler,h.x).a;
	
	return float4(hypsometric,topographic);
}

// phase 1
float4 TerrainPS1( FramePixel pixel) : COLOR0
{
	static const half dx = 1.0 / frameWidth;
	static const half dy = 1.0 / frameHeight;
	
	float4 color = tex2D(frameSampler,pixel.texcoord);
	half4 c  = color.a;
	
	///	The following edge detection filter was adapted from
	/// and example provided by Mark J. Harris and GPGPU.org
	half4 bl = tex2D(frameSampler,pixel.texcoord+half2(-dx,-dy)).a;
	half4 l  = tex2D(frameSampler,pixel.texcoord+half2(-dx,  0)).a;
	half4 tl = tex2D(frameSampler,pixel.texcoord+half2(-dx, dy)).a;
	half4 t  = tex2D(frameSampler,pixel.texcoord+half2(  0, dy)).a;
	half4 ur = tex2D(frameSampler,pixel.texcoord+half2( dx, dy)).a;
	half4 r  = tex2D(frameSampler,pixel.texcoord+half2( dx,  0)).a;
	half4 br = tex2D(frameSampler,pixel.texcoord+half2( dx,-dy)).a;
	half4 b  = tex2D(frameSampler,pixel.texcoord+half2(  0,-dy)).a;	
	float topo = saturate( 16.0 * ( c - 0.125 * (bl + l + tl + t + ur + r + br + b )));
	
	return float4(color.rgb - topo.rrr,0);
}

This is the input of the shader:

float4x4 viewMatrix;
float4x4 projMatrix;

float4 gridSizeCoeff;
float4 terrainSizeCoeff;
float1 terrainHeightScale;
float1 elevMaximum;
float1 elevMinimum;

float1 frameWidth;
float1 frameHeight;
texture elevTexture;
texture hypsometricTexture;
texture topographicTexture;
texture frameTexture;
texture decalTexture;

I'm not entirely confident what a 'hypsometricTexture' is. We can not add (or remove) input parameters, but we can toy with what it does with the input.

A work of art is never finished, merely abandoned

Nice to hear that you guys have been playing and enjoying the generator. I always appreciate being able to watch replays to help improve the generator.

With regards to reclaim currently it always generates some amount of trees and small rocks although this can get down to about 2k mass. Reclaim options are a possibility but I have not yet defined a good range for those.

With regards to the visibility of pathing and texturing tit is constantly being improved to increase the pathing visibility. There were some updates in the last day to increase the texturing so that it is keyed based on the slope values in order to make it clear what is walkable and what is not. There are still some edge cases that are being ironed out. There is a way to change how the cartographic map is displayed so that may be something I look into as well.

With regards to civilian bases there are currently four that are possible. 2 enemy and 2 neutral. If you have ideas or want to contribute additional ones I can let you know the template I would need. Each map currently has a 50% chance of trying to place civilians and a 50% chance of those being enemy bases.

With regards to the sun colour and angle there are a set of biome templates that are used for generating the map with the textures which includes the sun color and angle and I am always looking for people who are interested in contributing some more.

I'm not entirely confident what a 'hypsometricTexture' is. We can not add (or remove) input parameters, but we can toy with what it does with the input.

hyposymmetry is the measure of land elevation I believe if that helps.

@jip what I was hoping to achieve was to display a line if its unpassable.

The current shader perhaps [renders the heightmap clamped to brackets] then [runs edge detection over it].

Perhaps the first step needs to change to [render white if thisCellHeight - previousCellHeight > threshold, else render black]. Something like that?

Well the issue with the reclaim at the moment is its frequently quite high like 20k mass. That is fun but diversity would be nice.

I'd like to suggest bases and colours and stuff but don't really have the time to implement things

Would be nice if the map previews were retained.

If I watch a local replay then i can see the map preview in the local replays vault - until I restart the client.

I think the reclaim you see may just be a luck of the draw/run as the reclaim ranges from 2k to 20k on the 10km maps I have generated.

With regards to the previews that falls into the issue of spamming a users file system which does not have a great solution for storing just the preview as well.

Are you just using the zoomed out ctrl+shift totals that don't count tree groups with <10 mass or living civs? I just checked all my mapgen games and the range was 6k-27k on 10x10s, not counting tree groups (which the "low" reclaim maps definitely had) and civs. We've definitely never had a legitimately low reclaim map where there's no rocks or trees to bail out your build order - for reference Loki has 3k on ctrl+shift and no competent player would ever call it a low reclaim map.

Anyway, whether or not the mapgen can very occasionally spit out a genuinely low reclaim map is kind of beside the point, it's a far more influential variable for a map's gameplay than the number of ramps, for example, so it would be good to have a slider for it.

a player reported this artificial looking reclaim
93b59cd2-a7b5-415f-8cd5-36b68ce15409-image.png

As a note I have added in the link to the map generator discord on the first post for anyone who wants to hop in there as well.

And making the reclaim especially the rock reclaim look less artificial is on the todo list.

i feel like there are always heaps of tree groups

Heh yeah it currently only places trees as tree groups as one of the historical bottle necks for generation time is actually placing all of the trees on the map so tree groups were used to have a similar prop density and reduce the prop placement time.

@nine2

@nine2 said in Neroxis Map Generator:

On some maps it is hard to tell where you can walk or not, which is critical for early build decisions.

For example this replay I realise early on that there is only one chokepoint on the map so I dont defend the expansion even though it looks open. The other player doesnt realise the choke points, and at minute 7 is defending an expansion that is not under threat - and has less units than me in the middle. So I can get an advantage that is game defining but not fun at all. https://replay.faforever.com/13282178.

What would be cool is if there was a way to visualize where you can walk.

It is possible to generate a useful 'strategic overlay' image where red is unpathable, blue is underwater, etc. Then you can put the image on the screen as a decal and change the LOD so that it only appears when totally zoomed out. In this screenshot you can see one i made manually. It's not perfectly positioned but you can see its marking red & yellow where you cant walk and white where you can walk.

unknown.png

Not sure if its possible but perhaps a shortcut key could toggle the decal on and off.

This feature would be useful for all maps to be honest (including non mapgen) but with mapgen its much more important because you dont know the map before you play it. It's no fun to spend 15 minutes on a dud game because one player fatally misunderstood the map.

this looks decent af

queuing with a newbie to show him the beauty of tmm and meeting tagada be like:
https://www.youtube.com/watch?v=yLcRpdZ0Xb0&ab_channel=Tomoko