Skip to content

Instantly share code, notes, and snippets.

@shaunlebron
Created August 27, 2015 14:09
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shaunlebron/ca13cd4058fc2cbf415b to your computer and use it in GitHub Desktop.
Save shaunlebron/ca13cd4058fc2cbf415b to your computer and use it in GitHub Desktop.
pacman spritesheet modified for gh4st
var atlas = (function(){
var canvas,ctx;
var size = 22;
var cols = 14; // has to be ONE MORE than intended to fix some sort of CHROME BUG (last cell always blank?)
var rows = 22;
var creates = 0;
var drawGrid = function() {
// draw grid overlay
var canvas = document.getElementById('gridcanvas');
if (!canvas) {
return;
}
var w = size*cols*renderScale;
var h = size*rows*renderScale;
canvas.width = w;
canvas.height = h;
var ctx = canvas.getContext('2d');
ctx.clearRect(0,0,w,h);
var x,y;
var step = size*renderScale;
ctx.beginPath();
for (x=0; x<=w; x+=step) {
ctx.moveTo(x,0);
ctx.lineTo(x,h);
}
for (y=0; y<=h; y+=step) {
ctx.moveTo(0,y);
ctx.lineTo(w,y);
}
ctx.lineWidth = "1px";
ctx.lineCap = "square";
ctx.strokeStyle="rgba(255,255,255,0.5)";
ctx.stroke();
};
var create = function() {
drawGrid();
canvas = document.getElementById('atlas');
ctx = canvas.getContext("2d");
/*
canvas.style.left = 0;
canvas.style.top = 0;
canvas.style.position = "absolute";
*/
var w = size*cols*renderScale;
var h = size*rows*renderScale;
canvas.width = w;
canvas.height = h;
if (creates > 0) {
ctx.restore();
}
creates++;
ctx.save();
ctx.clearRect(0,0,w,h);
ctx.scale(renderScale,renderScale);
var drawAtCell = function(f,row,col) {
var x = col*size + size/2;
var y = row*size + size/2;
f(x,y);
};
var row = 0;
drawAtCell(function(x,y) { drawCherry(ctx,x,y); }, row,0);
drawAtCell(function(x,y) { drawStrawberry(ctx,x,y); }, row,1);
drawAtCell(function(x,y) { drawOrange(ctx,x,y); }, row,2);
drawAtCell(function(x,y) { drawApple(ctx,x,y); }, row,3);
drawAtCell(function(x,y) { drawMelon(ctx,x,y); }, row,4);
drawAtCell(function(x,y) { drawGalaxian(ctx,x,y); }, row,5);
drawAtCell(function(x,y) { drawBell(ctx,x,y); }, row,6);
drawAtCell(function(x,y) { drawKey(ctx,x,y); }, row,7);
drawAtCell(function(x,y) { drawPretzel(ctx,x,y); }, row,8);
drawAtCell(function(x,y) { drawPear(ctx,x,y); }, row,9);
drawAtCell(function(x,y) { drawBanana(ctx,x,y); }, row,10);
drawAtCell(function(x,y) { drawCookie(ctx,x,y); }, row,11);
drawAtCell(function(x,y) { drawCookieFlash(ctx,x,y); }, row,12);
var drawGhostCells = function(row,color) {
var i,f;
var col = 0;
for (i=0; i<4; i++) { // dirEnum
for (f=0; f<2; f++) { // frame
drawAtCell(function(x,y) { drawGhostSprite(ctx, x,y, f, i, false, false, false, color); }, row,col);
col++;
}
}
};
row++;
drawGhostCells(row, "#FF0000");
row++;
drawGhostCells(row, "#FFB8FF");
row++;
drawGhostCells(row, "#00FFFF");
row++;
drawGhostCells(row, "#FFB851");
row++;
// draw disembodied eyes
(function(){
var i;
var col = 0;
for (i=0; i<4; i++) { // dirEnum
drawAtCell(function(x,y) { drawGhostSprite(ctx, x,y, 0, i, false, false, true, "#fff"); }, row,col);
col++;
}
})();
// draw ghosts scared
drawAtCell(function(x,y) { drawGhostSprite(ctx, x,y, 0, DIR_UP, true, false, false, "#fff"); }, row,4);
drawAtCell(function(x,y) { drawGhostSprite(ctx, x,y, 1, DIR_UP, true, false, false, "#fff"); }, row,5);
drawAtCell(function(x,y) { drawGhostSprite(ctx, x,y, 0, DIR_UP, true, true, false, "#fff"); }, row,6);
drawAtCell(function(x,y) { drawGhostSprite(ctx, x,y, 1, DIR_UP, true, true, false, "#fff"); }, row,7);
var drawPacCells = function(row,col,dir) {
drawAtCell(function(x,y) { drawPacmanSprite(ctx, x,y, dir, 0); }, row, col);
drawAtCell(function(x,y) { drawPacmanSprite(ctx, x,y, dir, Math.PI/6); }, row, col+1);
drawAtCell(function(x,y) { drawPacmanSprite(ctx, x,y, dir, Math.PI/3); }, row, col+2);
};
row++;
// draw pacman directions
(function(){
var i;
var col=0;
for (i=0; i<4; i++) {
drawPacCells(row,col,i);
col+=3;
}
})();
var drawMsPacCells = function(row,col,dir) {
drawAtCell(function(x,y) { drawMsPacmanSprite(ctx, x,y, dir, 0); }, row, col);
drawAtCell(function(x,y) { drawMsPacmanSprite(ctx, x,y, dir, 1); }, row, col+1);
drawAtCell(function(x,y) { drawMsPacmanSprite(ctx, x,y, dir, 2); }, row, col+2);
};
row++;
(function(){
var i;
var col=0;
for (i=0; i<4; i++) {
drawMsPacCells(row,col,i);
col+=3;
}
})();
var drawCookieCells = function(row,col,dir) {
drawAtCell(function(x,y) { drawCookiemanSprite(ctx, x,y, dir, 0, true); }, row, col);
drawAtCell(function(x,y) { drawCookiemanSprite(ctx, x,y, dir, 1, true); }, row, col+1);
drawAtCell(function(x,y) { drawCookiemanSprite(ctx, x,y, dir, 2, true); }, row, col+2);
};
row++;
(function(){
var i;
var col=0;
for (i=0; i<4; i++) {
drawCookieCells(row,col,i);
col+=3;
}
})();
var drawMonsterCells = function(row,color) {
var i,f;
var col=0;
for (i=0; i<4; i++) { // dirEnum
for (f=0; f<2; f++) { // frame
drawAtCell(function(x,y) { drawMonsterSprite(ctx, x,y, f, i, false, false, false, color); }, row,col);
col++;
}
}
};
row++;
drawMonsterCells(row, "#FF0000");
row++;
drawMonsterCells(row, "#FFB8FF");
row++;
drawMonsterCells(row, "#00FFFF");
row++;
drawMonsterCells(row, "#FFB851");
row++;
(function(){
var i;
var col = 0;
for (i=0; i<4; i++) { // dirEnum
drawAtCell(function(x,y) { drawMonsterSprite(ctx, x,y, 0, i, false, false, true, "#fff"); }, row,col);
col++;
}
})();
drawAtCell(function(x,y) { drawMonsterSprite(ctx, x,y, 0, DIR_UP, true, false, false, "#fff"); }, row,4);
drawAtCell(function(x,y) { drawMonsterSprite(ctx, x,y, 1, DIR_UP, true, false, false, "#fff"); }, row,5);
drawAtCell(function(x,y) { drawMonsterSprite(ctx, x,y, 0, DIR_UP, true, true, false, "#fff"); }, row,6);
drawAtCell(function(x,y) { drawMonsterSprite(ctx, x,y, 1, DIR_UP, true, true, false, "#fff"); }, row,7);
var drawOttoCells = function(row,col,dir) {
var i;
for (i=0; i<4; i++) { // frame
drawAtCell(function(x,y) { drawOttoSprite(ctx, x,y, dir, i); }, row, col);
col++;
}
};
row++;
drawOttoCells(row,0, DIR_UP);
drawOttoCells(row,4, DIR_RIGHT);
row++;
drawOttoCells(row,0, DIR_DOWN);
drawOttoCells(row,4, DIR_LEFT);
row++;
drawAtCell(function(x,y) { drawPacPoints(ctx, x,y, 200, "#33ffff"); }, row, 0);
drawAtCell(function(x,y) { drawPacPoints(ctx, x,y, 400, "#33ffff"); }, row, 1);
drawAtCell(function(x,y) { drawPacPoints(ctx, x,y, 800, "#33ffff"); }, row, 2);
drawAtCell(function(x,y) { drawPacPoints(ctx, x,y, 1600, "#33ffff");}, row, 3);
drawAtCell(function(x,y) { drawPacPoints(ctx, x,y, 100, "#ffb8ff"); }, row, 4);
drawAtCell(function(x,y) { drawPacPoints(ctx, x,y, 300, "#ffb8ff"); }, row, 5);
drawAtCell(function(x,y) { drawPacPoints(ctx, x,y, 500, "#ffb8ff"); }, row, 6);
drawAtCell(function(x,y) { drawPacPoints(ctx, x,y, 700, "#ffb8ff"); }, row, 7);
drawAtCell(function(x,y) { drawPacPoints(ctx, x,y, 1000, "#ffb8ff"); }, row, 8);
drawAtCell(function(x,y) { drawPacPoints(ctx, x,y, 2000, "#ffb8ff"); }, row, 9);
drawAtCell(function(x,y) { drawPacPoints(ctx, x,y, 3000, "#ffb8ff"); }, row, 10);
drawAtCell(function(x,y) { drawPacPoints(ctx, x,y, 5000, "#ffb8ff"); }, row, 11);
row++;
drawAtCell(function(x,y) { drawMsPacPoints(ctx, x,y, 100, "#fff"); }, row, 0);
drawAtCell(function(x,y) { drawMsPacPoints(ctx, x,y, 200, "#fff"); }, row, 1);
drawAtCell(function(x,y) { drawMsPacPoints(ctx, x,y, 500, "#fff"); }, row, 2);
drawAtCell(function(x,y) { drawMsPacPoints(ctx, x,y, 700, "#fff"); }, row, 3);
drawAtCell(function(x,y) { drawMsPacPoints(ctx, x,y, 1000, "#fff"); }, row, 4);
drawAtCell(function(x,y) { drawMsPacPoints(ctx, x,y, 2000, "#fff"); }, row, 5);
drawAtCell(function(x,y) { drawMsPacPoints(ctx, x,y, 5000, "#fff"); }, row, 6);
row++;
drawAtCell(function(x,y) {
drawSnail(ctx,x,y, "#0ff");
}, row, 0);
drawAtCell(function(x,y) {
drawSnail(ctx,x,y, "#FFF");
}, row, 1);
var drawMsOttoCells = function(row,col,dir) {
var i;
for (i=0; i<4; i++) { // frame
drawAtCell(function(x,y) { drawMsOttoSprite(ctx, x,y, dir, i); }, row, col);
col++;
}
};
row++;
drawMsOttoCells(row,0, DIR_UP);
drawMsOttoCells(row,4, DIR_RIGHT);
row++;
drawMsOttoCells(row,0, DIR_DOWN);
drawMsOttoCells(row,4, DIR_LEFT);
};
var copyCellTo = function(row, col, destCtx, x, y,display) {
var sx = col*size*renderScale;
var sy = row*size*renderScale;
var sw = renderScale*size;
var sh = renderScale*size;
var dx = x - size/2;
var dy = y - size/2;
var dw = size;
var dh = size;
if (display) {
console.log(sx,sy,sw,sh,dw,dy,dw,dh);
}
destCtx.drawImage(canvas,sx,sy,sw,sh,dx,dy,dw,dh);
};
var copyGhostPoints = function(destCtx,x,y,points) {
var row = 16;
var col = {
200: 0,
400: 1,
800: 2,
1600: 3,
}[points];
if (col != undefined) {
copyCellTo(row, col, destCtx, x, y);
}
};
var copyPacFruitPoints = function(destCtx,x,y,points) {
var row = 16;
var col = {
100: 4,
300: 5,
500: 6,
700: 7,
1000: 8,
2000: 9,
3000: 10,
5000: 11,
}[points];
if (col != undefined) {
copyCellTo(row, col, destCtx, x, y);
}
};
var copyMsPacFruitPoints = function(destCtx,x,y,points) {
var row = 17;
var col = {
100: 0,
200: 1,
500: 2,
700: 3,
1000: 4,
2000: 5,
5000: 6,
}[points];
if (col != undefined) {
copyCellTo(row, col, destCtx, x, y);
}
};
var copyGhostSprite = function(destCtx,x,y,frame,dirEnum,scared,flash,eyes_only,color) {
var row,col;
if (eyes_only) {
row = 5;
col = dirEnum;
}
else if (scared) {
row = 5;
col = flash ? 6 : 4;
col += frame;
}
else {
col = dirEnum*2 + frame;
if (color == blinky.color) {
row = 1;
}
else if (color == pinky.color) {
row = 2;
}
else if (color == inky.color) {
row = 3;
}
else if (color == clyde.color) {
row = 4;
}
else {
row = 5;
}
}
copyCellTo(row, col, destCtx, x, y);
};
var copyMuppetSprite = function(destCtx,x,y,frame,dirEnum,scared,flash,eyes_only,color) {
if (scared) {
if (flash) {
copyFruitSprite(destCtx,x,y,"cookieface");
}
else {
copyFruitSprite(destCtx,x,y,"cookie");
}
}
else {
copyGhostSprite(destCtx,x,y,frame,dirEnum,scared,flash,eyes_only,color);
}
};
var copyMonsterSprite = function(destCtx,x,y,frame,dirEnum,scared,flash,eyes_only,color) {
var row,col;
if (eyes_only) {
row = 13;
col = dirEnum;
}
else if (scared) {
row = 13;
col = flash ? 6 : 4;
col += frame;
}
else {
col = dirEnum*2 + frame;
if (color == blinky.color) {
row = 9;
}
else if (color == pinky.color) {
row = 10;
}
else if (color == inky.color) {
row = 11;
}
else if (color == clyde.color) {
row = 12;
}
else {
row = 13;
}
}
copyCellTo(row, col, destCtx, x, y);
};
var copyOttoSprite = function(destCtx,x,y,dirEnum,frame) {
var col,row;
if (dirEnum == DIR_UP) {
col = frame;
row = 14;
}
else if (dirEnum == DIR_RIGHT) {
col = frame+4;
row = 14;
}
else if (dirEnum == DIR_DOWN) {
col = frame;
row = 15;
}
else if (dirEnum == DIR_LEFT) {
col = frame+4;
row = 15;
}
copyCellTo(row,col,destCtx,x,y);
};
var copyMsOttoSprite = function(destCtx,x,y,dirEnum,frame) {
var col,row;
if (dirEnum == DIR_UP) {
col = frame;
row = 19;
}
else if (dirEnum == DIR_RIGHT) {
col = frame+4;
row = 19;
}
else if (dirEnum == DIR_DOWN) {
col = frame;
row = 20;
}
else if (dirEnum == DIR_LEFT) {
col = frame+4;
row = 20;
}
copyCellTo(row,col,destCtx,x,y);
};
var copySnail = function(destCtx,x,y,frame) {
var row = 18;
var col = frame;
copyCellTo(row,col,destCtx,x,y);
};
var copyPacmanSprite = function(destCtx,x,y,dirEnum,frame) {
var row = 6;
var col;
if (frame == 0) {
col = 0;
}
else {
col = dirEnum*2+1+(frame-1);
}
copyCellTo(row,col,destCtx,x,y);
};
var copyMsPacmanSprite = function(destCtx,x,y,dirEnum,frame) {
// TODO: determine row, col
//copyCellTo(row,col,destCtx,x,y);
var row = 7;
var col = dirEnum*3+frame;
copyCellTo(row,col,destCtx,x,y);
};
var copyCookiemanSprite = function(destCtx,x,y,dirEnum,frame) {
var row = 8;
var col = dirEnum*3+frame;
copyCellTo(row,col,destCtx,x,y);
};
var copyFruitSprite = function(destCtx,x,y,name) {
var row = 0;
var col = {
"cherry": 0,
"strawberry": 1,
"orange": 2,
"apple": 3,
"melon": 4,
"galaxian": 5,
"bell": 6,
"key": 7,
"pretzel": 8,
"pear": 9,
"banana": 10,
"cookie": 11,
"cookieface": 12,
}[name];
copyCellTo(row,col,destCtx,x,y);
};
return {
create: create,
getCanvas: function() { return canvas; },
drawGhostSprite: copyGhostSprite,
drawMonsterSprite: copyMonsterSprite,
drawMuppetSprite: copyMuppetSprite,
drawOttoSprite: copyOttoSprite,
drawMsOttoSprite: copyMsOttoSprite,
drawPacmanSprite: copyPacmanSprite,
drawMsPacmanSprite: copyMsPacmanSprite,
drawCookiemanSprite: copyCookiemanSprite,
drawFruitSprite: copyFruitSprite,
drawGhostPoints: copyGhostPoints,
drawPacFruitPoints: copyPacFruitPoints,
drawMsPacFruitPoints: copyMsPacFruitPoints,
drawSnail: copySnail,
};
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment