|
|
|
|
|
|
|
|
]; |
|
|
]; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
set_palette(idx, p=8){ |
|
|
|
|
|
|
|
|
set_palette(apci, p=8){ |
|
|
if (typeof(p) != 'number') |
|
|
if (typeof(p) != 'number') |
|
|
throw new TypeError("First argument expected to be a number."); |
|
|
throw new TypeError("First argument expected to be a number."); |
|
|
if (!(idx instanceof Array)) |
|
|
|
|
|
|
|
|
if (!(apci instanceof Array)) |
|
|
throw new TypeError("Expected an array of color index values."); |
|
|
throw new TypeError("Expected an array of color index values."); |
|
|
if (p < 0 || p >= 8){ // Setting ALL palettes! |
|
|
if (p < 0 || p >= 8){ // Setting ALL palettes! |
|
|
if (idx.length != 25) |
|
|
|
|
|
|
|
|
if (apci.length != 25) |
|
|
throw new RangeError("Color array must contain 25 color values to fill all palettes."); |
|
|
throw new RangeError("Color array must contain 25 color values to fill all palettes."); |
|
|
this.__BGColor = idx[0]; |
|
|
this.__BGColor = idx[0]; |
|
|
for (var i=0; i < 24; i++){ |
|
|
for (var i=0; i < 24; i++){ |
|
|
this.__palette[i] = idx[i+1] |
|
|
|
|
|
|
|
|
if (typeof(apci[i+1]) == 'number'){ |
|
|
|
|
|
this.__palette[i] = apci[i+1] |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} else { // Setting a specific palette. |
|
|
} else { // Setting a specific palette. |
|
|
if (idx.length != 3) |
|
|
|
|
|
|
|
|
if (apci.length != 3) |
|
|
throw new RangeError("Color array must contain three color values."); |
|
|
throw new RangeError("Color array must contain three color values."); |
|
|
p *= 3; |
|
|
p *= 3; |
|
|
for (var i=0; i < 4; i++){ |
|
|
for (var i=0; i < 4; i++){ |
|
|
if (typeof(idx[i]) === 'number'){ |
|
|
|
|
|
this.__palette[p+i] = idx[i]; |
|
|
|
|
|
|
|
|
if (typeof(apci[i]) === 'number'){ |
|
|
|
|
|
this.__palette[p+i] = apci[i]; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
return this; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
set_palette_syscolor_index(p, pci, sci){ |
|
|
|
|
|
if (typeof(p) != 'number' || typeof(pci) != 'number' || typeof(sci) != 'number') |
|
|
|
|
|
throw new TypeError("Palette, palette color, and system color index expected to be numbers."); |
|
|
|
|
|
if (p < 0 || p >= 8){ |
|
|
|
|
|
throw new RangeError("Palette index is out of bounds."); |
|
|
|
|
|
} |
|
|
|
|
|
if (pci < 0 || pci >= 4){ |
|
|
|
|
|
throw new RangeError("Palette color index is out of bounds."); |
|
|
|
|
|
} |
|
|
|
|
|
if (sci < 0 || sci >= 64){ |
|
|
|
|
|
throw new RangeError("System color index is out of bounds."); |
|
|
|
|
|
} |
|
|
|
|
|
if (pci == 0) |
|
|
|
|
|
this.__BGColor = sci; |
|
|
|
|
|
else |
|
|
|
|
|
this.__palette[(p*3) + (pci-1)] = sci; |
|
|
|
|
|
return this; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
get_palette_syscolor_index(p, idx){ |
|
|
|
|
|
if (typeof(p) != 'number' || typeof(idx) != 'number') |
|
|
|
|
|
|
|
|
get_palette_syscolor_index(p, pci){ |
|
|
|
|
|
if (typeof(p) != 'number' || typeof(pci) != 'number') |
|
|
throw new TypeError("Palette and color index expected to be numbers."); |
|
|
throw new TypeError("Palette and color index expected to be numbers."); |
|
|
if (p < 0 || p >= 8){ |
|
|
if (p < 0 || p >= 8){ |
|
|
throw new RangeError("Palette index is out of bounds."); |
|
|
throw new RangeError("Palette index is out of bounds."); |
|
|
} |
|
|
} |
|
|
if (idx < 0 || idx >= 4){ |
|
|
|
|
|
|
|
|
if (pci < 0 || pci >= 4){ |
|
|
throw new RangeError("Palette color index is out of bounds."); |
|
|
throw new RangeError("Palette color index is out of bounds."); |
|
|
} |
|
|
} |
|
|
return (idx === 0) ? this.__BGColor : this.__palette[(p*3)+(idx-1)]; |
|
|
|
|
|
|
|
|
return (pci === 0) ? this.__BGColor : this.__palette[(p*3)+(pci-1)]; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
get_palette_color(p, idx){ |
|
|
|
|
|
if (typeof(p) != 'number' || typeof(idx) != 'number') |
|
|
|
|
|
|
|
|
get_palette_color(p, pci){ |
|
|
|
|
|
if (typeof(p) != 'number' || typeof(pci) != 'number') |
|
|
throw new TypeError("Palette and color index expected to be numbers."); |
|
|
throw new TypeError("Palette and color index expected to be numbers."); |
|
|
if (p < 0 || p >= 8){ |
|
|
if (p < 0 || p >= 8){ |
|
|
throw new RangeError("Palette index is out of bounds."); |
|
|
throw new RangeError("Palette index is out of bounds."); |
|
|
} |
|
|
} |
|
|
if (idx < 0 || idx >= 4){ |
|
|
|
|
|
|
|
|
if (pci < 0 || pci >= 4){ |
|
|
throw new RangeError("Palette color index is out of bounds."); |
|
|
throw new RangeError("Palette color index is out of bounds."); |
|
|
} |
|
|
} |
|
|
return NESPalette.SystemColor(this.get_palette_syscolor_index(p, idx)); |
|
|
|
|
|
|
|
|
return NESPalette.SystemColor(this.get_palette_syscolor_index(p, pci)); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
to_asm(memname="PaletteData"){ |
|
|
to_asm(memname="PaletteData"){ |