Jump to content

Josh

Staff
  • Posts

    23,347
  • Joined

  • Last visited

Blog Entries posted by Josh

  1. Josh
    Finally, the evaluation kit for Leadwerks Engine 2.3 is released. Get it here. The evaluation kit allows saving and script editing for a period of 30 days. C/C++ programming is not possible with the evaluation kit. An NVidia GEForce 7000 or ATI Radeon 2000 series graphics card is required. An NVidia GEForce 8800 or ATI Radeon 3870 graphics card is recommended.
  2. Josh
    Leadwerks Engine SDK 2.31 is now available. A new SDK installer in the download area allows you to download different versions of the SDK. You must have an activated Leadwerks account to download the new SDK installer.
     
    New features include lighting optimizations for point and spot lights. You can read about this feature in detail here. Another new feature is character controller crouching behavior. Note that the origin of character controllers has been moved to the very bottom of the controller, instead of the vertical center. In addition, particle emitters will now store the particle velocity in the first texture coordinate array of the surface. This allows the implementation of directional particles, for elongated sparks or other non-circular particles.
     
    Shadow updating can be a bottleneck in rendering. To make matters worse, point lights require a total of six passes when its shadow is refreshed. We solved this problem by only redrawing shadows of objects that moved. The shadow is then combined with the rest of the cached shadow buffer, to make the final shadow map. The net result is fully dynamic point light shadows using a proper six-sided shadow map, with less rendering cost and better quality than dual parabolic shadow maps.
     




  3. Josh
    Leadwerks Engine 2.32 is now available.
     
    2.32
    -"Render" Lua object function renamed to "Draw".
    -Added Draw entity callback.
    -Entity draw callback and Lua "Draw" object function will only be called at most once per frame. Perform animation in this function.
    -Entity LOD distance parameters changed for better performance.
    -LoadAnimation now works without exact hierarchy matches, so LOD meshes can all use the full-res animation.
    -Implemented entity octree with hierarchical culling and picking.
    -Rewrote vegetation rendering routine.
    -Added vegetation collision.
    -Added optional terrain color map.
    -Fixed some problems that prevented custom buffers from working.
    -Fixed render elements bug.
    -Fixed camera culling bug.
    -Fixed recursive AABB update bug.
    -Fixed surface save bug.
    -Adjusted bloom and SSAO shaders.
    -Eliminated unnecessary pick filter calls.
  4. Josh
    The Rocks and Stones Model Pack by Pure3D is now available here:
    http://leadwerks.com/werkspace/index.php?/page/products/_/assets/rocks-and-stones-pack-r1
     
    You can also still get the Industrial Cargo Model Pack for the low introductory price of just $9.95 until Monday, September 6, before the price goes up:
    http://leadwerks.com/werkspace/index.php?/page/products/_/assets/industrial-cargo-model-pack-r8
  5. Josh
    Leadwerks.com now features a video gallery where our members can post movies of their games made with Leadwerks Engine. Instead of slowly uploading a huge video file, you can simply enter a YouTube video ID to submit movies. Check out some of the cool videos like Legos falling over to a techno soundtrack, fly through floating islands in Aerora, and of course there's Dave Lee's excellent Chernobyl Exclusion Zone.
     
    We've also created a random rotating banner image in our website header. Leadwerks developers can now submit their own Leadwerks.com banners and have them appear on our site.
    -Banner images must be 980x128 pixels in size, in JPG format, with 10% compression (high quality).
    -Your profile will be linked to from the small box in the upper right corner of the banner.
    -The title you submit will appear in the URL popup title.
    -Banners will appear in the rotation after they are approved by the staff.
    -If we have used one of your gallery images, feel free to resubmit it so you can get it linked to your account, and get full credit.
     
    We hope these new community features give our users even more ways to interact and have fun making games.
  6. Josh
    I was sorry to hear the news of Stonetrip's liquidation earlier this month. Shiva3D pioneered multi-platform publishing, and I enjoyed killing zombies in "The Hunt". I know that many of you are wondering what to do next. So, let me just get it out on the table that Leadwerks might be an option for your team.
     
    We just released Leadwerks 3, our first cross-platform product for mobile. Leadwerks 3 is completely redesigned to accelerate developer productivity with new advances in tools and workflow. These include native code and Lua support, a new rapid art pipeline, automatic asset reloading, built-in level design tools, plus many others.
     
    I'd like to extend an invitation to any former Shiva users looking for a new home. We're offering a 30% discount on the Leadwerks 3 add-ons for iOS and Android this month to Shiva developers. Enter the coupon code "SHIVA3D" at checkout before June 1, then just email us your invoice from your purchase of Shiva3D, and we'll process your order.
     
    Leadwerks doesn't support all the platforms Shiva did, but we provide "write-once, publish everywhere" deployment to the most important ones: iOS, Android, Windows, and Mac. Shiva developers will feel right at home with our Lua integration, complete with debugger, code stepping, and a built-in script editor. We've even taken Lua a step further, with a built-in flowgraph editor for visually connecting scripted objects. And when you're ready, you also have the option to write games in pure native code with C++, for maximum performance.
     
    Leadwerks 3 is new, but it's built on the lessons learned from our history of delivering high-end graphics on PC since 2006 We provide lots of advanced features, but are able to maintain a competitive price. I welcome you to join other "Werkers" as we move forward. This is going to be a very exciting year for the game industry, and we have some big advances coming down the pipeline.
     
    I realize that it must be a shock to see the predicament that Shiva is going through right now, but for you and your team, it doesn’t have to be the end. I welcome you to join our community and trust that the steps taken above will underscore our commitment to helping out the best we can.
     
     
    Regards,
     
    Josh
    CEO
    Leadwerks Software
  7. Josh
    I've added new rewards including international shipping for our T-Shirt and sticker, as well as an indie team and professional site license. A lot of people have been asking for international shipping for the T-shirt and sticker rewards, but I wanted to make sure I knew what the shipping would cost first. It's a good thing I checked because it costs $16.75 to ship. The good news is its a flat rate for any country, so I can rely on that cost when I price things. To sweeten the deal, I am including the Leadwerks sticker in all international orders.
  8. Josh
    Compatibility testing for the new terrain system ended up taking an entire week. Most of the problems revolved around OpenGL ES and some iOS driver bugs. Once I got it running on iOS, Android was able to run it with only one small change. The quality settings in this video are lowered for mobile, but the new Google Nexus 7 can actually handle quite a lot, at an impressive 1920x1200 resolution! With a price tag of only $200, this is a great choice for an Android tablet.
     


  9. Josh
    A bug fix patch has been uploaded. Run the Leadwerks updater to download the new files. You may need to update projects (see File > Project Manager) and recompiled.
     
    Recent bug fixes can be viewed here:
    http://www.leadwerks.com/werkspace/forum/80-bug-reports/
     
    Additionally, the following improvements were made:
    Physics interpolation will be much smoother now.
    Character controller was adjusted, works great on terrain.
    A bug in the PhysicsSetRotation() command was fixed, though it was not reported.
    Terrain will appear much nicer since normal mapping is working properly now.

  10. Josh
    All stickers have been shipped, and they look absolutely fantastic:

     
    I've never been a "sticker on my laptop" kind of guy, but I am putting one of these on mine as soon as I get home.
     
    Physical items are a little different from getting software to customers. With software, there is at most a delay of a couple hours between the time I have it ready to go, and the customer is using it. I did not anticipate much of a turnover time for the shirts, and I still don't have all the ones I need. However, I am getting the last batch Monday and will ship them out the same day, or at least get them packaged, labelled, and ready to ship for the next day.

    Leadwerks in the Wild
    It's time to celebrate victory with your fellow backers and Linux gamers. Let's see your creative use of Leadwerks schwag! Post a photo on Google+ of your sticker or T-Shirt with the hashtag #LeadwerksInTheWild.
  11. Josh
    The OpenGL 4 renderer for Leadwerks 3.1 is well underway. I began implementing deferred lighting in earnest last Friday. Previous work included setting up MSAA on deferred buffers, as well as implementation of the Leadwerks Buffer class, which functions as a thin wrapper around OpenGL FBOs (frame buffer objects). The engine already tracks relationships between objects and lights, and this system was able to be used to provide a list of shadow-casting objects for each point and spot light.
     
    Because I've been working with deferred rendering since 2008, I've had time to study the bottlenecks and invented my own optimizations to improve performance with this type of renderer. Leadwerks uses special proprietary techniques to make shadow map rendering extremely fast.
     
    I began with the simplest light type, a spot light. These use a perspective projection onto a single shadowmap. This took about two days to implement.

     
    Point lights work by projecting six images onto a cubemap shadowmap. This was a little trickier but I got it done after another two days:

     
    The hardest to implement was directional light shadows. We began using cascaded shadowmaps back in 2008, and the industry has since concluded they are in fact the best choice for performance and quality. It took a few extra days to get this one working, but now it's done:

     
    This video is a very nice illustration of the technique:


     
    And here is my implementation in action. With just a little more adjustment, it will be perfect:


     
    The Leadwerks 3.1 deferred renderer has a number of advantages over the Leadwerks 2 renderer:
    Deferred renderer can now use 32x hardware MSAA instead of "fake" antialias techniques.
    Shadow edge filtering is much softer, less "grainy".
    Cubemap shadow maps are used to render point lights in a single pass.
    Higher default resolutions and settings to take advantage of modern hardware.

     
    These factors combine to provide an extremely clean and beautiful rendered image. When I'm done, I think the Leadwerks 3.1 renderer will look more like high-quality cg than what we think of as real-time renders.
  12. Josh
    Things have gone so remarkably smoothly so far in the process of building Leadwerks Linux, that it makes sense we would encounter some issues sooner or later. In this update I will talk about some of the challenges recently encountered.
    GDB
    I was able to get GDB to debug an application built with the Leadwerks static library, in this case our editor. It took me a while to realize you have to hit "continue" once or twice when the application starts, because GDB pauses the program when it connects. This is a bizarre design choice that lead to lost hours of productivity. GDB itself is not a complete debugger; it shows variables only in the top-most function in the call stack, and does not allow you to examine other functions without manually adding "watches" for specific variables. When you don't know exactly what you're looking for, this is an onerous task. Limitations like this may be the reason Valve is working on a debugger for LLVM. I will be sure to ask about this when I attend Steam Dev Days in January, although I do not expect it to be ready soon enough for us to use. So the limitations of GDB are annoying, but I can deal with it. It's great to have the editor running and debuggable on Linux!GTK
    I have been able to get the Leadwerks editor sort of kind of working in just a couple of days, which is fantastic. It looks great, although some Windows-themed icons need to be replaced, and some of the widget sizes are a little off. Functionality is sort of hit and miss at this point; for some reason menu and viewport events aren't registering, and there is lots of broken functionality. However, all the problems have to do with the UI rather than the underlying application. A lot of it is simply because I have a preprocessor definition for Windows, a different one for Mac, and nothing declared yet for Linux. In most cases, either the Mac or Windows default is appropriate. For example, our application menu switches depending on which window is active, whereas on Windows each window just has its own menu. This is mostly a matter of "test and discover" rather than writing new code and I will continue working to make it 100% functional.
    Revenge of the Drivers
    I wanted to switch my main dev machine back to an Nvidia card to do some testing. (I started with an Nvidia card, installed proprietary drivers, and switched to an ATI card with no issues.) Unfortunately, the reverse does not seem possible. I uninstalled the ATI proprietary driver, got some message about "jockey". I swapped in the Nvidia card, and I can only get a black screen with an unresponsive cursor. I put the ATI card back in, and it's using the open-source default driver, and the "Additional Drivers" dialog doesn't detect any available drivers. I ran some other stuff in the terminal I found online, but nothing worked. Typically I have found once I get to the point of entering random terminal commands I find from Google, it's over anyways, and the only thing to do is reinstall the OS. 
    The lesson here is that you really can't swap out GPUs once you install your drivers. (I'm sure there's a way to by someone who is a driver expert, but it's beyond me and the average smart person.) As things stand now, Linux is great for pre-configured hardware (Steam Machines, anyone?), but the driver uninstallation process should be cleaned up in order to meet the needs of PC gamers. I will likely end up running three installations of Ubuntu side by side, one for each graphics vendor.
     
    While we're talking about PC gamers coming to Linux, there is one serious problem that I think is going to hurt a lot of people. To put it simply, installing a dual-boot system is not a solved problem. I recently had one user who wanted to try out Ubuntu, so he made a dual-boot install and it made his Windows driver unbootable. My approach has been to remove all other drivers, install Linux on its own physical hard driver, then replace the other drive and use BIOS to switch back and forth between boot drives. I also considered a physical switch mounted in one of the 5.25" bays, which is kind of cool but I worry about the implications of switching power to different components, and whether they are properly grounded. With this approach, there is absolutely zero opportunity for operating systems to interfere with one another, and I can easily reinstall an OS when needed.

    Challenges Met
    At this stage of development, I feel like we've knocked out all the risks and challenges I identified at the beginning of this campaign. Let's look back at what I said about Linux graphics drivers: It turns out these worries were unwarranted, as the drivers I have tested work flawlessly on Linux. (I'm presently talking to the Mesa developers about their upcoming drivers for Intel HD graphics.) 
    Although there are lots of little issues with our GTK UI at this stage, it's debuggable and basically working. So I'm confident the fundamental things we need to complete this are there.
     
    In conclusion, we've been through the difficult parts of porting a complex application to Linux. Although some annoyances and limitations have been discovered, overall I have found Linux to be a completely viable platform for application development.
  13. Josh
    An update has been posted with the following fixes:
    http://www.leadwerks.com/werkspace/topic/7847-undo-does-not-refresh-gizmos/
    http://www.leadwerks.com/werkspace/topic/7842-bsp-mesh-export/
  14. Josh
    Following my previous update about correcting file path cases, I am now able to load all our maps in Leadwerks. The power of this tool running natively on Linux is starting to show:
     

     
    The next step is to implement a file system watcher to detect file changes. Leadwerks automatically monitors the current project directory, and will reload assets whenever the file changes. This allows you to keep an image open in an image editor like GIMP, and any time you save your changes will be reflected inside Leadwerks. It's a great workflow for artists and just the kind of feature I wanted to bring to Linux with this project.
     
    Linux has a built-in file system watcher class called "inotify". Interestingly, this class was added to Linux in 2005, the same year the iPod was released, but there appears to be no connection. The "i" in "inotify" stands for "inode". Dennis Ritchie explains:
     
    In truth, I don't know either. It was just a term that we started to use. "Index" is my best guess, because of the slightly unusual file system structure that stored the access information of files as a flat array on the disk, with all the hierarchical directory information living aside from this. Thus the i-number is an index in this array, the i-node is the selected element of the array. (The "i-" notation was used in the 1st edition manual; its hyphen was gradually dropped.)
     
    The inotify system is pretty straightforward to implement, with a procedural C interface. One thing that tripped me up was an odd layout of the inotify_event structure. It actually has a char pointer built into the structure, so technically the structure does not have a determined length. I don't believe I have ever encountered this design before, but I also am usually dealing with std::string classes.
     
    One drawback of inotify is that it isn't recursive. While searching for information on the design, I came across this post by Robert Love, one of the two guys who wrote it (the other being John McCutchan). I disagree with his rational for omitting recursion; just because the performance is not as optimal as he would like does not mean the end user's tastes and preferences will change. I can't imagine a scenario when you wouldn't want the system to work recursively, or at least have the option to. In any case, implementing a recursive watch system was fairly easy. The entire file watch system from zero to finished only took about half a day. So we can mark this as one of the features where I overestimated the time and complexity of implementation.
     
    File creation, deletion, and modify events are now firing reliably so I am going to plug this code into the editor and start testing it out. Because the editor already works reliably on other Windows and OSX, I don't anticipate any problems. I do not have a firm release date yet, but as you can surmise, we are nearing completion of Leadwerks for Linux.
  15. Josh
    About a year ago, before I even had my cool hat, I wrote a blog post called What's the Big Idea? that talked about some big-picture ideas about where Leadwerks is going:
    Well, a year later, this idea is coming to fruition. I previously broke down the user journey into Education, Collaboration, Promotion, and Distribution. This has now been distilled down to the new Leadwerks tagline: Learn, Build, Play. I had our logo reworked and I am very proud to present to you this beautiful design:
     

     
    The logo also makes for some gorgeous wallpaper.

    Learn, Build, Play
    What does Learn, Build, Play mean? Learn means that our tutorials should teach a complete beginner everything they need to make their own games. Our educational material should not simply teach how to use Leadwerks, it should teach how to make games with no previous knowledge required. That's why our lessons go into such detail to explain basic concepts. It also means we will continue to teach how to make different games, and add features that support that. For example, an RPG game template is a popular request, and a built-in GUI system with some kind of inventory control would make this teachable. 
    Build simply means Leadwerks Game Engine as a game development tool. What used to be the entire focus of the company is now just one-third of Leadwerks. (Although this part still takes 90% of my time!) For more information about the specifics of continued development, see my blog post here.
     
    Play, as you might have guessed, means free self-publishing to Steam with Leadwerks Game Launcher. This is about connecting game developers with an audience and delving into the consumer side of games.
     
    This makes Leadwerks more than just a game engine. Leadwerks is a platform for building and playing games.

    Building a Vision
    Why is this important? Having a distinct direction gives us a criteria to weigh decisions against. For example, when the new tutorials were being designed I specified they had to describe everything, down to the level of explaining what a mipmap is. That would not have happened with a different vision for Leadwerks, or with no vision. 
    This also puts us all on the same page so we all share a view of where the community is going. I am happy to be able to explain this to you now, and look forward to a very big rest of the year. Here is the new Leadwerks trailer, which has been updated to reflect the values we want to promote:


     
    And here's the new showreel showcasing your games made with Leadwerks:


     
    If you would like to play around with the logo image, you can download the complete artwork files below.
  16. Josh
    In order to get ready for the Workshop, and to get ready to implement texture locking, some preliminary work needed to be done. First, I needed to improve the CSG texture mapping routine. It was modified to take into account a texture's dimensions. This means that wide flat textures like this trim piece will be mapped to their texel area, not with the same aspect ratio as a square image:

     
    The default mapping scale is that 1024 texels maps to 256 centimeters. This ensures it is easy to line geometry up to match details in the textures, and most materials will just automatically map to the size you want. However, there are many wall textures out there that are only 512x512 texels, so I added a "Mapping scale" feature in the material editor. This can be used to give any material a default mapping multiplier, so it will always show up at the intended scale, without having to adjust texcoords each time you use it.
     
    A pick material mouse tool has been added. This is like a color/eye dropper that lets you click something in the scene, and the picked object's material will be shown and highlighted in the asset browser. This is just a nice tool for convenience, and I found I really wanted something like this as I was working.
     
    Finally, a "Treat as one" option has been added in the face properties. When this is checked, the justify buttons will treat all selected faces as one when aligning their texture coordinates.
     
    Justify left with the "Treat as one" disabled acts like this, alining each individual object separately:

     
    And it acts like this when "Treat as one" is enabled:

  17. Josh
    It's pretty clear that constructive solid geometry modeling is a high priority for our community. I like being able to easily sketch out my ideas. In fact, when this feature went away in Leadwerks 2, that was when I just stopped making game levels. It's not that I don't know how to use 3ds Max and other programs, it's just that they're not fun. The upcoming release of Steam Workshop also fulfills my long-held dream of building a shared repository of textures and models scaled correctly to work with CSG mapping.
     
    Today I began some preparatory work, starting with some texture templates:

     
    These are important because they give us a standard template we can line solids up against:

     
    Why does this matter? Well, when we have a standard template for common features, we can design textures that match the geometry, like this plaster wall below:

     
    This is one of the tricks that makes maps look great, and it's easy to set up once you have a standard template.
     
    However, I ran into one big problem. Leadwerks 2 started using a scale of 1 unit space = 1 meter. This makes a lot of sense, because it is easy to measure physics and large distances, as Leadwerks 2 was mostly an outdoors engine. When it comes to texture mapping, however, this scale is not ideal at all! A human being is roughly 1.8 meters tall. That means that 2 meters is just a little over their head, and is too short to place a wall texture on. We can scale the texture up on the surface, as I did in the example AI map, but this will cause problems. The grid in Leadwerks is based on powers of two, and if we scale the texture up to 2.5 meters in size, it's going to be hard to line brushes up precisely against the texture pixels! What to do?!
     
    On the other hand, using a centimeter grid gives a perfect scale. 256 cm is roughly the height of a one-story building's wall, so mapping textures on that scale makes a lot of sense. I realized I could just display a grid in centimeters instead of meters, and it would totally solve this problem, without requiring any rescaling. So I added that setting in the Viewport options and it works perfectly. The door on the left was modeled with the centimeter grid while the one on the right was modeled with the grid measures in meters. Because the grid is power-of-two, the centimeter grid had major grid lines at 2.56 meters, while the meter grid had it at 2.0 meters:

     
    This will not affect your existing maps, but I recommend you start using the centimeter grid for new maps. This preliminary work will allow me to unleash our artists to produce more texture packs for you to use in your maps, and will allow the community to work together more effectively.
  18. Josh
    Since it's not a competition, I'm actually going to enter the game tournament and publish a simple game to the Workshop. The game will be a third-person corridor space shooter like Starfox in which you simply shoot and dodge meteors. There are two types of meteors flying at you; red ones can be shot, whereupon they break into smaller pieces that can still damage you. Gray ones cannot be shot, and must be avoided. The longer you live, the more points you get, and it just gets progressively harder with faster and more meteors.
     
    I also decided to add pumpkins in space. Why? Because they're awesome. Pumpkins will slowly glide towards you when they get close, attempting to crash into your ship.
     


     
    I haven't thought of a title yet.
  19. Josh
    A launch option has been added to Leadwerks on Steam that allows you to launch the Leadwerks Game Player outside of the editor. When you launch Leadwerks Game Engine from Steam, a dialog box appears and lets you choose whether to run the editor or the Leadwerks Game Player. (If you just launch the app from a desktop or start menu shortcut, the editor is run automatically.) You can subscribe to other users' games in the Leadwerks Workshop on Steam, and play them by launching the game player. The option is not yet available on Linux, since this requires an additional shell script the current stable build does not have yet.
     

     
    One of the Leadwerks 3.3 features that's built into the current beta is the ability to select which Workshop packages get packed into your game when you publish, as a standalone or to the Leadwerks Workshop. In the current beta branch on Steam you can right-click on a Workshop folder and choose the "Add to Project" menu item. This will tell the publisher to include the contents of this package when your item is published. You must add each package you want to include, or it will not be included when your project is published.
     
    This allows you to publish games without including every single Workshop package you are subscribed to.
     

     
    These changes are available now on the beta branch on Steam.
  20. Josh
    I've added display pages to the games database, so you can now fill in more information about your game, receive comments, post a video, and add additional images if you wish:
    http://www.leadwerks.com/werkspace/page/games/_/rogue-system-r17
     
    In the future I will add a file upload option so you can distribute your games here if you want to. Some games in the Downloads section have received a pretty high number of downloads, even though they were hidden away and weren't promoted at all:
    http://www.leadwerks.com/werkspace/files/category/19-games/
     
    I took the liberty of filling in some values for the different titles, but you can now modify your entry as you see fit. I know of 50 different games in development, so I hope to consolidate these and not have a separation between casual and more long-term titles, since I am a fan of both.
  21. Josh
    You can now try out the new Workshop Browser by opting into the beta branch. This makes it simpler to install Workshop items, and allows you to browser, install, and uninstall items without having to switch to the Steam window.
     

  22. Josh
    A new update is available on the beta branch. This adds automatically generated hitboxes for animated characters, and a new tool to calculate physics shapes using convex decomposition.
     
    Existing C++ projects require a small modification due to the addition of the VHACD library. The VHACD includes directory must be added to the project header search paths.
     
    Visual Studio:

    $(LeadwerksHeaderPath)\Libraries\VHACD\src\VHACD_Lib\inc
     
    Code::Blocks:

    $(LeadwerksPath)/Include/Libraries/VHACD/src/VHACD_Lib/inc
     
    The C++ templates for new projects have been updated with these changes.
  23. Josh
    A new update is available on the beta branch on Steam.
     
    Changes
    Temporary slowdown from last beta is fixed.
    Bone picking behavior now matches default branch's original behavior (for compatibility with existing code).
    All recently locked bug reports fixed.

     
    Please see this note about updating C++ projects to accommodate the addition of the VHACD library.
  24. Josh
    I like how a sequence of decisions can lead in one overriding direction. It's very fun.
    The FPS weapons and zombie packs were released because I felt there needed to be a little more built-in gameplay available to users.
     
    The Steam Community Choice sale resulted in a large number of new users, most of whom are completely new to game development.
     
    The Winter Games tournament resulted in ten new games that were fun and very creative.
     
    This finally gave me the ammo I needed to launch the standalone game player on Steam. All the videos and screenshots look great, so for Steam users it's a no-brainer to vote yes. This will be awesome because you'll be able to get thousands of players very easily who will give you feedback on your game and become your fan base, when you're ready to move on to Kickstarter or Greenlight.

     
    This came about because it was decided that "gameplay" was the most important factor we needed to focus on. And now we are seeing the result of that, and it is very good. I'm pretty darn proud of what you guys have made, and I am very happy with the direction we're going in.
×
×
  • Create New...