• Content count

  • Joined

  • Last visited

  1. Hello, I'm very excited to be developing a multiplayer strategy rpg similar to the classic Shining Force series. It will incorporate sp/mp quests as well as pvp for up to 4 players. The game is still in the early stages, but I'm putting out feelers for like minded artists who would enjoy working on a game like this. The back-end is solid and makes incorporating micro-payments a breeze. Although money isn't the goal of this project, I would like to see where it can take us down the line. The art would consist of: - UI and other things of that nature - Avatars with 4 direction animations as well as attack and casting animations (there will be no in battle cutscenes, everything will take place on the board) - Attack and Spell effects - Tilesets I am currently using the time-fantasy tileset but would prefer something proprietary. I'm hoping to be in alpha within a couple months. Let me know if you would like to chat a bit more about it. Thanks, Chris (Attached is a photo of a Shining Force 2 battle)
  2. How do I animate this?

    EDIT: SOLVED. I ENDED UP GENERATING IT THROUGH CODE. Hello, I've looked into texturepacker and shoebox but they don't seem to be what I'm looking for. I'm trying to animate the attached sprite sheet. Is there a program that you've used that's made animating sheets like this easier? Or am I forced to do it by hand? Thanks a lot!
  3. How to create Custom Classes/Objects

    Thanks QLNEO, I'll give those chapters a read. I finally found that I could use the bind function to manipulate this in the callback.
  4. How to create Custom Classes/Objects

    I'm reading up on scope right now to try and figure this out, but any help is appreciated. EDIT: Ahhhhh interesting. Just discovered the call and apply functions. I should be ok for now. Thanks
  5. How to create Custom Classes/Objects

    Thank you, that helped a bit, but now when I make a call to playerio to authenticate and I set the success callback to a function in the module, 'this' now refers to window instead of the module itself. Also, I can't reference global variables like 'game' from inside my modules? THE PROBLEM IS IN THE FUNCTION this.loginReply CALLED FROM this.loginClicked <body> <div id="gameDiv"></div> <div id="orientation"></div> <script type="text/javascript"> window.onload = function() { $("#gameDiv").height($(window).height()); $("#gameDiv").width($(window).width()); var game = new Phaser.Game(1024, 768, Phaser.AUTO, 'gameDiv', null, false, false); game.state.add('Boot', GameEngine.Boot); game.state.add('Preloader', GameEngine.Preloader); game.state.add('MainMenu', GameEngine.MainMenu); game.state.add('Play', GameEngine.Play); game.state.add('Editor', GameEngine.Editor); game.state.start('Boot'); = { gameId: "###", client: null, connection: null, startMap: "" }; }; </script> </body> GameEngine.MainMenu = function (game) {; this.input; // local vars this.menuState = null; = null; = null; this.loginButton = null; this.createButton = null; }; GameEngine.MainMenu.prototype = { create: function () { = this.add.tileSprite(0, 0, 1920, 1080, 'titleBG'); ='titleMusic'); //; this.updateMenu("main"); }, update: function () { -= .3; }, // ======================= STATES ======================= updateMenu: function (state) { this.menuState = state; switch (this.menuState) { case "main": this.loginButton = this.add.button(750, 550, 'loginButton', this.loginClicked, this, 'over', 'out', 'down'); this.createButton = this.add.button(750, 650, 'createButton', this.createClicked, this, 'over', 'out', 'down'); break; } }, // ======================= LOGIN STATE ======================= loginClicked: function (pointer) { this.loginButton.destroy(); this.createButton.destroy(); var that = this, gameId =, username = "###", password = "###"; PlayerIO.authenticate( gameId, "public", { username: username, password: password }, {}, this.loginReply, function (error) { console.log(error); } ); }, loginReply: function (client) { // ------------------------------------------------------------------------------ // this refers to window, not the module // ------------------------------------------------------------------------------ = client; // use local development server client.multiplayer.developmentServer = 'localhost:8184'; // join the loader room client.multiplayer.createJoinRoom( 'LoaderRoomId', 'Loader', true, null, { name: username }, function (connection) { = connection; //connection.addMessageCallback("*", function (message) { connection.addMessageCallback("*", function (message) { switch (message.type) { case "loader":; = message.getString(1); console.log(;, 200, false); 200, function() {'Game'); }, this ); break; } }); /* connection.addDisconnectCallback(function () { addChatLine('error','', 'disconnected from room') }) */ }, function (error) { console.log(error); } ); }, createClicked: function (pointer) { this.loginButton.destroy(); this.createButton.destroy(); var that = this, gameId =, username = "###", password = "###", email = "###"; PlayerIO.authenticate( gameId, "public", { register: "true", username: username, password: password, email: email }, {}, function (client) { //Success! //The user is now registered and connected. }, function (error) { console.log(error); //Error registering. //Check error.message to find out in what way it failed, //if any registration data was missing or invalid, or if //the entered captcha value didn't match the captcha image. } ); }, // ======================= MODE STATE ======================= goFullscreen: function () { console.log("!!! Toggling Fullscreen !!!"); if (this.scale.isFullScreen) { this.scale.stopFullScreen(); } else { this.scale.startFullScreen(false); } } };
  6. How to create Custom Classes/Objects

    I understand basic class and object creation, but I can't reference any classes I've created outside of phaser.
  7. I'm sorry if this is basic, but I've been scouring the web for hours and can't find what I figured would be a highly discussed topic. I want to create custom classes, but all I can find is extending Sprites. What if I don't want to extend the sprite class? What if I just need an 'empty' structure to hold object specific data? I'm obviously missing something crucial, so if someone could fill me in I would be grateful. Thanks, Chris
  8. Tile Editor Issues

    My tileset for my editor only shows when Ctrl is held down. When I release Ctrl after picking a tile, this.input.activePointer.isDown remains true and starts drawing all over the map. It stays true until I move my mouse outside the game window. Anyone know why? GameEngine.Editor = function (game) { // When a State is added to Phaser it automatically has the following properties set on it, even if they already exist:; // a reference to the currently running game (Phaser.Game) this.add; // used to add sprites, text, groups, etc (Phaser.GameObjectFactory); // a reference to the game camera (Phaser.Camera) this.cache; // the game cache (Phaser.Cache) this.input; // the global input manager. You can access this.input.keyboard, this.input.mouse, as well from it. (Phaser.Input) this.load; // for preloading assets (Phaser.Loader) this.math; // lots of useful common math operations (Phaser.Math) this.sound; // the sound manager - add a sound, play one, set-up markers, etc (Phaser.SoundManager) this.stage; // the game stage (Phaser.Stage) this.time; // the clock (Phaser.Time) this.tweens; // the tween manager (Phaser.TweenManager) this.state; // the state manager (Phaser.StateManager); // the game world (Phaser.World) this.particles; // the particle manager (Phaser.Particles) this.physics; // the physics manager (Phaser.Physics) this.rnd; // the repeatable random number generator (Phaser.RandomDataGenerator); this.groundLayer; this.bgLayer; this.fgLayer; this.currentLayer; this.mapWidth; this.mapHeight; this.tileSize; this.tilesetKey; this.tilesetContainer; this.tileset; this.tileNumber; this.marker; }; GameEngine.Editor.prototype = { create: function () { // temporary - need user input this.mapWidth = 50; this.mapHeight = 50; this.tileSize = 32; this.createMap(); this.createAssets(); // create tileset toggle key - ctrl this.tilesetKey = this.input.keyboard.addKey(Phaser.Keyboard.CONTROL); this.tilesetKey.onDown.add(this.showTileset, this); this.tilesetKey.onUp.add(this.hideTileset, this); // create input this.input.onDown.add(this.pickTile, this); this.input.addMoveCallback(this.updateMarker, this); }, update: function () { }, quitGame: function (pointer) { //this.state.start('MainMenu'); }, createMap: function () { this.stage.backgroundColor = '#2d2d2d'; = this.add.tilemap();"tileset"); // add layers this.groundLayer ="ground", this.mapWidth, this.mapHeight, this.tileSize, this.tileSize); this.groundLayer.resizeWorld(); this.bgLayer ="bg", this.mapWidth, this.mapHeight, this.tileSize, this.tileSize); this.fgLayer ="fg", this.mapWidth, this.mapHeight, this.tileSize, this.tileSize); this.currentLayer = this.groundLayer; }, createAssets: function () { this.tilesetContainer =; this.tileset = this.tilesetContainer.create(0, 0, "tileset"); //this.tileset.inputEnabled = true; this.tilesetContainer.fixedToCamera = true; this.tilesetContainer.visible = false; console.log("Tileset Created"); this.marker =; this.marker.lineStyle(2, 0x000000, 1); this.marker.drawRect(0, 0, this.tileSize, this.tileSize); console.log("Marker Created"); }, showTileset: function (pointer) { console.log("Show Tileset"); this.tilesetContainer.visible = true; }, hideTileset: function (pointer) { console.log("Hide Tileset"); this.tilesetContainer.visible = false; //this.input.activePointer.isDown = false; }, pickTile: function (pointer) { if (this.tilesetContainer.visible) { if (this.input.x < this.tileset.width && this.input.y < this.tileset.height) { var xPos = Math.floor(this.input.x / this.tileSize); var yPos = Math.floor(this.input.y / this.tileSize); this.tileNumber = xPos + (yPos * (this.tileset.width / this.tileSize)); console.log("Picked tile: " + this.tileNumber); } } }, updateMarker: function () { this.marker.x = this.currentLayer.getTileX(this.input.activePointer.worldX) * this.tileSize; this.marker.y = this.currentLayer.getTileY(this.input.activePointer.worldY) * this.tileSize; if (this.input.activePointer.isDown && !this.tilesetContainer.visible) { this.tileNumber, this.currentLayer.getTileX(this.marker.x), this.currentLayer.getTileY(this.marker.y), this.currentLayer ); // map.fill(currentTile, currentLayer.getTileX(marker.x), currentLayer.getTileY(marker.y), 4, 4, currentLayer); } } };