Compare commits

...

41 Commits

Author SHA1 Message Date
Sven Slootweg b3a37d44e9 Fixes to preloader, fixes to drawing library, and changed around code structure for gemswap 7 years ago
Sven Slootweg 95b66de252 PreloadJS implementation, fixes, and console.log clean-up 7 years ago
Sven Slootweg e7297ab811 Separate experiments folder, gulpfile fixes, and general repo clean-up 7 years ago
Sven Slootweg 177e80336d Add createSprites convenience function 7 years ago
Sven Slootweg 12a0b150b5 Move loader definition 7 years ago
Sven Slootweg 808f8ecd17 Revert loading mechanism for nicer syntax 7 years ago
Sven Slootweg 709b1a9f19 Build process fixes, and significant overhaul of engine mechanics to facilitate preloading 7 years ago
Sven Slootweg 89507cf125 Looks like it works now! 7 years ago
Sven Slootweg 8f52e91bf3 Attempting to convince Git to stop playing with newlines 7 years ago
Sven Slootweg c4c22ee529 Set sprite dimensions as attributes, and allow for easing abortion 7 years ago
Sven Slootweg 3a8ed9bd36 Make gem tilting effect less intense 7 years ago
Sven Slootweg a77110950f Add npm clarification 7 years ago
Sven Slootweg 17b4acd3fe Formatting fix 7 years ago
Sven Slootweg 4e8929a0b8 Update README 7 years ago
Sven Slootweg 58bf7666a2 Add README 7 years ago
Sven Slootweg be537a9b32 That is no longer necessary. 7 years ago
Sven Slootweg 934859d92b External dependencies added, and Gulp build process configured. That only cost me half a soul... 7 years ago
Sven Slootweg 82a362a54b Combine click events 7 years ago
Sven Slootweg 8ba19bf92b Use different easing algo for gemswap tilting effect 7 years ago
Sven Slootweg ca333b8901 Add easing to gemswap cursor 7 years ago
Sven Slootweg 247975216b Make stacked easing not break chained easing, by correctly passing on end values for consecutive easings. 7 years ago
Sven Slootweg b594fe3e05 Allow for stacked easings through recalculation of the change on each easing value update 7 years ago
Sven Slootweg 29aab13dcd Basic easing demo, and some mouse event handling stuff 7 years ago
Sven Slootweg 2e4582b149 Quad easing functions 7 years ago
Sven Slootweg bca21d496b Linear easing function 7 years ago
Sven Slootweg 7afceec382 Expo easing functions 7 years ago
Sven Slootweg 85658ad24b Fixes for elastic easing functions - but they're still broken 7 years ago
Sven Slootweg 7cf000ce21 Elastic easing functions 7 years ago
Sven Slootweg ed13af354f Cubic easing functions 7 years ago
Sven Slootweg 24c6e785a1 Move shimmer effect to an easing function, and fix circInOut easing bug 7 years ago
Sven Slootweg 3d35f95c15 Add inverse repeats 7 years ago
Sven Slootweg b379187f4f Tweaks 7 years ago
Sven Slootweg 3713464ecb WHOO EASE CHAINING! 7 years ago
Sven Slootweg 7bf498dec2 Changes to the way Ease objects are updated 7 years ago
Sven Slootweg 40ff211362 Revert changes in draw methods; Ease objects will pretend to be primitives instead 7 years ago
Sven Slootweg 4202895988 Fixes 7 years ago
Sven Slootweg 0b51cde152 Timing and part of easing algorithms 7 years ago
Sven Slootweg 783bcc7d3b More updates and stuff 8 years ago
Sven Slootweg 4cccde754c Changes and stuff 8 years ago
Sven Slootweg 05b6972f7d Initial commit for CoffeeScript rewrite 8 years ago
Sven Slootweg 7839380419 Initial commit for rewrite 9 years ago
  1. 2
      .gitignore
  2. 40
      README.md
  3. 17
      TODO.md
  4. 7
      build-games.sh
  5. 11172
      compiled/radium.js
  6. 6
      compiled/radium.min.js
  7. 224
      core.js
  8. BIN
      experiments/assets/ball.png
  9. 8
      experiments/assets/style.css
  10. 7
      experiments/assets/style.css.map
  11. 10
      experiments/assets/style.scss
  12. 11
      experiments/drag.html
  13. 27
      experiments/drag.js
  14. 37
      experiments/drag/core.coffee
  15. 11
      experiments/easing.html
  16. 31
      experiments/easing.js
  17. 41
      experiments/easing/core.coffee
  18. 9190
      external/jquery-2.1.1.js
  19. 12
      external/preloadjs-0.4.1.min.js
  20. 18
      external/soundjs-0.5.2.min.js
  21. 13
      gemswap.html
  22. BIN
      gemswap/assets/images/blue.png
  23. BIN
      gemswap/assets/images/blue_inverted.png
  24. BIN
      gemswap/assets/images/blue_shimmer.png
  25. BIN
      gemswap/assets/images/cursor.png
  26. BIN
      gemswap/assets/images/diamond.png
  27. BIN
      gemswap/assets/images/diamond_inverted.png
  28. BIN
      gemswap/assets/images/diamond_shimmer.png
  29. BIN
      gemswap/assets/images/yellow.png
  30. BIN
      gemswap/assets/images/yellow_inverted.png
  31. BIN
      gemswap/assets/images/yellow_shimmer.png
  32. 115
      gemswap/core.coffee
  33. 12
      gemswap/gemswap.css
  34. 107
      gemswap/gemswap.js
  35. 1
      gemswap/gemswap.min.js
  36. 213
      gemswap/source/blue.svg
  37. 279
      gemswap/source/blue_inverted.svg
  38. 287
      gemswap/source/blue_shimmer.svg
  39. 81
      gemswap/source/cursor.svg
  40. 349
      gemswap/source/diamond.svg
  41. 416
      gemswap/source/diamond_inverted.svg
  42. 347
      gemswap/source/diamond_shimmer.svg
  43. 144
      gemswap/source/yellow.svg
  44. 166
      gemswap/source/yellow_inverted.svg
  45. 188
      gemswap/source/yellow_shimmer.svg
  46. 149
      gulpfile.js
  47. 240
      map_isometric.js
  48. 20
      package.json
  49. 0
      radium/000_prepare.coffee
  50. 0
      radium/base.coffee
  51. 149
      radium/engine.coffee
  52. 113
      radium/engine.draw.coffee
  53. 287
      radium/engine.ease.coffee
  54. 13
      radium/engine.random.coffee
  55. 30
      radium/engine.timing.coffee
  56. 50
      radium/object.coffee
  57. 140
      radium/resource-manager.coffee
  58. 131
      radium/scene.coffee
  59. 1
      radium/sound.coffee
  60. 12
      radium/sprite.coffee
  61. 30
      radium/tileset.coffee
  62. 5
      radium/util.coffee

