Skip to main content
GameDev.net gamedev.net

PRO Tired of ads? Read GameDev.net ad-free and help keep the community independent with GameDev Pro — $3/month.

Lamest progress ever ... working on the foundation

Lamest progress ever ... working on the foundation

DareDeveloper
DareDeveloper's Journal · · 2 min read
2,567 0
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.

Discussion

Loading comments...