ofb/Assets/Sprites/Grenouille/GothicVania-town-files/code/phaser-code/game.js
2023-04-27 19:45:27 -07:00

382 lines
12 KiB
JavaScript

/*
* Gothicvania Town Demo Code
* @copyright 2017 Ansimuz
* Get more free assets and code like these at: www.pixelgameart.org
* Visit my store for premium content at https://ansimuz.itch.io/
* */
var game;
var player;
var folkIndex = 0;
var gameWidth = 430;
var gameHeight = 272;
var background;
var middleground;
var globalMap;
var townFolks;
window.onload = function () {
game = new Phaser.Game(gameWidth, gameHeight, Phaser.AUTO, "");
game.state.add('Boot', boot);
game.state.add('Preload', preload);
game.state.add('TitleScreen', titleScreen);
game.state.add('PlayGame', playGame);
//
game.state.start('Boot');
}
var boot = function (game) {
}
boot.prototype = {
preload: function () {
this.game.load.image('loading', 'assets/sprites/loading.png');
},
create: function () {
game.scale.pageAlignHorizontally = true;
game.scale.pageAlignVertically = true;
game.scale.scaleMode = Phaser.ScaleManager.SHOW_ALL;
game.renderer.renderSession.roundPixels = true;
this.game.state.start('Preload');
}
}
var preload = function (game) {
};
preload.prototype = {
preload: function () {
var loadingBar = this.add.sprite(game.width / 2, game.height / 2, 'loading');
loadingBar.anchor.setTo(0.5);
game.load.setPreloadSprite(loadingBar);
// load title screen
game.load.image('title', 'assets/sprites/title-screen.png');
game.load.image('enter', 'assets/sprites/press-enter-text.png');
game.load.image('credits', 'assets/sprites/credits-text.png');
game.load.image('instructions', 'assets/sprites/instructions.png');
// environment
game.load.image('background', 'assets/environment/background.png');
game.load.image('middleground', 'assets/environment/middleground.png');
// tileset
game.load.image('tileset', 'assets/environment/tileset.png');
game.load.tilemap('map', 'assets/maps/map.json', null, Phaser.Tilemap.TILED_JSON);
// atlas sprite
game.load.atlasJSONArray('atlas', 'assets/atlas/atlas.png', 'assets/atlas/atlas.json');
game.load.atlasJSONArray('atlas-props', 'assets/atlas/atlas-props.png', 'assets/atlas/atlas-props.json');
// audio
game.load.audio('music', ['assets/sounds/rpg_village02__loop.ogg','assets/sounds/rpg_village02__loop.mp3']);
game.load.audio('switch', ['assets/sounds/switch.ogg']);
},
create: function () {
//this.game.state.start('PlayGame');
this.game.state.start('TitleScreen');
}
}
var titleScreen = function (game) {
};
titleScreen.prototype = {
create: function () {
background = game.add.tileSprite(0, 0, gameWidth, gameHeight, 'background');
middleground = game.add.tileSprite(0, 0, gameWidth, gameHeight, 'middleground');
//
this.title = game.add.image(gameWidth / 2, 100, 'title');
this.title.anchor.setTo(0.5);
var credits = game.add.image(gameWidth / 2, game.height - 12, 'credits');
credits.anchor.setTo(0.5);
this.pressEnter = game.add.image(game.width / 2, game.height - 75, 'enter');
this.pressEnter.anchor.setTo(0.5);
game.time.events.loop(700, this.blinkText, this);
var startKey = game.input.keyboard.addKey(Phaser.Keyboard.ENTER);
startKey.onDown.add(this.startGame, this);
this.state = 1;
},
blinkText: function () {
if (this.pressEnter.alpha) {
this.pressEnter.alpha = 0;
} else {
this.pressEnter.alpha = 1;
}
},
update: function () {
middleground.tilePosition.x -= 0.2;
},
startGame: function () {
if (this.state == 1) {
this.state = 2;
this.title2 = game.add.image(game.width / 2, 40, 'instructions');
this.title2.anchor.setTo(0.5, 0);
this.title.destroy();
} else {
this.game.state.start('PlayGame');
}
}
}
var playGame = function (game) {
};
playGame.prototype = {
create: function () {
this.bindKeys();
this.createBackgrounds();
this.createTileMap();
this.decorWorld();
this.populate();
var changeKey = game.input.keyboard.addKey(Phaser.Keyboard.SPACEBAR);
changeKey.onDown.add(this.switchCharacter, this);
// music
this.music = game.add.audio('music');
this.music.loop = true;
this.music.play();
//
this.switchSound = game.add.audio('switch');
},
decorWorld: function () {
this.addProp(25 * 16, 3 * 16 + 2, 'house-a');
this.addProp(35 * 16, -10, 'house-b');
this.addProp(48 * 16, 3 * 16 + 2, 'house-a');
//
this.addProp(1 * 16 - 32, 10* 16 + 7 , 'crate-stack');
this.addProp(76 * 16 - 32, 10* 16 + 7 , 'crate-stack');
//
this.addProp(1 * 16 , 8 * 16 , 'street-lamp');
this.addProp(26 * 16 , 8 * 16 , 'street-lamp');
this.addProp(60 * 16 , 8 * 16 , 'street-lamp');
//
this.addProp(17 * 16 , 11 * 16 - 3 , 'well');
//
this.addProp(42 * 16 - 5 , 10 * 16 , 'sign');
this.addProp(3 * 16 , 13 * 16 , 'barrel');
this.addProp(5 * 16 , 13 * 16 , 'barrel');
this.addProp(70 * 16 , 13 * 16 , 'barrel');
this.addProp(71 * 16 + 8 , 13 * 16 , 'barrel');
this.addProp(54 * 16 + 8 , 10 * 16 , 'wagon');
this.addProp(23 * 16 , 13 * 16 - 6 , 'crate');
},
addProp: function (x, y, item) {
game.add.image(x, y, 'atlas-props', item);
},
bindKeys: function () {
this.wasd = {
left: game.input.keyboard.addKey(Phaser.Keyboard.LEFT),
right: game.input.keyboard.addKey(Phaser.Keyboard.RIGHT)
}
game.input.keyboard.addKeyCapture([
Phaser.Keyboard.LEFT,
Phaser.Keyboard.RIGHT,
Phaser.Keyboard.SPACEBAR
]);
},
createBackgrounds: function () {
background = game.add.tileSprite(0, 0, gameWidth, gameHeight, 'background');
middleground = game.add.tileSprite(0, 0, gameWidth, gameHeight, 'middleground');
background.fixedToCamera = true;
middleground.fixedToCamera = true;
},
createTileMap: function () {
// tiles
globalMap = game.add.tilemap('map');
globalMap.addTilesetImage('tileset');
this.layer = globalMap.createLayer('Tile Layer 1');
this.layer.resizeWorld();
// collisions
globalMap.setCollision([1, 354, 356, 203, 204, 206, 208, 209, 270, 271, 272]);
},
populate: function () {
//groups
townFolks = game.add.group();
townFolks.enableBody = true;
this.addBearded(5, 13);
this.addHatMan(18, 6);
this.addOldman(35, 13);
this.addWoman(60, 13);
player = townFolks.getAt(folkIndex);
game.camera.follow(player, Phaser.Camera.FOLLOW_PLATFORMER);
},
addBearded: function (x, y) {
var temp = new FolkBeard(game, x, y);
game.add.existing(temp);
townFolks.add(temp);
},
addHatMan: function (x, y) {
var temp = new FolkHat(game, x, y);
game.add.existing(temp);
townFolks.add(temp);
},
addOldman: function (x, y) {
var temp = new FolkOld(game, x, y);
game.add.existing(temp);
townFolks.add(temp);
},
addWoman: function (x, y) {
var temp = new FolkWoman(game, x, y);
game.add.existing(temp);
townFolks.add(temp);
},
update: function () {
game.physics.arcade.collide(townFolks, this.layer);
this.controlCharacter();
this.parallaxBackground();
//this.debugGame();
},
parallaxBackground: function () {
middleground.tilePosition.x = this.layer.x * -0.5;
background.tilePosition.x = this.layer.x * -0.2;
},
controlCharacter: function () {
if (player) {
var speed = 100;
if (this.wasd.left.isDown) {
player.body.velocity.x = -speed;
player.scale.x = -1;
player.animations.play('walk');
} else if (this.wasd.right.isDown) {
player.body.velocity.x = speed;
player.scale.x = 1;
player.animations.play('walk');
} else {
player.body.velocity.x = 0;
player.animations.play('idle');
}
}
},
switchCharacter: function () {
var total = townFolks.children.length;
if (folkIndex >= total - 1) {
folkIndex = 0;
} else {
folkIndex++;
}
player.body.velocity.x = 0;
player.animations.play('idle');
player = townFolks.getAt(folkIndex);
game.camera.follow(player, Phaser.Camera.FOLLOW_PLATFORMER);
this.switchSound.play();
},
debugGame: function () {
townFolks.forEachAlive(this.renderGroup, this);
},
renderGroup: function (member) {
game.debug.body(member);
}
}
// townfolk objects
FolkBeard = function (game, x, y) {
x *= 16;
y *= 16;
Phaser.Sprite.call(this, game, x, y, 'atlas', 'bearded-idle-1');
var f = 'bearded-idle-4';
this.animations.add('idle', ['bearded-idle-1', 'bearded-idle-2', 'bearded-idle-3', f, f, f, f, f, f, f, f, f, f, f, f], 10, true);
this.animations.add('walk', Phaser.Animation.generateFrameNames('bearded-walk-', 1, 6, '', 0), 10, true);
this.animations.play('idle');
this.anchor.setTo(0.5);
game.physics.arcade.enable(this);
this.body.gravity.y = 500;
}
FolkBeard.prototype = Object.create(Phaser.Sprite.prototype);
FolkBeard.prototype.constructor = FolkBeard;
//
FolkHat = function (game, x, y) {
x *= 16;
y *= 16;
Phaser.Sprite.call(this, game, x, y, 'atlas', 'hat-man-idle-1');
this.animations.add('idle', Phaser.Animation.generateFrameNames('hat-man-idle-', 1, 4, '', 0), 10, true);
this.animations.add('walk', Phaser.Animation.generateFrameNames('hat-man-walk-', 1, 6, '', 0), 10, true);
this.animations.play('idle');
this.anchor.setTo(0.5);
game.physics.arcade.enable(this);
this.body.gravity.y = 500;
}
FolkHat.prototype = Object.create(Phaser.Sprite.prototype);
FolkHat.prototype.constructor = FolkHat;
//
FolkOld = function (game, x, y) {
x *= 16;
y *= 16;
Phaser.Sprite.call(this, game, x, y, 'atlas', 'oldman-idle-1');
var f = 'oldman-idle-8';
this.animations.add('idle', ['oldman-idle-1', 'oldman-idle-2', 'oldman-idle-3', 'oldman-idle-4', 'oldman-idle-5', 'oldman-idle-6', 'oldman-idle-7', f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, f, 'oldman-idle-6', 'oldman-idle-5', 'oldman-idle-4', 'oldman-idle-3'], 10, true);
this.animations.add('walk', Phaser.Animation.generateFrameNames('oldman-walk-', 1, 12, '', 0), 10, true);
this.animations.play('idle');
this.anchor.setTo(0.5);
game.physics.arcade.enable(this);
this.body.gravity.y = 500;
}
FolkOld.prototype = Object.create(Phaser.Sprite.prototype);
FolkOld.prototype.constructor = FolkOld;
//
FolkWoman = function (game, x, y) {
x *= 16;
y *= 16;
Phaser.Sprite.call(this, game, x, y, 'atlas', 'woman-idle-1');
this.animations.add('idle', Phaser.Animation.generateFrameNames('woman-idle-', 1, 7, '', 0), 10, true);
this.animations.add('walk', Phaser.Animation.generateFrameNames('woman-walk-', 1, 6, '', 0), 10, true);
this.animations.play('idle');
this.anchor.setTo(0.5);
game.physics.arcade.enable(this);
this.body.gravity.y = 500;
}
FolkWoman.prototype = Object.create(Phaser.Sprite.prototype);
FolkWoman.prototype.constructor = FolkWoman;