Sign in to follow this  
  • entries
    17
  • comments
    30
  • views
    17588

Lamest progress ever ... working on the foundation

Sign in to follow this  
DareDeveloper

809 views

Made some changes in the 2D Map creator. I modified the implementation that I had into something that can be used as a superclass.
https://github.com/AndyThiel/raidaces/commit/ac5a18a04c93c0a42371b3da153f3c1433f46a30#diff-018fbfb70ceebe1c7ba76bb10f797e7d

Now game specific implementations can use the foundation and add/modify logic.
Especially the methodCreatorMap2D.prototype.forEachPixelToUpdate
comes in handy now. Iterating over one half of the array depending on the mirroring mode ... being able to reuse that with functions like this one is sweet:
CreatorMap2D.prototype.heightCellularAutomationAction = function(streamSource, map, indexX, indexY, mirrorIndexX, mirrorIndexY, neighborTopLeft, neighborTopCenter, neighborTopRight, neighborLeft, neighborRight, neighborBottomLeft, neighborBottomCenter, neighborBottomRight) { var newValueAmount = -1; var newValue = -1; var currentValueAmount; var currentValue; for (currentValue = 0; currentValue < 5; currentValue++) { currentValueAmount = 0; if (currentValue == map.mapArray[indexY][indexX]) { currentValueAmount++; } if (currentValue == neighborTopLeft) { currentValueAmount++; } if (currentValue == neighborTopCenter) { currentValueAmount++; } if (currentValue == neighborTopRight) { currentValueAmount++; } if (currentValue == neighborLeft) { currentValueAmount++; } if (currentValue == neighborRight) { currentValueAmount++; } if (currentValue == neighborBottomLeft) { currentValueAmount++; } if (currentValue == neighborBottomCenter) { currentValueAmount++; } if (currentValue == neighborBottomRight) { currentValueAmount++; } if (newValueAmount < currentValueAmount) { newValueAmount = currentValueAmount; newValue = currentValue; } else if (newValueAmount == currentValueAmount) { if (streamSource.consumeBoolean()) { newValue = currentValue; } } } map.mapArray[indexY][indexX] = newValue; map.mapArray[mirrorIndexY][mirrorIndexX] = newValue; // if ((map.mapArray.length / 2) == indexY) { // log("New height chosen: " + newValue); // }};
I was struggling with yet another bug. The maps were very biased. 0 was used almost exclusively, only at the edges other values had a decent probability. Counting the value of the current tile as well (not just the neighbors) brought the first improvement, dealing with the equal amount of tiles compared with the current maximum count in a pseudo-random way fixed the problem completely. That happens in the following code, taken from the function above: } else if (newValueAmount == currentValueAmount) { if (streamSource.consumeBoolean()) { newValue = currentValue; } }
I will write a different algorithm (which creates different levels without steep cliffs) soon and update the rendering.

The current state is pretty lame. It can be seen at ...

http://procgames.com/raidaces2/

...though.
Sign in to follow this  


0 Comments


Recommended Comments

There are no comments to display.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now