LGV

Members
  • Content count

    20
  • Joined

  • Last visited

  1. Thanks, ah ah Well, keep in mind most of the art assets (environment, monsters, music, etc.) are purchased from artists / stores - on the art side, I only do the "occasional" sprite tweak, missing tile, sfx edit, etc. As for "everything else", I have a long professional background in game programming and production ; so being organised and getting the technical aspect to work is the "easy" bit. That leaves design and marketing, where I'm learning the most, but also struggling the most... Trial and errors In the end, it's mostly a matter of time - I didn't start from scratch in terms of knowledge, and I've been working on this project full time for more than a year, now.
  2. To improve overall legibility of the game environment, I recently updated most graphics assets - New sprites easier to identify, consistent contours on solid objects, less noise on background tiles, silhouette more representative of the hitchecks, reviewed level design and multiple environment tweaks Before/after preview :
  3. The Princess gets an update : new version available ! Lots of small tweaks : balancing, gameplay, user-friendliness, etc. No major changes, but a collection of things contributing to an improved player experience. All the details / changelog on the Steam page - the updated Windows and Linux demo builds are available for download as well. http://steamcommunity.com/sharedfiles/filedetails/updates/878251355
  4. Thanks to the feedback received from the demo, I am currently working on an update. Nothing major, but a collection of small things that will improve the overall player experience and that will benefit both the demo and the final game. All the details in the next few days when the update is ready !
  5. Thanks, 'much appreciated ! If I am not mistaken, I believe we talked about game frameworks, ECS infrastructures, data-driven entities, etc. a while ago ; have you posted / presented your own project ? I'd love to have a look too !
  6. Many thanks ! It's hard to keep a dynamic without a big community, so anything that helps is greatly appreciated The artists will be pleased about the art feedback !
  7. Thanks, much appreciated We'll see how things go in terms of "greenlight-ing" !
  8. Hi all, I am here to present Relic : Tale of the Undead Princess, a retro 2D action-adventure game. On the menu : Greenlight, trailers, playable demo and upcoming release ! OVERVIEW The princess is dead... But she is back ! The last hope against evil forces. Help her explore the realm and succeed where all heroes have failed. Relic : Tale of the Undead Princess is a retro 2D action-adventure game, with a fine blend of exploration, puzzles, secrets and challenges ! GREENLIGHT Support the Princess on Steam > Relic on Greenlight < I am not asking for "likes" it, but if you enjoy the concept and gameplay, a little help is always welcome. Thanks More resources on the Steam Greenlight page : trailer, screenshots, features and playable demos. DEVELOPMENT I work alone and I handle the programming, production, game design, level design, QA and misc art assets ; for everything else (main tilesheets, sprites, music) I license asset packs from artists and asset stores. Full detailed credits in the game. - Estimated play time : 8~12h, depending on player experience and game completion - Game size : ~200 playable screens - Team : myself ! - Development time : ~1 year, from scratch - Platforms : Windows 7/8/10, Linux (tested on Ubuntu 16.04 LTS) - Release date : TBC ~ Spring 2017 TOOLS - Tech : The game is developed in TypeScript, using VSCode and SmartGit. It is using the Phaser engine, in its latest pre-CE version, 2.6.2. On top of which I add my own gameplay framework, a json data-driven Entity-Component-System architecture. - Art & design : I'm using Pyxel for misc pixel art and Tiled for the level design. - Production : handled with Trello and Toggl, plus a collection of ad-hoc prod assets. - Shipping : The application is packaged with NW.js to deploy as a desktop executable. Thanks for reading - I hope you will enjoy Relic : Tale of the Undead Princess !
  9. Hi all ! I am rendering tilemap layers to textures, but I have issues applying a "camera" offset to get the correct area of the layer to appear in the texture. In this setup, the actual world/scene is only made of 1 single sprite covering the entire game window and displaying the content of the rendertexture. The game/world camera is static (0, 0). Only the content of the rendertexture is updated to reflect the player moving around. (The goal is to do some fancy post-processing using the rendertexture, including custom up-scaling) My problem is that I can't seem to find the right combination of layer parameters to get a subset of the layer to render into the texture :-? I've created a minimal test scene that demonstrates the problem : http://phaser.io/sandbox/edit/weeeaLZy function create() { // Create a render texture the size of the game window texture = game.make.renderTexture(game.width, game.height); // Adds a sprite using the render texture to the scene game.add.sprite(0, 0, texture); // Create the tilemap var map = game.add.tilemap('Map'); map.addTilesetImage('CybernoidMap3BG_bank.png', 'Tiles'); // A layer is added to a dummy group, not to be included in the default World // The layer is rendered onto the render texture manually in the update() group = game.make.group(null); layer = map.createLayer(0, game.width, game.height, group); // Custom arbitrary "camera" offset ; this would driven by gameplay logic (player position, etc.) var camX = 64; var camY = 64; // Attempt at getting the tilemap layer to render according to manual offset. These values seem ignored when rendering to texture :-? layer.fixedToCamera = true; layer.cameraOffset.x = -camX; layer.cameraOffset.y = -camY; } The only relevant topic/example I found is this demo : http://phaser.io/examples/v2/display/render-texture-tilemap , doing a manual layer render by processing all the tiles manually... Which I'd really like to avoid, because of massive drawcalls overhead. I've tried lots of things, cropping, render offset, etc. so far nothing gave the expected result :-? Any help would be greatly appreciated ! Regards
  10. Quick update, in case anyone cares or find this topic while facing a similar issue ; this seems to be a bug in the version of Phaser I'm using and appears to be fixed in the latest 2.6.1 : I've re-created a test sample in the online editor and this seems to behave as expected : http://phaser.io/sandbox/edit/dFJUoMIL
  11. And just to illustrate things a bit clearer, a couple of screenshots demonstrating the pixel processing I'm doing. Note that since I'm stuck with Tilemap Layers not rendering to render textures, this is just my shader working on a static picture of the game I exported to a small test environment - Base picture ; simple "nearest" scaling x3 Processed picture : some minor colour adjustment (vibrance, brightness, etc.), scanlines, and the manual upscaling (a simpler ~EPX3x in this case) As soon as I figure out how to deal with Tilemap Layers I'm hoping to get this live on my game !
  12. Additionally, while I'd rather do the upscaling myself (w,h) => (4*w, 4*h), I could probably achieve what I want if I could work on the "phaser-upscaled" image ; in case there's an alternative solution to my problem... Still, I'm curious about the use of tilemap layers in group containers :-?
  13. Hi all ! I'm having some issues with getting tilemap layers to render to textures if added to custom groups instead of the default game.world. Context : I'm working on a top-down pixel-art a-rpg (think Zelda 3-like). I have a mix of tilemap layers and sprites. Nothing too fancy. Goal : I want to implement a custom upscaling shader (e.g. hq4x). I'm changing my scene to draw layers and sprites to a texture, so that I can use that texture with my custom shader. Progress : I can easily get sprites to render to my texture, and using my shader to display that texture also works well Problem : To avoid overhead of individual draw calls per sprite/layer, I use a top-level Group container ; but I can only get tilemap layers to appear if they are added to the game.world and not to my top-level container :-? In my preload() : nothing exciting, just the tilemap (Tiled json), some images/spritesheets, and a shader/fragment In my create() : // The top-level container to hold display objects this.m_group = new Phaser.Group(this.game, null); // The render texture where I want all display objects to appear. Later the size will need to differ from the game size, for the "upscaling" part this.m_renderTarget = this.game.add.renderTexture(g_screenWidth, g_screenHeight, "RenderTarget"); // The actual sprite using the render texture let rtSprite : Phaser.Sprite = this.game.add.sprite(0, 0, this.m_renderTarget); // Sprite test ; this works nicely let sprite : Phaser.Sprite = this.game.make.sprite(0, 0, "Player"); this.m_group.add(sprite); // Layer test ; this does NOT work this.m_map = this.game.make.tilemap("Overworld"); this.m_map.addTilesetImage("Tileset", "Tileset"); this.m_layer = this.m_map.createLayer("Layer", g_gameWidth, g_gameHeight, this.m_group); (I've excluded the shader/filter setup, not relevant for the problem) In my Update() : this.m_renderTarget.renderXY(this.m_group, 0, 0); I was thinking using the 4th parameter "parent" of the createlayer method to add it to top-container would be sufficient. This is not the case. The only way I found to get my layer to appear on my render texture is 1. add the layer to the default game.world, 2. turn off the layer.renderable (because I don't actually want it in the default scene), 3. create a sprite using the layer texture. 4. add the sprite to my container group. Which looks like : this.m_layer = this.m_map.createLayer("Layer"); this.m_layer.renderable = false; let sprite : Phaser.Sprite = this.game.make.sprite(0, 0, this.m_layer.texture); this.m_group.add(sprite); While this is functional, this sounds overly convoluted and non-intuitive, so surely I'm not using the whole thing correctly ! The layer should behave as a display object and I don't understand why it needs to be treated differently :-? Additionally, I tried having a separate rendertexture.renderXY() call for the layer (this.m_renderTarget.renderXY(this.m_layer, 0, 0, true);) ; same problem, the layer only appears if added to the game.world and not to any other container. Any idea what I'm missing or doing wrong ? Any help would be greatly appreciated ! Regards
  14. Quick update regarding progress - I have just completed a first round of focus testing last week (thanks to all the participants !). While still quite far from an actual "demo", this allowed me to answer 2 critical questions : - in spite of the "work in progress" nature of the project, is there sufficient potential to complete & release the game ? - how to prioritise the remaining work in order to maximise the time/player experience ratio ? In light of the feedback, I have recalibrated the production tracking and I plan 3 major iterations : - gameplay : tweak existing elements, redesign weak mechanisms, add missing functionalities, etc. - content : balance existent areas, redesign some puzzles, integrate additional zones, etc. - presentation : scenario / tutorial, graphical polish, options and controls customisation, etc. Including publication delays, I am still planning for a release around ~late Summer 2016 'Will post updates soon with actual concrete progress !
  15. Not usually a problem regarding performance ; if certain types of messages tend to be used A LOT it might interesting to put a recycling pool mechanism in place, to save on the construction of objects - but usually VMs and script engines have some of this built-in already. In a native engine, we'd also compile everything, messages, strings, identifiers, etc. to a binary format. If it ever becomes a problem for performance, it's always possible to refactor specifically bits of the components once a perf killer has actually been identified. I always favor flexibility at first - the time saved in development will be better used for optimisations later on, once we know what the problems are. Alternatively, some people prefer to have all their Components as POD structs (data only, all public, no methods), and use Systems for all the logic. This reduces the messaging to some extent. All variations are viable. 2 "special" Components I really like to have : - a "ScriptComponent" ; basically it's a dummy that just calls custom defined Init/Advance/Receive. Incredibly useful for exclusive puzzles, boss logic, etc. Trivial in JavaScript, just "eval" "objectname" + naming convention (ObjectName_Init, etc.) - a "MapperComponent" ; something to "translate" a message into a different one. It has a mapping table (A1 => B1, A2 => B2, etc.). It can help to reduce coupling between Components messages. Instead of having the AudioComponent process the Death message, just re-map Death message to, say, a "play sfx 'death' " message and have the AudioComponent process PlaySFX messages only