2
.gitignore

@ -0,0 +1,2 @@
/node_modules/
/npm-debug.log

40
README.md

@ -0,0 +1,40 @@
# Radium
A game engine, under development. Currently being rewritten in Coffeescript.
## Setup
To install dependencies you need for developing on Radium: `npm install`. If you don't have `npm`, install NodeJS - npm is included.
Note that `coffee-script` may fail to install; in that case, you'll need to install it manually (and you can ignore the error from the previous command): `sudo npm install -g coffee-script`
To run the build scripts in development mode, automatically recompiling both engine and sample game code as files are changed: `gulp watch`
To compile and minify engine and sample games for production: `gulp`
If you want more fine-grained control...
* `gulp dev` compiles everything in development mode (not minified)
* `gulp prod`, which `gulp` is an alias for, compiles everything in production mode (minified)
* `gulp dev-engine` compiles the engine in development mode
* `gulp prod-engine` compiles the engine in production mode
* `gulp dev-gemswap` compiles gemswap in development mode
* `gulp prod-gemswap` compiles gemswap in production mode
That's it!
## Documentation
None! Sorry, you'll have to wait for first release, or look at the samples/engine code.
## License
[WTFPL](http://www.wtfpl.net/) or [CC0](https://creativecommons.org/publicdomain/zero/1.0/), as usual.
## External libraries
This project uses the following external libraries:
* jQuery by the jQuery foundation, [MIT license](https://jquery.org/license/)
* PreloadJS by gSkinner.com, [MIT license](https://github.com/CreateJS/PreloadJS/blob/master/LICENSE)
* SoundJS by gSkinner.com, [MIT license](https://github.com/CreateJS/SoundJS/blob/master/LICENSE)

17
TODO.md

@ -0,0 +1,17 @@
# TODO list
## Behavioural bugs
* Ensure that object association is not lost when a Timer is fired for an object.
## Visual bugs
* Make the first frame draw correctly, without requiring a `return true` from the onStep event.
## Build process
* Add build-games.sh functionality (ie. SVG-to-PNG export) to gulpfile.
## Ideas
jQuery-like $ selector on scene objects (ie. @$) for selecting instances by name, coordinates, etc.

7
build-games.sh

@ -0,0 +1,7 @@
for f in gemswap/source/*.svg
do
name=${f%%.*}
name=${name##*/}
echo "Processing $f..."
inkscape --export-png=gemswap/assets/images/$name.png $f
done

11172
compiled/radium.js
File diff suppressed because it is too large
View File

6
compiled/radium.min.js
File diff suppressed because it is too large
View File

224
core.js

@ -1,224 +0,0 @@
/* Thanks to http://phrogz.net/js/classes/OOPinJS2.html */
Function.prototype.inheritsFrom = function(parentObject)
{
if(parentObject.constructor == Function)
{
/* Normal Inheritance */
this.prototype = new parentObject;
this.prototype.constructor = this;
this.prototype.parent = parentObject.prototype;
}
else
{
/* Pure Virtual Inheritance */
this.prototype = parentObject;
this.prototype.constructor = this;
this.prototype.parent = parentObject;
}
return this;
}
/*Class*/ RadiumEngine = function()
{
this.version = "1.0";
var /*Exception*/ Exception = this.Exception = function(message)
{
this.message = message;
}
var /*Exception*/ Warning = this.Warning = function(message)
{
this.message = message;
}
var /*Exception*/ ResourceException = this.ResourceException = function(message, resource, action)
{
this.resource = resource;
this.message = message;
this.action = action;
}
ResourceException.inheritsFrom(Exception);
var /*Exception*/ ResourceWarning = this.ResourceWarning = function(message, resource, action)
{
this.resource = resource;
this.message = message;
this.action = action;
}
ResourceWarning.inheritsFrom(Warning);
var /*Class*/ Player = this.Player = function()
{
this.credits = 0; /* Integer */
this.health = 1; /* Fraction */
this.resources = {}; /* Associative array -> Resource */
this.InitializeResource = function(resource, negative_allowed, min, max)
{
var resource_object = new Resource();
resource_object.name = resource;
if(negative_allowed !== undefined)
{
resource_object.negative_allowed = negative_allowed;
}
if(min !== undefined)
{
resource_object.minimum = min;
}
if(min !== undefined)
{
resource_object.maximum = max;
}
if(min != null && min > 0)
{
/* Set current amount of units to minimum boundary. */
resource_object.value = min;
}
this.resources[resource] = resource_object;
}
this.TakeResource = function(resource, amount)
{
if(this.resources[resource])
{
resource_object = this.resources[resource];
if(resource_object.value - amount < 0 && resource_object.negative_allowed == false)
{
throw new ResourceException("There are not enough units of this resource available.", resource, "take");
}
else if(resource_object.minimum != null && resource_object.value - amount < resource_object.minimum)
{
throw new ResourceException("Taking away this many units will violate the lower resource boundary.", resource, "take");
}
else
{
resource_object.value -= amount;
}
}
else
{
throw new ResourceException("This resource does not exist.", resource, "take");
}
}
this.GiveResource = function(resource, amount)
{
if(this.resources[resource])
{
resource_object = this.resources[resource];
if(resource_object.maximum != null && resource_object.value + amount > resource_object.maximum)
{
resource_object.value = resource_object.maximum;
throw new ResourceWarning("The upper boundary of the resource was reached.", resource, "give");
}
else
{
resource_object.value += amount;
}
}
else
{
throw new ResourceException("This resource does not exist.", resource, "give");
}
}
this.SetResource = function(resource, amount)
{
if(this.resources[resource])
{
resource_object = this.resources[resource];
if(resource_object.minimum != null && amount < resource_object.minimum)
{
throw new ResourceException("The specified amount is lower than the lower boundary of the resource.", resource, "set");
}
else if(resource_object.maximum != null && amount > resource_object.maximum)
{
throw new ResourceException("The specified amount is lower than the lower boundary of the resource.", resource, "set");
}
else if(resource_object.negative_allowed === false && amount < 0)
{
throw new ResourceException("This resource cannot be set to a negative amount.", resource, "set");
}
else
{
resource_object.value = amount;
}
}
else
{
throw new ResourceException("This resource does not exist.", resource, "set");
}
}
}
var /*Class*/ Resource = this.Resource = function()
{
this.name = "Unnamed resource";
this.negative_allowed = false;
this.minimum = null;
this.maximum = null;
this.value = 0;
}
var /*Static Class*/ Point = RadiumEngine.Point = function(x, y)
{
this.x = x;
this.y = y;
this.Add = function()
{
var new_point = new RadiumEngine.Point(this.x, this.y);
for (i in arguments)
{
new_point.x += arguments[i].x;
new_point.y += arguments[i].y;
}
return new_point;
}
this.Subtract = function()
{
var new_point = new RadiumEngine.Point(this.x, this.y);
for (i in arguments)
{
new_point.x -= arguments[i].x;
new_point.y -= arguments[i].y;
}
return new_point;
}
}
var /*Static*/ point_distance = RadiumEngine.point_distance = function(x1, y1, x2, y2)
{
var xL = x1 - x2;
var yL = y1 - y2;
return Math.sqrt((xL * xL) + (yL * yL));
}
RadiumEngine.dot_product = function(a, b)
{
var n = 0;
var lim = Math.min(a.length, b.length);
for (var i = 0; i < lim; i++)
{
n += a[i] * b[i];
}
return n;
}
}

BIN
experiments/assets/ball.png

After

Width: 64  |  Height: 64  |  Size: 9.8 KiB

8
experiments/assets/style.css

@ -0,0 +1,8 @@
body {
background-color: #e0e0e0; }
#gamecanvas {
background-color: white;
margin: 0px auto; }
/*# sourceMappingURL=style.css.map */

7
experiments/assets/style.css.map

@ -0,0 +1,7 @@
{
"version": 3,
"file": "",
"sources": ["style.scss"],
"names": [],
"mappings": "AAAA;EAEC,kBAAkB;;AAGnB;EAEC,kBAAkB;EAClB,QAAQ"
}

10
experiments/assets/style.scss

@ -0,0 +1,10 @@
body
{
background-color: #e0e0e0;
}
#gamecanvas
{
background-color: white;
margin: 0px auto;
}

11
experiments/drag.html

@ -0,0 +1,11 @@
<html>
<head>
<title>Drag Experiment</title>
<link rel="stylesheet" href="assets/style.css">
<script src="../compiled/radium.js"></script>
<script src="drag.js"></script>
</head>
<body>
<canvas id="gamecanvas"></canvas>
</body>
</html>

27
experiments/drag.js

@ -0,0 +1,27 @@
(function () {$(function() {
var engine, manager;
manager = new ResourceManager("assets");
engine = new Engine(manager);
window.debug_engine = engine;
manager.addImages(["ball.png"]);
return manager.prepare(function() {
engine.addCanvas($("#gamecanvas"));
engine.setInitialScene(engine.createScene("main"));
return manager.load(function() {
var ball;
engine.createSprites({
"ball": "ball.png"
});
ball = engine.createObject("ball");
ball.sprite = engine.getSprite("ball");
ball.onStep = function() {
return true;
};
engine.getScene("main").onLoad = function() {
return this.createInstance(ball, 0, 0);
};
return engine.start();
});
});
});
})();

37
experiments/drag/core.coffee

@ -0,0 +1,37 @@
$(->
manager = new ResourceManager("assets")
engine = new Engine(manager)
window.debug_engine = engine
# Configure game assets
manager.addImages([
"ball.png"
])
manager.prepare ->
# Set up the engine
engine.addCanvas($("#gamecanvas"));
engine.setInitialScene(engine.createScene("main"))
manager.load ->
# Game asset initialization...
engine.createSprites({
"ball": "ball.png",
})
# Object definitions
ball = engine.createObject("ball")
ball.sprite = engine.getSprite("ball")
ball.onStep = ->
return true
# Scene configuration
engine.getScene("main").onLoad = ->
# Actual game initialization
@createInstance(ball, 0, 0)
# Let's go!
engine.start()
)

11
experiments/easing.html

@ -0,0 +1,11 @@
<html>
<head>
<title>Easing Experiment</title>
<link rel="stylesheet" href="assets/style.css">
<script src="../compiled/radium.js"></script>
<script src="easing.js"></script>
</head>
<body>
<canvas id="gamecanvas"></canvas>
</body>
</html>

31
experiments/easing.js

@ -0,0 +1,31 @@
(function () {$(function() {
var engine, manager;
manager = new ResourceManager("assets");
engine = new Engine(manager);
window.debug_engine = engine;
manager.addImages(["ball.png"]);
return manager.prepare(function() {
engine.addCanvas($("#gamecanvas"));
engine.setInitialScene(engine.createScene("main"));
return manager.load(function() {
var ball;
engine.createSprites({
"ball": "ball.png"
});
ball = engine.createObject("ball");
ball.sprite = engine.getSprite("ball");
ball.onStep = function() {
return true;
};
ball.onClickGlobal = function(event) {
this.x = this.engine.ease.quadInOut(this.x, event.x - 41, 35);
return this.y = this.engine.ease.quadInOut(this.y, event.y - 41, 35);
};
engine.getScene("main").onLoad = function() {
return this.createInstance(ball, 0, 0);
};
return engine.start();
});
});
});
})();

41
experiments/easing/core.coffee

@ -0,0 +1,41 @@
$(->
manager = new ResourceManager("assets")
engine = new Engine(manager)
window.debug_engine = engine
# Configure game assets
manager.addImages([
"ball.png"
])
manager.prepare ->
# Set up the engine
engine.addCanvas($("#gamecanvas"));
engine.setInitialScene(engine.createScene("main"))
manager.load ->
# Game asset initialization...
engine.createSprites({
"ball": "ball.png",
})
# Object definitions
ball = engine.createObject("ball")
ball.sprite = engine.getSprite("ball")
ball.onStep = ->
return true
ball.onClickGlobal = (event) ->
@x = @engine.ease.quadInOut(@x, event.x - 41, 35)
@y = @engine.ease.quadInOut(@y, event.y - 41, 35)
# Scene configuration
engine.getScene("main").onLoad = ->
# Actual game initialization
@createInstance(ball, 0, 0)
# Let's go!
engine.start()
)

9190
external/jquery-2.1.1.js
File diff suppressed because it is too large
View File

12
external/preloadjs-0.4.1.min.js
File diff suppressed because it is too large
View File

18
external/soundjs-0.5.2.min.js
File diff suppressed because it is too large
View File

13
gemswap.html

@ -0,0 +1,13 @@
<!doctype html>
<html>
<head>
<title>Gemswap</title>
<script src="compiled/radium.js"></script>
<script src="gemswap/gemswap.js"></script>
<link rel="stylesheet" href="gemswap/gemswap.css">
</head>
<body>
<canvas id="gamecanvas"></canvas>
<div id="debug"></div>
</body>
</html>

BIN
gemswap/assets/images/blue.png

After

Width: 64  |  Height: 64  |  Size: 2.6 KiB

BIN
gemswap/assets/images/blue_inverted.png

After

Width: 64  |  Height: 64  |  Size: 2.6 KiB

BIN
gemswap/assets/images/blue_shimmer.png

After

Width: 93  |  Height: 93  |  Size: 6.2 KiB

BIN
gemswap/assets/images/cursor.png

After

Width: 82  |  Height: 82  |  Size: 1.4 KiB

BIN
gemswap/assets/images/diamond.png

After

Width: 64  |  Height: 64  |  Size: 3.8 KiB

BIN
gemswap/assets/images/diamond_inverted.png

After

Width: 64  |  Height: 64  |  Size: 3.8 KiB

BIN
gemswap/assets/images/diamond_shimmer.png

After

Width: 93  |  Height: 93  |  Size: 5.3 KiB

BIN
gemswap/assets/images/yellow.png

After

Width: 64  |  Height: 64  |  Size: 1.9 KiB

BIN
gemswap/assets/images/yellow_inverted.png

After

Width: 64  |  Height: 64  |  Size: 1.9 KiB

BIN
gemswap/assets/images/yellow_shimmer.png

After

Width: 93  |  Height: 93  |  Size: 7.6 KiB

115
gemswap/core.coffee

@ -0,0 +1,115 @@
$(->
manager = new ResourceManager("gemswap/assets")
engine = new Engine(manager)
window.debug_engine = engine
###
# Configure pre-loading assets
manager.addImages([
"images/loading_screen.png"
], true)
###
# Configure game assets
manager.addImages([
"images/cursor.png"
"images/diamond.png"
"images/diamond_inverted.png"
"images/diamond_shimmer.png"
"images/yellow.png"
"images/yellow_inverted.png"
"images/yellow_shimmer.png"
"images/blue.png"
"images/blue_inverted.png"
"images/blue_shimmer.png"
])
###manager.addSounds([
"music/music.wav"
])###
# Set up the engine
engine.addCanvas($("#gamecanvas"));
engine.setPreloadScene(engine.createScene("loader"))
engine.setInitialScene(engine.createScene("main"))
manager.prepare ->
# Let's go!
engine.start()
# Scene configuration
engine.getScene("loader").onLoad = ->
# Loading screen
@createInstance("loader", 0, 0)
engine.getScene("main").onLoad = ->
# Actual game initialization
@createInstance("cursor", 0, 0)
for x in [10 .. 728] by 80
for y in [10 .. 550] by 80
@createInstance("diamond", x, y)
# Loader object
loader = engine.createObject("loader")
loader.onStep = -> true
loader.onDraw = ->
engine.draw.rectangle(0, 0, 800 * manager.file_progress, 64, {fillColor: "#CCCCCC", fill: true})
engine.draw.rectangle(0, 64, 800 * manager.total_progress, 128, {fillColor: "#AAAAAA", fill: true})
manager.load ->
# Game asset initialization...
engine.createSprites({
"cursor": "images/cursor.png",
"diamond": "images/diamond.png",
"diamond_inverted": "images/diamond_inverted.png",
"diamond_shimmer": "images/diamond_shimmer.png",
"yellow": "images/yellow.png",
"yellow_inverted": "images/yellow_inverted.png",
"yellow_shimmer": "images/yellow_shimmer.png",
"blue": "images/blue.png",
"blue_inverted": "images/blue_inverted.png",
"blue_shimmer": "images/blue_shimmer.png",
})
# Object definitions
cursor = engine.createObject("cursor")
cursor.sprite = engine.getSprite("cursor")
cursor.onStep = ->
$("#debug").html("Mouse coords: #{@scene.mouse_x} / #{@scene.mouse_y}<br>Frameskip: #{@engine.frameskip}")
cursor.onDraw = ->
#engine.draw.rectangle(20, 20, 400, 400, {fillColor: "#FFFFFF", fill: true})
diamond = engine.createObject("diamond")
diamond.sprite = engine.getSprite("diamond")
diamond.draw_sprite = false
diamond.onCreate = ->
@fade_value = 0.3
@shimmer_value = @engine.ease.circInOut(0, 0.8, engine.random.number(200, 350), null, true, true)
@gem_type = @engine.random.pick("diamond", "yellow", "blue")
diamond.onStep = ->
return true
diamond.onDraw = ->
@engine.getSprite(@gem_type).draw(@x, @y)
@engine.getSprite("#{@gem_type}_inverted").draw(@x, @y, {
alpha: @fade_value
})
@engine.getSprite("#{@gem_type}_shimmer").draw(@x - 14, @y - 14, {
alpha: @shimmer_value
})
diamond.onMouseOver = ->
@fade_value = @engine.ease.quadInOut(0.3, 0.7, 10, @engine.ease.bounceOut(0.7, 0.3, 65))
cursor = @engine.getObject("cursor").getInstances()[0]
cursor.x = @engine.ease.quadInOut(cursor.x, @x - 9, 8)
cursor.y = @engine.ease.quadInOut(cursor.y, @y - 9, 8)
)

12
gemswap/gemswap.css

@ -0,0 +1,12 @@
body
{
text-align: center;
background-color: #000000;
color: white;
}
#gamecanvas
{
width: 800px;
height: 600px;
}

107
gemswap/gemswap.js

@ -0,0 +1,107 @@
(function () {$(function() {
var engine, manager;
manager = new ResourceManager("gemswap/assets");
engine = new Engine(manager);
window.debug_engine = engine;
/*
* Configure pre-loading assets
manager.addImages([
"images/loading_screen.png"
], true)
*/
manager.addImages(["images/cursor.png", "images/diamond.png", "images/diamond_inverted.png", "images/diamond_shimmer.png", "images/yellow.png", "images/yellow_inverted.png", "images/yellow_shimmer.png", "images/blue.png", "images/blue_inverted.png", "images/blue_shimmer.png"]);
/*manager.addSounds([
"music/music.wav"
])
*/
engine.addCanvas($("#gamecanvas"));
engine.setPreloadScene(engine.createScene("loader"));
engine.setInitialScene(engine.createScene("main"));
return manager.prepare(function() {
var loader;
engine.start();
engine.getScene("loader").onLoad = function() {
return this.createInstance("loader", 0, 0);
};
engine.getScene("main").onLoad = function() {
var x, y, _i, _results;
this.createInstance("cursor", 0, 0);
_results = [];
for (x = _i = 10; _i <= 728; x = _i += 80) {
_results.push((function() {
var _j, _results1;
_results1 = [];
for (y = _j = 10; _j <= 550; y = _j += 80) {
_results1.push(this.createInstance("diamond", x, y));
}
return _results1;
}).call(this));
}
return _results;
};
loader = engine.createObject("loader");
loader.onStep = function() {
return true;
};
loader.onDraw = function() {
engine.draw.rectangle(0, 0, 800 * manager.file_progress, 64, {
fillColor: "#CCCCCC",
fill: true
});
return engine.draw.rectangle(0, 64, 800 * manager.total_progress, 128, {
fillColor: "#AAAAAA",
fill: true
});
};
return manager.load(function() {
var cursor, diamond;
engine.createSprites({
"cursor": "images/cursor.png",
"diamond": "images/diamond.png",
"diamond_inverted": "images/diamond_inverted.png",
"diamond_shimmer": "images/diamond_shimmer.png",
"yellow": "images/yellow.png",
"yellow_inverted": "images/yellow_inverted.png",
"yellow_shimmer": "images/yellow_shimmer.png",
"blue": "images/blue.png",
"blue_inverted": "images/blue_inverted.png",
"blue_shimmer": "images/blue_shimmer.png"
});
cursor = engine.createObject("cursor");
cursor.sprite = engine.getSprite("cursor");
cursor.onStep = function() {
return $("#debug").html("Mouse coords: " + this.scene.mouse_x + " / " + this.scene.mouse_y + "<br>Frameskip: " + this.engine.frameskip);
};
cursor.onDraw = function() {};
diamond = engine.createObject("diamond");
diamond.sprite = engine.getSprite("diamond");
diamond.draw_sprite = false;
diamond.onCreate = function() {
this.fade_value = 0.3;
this.shimmer_value = this.engine.ease.circInOut(0, 0.8, engine.random.number(200, 350), null, true, true);
return this.gem_type = this.engine.random.pick("diamond", "yellow", "blue");
};
diamond.onStep = function() {
return true;
};
diamond.onDraw = function() {
this.engine.getSprite(this.gem_type).draw(this.x, this.y);
this.engine.getSprite("" + this.gem_type + "_inverted").draw(this.x, this.y, {
alpha: this.fade_value
});
return this.engine.getSprite("" + this.gem_type + "_shimmer").draw(this.x - 14, this.y - 14, {
alpha: this.shimmer_value
});
};
return diamond.onMouseOver = function() {
this.fade_value = this.engine.ease.quadInOut(0.3, 0.7, 10, this.engine.ease.bounceOut(0.7, 0.3, 65));
cursor = this.engine.getObject("cursor").getInstances()[0];
cursor.x = this.engine.ease.quadInOut(cursor.x, this.x - 9, 8);
return cursor.y = this.engine.ease.quadInOut(cursor.y, this.y - 9, 8);
};
});
});
});
})();

1
gemswap/gemswap.min.js

@ -0,0 +1 @@
(function(){$(function(){var e,i;return i=new ResourceManager("gemswap/assets"),e=new Engine(i),window.debug_engine=e,i.addImages(["images/cursor.png","images/diamond.png","images/diamond_inverted.png","images/diamond_shimmer.png","images/yellow.png","images/yellow_inverted.png","images/yellow_shimmer.png","images/blue.png","images/blue_inverted.png","images/blue_shimmer.png"]),i.prepare(),i.preload(null,function(){var i,n,t,r,a,s,m;for(e.addCanvas($("#gamecanvas")),t=e.createScene("main"),e.createSprite("cursor","images/cursor.png"),e.createSprite("diamond","images/diamond.png"),e.createSprite("diamond_inverted","images/diamond_inverted.png"),e.createSprite("diamond_shimmer","images/diamond_shimmer.png"),e.createSprite("yellow","images/yellow.png"),e.createSprite("yellow_inverted","images/yellow_inverted.png"),e.createSprite("yellow_shimmer","images/yellow_shimmer.png"),e.createSprite("blue","images/blue.png"),e.createSprite("blue_inverted","images/blue_inverted.png"),e.createSprite("blue_shimmer","images/blue_shimmer.png"),i=e.createObject("cursor"),i.sprite=e.getSprite("cursor"),n=e.createObject("diamond"),n.sprite=e.getSprite("diamond"),n.draw_sprite=!1,n.onCreate=function(){return this.fade_value=0,this.shimmer_value=this.engine.ease.circInOut(0,.8,e.random.number(200,350),null,!0,!0),this.gem_type=this.engine.random.pick("diamond","yellow","blue")},n.onStep=function(){return!0},n.onDraw=function(){return this.engine.getSprite(this.gem_type).draw(this.x,this.y),this.engine.getSprite(""+this.gem_type+"_inverted").draw(this.x,this.y,{alpha:this.fade_value}),this.engine.getSprite(""+this.gem_type+"_shimmer").draw(this.x-14,this.y-14,{alpha:this.shimmer_value})},n.onMouseOver=function(){return this.fade_value=this.engine.ease.quadInOut(0,1,10,this.engine.ease.bounceOut(1,0,35)),i=this.engine.getObject("cursor").getInstances()[0],i.x=this.engine.ease.quadInOut(i.x,this.x-9,8),i.y=this.engine.ease.quadInOut(i.y,this.y-9,8)},r=s=10;728>=s;r=s+=80)for(a=m=10;550>=m;a=m+=80)t.createInstance(n,r,a);return i.onStep=function(){return $("#debug").html("Mouse coords: "+this.scene.mouse_x+" / "+this.scene.mouse_y+"<br>Frameskip: "+this.engine.frameskip)},t.createInstance(i,0,0),e.start()})})}).call(this);

213
gemswap/source/blue.svg

@ -0,0 +1,213 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg6013"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="New document 19">
<defs
id="defs6015">
<linearGradient
id="linearGradient6627">
<stop
style="stop-color:#1b2882;stop-opacity:1;"
offset="0"
id="stop6629" />
<stop
style="stop-color:#0851e9;stop-opacity:1;"
offset="1"
id="stop6631" />
</linearGradient>
<linearGradient
id="linearGradient6617">
<stop
id="stop6619"
offset="0"
style="stop-color:#003ab6;stop-opacity:1;" />
<stop
id="stop6621"
offset="1"
style="stop-color:#2488ec;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient6577">
<stop
style="stop-color:#003ab6;stop-opacity:1;"
offset="0"
id="stop6579" />
<stop
style="stop-color:#2488ec;stop-opacity:1;"
offset="1"
id="stop6581" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6577"
id="linearGradient6583"
x1="32"
y1="18.806769"
x2="50.185872"
y2="18.806769"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7418123,0,0,1.487494,-23.737991,968.96191)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6577"
id="linearGradient6591"
x1="13.814127"
y1="40.087818"
x2="32"
y2="40.087818"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7418123,0,0,1.487494,-23.737991,968.96191)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6577"
id="linearGradient6599"
x1="32"
y1="1024.1559"
x2="43.575737"
y2="1024.1559"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7418123,0,0,1.487494,-23.737991,-501.22084)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6577"
id="linearGradient6607"
x1="20.424263"
y1="1009.1486"
x2="32"
y2="1009.1486"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7418123,0,0,1.487494,-23.737991,-501.22084)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6627"
id="linearGradient6615"
x1="32"
y1="1009.1486"
x2="43.575737"
y2="1009.1486"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7418123,0,0,1.487494,-23.737991,-501.22084)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6627"
id="linearGradient6639"
x1="20.424263"
y1="1024.1559"
x2="32"
y2="1024.1559"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7418123,0,0,1.487494,-23.737991,-501.22084)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6627"
id="linearGradient6647"
x1="13.814127"
y1="18.806768"
x2="32"
y2="18.806768"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7418123,0,0,1.487494,-23.737991,968.96191)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6627"
id="linearGradient6655"
x1="32"
y1="40.087818"
x2="50.185871"
y2="40.087818"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7418123,0,0,1.487494,-23.737991,968.96191)" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="8"
inkscape:cx="71.415194"
inkscape:cy="32.777992"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1102"
inkscape:window-x="0"
inkscape:window-y="28"
inkscape:window-maximized="1" />
<metadata
id="metadata6018">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-988.36217)">
<path
style="fill:url(#linearGradient6655);fill-opacity:1;stroke:none"
d="m 32,1005.1652 31.676376,0 L 32,1052.0195 z"
id="path6559"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:url(#linearGradient6591);fill-opacity:1;stroke:none"
d="M 32,1052.0195 0.32362381,1005.1652 32,1005.1652"
id="path6023"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient6583);fill-opacity:1;stroke:none"
d="m 32,1005.1689 31.676376,0 L 32,988.70487 l 0,0 0,0"
id="path6556"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient6647);fill-opacity:1;stroke:none"
d="M 32,988.70487 0.32362381,1005.1689 32,1005.1689"
id="path6025"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path6569"
d="m 32,1005.0967 20.162758,0 L 32,1039.3132 z"
style="fill:url(#linearGradient6599);fill-opacity:1;stroke:none" />
<path
id="path6571"
d="m 32,1039.3132 -20.162761,-34.2165 20.162761,0"
style="fill:url(#linearGradient6639);fill-opacity:1;stroke:none"
inkscape:connector-curvature="0" />
<path
id="path6573"
d="m 32,1005.0992 20.162758,0 L 32,994.66396 l 0,0 0,0"
style="fill:url(#linearGradient6615);fill-opacity:1;stroke:none"
inkscape:connector-curvature="0" />
<path
id="path6575"
d="m 32,994.66396 -20.162761,10.43524 20.162761,0"
style="fill:url(#linearGradient6607);fill-opacity:1;stroke:none"
inkscape:connector-curvature="0" />
</g>
</svg>

