• Content count

  • Joined

  • Last visited

About cwright

  • Rank

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. cwright


    Haha, it was neat. The controls are nice and responsive, although at one point I was jumping without pressing space and I'm not sure if that was on purpose. I would add the option to skip the opening scene with spacebar or something. After the 1st time, I didn't want to wait to jump back in. Adding some moving platforms, a variety of obstacles and some new enemies would go a long way. Thanks for the play!
  2. I don't have one. It's been my unfortunate experience that group members drop out mid-way through projects.
  3. Hello, I'm a competent developer looking for an artist with an idea. I would prefer to work on multiplayer games using the PlayerIO backend, but single player games would be fine also. Let me know if you want to discuss working together, send me a PM or reply here. Thanks.
  4. 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)
  5. cwright

    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!
  6. cwright

    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.
  7. cwright

    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
  8. cwright

    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); } } };
  9. cwright

    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.
  10. 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
  11. cwright

    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); } } };