Jump to content

  • Log In with Google      Sign In   
  • Create Account






Lamest progress ever ... working on the foundation

Posted by DareDeveloper, in Questions And Problems 07 May 2014 · 294 views

Raid Aces bugfixing OOP
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 method
CreatorMap2D.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.




PARTNERS