diff --git a/moonlight/gfx/effects/glint.png b/moonlight/gfx/effects/glint.png new file mode 100644 index 0000000..f9acbf6 Binary files /dev/null and b/moonlight/gfx/effects/glint.png differ diff --git a/moonlight/gfx/map.json b/moonlight/gfx/map.json index 560babc..e6ebf67 100644 --- a/moonlight/gfx/map.json +++ b/moonlight/gfx/map.json @@ -272,6 +272,7 @@ "sprite_canmove":"false", "sprite_facing":"down", "sprite_group":"townsfolk-guard", + "sprite_has_treasure":"true", "sprite_name":"townsfolk-guard-2" }, "type":"AI", diff --git a/moonlight/gfx/sprites/treasure.png b/moonlight/gfx/sprites/treasure.png new file mode 100644 index 0000000..6dcc0f6 Binary files /dev/null and b/moonlight/gfx/sprites/treasure.png differ diff --git a/moonlight/src/AISprite.js b/moonlight/src/AISprite.js index 51ef882..1e8ca8d 100644 --- a/moonlight/src/AISprite.js +++ b/moonlight/src/AISprite.js @@ -73,6 +73,29 @@ var AISprite = function(game, x, y, key, frame) { this.awareness_timer.start() } + this.runGlintEffect = function() { + if ( this.sprite_has_treasure == true ) { + this.glint_effect = game.state.states.game.add.sprite( + this.x + 16, + this.y + 24, + 'glint', + 0, + game.state.states.game.aiSpriteEffects + ); + addAnimation(this.glint_effect, 'glint'); + this.glint_effect.anchor.setTo(0.5, 0.5); + this.glint_effect.play('glint', null, false, true); + this.glint_timer = game.time.create(false); + this.glint_timer.add(game.rnd.integerInRange(5000, 15000), + this.runGlintEffect, + this); + tween = game.add.tween(this.glint_effect); + tween.to({angle: 180}, 1000, null); + tween.start(); + this.glint_timer.start(); + } + } + this.setAwarenessEffect = function(state) { var animkey = ""; @@ -550,7 +573,13 @@ var AISprite = function(game, x, y, key, frame) { this.awareness_effect.y = this.y - 16; } } - + if ( isSet(this.glint_effect) ) { + if ( this.glint_effect.alive == true ) { + this.glint_effect.x = this.x + 16; + this.glint_effect.y = this.y + 24; + } + } + if ( isSet(this.bubble_text) ) { if ( this.clear_bubble == true ) { this.bubble_text.destroy(); @@ -590,6 +619,10 @@ var AISprite = function(game, x, y, key, frame) { this.collide_with_player = parseBoolean(this.collide_with_player); this.collide_with_map = parseBoolean(this.collide_with_map); this.carries_light = parseBoolean(this.carries_light); + this.sprite_has_treasure = parseBoolean(this.sprite_has_treasure); + if ( this.sprite_has_treasure ) { + this.treasure = getRandomTreasure(); + } this.path_maximum_steps = parseInt(this.path_maximum_steps); this.loadTexture(this.sprite_name, 0); @@ -604,6 +637,7 @@ var AISprite = function(game, x, y, key, frame) { setMovingState(this, faceStateFromString(this.sprite_facing)); setSpriteMovement(this); this.ready_to_update = true; + this.runGlintEffect(); } var spritenames_by_type = [ @@ -637,6 +671,8 @@ var AISprite = function(game, x, y, key, frame) { this.sprite_can_see_lightmeter = 0.3; this.awareness_effect = null; this.awareness_timer = null; + this.glint_effect = null; + this.glint_timer = null; this.lastSawPlayerAt = null; this.seen_directions = []; this.sprite_awareness_duration = 30000; @@ -648,6 +684,7 @@ var AISprite = function(game, x, y, key, frame) { this.timer = null; this.rotation_timer = null; this.origin = new Phaser.Point(x, y); + this.sprite_has_treasure = [true, false][game.rnd.integerInRange(0, 1)]; this.bubble_immediate = false; this.bubble_text = null; this.enable_word_bubble = false; diff --git a/moonlight/src/Constants.js b/moonlight/src/Constants.js index e4a7298..7c56517 100644 --- a/moonlight/src/Constants.js +++ b/moonlight/src/Constants.js @@ -56,3 +56,5 @@ SCORE_PERSECOND = 1; SCORE_LOSTHIM = 0; SCORE_ALERTED = -50; SCORE_CONCERNED = 0; + +MAX_TREASURES = 384; diff --git a/moonlight/src/GameStates.js b/moonlight/src/GameStates.js index 42cfe95..8540bae 100644 --- a/moonlight/src/GameStates.js +++ b/moonlight/src/GameStates.js @@ -36,6 +36,7 @@ GameState.prototype.create = function() this.aiSprites.forEach(function(spr) { spr.update_new_values(); }, this) + this.aiSpriteEffects = game.add.group(); player = this.add.sprite((19 * 32), (21 * 32), 'player'); player.score = 0; player.lightmeter = 0; diff --git a/moonlight/src/Settings.js b/moonlight/src/Settings.js index 86252ad..620f87d 100644 --- a/moonlight/src/Settings.js +++ b/moonlight/src/Settings.js @@ -168,6 +168,20 @@ var moonlightSettings = { 'height': 32, 'frames': 96 }, + { + 'name': 'glint', + 'path': 'gfx/effects/glint.png', + 'width': 16, + 'height': 16, + 'frames': 12 + }, + { + 'name': 'treasure', + 'path': 'gfx/sprites/treasure.png', + 'width': 24, + 'height': 24, + 'frames': 368 + }, { 'name': 'balloon', 'path': 'gfx/effects/Balloon.png', @@ -254,6 +268,11 @@ var moonlightSettings = { } ], 'animations': { + 'glint': { + 'frames': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], + 'speed': 12, + 'loop': false + }, 'alerted': { 'frames': [0, 1, 2, 3, 4, 5, 6, 7], 'speed': 4, @@ -331,3 +350,206 @@ var moonlightSettings = { } } }; + +var moonlightTreasures = { + "silver ring with garnet": { + "x": 6, + "y": 1, + "value": 50 + }, + "gold hairpin": { + "x": 7, + "y": 1, + "value": 50 + }, + "gold ring with emerald": { + "x": 0, + "y": 2, + "value": 75 + }, + "silver bangles": { + "x": 1, + "y": 2, + "value": 50 + }, + "gold bracelets": { + "x": 2, + "y": 2, + "value": 75 + }, + "gold brooch with sapphire": { + "x": 3, + "y": 2, + "value": 75 + }, + "gold necklace with sapphire": { + "x": 4, + "y": 2, + "value": 75 + }, + "tonic": { + "x": 0, + "y": 3, + "value": 100 + }, + "antidote": { + "x": 1, + "y": 3, + "value": 100 + }, + "cure-all": { + "x": 2, + "y": 3, + "value": 100 + }, + "poison": { + "x": 3, + "y": 3, + "value": 150 + }, + "perfume": { + "x": 4, + "y": 3, + "value": 125 + }, + "spices": { + "x": 6, + "y": 3, + "value": 125 + }, + "Fresh Spinach": { + "x": 8, + "y": 3, + "value": 5 + }, + "Fresh Herbs": { + "x": 9, + "y": 3, + "value": 5 + }, + "Flowers": { + "x": 12, + "y": 3, + "value": 5 + }, + "Dirty Turnips": { + "x": 14, + "y": 3, + "value": 5 + }, + "Whiskey": { + "x": 12, + "y": 4, + "value": 10 + }, + "Map": { + "x": 7, + "y": 5, + "value": 15 + }, + "Official Documents": { + "x": 14, + "y": 5, + "value": 50 + }, + "Book": { + "x": 0, + "y": 5, + "value": 25 + }, + "Gift": { + "x": 3, + "y": 7, + "value": 50 + }, + "Bag of Money": { + "x": 6, + "y": 7, + "value": 100 + }, + "Purse": { + "x": 7, + "y": 7, + "value": 50 + }, + "Picnic Basket": { + "x": 9, + "y": 7, + "value": 25 + }, + "Jewelry Box": { + "x": 14, + "y": 7, + "value": 100 + }, + "Music Box": { + "x": 15, + "y": 6, + "value": 300 + }, + "Hourglass": { + "x": 8, + "y": 8, + "value": 100 + }, + "Holy Symbol": { + "x": 9, + "y": 8, + "value": 200 + }, + "Large Mirror": { + "x": 10, + "y": 8, + "value": 200 + }, + "Small Mirror": { + "x": 11, + "y": 8, + "value": 100 + }, + "Cat's Eye": { + "x": 4, + "y": 12, + "value": 200 + }, + "Pink Spinel": { + "x": 5, + "y": 12, + "value": 200 + }, + "Quartz": { + "x": 6, + "y": 12, + "value": 100 + }, + "Diamond": { + "x": 9, + "y": 12, + "value": 400 + }, + "Emerald": { + "x": 11, + "y": 12, + "value": 300 + }, + "Ruby": { + "x": 7, + "y": 13, + "value": 250 + }, + "Pearl": { + "x": 8, + "y": 13, + "value": 400 + }, + "Gold Bars": { + "x": 9, + "y": 13, + "value": 500 + }, + "Gold Coin": { + "x": 10, + "y": 13, + "value": 5 + } +}; diff --git a/moonlight/src/Util.js b/moonlight/src/Util.js index 766edb0..7de5679 100644 --- a/moonlight/src/Util.js +++ b/moonlight/src/Util.js @@ -339,3 +339,10 @@ function awardPlayerScoreByState(state) } } } + +function getRandomTreasure() +{ + var treasures = Object.keys(moonlightTreasures); + var treasure = treasures[game.rnd.integerInRange(0, treasures.length)]; + return treasure; +}