279
gemswap/source/blue_inverted.svg

@ -0,0 +1,279 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg6013"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="blue.svg">
<defs
id="defs6015">
<linearGradient
id="linearGradient6716">
<stop
style="stop-color:#0851e9;stop-opacity:1;"
offset="0"
id="stop6720" />
<stop
style="stop-color:#1b2882;stop-opacity:1;"
offset="1"
id="stop6718" />
</linearGradient>
<linearGradient
id="linearGradient6708">
<stop
style="stop-color:#2488ec;stop-opacity:1;"
offset="0"
id="stop6712" />
<stop
style="stop-color:#003ab6;stop-opacity:1;"
offset="1"
id="stop6710" />
</linearGradient>
<linearGradient
id="linearGradient6700">
<stop
style="stop-color:#0851e9;stop-opacity:1;"
offset="0"
id="stop6704" />
<stop
style="stop-color:#1b2882;stop-opacity:1;"
offset="1"
id="stop6702" />
</linearGradient>
<linearGradient
id="linearGradient6692">
<stop
style="stop-color:#2488ec;stop-opacity:1;"
offset="0"
id="stop6696" />
<stop
style="stop-color:#003ab6;stop-opacity:1;"
offset="1"
id="stop6694" />
</linearGradient>
<linearGradient
id="linearGradient6684">
<stop
style="stop-color:#2488ec;stop-opacity:1;"
offset="0"
id="stop6688" />
<stop
style="stop-color:#003ab6;stop-opacity:1;"
offset="1"
id="stop6686" />
</linearGradient>
<linearGradient
id="linearGradient6676">
<stop
style="stop-color:#0851e9;stop-opacity:1;"
offset="0"
id="stop6680" />
<stop
style="stop-color:#1b2882;stop-opacity:1;"
offset="1"
id="stop6678" />
</linearGradient>
<linearGradient
id="linearGradient6627">
<stop
id="stop6631"
offset="0"
style="stop-color:#0851e9;stop-opacity:1;" />
<stop
id="stop6629"
offset="1"
style="stop-color:#1b2882;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient6617">
<stop
id="stop6619"
offset="0"
style="stop-color:#003ab6;stop-opacity:1;" />
<stop
id="stop6621"
offset="1"
style="stop-color:#2488ec;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient6577">
<stop
id="stop6581"
offset="0"
style="stop-color:#2488ec;stop-opacity:1;" />
<stop
id="stop6579"
offset="1"
style="stop-color:#003ab6;stop-opacity:1;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6684"
id="linearGradient6583"
x1="32"
y1="18.806769"
x2="50.185872"
y2="18.806769"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7418123,0,0,1.487494,-23.737991,968.96191)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6708"
id="linearGradient6591"
x1="13.814127"
y1="40.087818"
x2="32"
y2="40.087818"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7418123,0,0,1.487494,-23.737991,968.96191)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6577"
id="linearGradient6599"
x1="32"
y1="1024.1559"
x2="43.575737"
y2="1024.1559"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7418123,0,0,1.487494,-23.737991,-501.22084)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6692"
id="linearGradient6607"
x1="20.424263"
y1="1009.1486"
x2="32"
y2="1009.1486"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7418123,0,0,1.487494,-23.737991,-501.22084)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6700"
id="linearGradient6615"
x1="32"
y1="1009.1486"
x2="43.575737"
y2="1009.1486"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7418123,0,0,1.487494,-23.737991,-501.22084)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6716"
id="linearGradient6639"
x1="20.424263"
y1="1024.1559"
x2="32"
y2="1024.1559"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7418123,0,0,1.487494,-23.737991,-501.22084)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6676"
id="linearGradient6647"
x1="13.814127"
y1="18.806768"
x2="32"
y2="18.806768"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7418123,0,0,1.487494,-23.737991,968.96191)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6627"
id="linearGradient6655"
x1="32"
y1="40.087818"
x2="50.185871"
y2="40.087818"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7418123,0,0,1.487494,-23.737991,968.96191)" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="8"
inkscape:cx="71.415194"
inkscape:cy="32.777992"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1102"
inkscape:window-x="0"
inkscape:window-y="28"
inkscape:window-maximized="1" />
<metadata
id="metadata6018">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-988.36217)">
<path
style="fill:url(#linearGradient6655);fill-opacity:1;stroke:none"
d="m 32,1005.1652 31.676376,0 L 32,1052.0195 z"
id="path6559"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:url(#linearGradient6591);fill-opacity:1;stroke:none"
d="M 32,1052.0195 0.32362381,1005.1652 32,1005.1652"
id="path6023"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient6583);fill-opacity:1;stroke:none"
d="m 32,1005.1689 31.676376,0 L 32,988.70487 l 0,0 0,0"
id="path6556"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient6647);fill-opacity:1;stroke:none"
d="M 32,988.70487 0.32362381,1005.1689 32,1005.1689"
id="path6025"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path6569"
d="m 32,1005.0967 20.162758,0 L 32,1039.3132 z"
style="fill:url(#linearGradient6599);fill-opacity:1;stroke:none" />
<path
id="path6571"
d="m 32,1039.3132 -20.162761,-34.2165 20.162761,0"
style="fill:url(#linearGradient6639);fill-opacity:1;stroke:none"
inkscape:connector-curvature="0" />
<path
id="path6573"
d="m 32,1005.0992 20.162758,0 L 32,994.66396 l 0,0 0,0"
style="fill:url(#linearGradient6615);fill-opacity:1;stroke:none"
inkscape:connector-curvature="0" />
<path
id="path6575"
d="m 32,994.66396 -20.162761,10.43524 20.162761,0"
style="fill:url(#linearGradient6607);fill-opacity:1;stroke:none"
inkscape:connector-curvature="0" />
</g>
</svg>

