littlejsengine 1.4.8 → 1.4.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/engine/engine.all.js +48 -51
- package/engine/engine.all.min.js +1 -1
- package/engine/engine.all.module.js +54 -60
- package/engine/engine.all.module.min.js +1 -1
- package/engine/engine.all.release.js +48 -51
- package/engine/engine.js +1 -1
- package/engine/engineDraw.js +5 -7
- package/engine/engineExport.js +6 -9
- package/engine/engineMedals.js +21 -22
- package/engine/engineObject.js +6 -6
- package/engine/engineParticles.js +3 -3
- package/engine/engineSettings.js +12 -12
- package/engine/index.d.ts +16 -18
- package/examples/breakout/game.js +10 -10
- package/examples/breakout/gameObjects.js +7 -7
- package/examples/breakout/index.html +3 -3
- package/examples/empty/tiles.png +0 -0
- package/examples/module/game.js +5 -7
- package/examples/module/index.html +1 -1
- package/examples/particles/index.html +4 -14
- package/examples/platformer/index.html +6 -6
- package/examples/puzzle/index.html +2 -2
- package/examples/stress/index.html +1 -1
- package/game.js +0 -1
- package/index.html +13 -13
- package/package.json +1 -1
- package/README.md +0 -80
package/engine/index.d.ts
CHANGED
|
@@ -849,14 +849,14 @@ declare let touchGamepadAlpha: number;
|
|
|
849
849
|
* @default
|
|
850
850
|
* @memberof Settings */
|
|
851
851
|
declare let vibrateEnable: number;
|
|
852
|
-
/** Volume scale to apply to all sound, music and speech
|
|
853
|
-
* @default
|
|
854
|
-
* @memberof Settings */
|
|
855
|
-
declare let soundVolume: number;
|
|
856
852
|
/** All audio code can be disabled and removed from build
|
|
857
853
|
* @default
|
|
858
854
|
* @memberof Settings */
|
|
859
855
|
declare let soundEnable: number;
|
|
856
|
+
/** Volume scale to apply to all sound, music and speech
|
|
857
|
+
* @default
|
|
858
|
+
* @memberof Settings */
|
|
859
|
+
declare let soundVolume: number;
|
|
860
860
|
/** Default range where sound no longer plays
|
|
861
861
|
* @default
|
|
862
862
|
* @memberof Settings */
|
|
@@ -873,18 +873,18 @@ declare let medalDisplayTime: number;
|
|
|
873
873
|
* @default
|
|
874
874
|
* @memberof Settings */
|
|
875
875
|
declare let medalDisplaySlideTime: number;
|
|
876
|
-
/**
|
|
877
|
-
* @default
|
|
878
|
-
* @memberof Settings */
|
|
879
|
-
declare let medalDisplayWidth: number;
|
|
880
|
-
/** Height of medal display
|
|
876
|
+
/** Size of medal display
|
|
881
877
|
* @default
|
|
882
878
|
* @memberof Settings */
|
|
883
|
-
declare let
|
|
879
|
+
declare let medalDisplaySize: Vector2;
|
|
884
880
|
/** Size of icon in medal display
|
|
885
881
|
* @default
|
|
886
882
|
* @memberof Settings */
|
|
887
883
|
declare let medalDisplayIconSize: number;
|
|
884
|
+
/** Set to stop medals from being unlockable (like if cheats are enabled)
|
|
885
|
+
* @default
|
|
886
|
+
* @memberof Settings */
|
|
887
|
+
declare let medalsPreventUnlock: any;
|
|
888
888
|
/**
|
|
889
889
|
* LittleJS Object Base Object Class
|
|
890
890
|
* <br> - Base object class used by the engine
|
|
@@ -1060,8 +1060,8 @@ declare function worldToScreen(worldPos: Vector2): Vector2;
|
|
|
1060
1060
|
declare let engineFontImage: any;
|
|
1061
1061
|
declare class FontImage {
|
|
1062
1062
|
/** Create an image font
|
|
1063
|
-
* @param {HTMLImageElement}
|
|
1064
|
-
* @param {Vector2} [tileSize=vec2(8)] -
|
|
1063
|
+
* @param {HTMLImageElement} [image] - Image for the font, if undefined default font is used
|
|
1064
|
+
* @param {Vector2} [tileSize=vec2(8)] - Size of the font source tiles
|
|
1065
1065
|
* @param {Vector2} [paddingSize=vec2(0,1)] - How much extra space to add between characters
|
|
1066
1066
|
* @param {Number} [startTileIndex=0] - Tile index in image where font starts
|
|
1067
1067
|
* @param {CanvasRenderingContext2D} [context=overlayContext] - context to draw to
|
|
@@ -1528,9 +1528,6 @@ declare class Particle extends EngineObject {
|
|
|
1528
1528
|
/** List of all medals
|
|
1529
1529
|
* @memberof Medals */
|
|
1530
1530
|
declare const medals: any[];
|
|
1531
|
-
/** Set to stop medals from being unlockable (like if cheats are enabled)
|
|
1532
|
-
* @memberof Medals */
|
|
1533
|
-
declare let medalsPreventUnlock: any;
|
|
1534
1531
|
declare let medalsDisplayQueue: any[];
|
|
1535
1532
|
declare let medalsSaveName: any;
|
|
1536
1533
|
declare let medalsDisplayTimeLast: any;
|
|
@@ -1589,11 +1586,11 @@ declare class Newgrounds {
|
|
|
1589
1586
|
* @param {Number} app_id - The newgrounds App ID
|
|
1590
1587
|
* @param {String} [cipher] - The encryption Key (AES-128/Base64) */
|
|
1591
1588
|
constructor(app_id: number, cipher?: string);
|
|
1592
|
-
cryptoJS: any;
|
|
1593
1589
|
app_id: number;
|
|
1594
1590
|
cipher: string;
|
|
1595
1591
|
host: string;
|
|
1596
|
-
|
|
1592
|
+
cryptoJS: any;
|
|
1593
|
+
session_id: string;
|
|
1597
1594
|
medals: any;
|
|
1598
1595
|
scoreboards: any;
|
|
1599
1596
|
/** Send message to unlock a medal by id
|
|
@@ -1621,6 +1618,7 @@ declare class Newgrounds {
|
|
|
1621
1618
|
* @return {Object} - The response JSON object
|
|
1622
1619
|
*/
|
|
1623
1620
|
call(component: string, parameters?: any, async?: boolean): any;
|
|
1621
|
+
CryptoJS(): any;
|
|
1624
1622
|
}
|
|
1625
1623
|
/** The WebGL canvas which appears above the main canvas and below the overlay canvas
|
|
1626
1624
|
* @type {HTMLCanvasElement}
|
|
@@ -1681,7 +1679,7 @@ declare const gl_VERTEX_BUFFER_SIZE: number;
|
|
|
1681
1679
|
/** Name of engine */
|
|
1682
1680
|
declare const engineName: "LittleJS";
|
|
1683
1681
|
/** Version of engine */
|
|
1684
|
-
declare const engineVersion: "1.4.
|
|
1682
|
+
declare const engineVersion: "1.4.9";
|
|
1685
1683
|
/** Frames per second to update objects
|
|
1686
1684
|
* @default */
|
|
1687
1685
|
declare const frameRate: 60;
|
|
@@ -8,22 +8,22 @@ let levelSize, ball, paddle, score, brickCount;
|
|
|
8
8
|
|
|
9
9
|
// sound effects
|
|
10
10
|
const sound_start = new Sound([,0,500,,.04,.3,1,2,,,570,.02,.02,,,,.04]);
|
|
11
|
-
const sound_break = new Sound([,,90,,.01,.03,4,,,,,,,9,50,.2,,.2,.01]
|
|
12
|
-
const sound_bounce = new Sound([,,1e3,,.03,.02,1,2,,,940,.03,,,,,.2,.6,,.06]
|
|
11
|
+
const sound_break = new Sound([,,90,,.01,.03,4,,,,,,,9,50,.2,,.2,.01]);
|
|
12
|
+
const sound_bounce = new Sound([,,1e3,,.03,.02,1,2,,,940,.03,,,,,.2,.6,,.06]);
|
|
13
13
|
|
|
14
14
|
///////////////////////////////////////////////////////////////////////////////
|
|
15
15
|
function gameInit()
|
|
16
16
|
{
|
|
17
17
|
canvasFixedSize = vec2(1280, 720); // 720p
|
|
18
|
-
levelSize = vec2(
|
|
18
|
+
levelSize = vec2(38, 20);
|
|
19
19
|
cameraPos = levelSize.scale(.5);
|
|
20
|
-
paddle = new Paddle(vec2(levelSize.x/2-12,
|
|
20
|
+
paddle = new Paddle(vec2(levelSize.x/2-12,1));
|
|
21
21
|
score = brickCount = 0;
|
|
22
22
|
|
|
23
23
|
// spawn bricks
|
|
24
24
|
const pos = vec2();
|
|
25
|
-
for (pos.x =
|
|
26
|
-
for (pos.y =
|
|
25
|
+
for (pos.x = 4; pos.x <= levelSize.x-4; pos.x += 2)
|
|
26
|
+
for (pos.y = 12; pos.y <= levelSize.y-2; pos.y += 1)
|
|
27
27
|
new Brick(pos);
|
|
28
28
|
|
|
29
29
|
initPostProcess(); // set up a post processing shader
|
|
@@ -35,7 +35,7 @@ function gameUpdate()
|
|
|
35
35
|
// spawn ball
|
|
36
36
|
if (!ball && (mouseWasPressed(0) || gamepadWasPressed(0)))
|
|
37
37
|
{
|
|
38
|
-
ball = new Ball(vec2(levelSize.x/2, levelSize.y/2
|
|
38
|
+
ball = new Ball(vec2(levelSize.x/2, levelSize.y/2));
|
|
39
39
|
sound_start.play();
|
|
40
40
|
}
|
|
41
41
|
}
|
|
@@ -59,11 +59,11 @@ function gameRenderPost()
|
|
|
59
59
|
{
|
|
60
60
|
// use built in image font for text
|
|
61
61
|
const font = new FontImage;
|
|
62
|
-
font.drawText('Score: ' + score, cameraPos.add(vec2(0,
|
|
62
|
+
font.drawText('Score: ' + score, cameraPos.add(vec2(0,9.6)), .1, 1);
|
|
63
63
|
if (!brickCount)
|
|
64
|
-
font.drawText('You Win!', cameraPos.add(vec2(0,-5)), .
|
|
64
|
+
font.drawText('You Win!', cameraPos.add(vec2(0,-5)), .2, 1);
|
|
65
65
|
else if (!ball)
|
|
66
|
-
font.drawText('Click to Play', cameraPos.add(vec2(0,-5)), .
|
|
66
|
+
font.drawText('Click to Play', cameraPos.add(vec2(0,-5)), .2, 1);
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
///////////////////////////////////////////////////////////////////////////////
|
|
@@ -9,7 +9,7 @@ class Paddle extends EngineObject
|
|
|
9
9
|
{
|
|
10
10
|
constructor(pos)
|
|
11
11
|
{
|
|
12
|
-
super(pos, vec2(
|
|
12
|
+
super(pos, vec2(5,.5));
|
|
13
13
|
|
|
14
14
|
// set to collide
|
|
15
15
|
this.setCollision();
|
|
@@ -38,7 +38,7 @@ class Brick extends EngineObject
|
|
|
38
38
|
{
|
|
39
39
|
constructor(pos)
|
|
40
40
|
{
|
|
41
|
-
super(pos, vec2(
|
|
41
|
+
super(pos, vec2(2,1), 1, vec2(32,16), 0, randColor());
|
|
42
42
|
|
|
43
43
|
// set to collide
|
|
44
44
|
this.setCollision();
|
|
@@ -62,7 +62,7 @@ class Brick extends EngineObject
|
|
|
62
62
|
0, vec2(16), // tileIndex, tileSize
|
|
63
63
|
color1, color2, // colorStartA, colorStartB
|
|
64
64
|
color1.scale(1,0), color2.scale(1,0), // colorEndA, colorEndB
|
|
65
|
-
.2,
|
|
65
|
+
.2, .5, 1, .05, .05,// time, sizeStart, sizeEnd, speed, angleSpeed
|
|
66
66
|
.99, .95, .4, PI, // damping, angleDamping, gravityScale, cone
|
|
67
67
|
.1, .5, 0, 1 // fadeRate, randomness, collide, additive
|
|
68
68
|
);
|
|
@@ -76,11 +76,11 @@ class Ball extends EngineObject
|
|
|
76
76
|
{
|
|
77
77
|
constructor(pos)
|
|
78
78
|
{
|
|
79
|
-
super(pos, vec2(
|
|
79
|
+
super(pos, vec2(.5), 0);
|
|
80
80
|
|
|
81
81
|
// make a bouncy ball
|
|
82
82
|
this.setCollision();
|
|
83
|
-
this.velocity = vec2(randSign(), -1).scale(.
|
|
83
|
+
this.velocity = vec2(randSign(), -1).scale(.1);
|
|
84
84
|
this.elasticity = 1;
|
|
85
85
|
this.damping = 1;
|
|
86
86
|
}
|
|
@@ -117,7 +117,7 @@ class Ball extends EngineObject
|
|
|
117
117
|
{
|
|
118
118
|
// put english on the ball when it collides with paddle
|
|
119
119
|
this.velocity = this.velocity.rotate(.2 * (this.pos.x - o.pos.x));
|
|
120
|
-
this.velocity.y = max(
|
|
120
|
+
this.velocity.y = max(-this.velocity.y, .2);
|
|
121
121
|
this.bounce();
|
|
122
122
|
return 0;
|
|
123
123
|
}
|
|
@@ -127,7 +127,7 @@ class Ball extends EngineObject
|
|
|
127
127
|
bounce()
|
|
128
128
|
{
|
|
129
129
|
// speed up
|
|
130
|
-
const speed = min(1.
|
|
130
|
+
const speed = min(1.05*this.velocity.length(), .5);
|
|
131
131
|
this.velocity = this.velocity.normalize(speed);
|
|
132
132
|
|
|
133
133
|
// scale bounce sound pitch by speed
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
<link rel=icon type=image/png href=../../favicon.png>
|
|
6
6
|
</head><body>
|
|
7
7
|
|
|
8
|
-
<script src=../../engine/engine.all.js?
|
|
9
|
-
<script src=gameObjects.js?
|
|
10
|
-
<script src=game.js?
|
|
8
|
+
<script src=../../engine/engine.all.js?123></script>
|
|
9
|
+
<script src=gameObjects.js?123></script>
|
|
10
|
+
<script src=game.js?123></script>
|
package/examples/empty/tiles.png
CHANGED
|
Binary file
|
package/examples/module/game.js
CHANGED
|
@@ -12,7 +12,7 @@ const Timer = LittleJS.Timer;
|
|
|
12
12
|
const vec2 = LittleJS.vec2;
|
|
13
13
|
|
|
14
14
|
// sound effects
|
|
15
|
-
const sound_click = new LittleJS.Sound([
|
|
15
|
+
const sound_click = new LittleJS.Sound([1,.5]);
|
|
16
16
|
|
|
17
17
|
// medals
|
|
18
18
|
const medal_example = new LittleJS.Medal(0, 'Example Medal', 'Welcome to LittleJS!');
|
|
@@ -26,8 +26,8 @@ function gameInit()
|
|
|
26
26
|
{
|
|
27
27
|
// create tile collision and visible tile layer
|
|
28
28
|
LittleJS.initTileCollision(vec2(32, 16));
|
|
29
|
-
const tileLayer = new LittleJS.TileLayer(vec2(), LittleJS.tileCollisionSize);
|
|
30
29
|
const pos = vec2();
|
|
30
|
+
const tileLayer = new LittleJS.TileLayer(pos, LittleJS.tileCollisionSize);
|
|
31
31
|
|
|
32
32
|
// get level data from the tiles image
|
|
33
33
|
const imageLevelDataRow = 1;
|
|
@@ -36,24 +36,22 @@ function gameInit()
|
|
|
36
36
|
for (pos.x = LittleJS.tileCollisionSize.x; pos.x--;)
|
|
37
37
|
for (pos.y = LittleJS.tileCollisionSize.y; pos.y--;)
|
|
38
38
|
{
|
|
39
|
-
const
|
|
40
|
-
if (
|
|
39
|
+
const imageData = mainContext.getImageData(pos.x, 16*(imageLevelDataRow+1)-pos.y-1, 1, 1).data;
|
|
40
|
+
if (imageData[0])
|
|
41
41
|
{
|
|
42
|
-
LittleJS.setTileCollisionData(pos, 1);
|
|
43
|
-
|
|
44
42
|
const tileIndex = 1;
|
|
45
43
|
const direction = LittleJS.randInt(4)
|
|
46
44
|
const mirror = LittleJS.randInt(2);
|
|
47
45
|
const color = LittleJS.randColor();
|
|
48
46
|
const data = new LittleJS.TileLayerData(tileIndex, direction, mirror, color);
|
|
49
47
|
tileLayer.setData(pos, data);
|
|
48
|
+
LittleJS.setTileCollisionData(pos, 1);
|
|
50
49
|
}
|
|
51
50
|
}
|
|
52
51
|
tileLayer.redraw();
|
|
53
52
|
|
|
54
53
|
// move camera to center of collision
|
|
55
54
|
LittleJS.setCameraPos(LittleJS.tileCollisionSize.scale(.5));
|
|
56
|
-
LittleJS.setCameraScale(32);
|
|
57
55
|
|
|
58
56
|
// enable gravity
|
|
59
57
|
LittleJS.setGravity(-.01);
|
|
@@ -15,18 +15,7 @@ button
|
|
|
15
15
|
</style>
|
|
16
16
|
</head><body>
|
|
17
17
|
|
|
18
|
-
<script src=../../engine/
|
|
19
|
-
<script src=../../engine/engineUtilities.js?121></script>
|
|
20
|
-
<script src=../../engine/engineSettings.js?121></script>
|
|
21
|
-
<script src=../../engine/engineObject.js?121></script>
|
|
22
|
-
<script src=../../engine/engineDraw.js?121></script>
|
|
23
|
-
<script src=../../engine/engineInput.js?121></script>
|
|
24
|
-
<script src=../../engine/engineAudio.js?121></script>
|
|
25
|
-
<script src=../../engine/engineTileLayer.js?121></script>
|
|
26
|
-
<script src=../../engine/engineParticles.js?121></script>
|
|
27
|
-
<script src=../../engine/engineMedals.js?121></script>
|
|
28
|
-
<script src=../../engine/engineWebGL.js?121></script>
|
|
29
|
-
<script src=../../engine/engine.js?121></script>
|
|
18
|
+
<script src=../../engine/engine.all.js?123></script>
|
|
30
19
|
<script>
|
|
31
20
|
|
|
32
21
|
'use strict';
|
|
@@ -74,6 +63,8 @@ addSetting('randomColorLinear','checkbox',0,0,0, 'Should color be randomized li
|
|
|
74
63
|
|
|
75
64
|
function makeEmitter()
|
|
76
65
|
{
|
|
66
|
+
if (particleSystem)
|
|
67
|
+
particleSystem.destroy();
|
|
77
68
|
particleSystem = new ParticleEmitter(cameraPos);
|
|
78
69
|
particleSystem.emitConeAngle =
|
|
79
70
|
particleSystem.particleConeAngle = 3.14;
|
|
@@ -84,7 +75,7 @@ function gameInit()
|
|
|
84
75
|
{
|
|
85
76
|
makeEmitter();
|
|
86
77
|
gravity = -.01;
|
|
87
|
-
cameraScale =
|
|
78
|
+
cameraScale = 64;
|
|
88
79
|
|
|
89
80
|
const div = particleSystemDiv = document.createElement('div');
|
|
90
81
|
div.innerHTML = '<big><b>LittleJS Particle Tool';
|
|
@@ -175,7 +166,6 @@ function gameInit()
|
|
|
175
166
|
{
|
|
176
167
|
if (!confirm('Reset to default?'))
|
|
177
168
|
return;
|
|
178
|
-
particleSystem.destroy();
|
|
179
169
|
makeEmitter();
|
|
180
170
|
updateInputs(0);
|
|
181
171
|
cameraScale = 50;
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
<link rel=icon type=image/png href=../../favicon.png>
|
|
6
6
|
</head><body>
|
|
7
7
|
|
|
8
|
-
<script src=../../engine/engine.all.js?
|
|
9
|
-
<script src=gameObjects.js?
|
|
10
|
-
<script src=gamePlayer.js?
|
|
11
|
-
<script src=gameEffects.js?
|
|
12
|
-
<script src=gameLevel.js?
|
|
13
|
-
<script src=game.js?
|
|
8
|
+
<script src=../../engine/engine.all.js?123></script>
|
|
9
|
+
<script src=gameObjects.js?123></script>
|
|
10
|
+
<script src=gamePlayer.js?123></script>
|
|
11
|
+
<script src=gameEffects.js?123></script>
|
|
12
|
+
<script src=gameLevel.js?123></script>
|
|
13
|
+
<script src=game.js?123></script>
|
package/game.js
CHANGED
package/index.html
CHANGED
|
@@ -6,21 +6,21 @@
|
|
|
6
6
|
</head><body>
|
|
7
7
|
|
|
8
8
|
<!-- LittleJS engine scripts -->
|
|
9
|
-
<script src=engine/engineDebug.js?
|
|
10
|
-
<script src=engine/engineUtilities.js?
|
|
11
|
-
<script src=engine/engineSettings.js?
|
|
12
|
-
<script src=engine/engineObject.js?
|
|
13
|
-
<script src=engine/engineDraw.js?
|
|
14
|
-
<script src=engine/engineInput.js?
|
|
15
|
-
<script src=engine/engineAudio.js?
|
|
16
|
-
<script src=engine/engineTileLayer.js?
|
|
17
|
-
<script src=engine/engineParticles.js?
|
|
18
|
-
<script src=engine/engineMedals.js?
|
|
19
|
-
<script src=engine/engineWebGL.js?
|
|
20
|
-
<script src=engine/engine.js?
|
|
9
|
+
<script src=engine/engineDebug.js?123></script>
|
|
10
|
+
<script src=engine/engineUtilities.js?123></script>
|
|
11
|
+
<script src=engine/engineSettings.js?123></script>
|
|
12
|
+
<script src=engine/engineObject.js?123></script>
|
|
13
|
+
<script src=engine/engineDraw.js?123></script>
|
|
14
|
+
<script src=engine/engineInput.js?123></script>
|
|
15
|
+
<script src=engine/engineAudio.js?123></script>
|
|
16
|
+
<script src=engine/engineTileLayer.js?123></script>
|
|
17
|
+
<script src=engine/engineParticles.js?123></script>
|
|
18
|
+
<script src=engine/engineMedals.js?123></script>
|
|
19
|
+
<script src=engine/engineWebGL.js?123></script>
|
|
20
|
+
<script src=engine/engine.js?123></script>
|
|
21
21
|
|
|
22
22
|
<!-- You can also include all engine scripts like this... -->
|
|
23
23
|
<!-- <script src=engine/engine.all.js></script> -->
|
|
24
24
|
|
|
25
25
|
<!-- Add your game scripts here -->
|
|
26
|
-
<script src=game.js?
|
|
26
|
+
<script src=game.js?123></script>
|
package/package.json
CHANGED
package/README.md
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
#  LittleJS - The Tiny JavaScript Game Engine That Can
|
|
2
|
-
|
|
3
|
-
## All aboard!
|
|
4
|
-
|
|
5
|
-
LittleJS is a super lightweight JavaScript game engine with a fast hybrid rendering system. It provides a comprehensive set of tools including rendering, physics, particles, sound effects, music, input handling, and debug tools. The code is very clean and well documented with a variety of examples to get you started. Choo-Choo! 🚂
|
|
6
|
-
<div align="center">
|
|
7
|
-
|
|
8
|
-
## [Demo](https://killedbyapixel.github.io/LittleJS) | [Docs](https://killedbyapixel.github.io/LittleJS/docs) | [Trailer](https://youtu.be/chuBzGjv7Ms) | [Discord](https://discord.gg/zb7hcGkyZe)
|
|
9
|
-
</div>
|
|
10
|
-
|
|
11
|
-

|
|
12
|
-
|
|
13
|
-
## Examples
|
|
14
|
-
|
|
15
|
-
### [Hello World](https://killedbyapixel.github.io/LittleJS/) - Clean project with only a few things to get you started
|
|
16
|
-
### [Puzzle Game](https://killedbyapixel.github.io/LittleJS/examples/puzzle) - Match 3 puzzle game with HD rendering and high score tracking
|
|
17
|
-
### [Platformer](https://killedbyapixel.github.io/LittleJS/examples/platformer) - Platformer/shooter with procedural generation and destruction
|
|
18
|
-
### [Breakout](https://killedbyapixel.github.io/LittleJS/examples/breakout) - Breakout game with post processing effect
|
|
19
|
-
### [Stress Test](https://killedbyapixel.github.io/LittleJS/examples/stress) - Max sprite/object test and music system demo
|
|
20
|
-
### [Particle System Designer](https://killedbyapixel.github.io/LittleJS/examples/particles) - Particle system editor and visualizer
|
|
21
|
-
|
|
22
|
-
## Features
|
|
23
|
-
|
|
24
|
-
- Very small footprint with no dependencies
|
|
25
|
-
- Can update and render 10,000+ objects at 60fps, often many times more
|
|
26
|
-
- Object oriented system with fast 2D physics and collision handling for axis aligned boxes
|
|
27
|
-
- Positional audio effects with [ZzFX](https://killedbyapixel.github.io/ZzFX/) and music with [ZzFXM](https://keithclark.github.io/ZzFXM/), mp3s, or wavs
|
|
28
|
-
- Input processing system with keyboard, mouse, gamepad, and touch support
|
|
29
|
-
- Particle effects system (particle editor/designer in progress)
|
|
30
|
-
- Medal system tracks and displays achievements with Newgrounds integration
|
|
31
|
-
- Several easy to understand example projects you can build on
|
|
32
|
-
- Apply [Shadertoy](https://www.shadertoy.com) compatible shaders for post processinge effects
|
|
33
|
-
- Debug tools and debug rendering system
|
|
34
|
-
- [Full documentation](https://killedbyapixel.github.io/LittleJS/docs) automatically generated from the source code block tags with [JSDoc](https://github.com/jsdoc/jsdoc)
|
|
35
|
-
- Build system automatically combines everything, minifies, and removes unused code
|
|
36
|
-
- For size coding competitions like [js13kGames](https://js13kgames.com/), starter project builds to a 7KB zip file
|
|
37
|
-
- Easily build a Windows executable with [Electron](https://www.electronjs.org/) for distribution on platforms like Steam
|
|
38
|
-
- Open Source with the [MIT license](https://github.com/KilledByAPixel/LittleJS/blob/main/LICENSE) so it can be used for anything you want
|
|
39
|
-
- Can be imported as a JavaScript module and includes [an example module project](https://killedbyapixel.github.io/LittleJS/examples/module)
|
|
40
|
-
|
|
41
|
-
## Builds
|
|
42
|
-
|
|
43
|
-
To easily include LittleJS in your game, you can use one of the 3 pre-built js files. These are also built automatically by the build scripts.
|
|
44
|
-
|
|
45
|
-
- [engine.all.js](https://github.com/KilledByAPixel/LittleJS/blob/main/engine/engine.all.js) - The full game engine with debug mode available
|
|
46
|
-
- [engine.all.release.js](https://github.com/KilledByAPixel/LittleJS/blob/main/engine/engine.all.release.js) - The engine optimized for release builds
|
|
47
|
-
- [engine.all.min.js](https://github.com/KilledByAPixel/LittleJS/blob/main/engine/engine.all.min.js) - The engine in release mode and minified
|
|
48
|
-
|
|
49
|
-
LittleJS can also be imported as a module. There are two module includes that are automatically built.
|
|
50
|
-
|
|
51
|
-
- [engine.all.module.js](https://github.com/KilledByAPixel/LittleJS/blob/main/engine/engine.all.module.js) - The engine exported as a module with debug mode available
|
|
52
|
-
- [engine.all.module.min.js](https://github.com/KilledByAPixel/LittleJS/blob/main/engine/engine.all.module.min.js) - The engine exported as a module in release mode
|
|
53
|
-
|
|
54
|
-
The hello world example includes a batch file [build.bat](https://github.com/KilledByAPixel/LittleJS/blob/main/build.bat) that compresses everything into a tiny zip file using Google Closure, UglifyJS, Roadroller, and ECT. You must run [buildSetup.bat](https://github.com/KilledByAPixel/LittleJS/blob/main/buildSetup.bat) to install the necessary npm dependencies.
|
|
55
|
-
|
|
56
|
-
## Debugging
|
|
57
|
-
|
|
58
|
-
Debug builds of LittleJS have a special menu that can be opened by pressing ~, the tilde key.
|
|
59
|
-
|
|
60
|
-
- ~: Debug Overlay
|
|
61
|
-
- 1: Debug Physics
|
|
62
|
-
- 2: Debug Particles
|
|
63
|
-
- 3: Debug Gamepads
|
|
64
|
-
- 4: God Mode
|
|
65
|
-
- 5: Save Screenshot
|
|
66
|
-
|
|
67
|
-
## Games Made With LittleJS
|
|
68
|
-
|
|
69
|
-
- [Space Huggers](https://www.newgrounds.com/portal/view/819609) - Run and gun platformer with procedural levels
|
|
70
|
-
- [Undergrowth](https://undergrowth.squidband.uk/) - An interactive music videogame for the band Squid
|
|
71
|
-
- [Space Huggers - JS13K Edition](https://github.com/KilledByAPixel/SpaceHuggers) - Original js13k game with source code
|
|
72
|
-
- [Isletopia](https://store.steampowered.com/app/1861260/Isletopia) - Relaxing strategy game of greenifying barren islands
|
|
73
|
-
- [Dead Again](https://js13kgames.com/entries/dead-again) - Top down survial horror by [sanojian & repsej](https://github.com/sanojian/js13k_2022)
|
|
74
|
-
- [Hel's Trial](https://js13kgames.com/entries/hels-trial) - Turn based RPG by [Sebastian Dorn](https://github.com/sebadorn/js13k-2022-death)
|
|
75
|
-
- [Bit Butcher](https://js13kgames.com/entries/bit-butcher) - Survival crafting game by [Deathray Games](https://github.com/deathraygames/bit-butcher)
|
|
76
|
-
- [Necrotic Commander](https://js13kgames.com/entries/necrotic-commander) - Tower defense game by [Daniel Jeffery](https://github.com/d-jeffery/NecroticCommander)
|
|
77
|
-
- [Boxing up Bamboo](https://patrickgh3.itch.io/boxing-up-bamboo) - A challenging puzzle game by [Patrick Traynor](https://cwpat.me/about)
|
|
78
|
-
- Send me your games!
|
|
79
|
-
|
|
80
|
-

|