A pixel art painter geared specifically at NES pixel art. Includes export for .chr binary file as well as palette and namespace data.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

128 lines
2.9KB

  1. import Utils from "/app/js/common/Utils.js";
  2. import ISurface from "/app/js/ifaces/ISurface.js";
  3. import NESBank from "/app/js/models/NESBank.js";
  4. import NESPalette from "/app/js/models/NESPalette.js";
  5. export default class NESNameTable extends ISurface{
  6. constructor(){
  7. super();
  8. this.__bank = null;
  9. this.__palette = null;
  10. this.__tiles = [];
  11. this.__attribs = [];
  12. for (let i=0; i < 960; i++)
  13. this.__tiles[i] = 0;
  14. for (let i=0; i < 64; i++)
  15. this.__attribs[i] = [0,0,0,0];
  16. }
  17. get bank(){return this.__bank;}
  18. set bank(b){
  19. if (b !== null and !(b instanceof NESBank))
  20. throw new TypeError("Expected a NESBank object.");
  21. this.__bank = b;
  22. }
  23. get palette(){return this.__palette;}
  24. set palette(p){
  25. if (p !== null && !(p instanceof NESPalette))
  26. throw new TypeError("Expected a NESPalette object.");
  27. this.__palette = p;
  28. }
  29. get width(){return 256;}
  30. get height(){return 240;}
  31. get length(){return 0;}
  32. get undos(){return 0;}
  33. get redos(){return 0;}
  34. copy(b){
  35. this.bank = b.bank;
  36. this.palette = b.palette;
  37. for (let i=0; i < 960; i++)
  38. this.__tiles[i] = b.__tiles[i];
  39. for (let i=0; i < 64; i++){
  40. this.__attribs[i] = [
  41. b.__attribs[i][0],
  42. b.__attribs[i][1],
  43. b.__attribs[i][2],
  44. b.__attribs[i][3]
  45. ];
  46. }
  47. return this;
  48. }
  49. clone(){
  50. return (new NESNameTable()).clone(this);
  51. }
  52. snapshot(){return this;}
  53. undo(){return this;}
  54. redo(){return this;}
  55. clearUndos(){return this;}
  56. clearRedos(){return this;}
  57. clearHistory(){
  58. return this.clearUndos().clearRedos();
  59. }
  60. getColor(x, y){
  61. var pal = {pi:-1, ci:-1};
  62. try {
  63. pal = this.getColorIndex(x, y);
  64. } catch (e) {throw e;}
  65. if (this.__palette !== null && pal.pi >= 0 && pal.ci >= 0) {
  66. return this.__palette.get_palette_color(pal.pi, pal.ci);
  67. } else if (pal.ci >= 0){
  68. return NESPalette.Default(pal.ci);
  69. }
  70. return NESPalette.Default(4);
  71. }
  72. getColorIndex(x, y){
  73. if (x < 0 || x >= this.width || y < 0 || y >= this.height)
  74. throw new RangeError("Coordinates are out of bounds.");
  75. var pi = -1;
  76. var ci = -1;
  77. if (this.__bank !== null){
  78. var _x = Math.floor(x % 8);
  79. var _y = Math.floor(y % 8);
  80. var tileX = Math.floor(x / 32);
  81. var tileY = Math.floor(y / 32);
  82. var tileIndex = 256 + this.__tiles[(tileY * 32) + tileX];
  83. ci = this.__bank.rp[tileIndex].getPixelIndex(_x, _y);
  84. pi = this._PaletteFromCoords(x, y);
  85. }
  86. return {pi:pi, ci:ci};
  87. }
  88. setColorIndex(x, y, ci, pi){
  89. return this;
  90. }
  91. _PaletteFromCoords(x,y){
  92. var blockX = Math.floor(x / 32);
  93. var blockY = Math.floor(y / 32);
  94. var bIndex = (blockY * 8) + blockX;
  95. var palX = Math.floor(x % 16);
  96. var palY = Math.floor(y % 16);
  97. var pIndex = ((palX < 8) ? 0 : 1) + ((palY >= 8) ? 2 : 0);
  98. return this.__attribs[bIndex][pIndex];
  99. }
  100. }