287
gemswap/source/blue_shimmer.svg

@ -0,0 +1,287 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="93.419998"
height="93.419998"
id="svg6013"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="blue_shimmer.svg">
<defs
id="defs6015">
<linearGradient
id="linearGradient6716">
<stop
style="stop-color:#0851e9;stop-opacity:1;"
offset="0"
id="stop6720" />
<stop
style="stop-color:#1b2882;stop-opacity:1;"
offset="1"
id="stop6718" />
</linearGradient>
<linearGradient
id="linearGradient6708">
<stop
style="stop-color:#2488ec;stop-opacity:1;"
offset="0"
id="stop6712" />
<stop
style="stop-color:#003ab6;stop-opacity:1;"
offset="1"
id="stop6710" />
</linearGradient>
<linearGradient
id="linearGradient6700">
<stop
style="stop-color:#0851e9;stop-opacity:1;"
offset="0"
id="stop6704" />
<stop
style="stop-color:#1b2882;stop-opacity:1;"
offset="1"
id="stop6702" />
</linearGradient>
<linearGradient
id="linearGradient6692">
<stop
style="stop-color:#2488ec;stop-opacity:1;"
offset="0"
id="stop6696" />
<stop
style="stop-color:#003ab6;stop-opacity:1;"
offset="1"
id="stop6694" />
</linearGradient>
<linearGradient
id="linearGradient6684">
<stop
style="stop-color:#2488ec;stop-opacity:1;"
offset="0"
id="stop6688" />
<stop
style="stop-color:#003ab6;stop-opacity:1;"
offset="1"
id="stop6686" />
</linearGradient>
<linearGradient
id="linearGradient6676">
<stop
style="stop-color:#0851e9;stop-opacity:1;"
offset="0"
id="stop6680" />
<stop
style="stop-color:#1b2882;stop-opacity:1;"
offset="1"
id="stop6678" />
</linearGradient>
<linearGradient
id="linearGradient6627">
<stop
id="stop6631"
offset="0"
style="stop-color:#0851e9;stop-opacity:1;" />
<stop
id="stop6629"
offset="1"
style="stop-color:#1b2882;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient6617">
<stop
id="stop6619"
offset="0"
style="stop-color:#003ab6;stop-opacity:1;" />
<stop
id="stop6621"
offset="1"
style="stop-color:#2488ec;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient6577">
<stop
id="stop6581"
offset="0"
style="stop-color:#2488ec;stop-opacity:1;" />
<stop
id="stop6579"
offset="1"
style="stop-color:#003ab6;stop-opacity:1;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6684"
id="linearGradient6583"
x1="32"
y1="18.806768"
x2="50.185871"
y2="18.806768"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7418123,0,0,1.487494,-23.737991,968.96191)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6708"
id="linearGradient6591"
x1="13.814127"
y1="40.087818"
x2="32"
y2="40.087818"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7418123,0,0,1.487494,-23.737991,968.96191)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6577"
id="linearGradient6599"
x1="32"
y1="1024.1559"
x2="43.575737"
y2="1024.1559"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7418123,0,0,1.487494,-23.737991,-501.22084)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6692"
id="linearGradient6607"
x1="20.424263"
y1="1009.1486"
x2="32"
y2="1009.1486"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7418123,0,0,1.487494,-23.737991,-501.22084)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6700"
id="linearGradient6615"
x1="32"
y1="1009.1486"
x2="43.575737"
y2="1009.1486"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7418123,0,0,1.487494,-23.737991,-501.22084)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6716"
id="linearGradient6639"
x1="20.424263"
y1="1024.1559"
x2="32"
y2="1024.1559"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7418123,0,0,1.487494,-23.737991,-501.22084)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6676"
id="linearGradient6647"
x1="13.814127"
y1="18.806768"
x2="32"
y2="18.806768"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7418123,0,0,1.487494,-23.737991,968.96191)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6627"
id="linearGradient6655"
x1="32"
y1="40.087818"
x2="50.185871"
y2="40.087818"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7418123,0,0,1.487494,-23.737991,968.96191)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6676"
id="linearGradient6770"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7418123,0,0,1.487494,-23.737991,-19.40026)"
x1="13.814127"
y1="18.806768"
x2="32"
y2="18.806768" />
<filter
inkscape:collect="always"
id="filter6775"
x="-0.14666253"
width="1.2933251"
y="-0.13246012"
height="1.2649202"
color-interpolation-filters="sRGB">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="2.464268"
id="feGaussianBlur6777" />
</filter>
<filter
inkscape:collect="always"
id="filter6779"
x="-0.23388462"
width="1.4677691"
y="-0.2341155"
height="1.468231"
color-interpolation-filters="sRGB">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="6.1760156"
id="feGaussianBlur6781" />
</filter>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.6568543"
inkscape:cx="55.131664"
inkscape:cy="31.538345"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1102"
inkscape:window-x="0"
inkscape:window-y="28"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata6018">