2014-06-11 21:57:20 -07:00
|
|
|
|
STATE_UNAWARE = 1 << 1;
|
|
|
|
|
|
STATE_CONCERNED = 1 << 2;
|
|
|
|
|
|
STATE_ALERTED = 1 << 3;
|
|
|
|
|
|
STATE_LOSTHIM = 1 << 4;
|
2014-06-11 22:25:47 -07:00
|
|
|
|
STATE_RUN = 1 << 5;
|
|
|
|
|
|
STATE_MOVE_LEFT = 1 << 6;
|
|
|
|
|
|
STATE_MOVE_RIGHT = 1 << 7;
|
|
|
|
|
|
STATE_MOVE_UP = 1 << 8;
|
|
|
|
|
|
STATE_MOVE_DOWN = 1 << 9;
|
|
|
|
|
|
|
|
|
|
|
|
SPRITE_TOWNSFOLK_MALE = 1;
|
2014-06-11 22:29:49 -07:00
|
|
|
|
SPRITE_TOWNSFOLK_FEMALE = 2;
|
|
|
|
|
|
SPRITE_TOWNSFOLK_GUARD = 3;
|
2014-06-11 21:57:20 -07:00
|
|
|
|
|
|
|
|
|
|
SPRITE_TOWNSFOLK_MALE1 = 1;
|
|
|
|
|
|
SPRITE_TOWNSFOLK_MALE2 = 2;
|
|
|
|
|
|
SPRITE_TOWNSFOLK_MALE3 = 3;
|
|
|
|
|
|
SPRITE_TOWNSFOLK_MALE4 = 4;
|
|
|
|
|
|
SPRITE_TOWNSFOLK_FEMALE1 = 5;
|
|
|
|
|
|
SPRITE_TOWNSFOLK_FEMALE2 = 6;
|
|
|
|
|
|
SPRITE_TOWNSFOLK_FEMALE3 = 7;
|
|
|
|
|
|
SPRITE_TOWNSFOLK_FEMALE4 = 8;
|
|
|
|
|
|
SPRITE_TOWNSFOLK_GUARD1 = 9;
|
|
|
|
|
|
SPRITE_TOWNSFOLK_GUARD2 = 10;
|
|
|
|
|
|
|
2014-06-09 22:48:39 -07:00
|
|
|
|
var moonlightSettings = {
|
|
|
|
|
|
'map' : {
|
|
|
|
|
|
'tilesets': [
|
|
|
|
|
|
{ 'name': 'Macks-tilea2',
|
|
|
|
|
|
'path': 'gfx/Macks-tilea2.png'
|
|
|
|
|
|
},
|
|
|
|
|
|
{ 'name': 'Macks-tilea3',
|
|
|
|
|
|
'path': 'gfx/Macks-tilea3.png'
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
'collisionRange': [385, 512],
|
|
|
|
|
|
'path': 'gfx/junkmap.json'
|
|
|
|
|
|
},
|
|
|
|
|
|
'images': [
|
2014-06-10 19:15:55 -07:00
|
|
|
|
{
|
|
|
|
|
|
'name': 'simplelight',
|
|
|
|
|
|
'path': 'gfx/lights/light-white-256px.png'
|
|
|
|
|
|
}
|
2014-06-09 22:48:39 -07:00
|
|
|
|
],
|
|
|
|
|
|
'spritesheets': [
|
2014-06-10 01:05:21 -07:00
|
|
|
|
{
|
|
|
|
|
|
'name': 'player',
|
|
|
|
|
|
'path': 'gfx/sprites/sprite-player.png',
|
|
|
|
|
|
'width': 32,
|
|
|
|
|
|
'height': 32,
|
|
|
|
|
|
'frames': 12
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
'name': 'townsfolk-male-1',
|
|
|
|
|
|
'path': 'gfx/sprites/sprite-townsfolk-male-1.png',
|
|
|
|
|
|
'width': 32,
|
|
|
|
|
|
'height': 32,
|
|
|
|
|
|
'frames': 12
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
'name': 'townsfolk-male-2',
|
|
|
|
|
|
'path': 'gfx/sprites/sprite-townsfolk-male-2.png',
|
|
|
|
|
|
'width': 32,
|
|
|
|
|
|
'height': 32,
|
|
|
|
|
|
'frames': 12
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
'name': 'townsfolk-male-3',
|
|
|
|
|
|
'path': 'gfx/sprites/sprite-townsfolk-male-3.png',
|
|
|
|
|
|
'width': 32,
|
|
|
|
|
|
'height': 32,
|
|
|
|
|
|
'frames': 12
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
'name': 'townsfolk-male-4',
|
|
|
|
|
|
'path': 'gfx/sprites/sprite-townsfolk-male-4.png',
|
|
|
|
|
|
'width': 32,
|
|
|
|
|
|
'height': 32,
|
|
|
|
|
|
'frames': 12
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
'name': 'townsfolk-female-1',
|
|
|
|
|
|
'path': 'gfx/sprites/sprite-townsfolk-female-1.png',
|
|
|
|
|
|
'width': 32,
|
|
|
|
|
|
'height': 32,
|
|
|
|
|
|
'frames': 12
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
'name': 'townsfolk-female-2',
|
|
|
|
|
|
'path': 'gfx/sprites/sprite-townsfolk-female-2.png',
|
|
|
|
|
|
'width': 32,
|
|
|
|
|
|
'height': 32,
|
|
|
|
|
|
'frames': 12
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
'name': 'townsfolk-female-3',
|
|
|
|
|
|
'path': 'gfx/sprites/sprite-townsfolk-female-3.png',
|
|
|
|
|
|
'width': 32,
|
|
|
|
|
|
'height': 32,
|
|
|
|
|
|
'frames': 12
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
'name': 'townsfolk-female-4',
|
|
|
|
|
|
'path': 'gfx/sprites/sprite-townsfolk-female-4.png',
|
|
|
|
|
|
'width': 32,
|
|
|
|
|
|
'height': 32,
|
|
|
|
|
|
'frames': 12
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
'name': 'townsfolk-guard-1',
|
|
|
|
|
|
'path': 'gfx/sprites/sprite-townsfolk-guard-1.png',
|
|
|
|
|
|
'width': 32,
|
|
|
|
|
|
'height': 32,
|
|
|
|
|
|
'frames': 12
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
'name': 'townsfolk-guard-2',
|
|
|
|
|
|
'path': 'gfx/sprites/sprite-townsfolk-guard-2.png',
|
|
|
|
|
|
'width': 32,
|
|
|
|
|
|
'height': 32,
|
|
|
|
|
|
'frames': 12
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
'animations': {
|
|
|
|
|
|
'bipedwalkdown': {
|
|
|
|
|
|
'frames': [1, 2, 0],
|
|
|
|
|
|
'speed': 4,
|
|
|
|
|
|
'loop': true
|
|
|
|
|
|
},
|
|
|
|
|
|
'bipedwalkleft': {
|
|
|
|
|
|
'frames': [4, 5, 3],
|
|
|
|
|
|
'speed': 4,
|
|
|
|
|
|
'loop': true
|
|
|
|
|
|
},
|
|
|
|
|
|
'bipedwalkright': {
|
|
|
|
|
|
'frames': [7, 8, 6],
|
|
|
|
|
|
'speed': 4,
|
|
|
|
|
|
'loop': true
|
|
|
|
|
|
},
|
|
|
|
|
|
'bipedwalkup': {
|
|
|
|
|
|
'frames': [10, 11, 9],
|
|
|
|
|
|
'speed': 4,
|
|
|
|
|
|
'loop': true
|
|
|
|
|
|
},
|
|
|
|
|
|
'bipedrundown': {
|
|
|
|
|
|
'frames': [1, 2, 0],
|
|
|
|
|
|
'speed': 12,
|
|
|
|
|
|
'loop': true
|
|
|
|
|
|
},
|
|
|
|
|
|
'bipedrunleft': {
|
|
|
|
|
|
'frames': [4, 5, 3],
|
|
|
|
|
|
'speed': 12,
|
|
|
|
|
|
'loop': true
|
|
|
|
|
|
},
|
|
|
|
|
|
'bipedrunright': {
|
|
|
|
|
|
'frames': [7, 8, 6],
|
|
|
|
|
|
'speed': 12,
|
|
|
|
|
|
'loop': true
|
|
|
|
|
|
},
|
|
|
|
|
|
'bipedrunup': {
|
|
|
|
|
|
'frames': [10, 11, 9],
|
|
|
|
|
|
'speed': 12,
|
|
|
|
|
|
'loop': true
|
2014-06-10 19:15:55 -07:00
|
|
|
|
}
|
2014-06-10 01:05:21 -07:00
|
|
|
|
}
|
2014-06-09 22:48:39 -07:00
|
|
|
|
};
|
|
|
|
|
|
|
2014-06-11 21:56:46 -07:00
|
|
|
|
var moonlightDialog = {
|
|
|
|
|
|
"status": {
|
2014-06-11 22:51:05 -07:00
|
|
|
|
"townsfolk-male" : {
|
|
|
|
|
|
"unaware" : [
|
2014-06-11 22:02:11 -07:00
|
|
|
|
"I'd rather be fishing.",
|
|
|
|
|
|
"Different day, same old stuff.",
|
|
|
|
|
|
"Oi! Where'd that trouble run off to now then?",
|
|
|
|
|
|
"The missus is off shoppin', and here I am sittin' on me Jack Jones.",
|
2014-06-11 21:56:46 -07:00
|
|
|
|
"Oy I'm gonna have a butcher’s at that new tailor's knickers he has for sale.",
|
2014-06-11 22:02:11 -07:00
|
|
|
|
"I'm off to the pub to see the lads and chew the fat.",
|
|
|
|
|
|
"♪ ♫ Whistling ♪ ♫"
|
2014-06-11 21:56:46 -07:00
|
|
|
|
],
|
2014-06-11 22:51:05 -07:00
|
|
|
|
"concerned" : [
|
2014-06-11 22:02:11 -07:00
|
|
|
|
"Wha… what’s that? Who’s there?",
|
|
|
|
|
|
"Did you hear that?",
|
|
|
|
|
|
"Either I’m hearin’ things, or I need to stop drinkin’ midday.",
|
|
|
|
|
|
"Oi? I don’t want no tomfoolery; come out if you’re there!",
|
|
|
|
|
|
"Must be them darned kids again.",
|
|
|
|
|
|
"What’s that?",
|
2014-06-11 22:02:47 -07:00
|
|
|
|
"Did you see that?"
|
2014-06-11 22:02:11 -07:00
|
|
|
|
],
|
2014-06-11 22:51:05 -07:00
|
|
|
|
"alerted" : [
|
2014-06-11 22:02:47 -07:00
|
|
|
|
"Don't you come no closer, you hear?",
|
|
|
|
|
|
"Egads!",
|
|
|
|
|
|
"I'm getting’ outta here!",
|
|
|
|
|
|
"What's going on?!",
|
|
|
|
|
|
"Holy bejeezus!",
|
|
|
|
|
|
"Did you see that?",
|
|
|
|
|
|
"What're you doing?!",
|
|
|
|
|
|
"Get away!",
|
|
|
|
|
|
"Get away from me!",
|
2014-06-11 22:02:11 -07:00
|
|
|
|
"Stay away! I know Kung-fu! ... but that would require bravery I don't have",
|
|
|
|
|
|
"Guards! GUARDS!"
|
|
|
|
|
|
],
|
2014-06-11 22:51:05 -07:00
|
|
|
|
"losthim" : [
|
2014-06-11 22:02:11 -07:00
|
|
|
|
"Whew. Glad that’s over.",
|
|
|
|
|
|
"I wasn’t scared!",
|
|
|
|
|
|
"Must’ve been intimidated by manly physique.",
|
|
|
|
|
|
"That’s right! Run away!",
|
|
|
|
|
|
"Aye, and don’t-cha come back!",
|
|
|
|
|
|
"Spoony Bard...",
|
|
|
|
|
|
"Bloody wanker!"
|
|
|
|
|
|
]
|
2014-06-11 21:56:46 -07:00
|
|
|
|
},
|
2014-06-11 22:51:05 -07:00
|
|
|
|
"townsfolk-female" : {
|
2014-06-11 23:43:59 -07:00
|
|
|
|
"unaware" : [
|
|
|
|
|
|
"My retro shake brings all the boys to the yard.",
|
|
|
|
|
|
"I'm off to get my Barnet sorted out. I’ll be the best looking lady at the gala.",
|
|
|
|
|
|
"It's always all itsy bitsy with them boys at the Rub-a-Dub.",
|
|
|
|
|
|
"I need to get this shopping sorted out.",
|
|
|
|
|
|
"What a lovely evening. Perfect for skulking"
|
|
|
|
|
|
],
|
|
|
|
|
|
"concerned" : [
|
|
|
|
|
|
"Wha… what’s that? Who’s there?",
|
|
|
|
|
|
"Did you hear that?",
|
|
|
|
|
|
"Martha? Is that you?",
|
|
|
|
|
|
"I don't want no tomfoolery. Go away!",
|
|
|
|
|
|
"What was that? This is how horror theatre bits start…",
|
|
|
|
|
|
"What's that?",
|
|
|
|
|
|
"Did you see that?"
|
|
|
|
|
|
],
|
|
|
|
|
|
"alerted" : [
|
|
|
|
|
|
"Eeeek!",
|
|
|
|
|
|
"Stay away from me!",
|
|
|
|
|
|
"Guards! Guards!",
|
|
|
|
|
|
"What in the nine hells?",
|
|
|
|
|
|
"Get back or I'll swoon!",
|
|
|
|
|
|
"Help! He's after me virtue!"
|
|
|
|
|
|
],
|
|
|
|
|
|
"losthim" : [
|
|
|
|
|
|
"Good riddance! There’s too many male protagonists in games anyhow!",
|
|
|
|
|
|
"I sure am glad that’s over.",
|
|
|
|
|
|
"This town is going straight to hell.",
|
|
|
|
|
|
"I hope he doesn’t come back.",
|
|
|
|
|
|
"I hope he’s caught and hanged!"
|
|
|
|
|
|
]
|
2014-06-11 21:56:46 -07:00
|
|
|
|
},
|
2014-06-11 22:51:05 -07:00
|
|
|
|
"townsfolk-guard" : {
|
2014-06-11 23:43:59 -07:00
|
|
|
|
"unaware" : [
|
|
|
|
|
|
"Just doing my civic duty.",
|
|
|
|
|
|
"Good day, citizens.",
|
|
|
|
|
|
"Honor. Liberty. Justice. Oh, and pancakes… I love pancakes.",
|
|
|
|
|
|
"No loitering.",
|
|
|
|
|
|
"I am the law.",
|
|
|
|
|
|
"May Evil beware and may Good dress warmly and eat plenty of fresh vegetables.",
|
|
|
|
|
|
"We're sworn to protect The City."
|
|
|
|
|
|
],
|
|
|
|
|
|
"concerned" : [
|
|
|
|
|
|
"I sense law-breaking abound.",
|
2014-06-11 23:44:22 -07:00
|
|
|
|
"Did you hear something?",
|
|
|
|
|
|
"Did you see that?",
|
|
|
|
|
|
"I know you're around here somewhere, rat…",
|
|
|
|
|
|
"Don't make me look for you in hard-to-reach places!",
|
2014-06-11 23:43:59 -07:00
|
|
|
|
"The eyes play tricks like tiny, round devils."
|
|
|
|
|
|
],
|
|
|
|
|
|
"alerted" : [
|
|
|
|
|
|
"Surrender lawbreaker!",
|
|
|
|
|
|
"Halt!",
|
|
|
|
|
|
"Halt! In the name of the… umm, er… me!",
|
|
|
|
|
|
"Prepare for justice, criminal!",
|
|
|
|
|
|
"I am justice!",
|
|
|
|
|
|
"There’s no escaping the law!",
|
|
|
|
|
|
"Surrender thief!",
|
|
|
|
|
|
"Prepare to taste steel!",
|
|
|
|
|
|
"Clear the area! Nobody panic! I'll catch him!"
|
|
|
|
|
|
],
|
|
|
|
|
|
"losthim" : [
|
|
|
|
|
|
"I’ll get you next time, criminal scum.",
|
|
|
|
|
|
"Defeat is a harsh mistress.",
|
|
|
|
|
|
"Evil men may get away, but justice fights another day.",
|
|
|
|
|
|
"Wickedness flees, evading the cold steel of righteousness."
|
|
|
|
|
|
]
|
2014-06-11 21:56:46 -07:00
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"conversations": {
|
|
|
|
|
|
"townsfolk-male": {
|
|
|
|
|
|
"townsfolk-female": [],
|
|
|
|
|
|
"townsfolk-male": [],
|
|
|
|
|
|
"townsfolk-guard": []
|
|
|
|
|
|
},
|
|
|
|
|
|
"townsfolk-female": {
|
|
|
|
|
|
"townsfolk-male": [],
|
|
|
|
|
|
"townsfolk-female": [],
|
|
|
|
|
|
"townsfolk-guard": [],
|
|
|
|
|
|
},
|
|
|
|
|
|
"townsfolk-guard": {
|
|
|
|
|
|
"townsfolk-male": [],
|
|
|
|
|
|
"townsfolk-female": [],
|
|
|
|
|
|
"townsfolk-guard": []
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2014-06-11 10:05:02 -07:00
|
|
|
|
// Create torch objects
|
2014-06-11 20:17:34 -07:00
|
|
|
|
// Light constructor
|
|
|
|
|
|
var Light = function(game, x, y, radius, fade, color, flicker) {
|
2014-06-11 11:08:16 -07:00
|
|
|
|
color = ( typeof color == undefined ? [255, 255, 255] : color );
|
|
|
|
|
|
fade = ( typeof fade == undefined ? 0.25 : fade );
|
|
|
|
|
|
radius = ( typeof radius == undefined ? 64 : radius );
|
2014-06-11 20:17:34 -07:00
|
|
|
|
flicker = ( typeof flicker == undefined ? false : flicker );
|
2014-06-11 10:48:05 -07:00
|
|
|
|
Phaser.Sprite.call(this, game, x, y, null);
|
2014-06-11 10:05:02 -07:00
|
|
|
|
|
|
|
|
|
|
// Set the pivot point for this sprite to the center
|
|
|
|
|
|
this.anchor.setTo(0.5, 0.5);
|
2014-06-11 11:01:43 -07:00
|
|
|
|
this.color = color;
|
|
|
|
|
|
this.radius = radius;
|
2014-06-11 11:00:09 -07:00
|
|
|
|
this.fade = radius * fade
|
2014-06-11 20:12:13 -07:00
|
|
|
|
this.rect = new Phaser.Rectangle(this.x, this.y, radius * 2, radius * 2)
|
2014-06-11 20:17:34 -07:00
|
|
|
|
this.flicker = flicker;
|
2014-06-11 20:12:13 -07:00
|
|
|
|
|
2014-06-11 10:05:02 -07:00
|
|
|
|
};
|
|
|
|
|
|
|
2014-06-11 20:17:34 -07:00
|
|
|
|
// Lightes are a type of Phaser.Sprite
|
|
|
|
|
|
Light.prototype = Object.create(Phaser.Sprite.prototype);
|
|
|
|
|
|
Light.prototype.constructor = Light;
|
2014-06-11 10:05:02 -07:00
|
|
|
|
|
2014-06-11 22:05:54 -07:00
|
|
|
|
var AISprite = function(game, x, y, spritetype) {
|
2014-06-12 00:15:51 -07:00
|
|
|
|
this.enableWordBubble = function() {
|
|
|
|
|
|
this.enable_word_bubble = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
this.clearWordBubble = function() {
|
2014-06-12 00:11:08 -07:00
|
|
|
|
this.clear_bubble = true;
|
2014-06-12 00:15:51 -07:00
|
|
|
|
this.enable_word_bubble = false;
|
|
|
|
|
|
timer = game.time.create(false);
|
|
|
|
|
|
timerev = timer.add(10000, this.enableWordBubble, this);
|
|
|
|
|
|
timer.start()
|
2014-06-12 00:11:08 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
2014-06-11 22:25:47 -07:00
|
|
|
|
this.setWordBubble = function()
|
|
|
|
|
|
{
|
2014-06-12 00:07:23 -07:00
|
|
|
|
if ( this.bubble !== null || this.sprite_group == undefined) {
|
2014-06-11 22:25:47 -07:00
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
//this.bubble = game.add.group()
|
|
|
|
|
|
aistate = this.state & ( STATE_UNAWARE | STATE_CONCERNED | STATE_ALERTED | STATE_LOSTHIM );
|
2014-06-11 22:51:05 -07:00
|
|
|
|
switch ( aistate ) {
|
|
|
|
|
|
case STATE_UNAWARE: {
|
|
|
|
|
|
aistate = "unaware";
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case STATE_CONCERNED: {
|
|
|
|
|
|
aistate = "concerned";
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case STATE_ALERTED: {
|
|
|
|
|
|
aistate = "alerted";
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case STATE_LOSTHIM: {
|
|
|
|
|
|
aistate = "losthim";
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2014-06-11 23:06:50 -07:00
|
|
|
|
|
2014-06-11 22:25:47 -07:00
|
|
|
|
var mylines = moonlightDialog['status'][this.sprite_group][aistate];
|
2014-06-11 23:06:50 -07:00
|
|
|
|
this.bubble_text = mylines[game.rnd.integerInRange(0, mylines.length)];
|
|
|
|
|
|
this.bubble_style = {font: '12px Arial Bold', fill: '#ffffff', align: 'center'}
|
2014-06-11 23:08:07 -07:00
|
|
|
|
this.bubble = game.add.text(this.x, this.y - 20, this.bubble_text, this.bubble_style);
|
2014-06-11 23:46:03 -07:00
|
|
|
|
|
2014-06-12 00:13:46 -07:00
|
|
|
|
timer = game.time.create(false);
|
2014-06-12 00:15:51 -07:00
|
|
|
|
timerev = timer.add(5000, this.clearWordBubble, this);
|
2014-06-12 00:11:08 -07:00
|
|
|
|
timer.start()
|
2014-06-11 22:25:47 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
2014-06-11 21:05:18 -07:00
|
|
|
|
this.update = function()
|
|
|
|
|
|
{
|
2014-06-11 21:14:18 -07:00
|
|
|
|
if ( game.rnd.integerInRange(0, 100) < 95 )
|
2014-06-11 21:05:18 -07:00
|
|
|
|
return;
|
2014-06-11 21:14:18 -07:00
|
|
|
|
var running = false;
|
|
|
|
|
|
if ( game.rnd.integerInRange(0, 100) > 90 ) {
|
|
|
|
|
|
running = true;
|
|
|
|
|
|
}
|
2014-06-11 21:05:18 -07:00
|
|
|
|
|
2014-06-11 23:46:41 -07:00
|
|
|
|
if ( game.rnd.integerInRange(0, 500) > 450 ) {
|
2014-06-11 22:25:47 -07:00
|
|
|
|
this.setWordBubble();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2014-06-11 23:06:50 -07:00
|
|
|
|
if ( this.bubble !== null ) {
|
|
|
|
|
|
this.bubble.destroy();
|
2014-06-11 23:53:49 -07:00
|
|
|
|
if ( this.clear_bubble == true ) {
|
|
|
|
|
|
this.bubble = null;
|
|
|
|
|
|
this.clear_bubble = false;
|
2014-06-12 00:07:23 -07:00
|
|
|
|
console.log("Cleared bubble");
|
2014-06-11 23:53:49 -07:00
|
|
|
|
} else {
|
|
|
|
|
|
this.bubble = game.add.text(this.x, this.y - 20, this.bubble_text, this.bubble_style);
|
|
|
|
|
|
}
|
2014-06-11 23:06:50 -07:00
|
|
|
|
}
|
2014-06-11 23:08:07 -07:00
|
|
|
|
|
2014-06-11 21:05:18 -07:00
|
|
|
|
switch ( game.rnd.integerInRange(0, 4) ) {
|
|
|
|
|
|
case 0: {
|
2014-06-11 21:06:33 -07:00
|
|
|
|
setSpriteMovement(this, running, 'up');
|
2014-06-11 21:05:18 -07:00
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case 1: {
|
2014-06-11 21:06:33 -07:00
|
|
|
|
setSpriteMovement(this, running, 'down');
|
2014-06-11 21:05:18 -07:00
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case 2: {
|
2014-06-11 21:06:33 -07:00
|
|
|
|
setSpriteMovement(this, running, 'left');
|
2014-06-11 21:05:18 -07:00
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case 3: {
|
2014-06-11 21:06:33 -07:00
|
|
|
|
setSpriteMovement(this, running, 'right');
|
2014-06-11 21:05:18 -07:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2014-06-11 20:43:05 -07:00
|
|
|
|
var spritenames_by_type = [
|
|
|
|
|
|
'townsfolk-male-1',
|
|
|
|
|
|
'townsfolk-male-2',
|
|
|
|
|
|
'townsfolk-male-3',
|
|
|
|
|
|
'townsfolk-male-4',
|
|
|
|
|
|
'townsfolk-female-1',
|
|
|
|
|
|
'townsfolk-female-2',
|
|
|
|
|
|
'townsfolk-female-3',
|
|
|
|
|
|
'townsfolk-female-4',
|
|
|
|
|
|
'townsfolk-guard-1',
|
|
|
|
|
|
'townsfolk-guard-2'
|
|
|
|
|
|
];
|
2014-06-11 22:25:47 -07:00
|
|
|
|
this.bubble = null;
|
2014-06-11 23:53:49 -07:00
|
|
|
|
this.clear_bubble = false;
|
|
|
|
|
|
|
2014-06-11 22:25:47 -07:00
|
|
|
|
this.state = STATE_UNAWARE;
|
2014-06-11 20:43:05 -07:00
|
|
|
|
Phaser.Sprite.call(this, game, x, y, spritenames_by_type[spritetype]);
|
2014-06-11 21:03:01 -07:00
|
|
|
|
game.physics.arcade.enable(this);
|
2014-06-11 21:19:34 -07:00
|
|
|
|
this.body.collideWorldBounds = true;
|
2014-06-11 21:17:23 -07:00
|
|
|
|
|
2014-06-11 23:59:54 -07:00
|
|
|
|
var ARGH = spritenames_by_type[spritetype];
|
2014-06-12 00:01:30 -07:00
|
|
|
|
console.log(ARGH);
|
2014-06-12 00:00:20 -07:00
|
|
|
|
ARGH = ARGH.split("-");
|
2014-06-11 23:59:04 -07:00
|
|
|
|
this.sprite_group = ARGH[0] + "-" + ARGH[1];
|
2014-06-11 22:25:47 -07:00
|
|
|
|
|
2014-06-11 21:17:23 -07:00
|
|
|
|
addAnimation(this, 'bipedwalkleft');
|
|
|
|
|
|
addAnimation(this, 'bipedwalkright');
|
|
|
|
|
|
addAnimation(this, 'bipedwalkup');
|
|
|
|
|
|
addAnimation(this, 'bipedwalkdown');
|
|
|
|
|
|
addAnimation(this, 'bipedrunleft');
|
|
|
|
|
|
addAnimation(this, 'bipedrunright');
|
|
|
|
|
|
addAnimation(this, 'bipedrunup');
|
|
|
|
|
|
addAnimation(this, 'bipedrundown');
|
2014-06-11 21:00:59 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
2014-06-11 22:05:54 -07:00
|
|
|
|
AISprite.prototype = Object.create(Phaser.Sprite.prototype);
|
|
|
|
|
|
AISprite.prototype.constructor = AISprite;
|
2014-06-11 20:43:05 -07:00
|
|
|
|
|
2014-06-11 10:05:44 -07:00
|
|
|
|
var GameState = function(game) {
|
2014-06-11 10:05:02 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
2014-06-11 21:17:23 -07:00
|
|
|
|
function addAnimation(obj, anim)
|
2014-06-10 01:05:21 -07:00
|
|
|
|
{
|
|
|
|
|
|
a = moonlightSettings['animations'][anim]
|
|
|
|
|
|
obj.animations.add(anim, a['frames'], a['speed'], a['loop'])
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2014-06-11 10:06:03 -07:00
|
|
|
|
GameState.prototype.preload = function()
|
2014-06-10 19:15:55 -07:00
|
|
|
|
{
|
2014-06-09 22:48:39 -07:00
|
|
|
|
for (var k in moonlightSettings['map']['tilesets']) {
|
|
|
|
|
|
var ts = moonlightSettings['map']['tilesets'][k];
|
|
|
|
|
|
this.load.image(ts['name'], ts['path']);
|
|
|
|
|
|
}
|
|
|
|
|
|
for (var k in moonlightSettings['images']) {
|
|
|
|
|
|
var i = moonlightSettings['images'][k];
|
|
|
|
|
|
this.load.image(i['name'], i['path']);
|
|
|
|
|
|
}
|
2014-06-10 01:05:21 -07:00
|
|
|
|
for (var k in moonlightSettings['spritesheets']) {
|
|
|
|
|
|
var s = moonlightSettings['spritesheets'][k]
|
|
|
|
|
|
game.load.spritesheet(s['name'], s['path'], s['width'], s['height'], s['frames'])
|
|
|
|
|
|
}
|
2014-06-10 19:15:55 -07:00
|
|
|
|
this.load.tilemap('map',
|
|
|
|
|
|
moonlightSettings['map']['path'],
|
|
|
|
|
|
null,
|
2014-06-09 22:48:39 -07:00
|
|
|
|
Phaser.Tilemap.TILED_JSON);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2014-06-11 10:06:03 -07:00
|
|
|
|
GameState.prototype.create = function()
|
2014-06-09 22:48:39 -07:00
|
|
|
|
{
|
|
|
|
|
|
map = this.add.tilemap('map');
|
|
|
|
|
|
for (var k in moonlightSettings['map']['tilesets']) {
|
|
|
|
|
|
var ts = moonlightSettings['map']['tilesets'][k];
|
|
|
|
|
|
map.addTilesetImage(ts['name']);
|
|
|
|
|
|
}
|
|
|
|
|
|
layer = map.createLayer('Tile Layer 1');
|
|
|
|
|
|
layer.resizeWorld();
|
|
|
|
|
|
map.setCollisionBetween(
|
|
|
|
|
|
moonlightSettings['map']['collisionRange'][0],
|
|
|
|
|
|
moonlightSettings['map']['collisionRange'][1]
|
|
|
|
|
|
);
|
|
|
|
|
|
|
2014-06-10 01:05:21 -07:00
|
|
|
|
player = this.add.sprite(10, 10, 'player');
|
2014-06-10 19:15:55 -07:00
|
|
|
|
this.physics.arcade.enable(player);
|
|
|
|
|
|
player.body.collideWorldBounds = true;
|
2014-06-10 01:05:21 -07:00
|
|
|
|
|
2014-06-11 21:17:23 -07:00
|
|
|
|
addAnimation(player, 'bipedwalkleft');
|
|
|
|
|
|
addAnimation(player, 'bipedwalkright');
|
|
|
|
|
|
addAnimation(player, 'bipedwalkup');
|
|
|
|
|
|
addAnimation(player, 'bipedwalkdown');
|
|
|
|
|
|
addAnimation(player, 'bipedrunleft');
|
|
|
|
|
|
addAnimation(player, 'bipedrunright');
|
|
|
|
|
|
addAnimation(player, 'bipedrunup');
|
|
|
|
|
|
addAnimation(player, 'bipedrundown');
|
2014-06-10 01:05:21 -07:00
|
|
|
|
|
2014-06-09 22:48:39 -07:00
|
|
|
|
this.camera.follow(player, Phaser.Camera.FOLLOW_TOPDOWN);
|
|
|
|
|
|
controls = game.input.keyboard.createCursorKeys();
|
2014-06-10 19:15:55 -07:00
|
|
|
|
|
|
|
|
|
|
this.game.time.advancedTiming = true;
|
|
|
|
|
|
this.fpsText = this.game.add.text(
|
|
|
|
|
|
20, 20, '', { font: '16px Arial', fill: '#ffffff' }
|
|
|
|
|
|
);
|
2014-06-11 10:46:14 -07:00
|
|
|
|
this.fpsText.fixedToCamera = true;
|
2014-06-10 19:15:55 -07:00
|
|
|
|
|
2014-06-11 20:43:05 -07:00
|
|
|
|
// Create the wandering sprites
|
2014-06-11 22:05:54 -07:00
|
|
|
|
this.aiSprites = game.add.group();
|
2014-06-11 20:43:05 -07:00
|
|
|
|
for ( i = 0; i < 20 ; i++ ) {
|
2014-06-11 22:05:54 -07:00
|
|
|
|
this.aiSprites.add(
|
|
|
|
|
|
new AISprite(game,
|
2014-06-11 23:48:56 -07:00
|
|
|
|
game.rnd.integerInRange(0, game.width),
|
|
|
|
|
|
game.rnd.integerInRange(0, game.height),
|
2014-06-12 00:02:33 -07:00
|
|
|
|
game.rnd.integerInRange(0, 9)
|
2014-06-11 20:43:05 -07:00
|
|
|
|
)
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2014-06-11 20:48:04 -07:00
|
|
|
|
this.shadowTexture = game.add.bitmapData(game.world.width, game.world.height);
|
2014-06-11 21:26:31 -07:00
|
|
|
|
// drop this lower to make the map darker
|
2014-06-11 21:39:51 -07:00
|
|
|
|
this.shadowTextureColor = 'rgb(255, 255, 255)';
|
2014-06-11 20:48:04 -07:00
|
|
|
|
|
|
|
|
|
|
// Create an object that will use the bitmap as a texture
|
|
|
|
|
|
this.shadowSprite = game.add.image(0, 0, this.shadowTexture);
|
|
|
|
|
|
|
|
|
|
|
|
// Set the blend mode to MULTIPLY. This will darken the colors of
|
|
|
|
|
|
// everything below this sprite.
|
|
|
|
|
|
this.shadowSprite.blendMode = Phaser.blendModes.MULTIPLY;
|
|
|
|
|
|
|
2014-06-10 19:15:55 -07:00
|
|
|
|
// Create the lights
|
2014-06-11 19:40:05 -07:00
|
|
|
|
this.staticLights = game.add.group();
|
2014-06-11 21:39:51 -07:00
|
|
|
|
// for (i = 0; i < 20 ; i++ ) {
|
|
|
|
|
|
// this.staticLights.add(
|
|
|
|
|
|
// new Light(game,
|
|
|
|
|
|
// game.rnd.integerInRange(0, game.width),
|
|
|
|
|
|
// game.rnd.integerInRange(0, game.height),
|
|
|
|
|
|
// game.rnd.integerInRange(0, 128),
|
|
|
|
|
|
// game.rnd.realInRange(0.0, 1.0),
|
|
|
|
|
|
// [
|
|
|
|
|
|
// game.rnd.integerInRange(0, 255),
|
|
|
|
|
|
// game.rnd.integerInRange(0, 255),
|
|
|
|
|
|
// game.rnd.integerInRange(0, 255)
|
|
|
|
|
|
// ],
|
|
|
|
|
|
// flicker = [true, false][game.rnd.integerInRange(0, 1)]
|
|
|
|
|
|
// )
|
|
|
|
|
|
// );
|
|
|
|
|
|
// }
|
2014-06-11 20:17:34 -07:00
|
|
|
|
//this.movingLight = new Light(game, game.width/2, game.height/2);
|
2014-06-11 11:09:45 -07:00
|
|
|
|
//this.lights.add(this.movingLight);
|
2014-06-09 22:48:39 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
2014-06-11 10:06:03 -07:00
|
|
|
|
GameState.prototype.updateShadowTexture = function() {
|
2014-06-10 19:15:55 -07:00
|
|
|
|
// This function updates the shadow texture (this.shadowTexture).
|
|
|
|
|
|
// First, it fills the entire texture with a dark shadow color.
|
|
|
|
|
|
// Then it draws a white circle centered on the pointer position.
|
|
|
|
|
|
// Because the texture is drawn to the screen using the MULTIPLY
|
|
|
|
|
|
// blend mode, the dark areas of the texture make all of the colors
|
|
|
|
|
|
// underneath it darker, while the white area is unaffected.
|
|
|
|
|
|
|
|
|
|
|
|
// Draw shadow
|
2014-06-11 20:24:07 -07:00
|
|
|
|
this.shadowTexture.context.fillStyle = this.shadowTextureColor;
|
2014-06-11 11:05:59 -07:00
|
|
|
|
this.shadowTexture.context.fillRect(0, 0, game.world.width, game.world.height);
|
2014-06-10 19:15:55 -07:00
|
|
|
|
|
|
|
|
|
|
// Iterate through each of the lights and draw the glow
|
2014-06-11 19:57:11 -07:00
|
|
|
|
this.staticLights.forEach(function(light) {
|
2014-06-11 20:24:07 -07:00
|
|
|
|
// Don't draw lights that aren't on screen
|
2014-06-11 20:12:13 -07:00
|
|
|
|
var r1 = new Phaser.Rectangle(this.game.camera.x,
|
|
|
|
|
|
this.game.camera.y,
|
|
|
|
|
|
this.game.camera.width,
|
|
|
|
|
|
this.game.camera.height);
|
|
|
|
|
|
if ( ! light.rect.intersects(r1) ) {
|
2014-06-11 20:01:44 -07:00
|
|
|
|
return;
|
2014-06-11 20:01:00 -07:00
|
|
|
|
}
|
2014-06-11 20:24:07 -07:00
|
|
|
|
|
2014-06-11 20:17:34 -07:00
|
|
|
|
if ( light.flicker ) {
|
2014-06-11 20:24:07 -07:00
|
|
|
|
// Randomly change the radius each frame
|
2014-06-11 20:17:34 -07:00
|
|
|
|
var radius = light.radius + game.rnd.integerInRange(1,10);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
var radius = light.radius;
|
|
|
|
|
|
}
|
2014-06-10 19:15:55 -07:00
|
|
|
|
|
|
|
|
|
|
// Draw circle of light with a soft edge
|
|
|
|
|
|
var gradient =
|
|
|
|
|
|
this.shadowTexture.context.createRadialGradient(
|
2014-06-11 11:00:09 -07:00
|
|
|
|
light.x + 16, light.y + 16, light.fade,
|
2014-06-11 10:49:02 -07:00
|
|
|
|
light.x + 16, light.y + 16, radius);
|
2014-06-11 11:00:09 -07:00
|
|
|
|
gradient.addColorStop(0, 'rgba(' + light.color[0] + ',' + light.color[1] + ',' + light.color[2] +', 1.0)');
|
|
|
|
|
|
gradient.addColorStop(1, 'rgba(' + light.color[0] + ',' + light.color[1] + ',' + light.color[2] +', 0.0)');
|
2014-06-10 19:15:55 -07:00
|
|
|
|
|
|
|
|
|
|
this.shadowTexture.context.beginPath();
|
|
|
|
|
|
this.shadowTexture.context.fillStyle = gradient;
|
2014-06-11 10:49:39 -07:00
|
|
|
|
this.shadowTexture.context.arc(light.x + 16, light.y + 16, radius, 0, Math.PI*2);
|
2014-06-10 19:15:55 -07:00
|
|
|
|
this.shadowTexture.context.fill();
|
|
|
|
|
|
}, this);
|
|
|
|
|
|
|
|
|
|
|
|
// This just tells the engine it should update the texture cache
|
|
|
|
|
|
this.shadowTexture.dirty = true;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2014-06-11 21:06:33 -07:00
|
|
|
|
function setSpriteMovement(spr, running, dir)
|
2014-06-10 01:05:21 -07:00
|
|
|
|
{
|
|
|
|
|
|
var x = 0;
|
|
|
|
|
|
var y = 0;
|
|
|
|
|
|
|
|
|
|
|
|
if ( running ) {
|
|
|
|
|
|
x = 200;
|
|
|
|
|
|
y = 200;
|
|
|
|
|
|
spr.animations.play("bipedrun" + dir);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
x = 75;
|
|
|
|
|
|
y = 75;
|
|
|
|
|
|
spr.animations.play("bipedwalk" + dir);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if ( dir == "left" ) {
|
|
|
|
|
|
spr.body.velocity.x = -x;
|
|
|
|
|
|
spr.body.velocity.y = 0;
|
|
|
|
|
|
} else if ( dir == "right" ) {
|
|
|
|
|
|
spr.body.velocity.x = x;
|
|
|
|
|
|
spr.body.velocity.y = 0;
|
|
|
|
|
|
} else if ( dir == "up" ) {
|
|
|
|
|
|
spr.body.velocity.x = 0;
|
|
|
|
|
|
spr.body.velocity.y = -y;
|
|
|
|
|
|
} else if ( dir == "down" ) {
|
|
|
|
|
|
spr.body.velocity.x = 0;
|
|
|
|
|
|
spr.body.velocity.y = y;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2014-06-11 10:06:03 -07:00
|
|
|
|
GameState.prototype.check_input = function()
|
2014-06-09 22:48:39 -07:00
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
player.body.velocity.x = 0;
|
|
|
|
|
|
player.body.velocity.y = 0;
|
2014-06-10 01:05:21 -07:00
|
|
|
|
velocityMod = 0;
|
|
|
|
|
|
|
2014-06-09 22:48:39 -07:00
|
|
|
|
if ( controls.up.isDown) {
|
2014-06-11 21:06:33 -07:00
|
|
|
|
setSpriteMovement(player, controls.up.shiftKey, 'up');
|
2014-06-09 22:48:39 -07:00
|
|
|
|
} else if ( controls.down.isDown ) {
|
2014-06-11 21:06:33 -07:00
|
|
|
|
setSpriteMovement(player, controls.up.shiftKey, 'down');
|
2014-06-10 01:05:21 -07:00
|
|
|
|
} else if ( controls.left.isDown ) {
|
2014-06-11 21:06:33 -07:00
|
|
|
|
setSpriteMovement(player, controls.up.shiftKey, 'left');
|
2014-06-09 22:48:39 -07:00
|
|
|
|
} else if ( controls.right.isDown ) {
|
2014-06-11 21:06:33 -07:00
|
|
|
|
setSpriteMovement(player, controls.up.shiftKey, 'right');
|
2014-06-10 01:05:21 -07:00
|
|
|
|
} else {
|
|
|
|
|
|
player.animations.stop(null, true);
|
2014-06-09 22:48:39 -07:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2014-06-11 10:06:03 -07:00
|
|
|
|
GameState.prototype.update = function()
|
2014-06-09 22:48:39 -07:00
|
|
|
|
{
|
2014-06-10 19:15:55 -07:00
|
|
|
|
if (game.time.fps !== 0) {
|
|
|
|
|
|
this.fpsText.setText(game.time.fps + ' FPS');
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2014-06-11 10:06:32 -07:00
|
|
|
|
this.check_input();
|
2014-06-09 22:48:39 -07:00
|
|
|
|
this.physics.arcade.collide(player, layer);
|
2014-06-11 21:09:22 -07:00
|
|
|
|
|
2014-06-11 21:46:32 -07:00
|
|
|
|
function _inner_collide(x) {
|
2014-06-11 21:10:51 -07:00
|
|
|
|
this.physics.arcade.collide(x, layer);
|
2014-06-11 21:46:32 -07:00
|
|
|
|
this.physics.arcade.collide(x, player);
|
2014-06-11 21:42:36 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
2014-06-11 22:05:54 -07:00
|
|
|
|
this.aiSprites.forEach(_inner_collide, this);
|
2014-06-10 19:15:55 -07:00
|
|
|
|
this.updateShadowTexture();
|
2014-06-09 22:48:39 -07:00
|
|
|
|
}
|
2014-06-11 10:05:02 -07:00
|
|
|
|
|
2014-06-11 10:05:25 -07:00
|
|
|
|
var game = new Phaser.Game(640, 480, Phaser.AUTO, '');
|
2014-06-11 10:05:02 -07:00
|
|
|
|
game.state.add('game', GameState, true);
|