Skip to content

Commit

Permalink
Add v2.1 updates and bug-fixes
Browse files Browse the repository at this point in the history
- Re-add water Bowser (Funky only!)
- Fix hammer velocity to incorporate Mario's running speed
- Randomize screen exits
- Begin implementation of updated CI2 tests
  • Loading branch information
authorblues committed Jun 23, 2016
1 parent fb370a1 commit 49780d0
Show file tree
Hide file tree
Showing 7 changed files with 210 additions and 62 deletions.
3 changes: 3 additions & 0 deletions changelog.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
<span class="badge">v2.1</span>

<ul>
<li>Re-add water Bowser (Funky only!)</li>
<li>Fix hammer velocity to incorporate Mario's running speed</li>
<li>Randomize screen exits</li>
<li>Add new Yoshi color abilities: increased speed, increased jump height, coin factory</li>
<li>Added randomizer changelog :^)</li>
<li>Fix some graphical issues with switch palaces and Mario/Luigi swapping</li>
Expand Down
1 change: 1 addition & 0 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -486,6 +486,7 @@ <h4 class="modal-title" id="modal-changelog-label">
<script src="js/randomizer.bowser.js"></script>
<script src="js/randomizer.text.js"></script>
<script src="js/randomizer.sound.js"></script>
<script src="js/randomizer.ci2.js"></script>

<script src="js/vendor/bootstrap.min.js"></script>
<script src="js/vendor/FileSaver.min.js"></script>
Expand Down
6 changes: 6 additions & 0 deletions js/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -409,6 +409,12 @@ Array.prototype.shuffle = function(random)
Array.prototype.contains = function(x)
{ return this.indexOf(x) != -1; }

function __range(n)
{
for (var x = [], i = 0; i < n; ++i) x.push(i);
return x;
}

Number.prototype.toBin = function(p)
{
var s = p || 'b#', x = (this & 0xFF);
Expand Down
7 changes: 7 additions & 0 deletions js/randomizer.base.js
Original file line number Diff line number Diff line change
Expand Up @@ -527,6 +527,8 @@ var CI2_ROOM_OFFSETS =
[0x00, 0x02], // room 3
];

var CI2_ALL_OFFSETS = $.map(CI2_ROOM_OFFSETS, function(x){ return x; });

var CI2_LAYER_OFFSETS =
{
'layer1': snesAddressToOffset(0x05DB08),
Expand All @@ -553,6 +555,8 @@ var SUBLEVEL_DUPLICATES =
0x1C5: 0x1C4, // gnarly room 2
};

var DONT_SHUFFLE_EXITS = [ 0x11D, ];

var STAR_PATTERNS =
[
[ // credit: Dotsarecool
Expand Down Expand Up @@ -670,6 +674,9 @@ var NO_WATER_STAGES = [
// do not add water to these stages
0x01A, 0x0DC, 0x111, 0x1CF, 0x134, 0x1F8, 0x0C7, 0x1E3, 0x1E2, 0x1F2, 0x0D3, 0x0CC,

// this is blacklisted in the first pass (water bowser)
0x1C7,

// do not remove water from these stages

];
Expand Down
90 changes: 90 additions & 0 deletions js/randomizer.ci2.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
var CI2_TEST_3WAY_COUNT = 6;
var CI2_TEST_2WAY_COUNT = 3;

function getTestsCI2(random)
{
var t3way = __range(CI2_TEST_3WAY_COUNT).shuffle(random);
var a = t3way[0], b = t3way[1];
var c = random.nextInt(CI2_TEST_2WAY_COUNT);

return [
get3TestCI2(random, a),
get3TestCI2(random, b),
get2TestCI2(random, c),
];
}

function get3TestCI2(random, ndx)
{
switch (ndx)
{
case 0: // default room 1 - coins
var cns1 = random.nextIntRange( 12, 22);
var cns2 = random.nextIntRange(cns1, 28);

cns1 = 0x1E - cns1;
cns2 = 0x1E - cns2;
return [
0xA2, 0x0A, 0xAD, 0xC0, 0x0D, 0xC9, cns1, 0x10,
0x08, 0xA2, 0x08, 0xC9, cns2, 0x10, 0x02, 0xA2,
0x06
];

case 1: // default room 2 - time
var tim1 = 0x02; // hundreds (less goes to A)
var tim2 = 0x03; // tens (less goes to A, equal checks A+B, greater checks B+C)
var tim3 = 0x05; // ones (less goes to A, otherwise B)
var tim4 = 0x05; // tens (less goes to B, otherwise C)

tim2 = random.from([2, 3]);
tim3 = random.nextIntRange(3, 9);
tim4 = random.from([4, 5]);

return [
0xA2, 0x0C, 0xAD, 0x31, 0x0F, 0xC9, tim1, 0x30,
0x1B, 0xAD, 0x32, 0x0F, 0xC9, tim2, 0x30, 0x14,
0xD0, 0x07, 0xAD, 0x33, 0x0F, 0xC9, tim3, 0x30,
0x0B, 0xA2, 0x0E, 0xAD, 0x32, 0x0F, 0xC9, tim4,
0x30, 0x02, 0xA2, 0x10
];

case 2: return [];
case 3: return [];
case 4: return [];
case 5: return [];
}
}

function get2TestCI2(random, ndx)
{
switch (ndx)
{
case 0: // default room 3 - yoshi coins
var ycns = random.nextIntRange(1, 5);
return [0xA2, 0x00, 0xAD, 0x22, 0x14, 0xC9, ycns, 0xF0, 0x02, 0xA2, 0x02, 0xC2];
}
}

function randomizeCI2(random, rom)
{
for (var i = 0; i < CI2_ROOM_OFFSETS.length; ++i)
{
var roomset = CI2_ROOM_OFFSETS[i], backups = {};
for (var j = 0; j < roomset.length; ++j)
{
var data = backups[roomset[j]] = {};
for (var k in CI2_LAYER_OFFSETS) if (CI2_LAYER_OFFSETS.hasOwnProperty(k))
{
var start = CI2_LAYER_OFFSETS[k] + roomset[j];
data[k] = rom.slice(start, start+2);
}
}

var newrooms = roomset.slice(0).shuffle(random);
for (var j = 0; j < roomset.length; ++j)
{
for (var k in CI2_LAYER_OFFSETS) if (CI2_LAYER_OFFSETS.hasOwnProperty(k))
rom.set(backups[newrooms[j]][k], CI2_LAYER_OFFSETS[k] + roomset[j]);
}
}
}
Loading

0 comments on commit 49780d0

Please sign in to comment.