Jump to content

Josh

Staff
  • Posts

    23,503
  • Joined

  • Last visited

Blog Entries posted by Josh

  1. Josh
    This blog is going to actually be about business rather than technology. Here's what's going to happen this summer:
     
    First, we need to get this ATI driver bug fixed ASAP. Nothing else can happen until that gets fixed:
    http://www.leadwerks.com/werkspace/tracker/issue-165-terrain-textures-bug-radeon-hd-5850
     
    The official documentation is coming along well, and I am really pleased with how this has turned out. (Thanks, Aggror!)
     
    An updated evaluation kit with some limited programming will be released. One of the biggest appeals of Leadwerks Engine 2 is the ease of C++ programming, and we need to demonstrate that better.
     
    With the release of the evaluation kit, we're going to begin an affiliate program. My preference is to have a Facebook and Twitter share buttons in the header that copy the current URL, and adds your affiliate ID into the php arguments in the URL. Then you can just click that to share any page on the site, with your embedded affiliate ID. When a new user comes to the site from that link, your affiliate ID will be detected, and any sale they make will give you 15% of the sale price credit to use in the asset store. if you are a Leadwerks Merchant, you can also have the cash sent to your PayPal account.
     
    The Asset Store will be "launched" at this point, meaning I'll put out a lot of news announcements and PR to make a big deal of it. This requires the front page be fixed, so you have the nice scrolling rows of products. I also have to set up a merchant account, which will lower the transaction costs by a lot. Right now, I am losing about $8 on each engine order through PayPal, and that needs to stop. I also need to formulate an agreement for Leadwerks Merchants, so that we can give more people access to sell their stuff in the Asset Store. The tax issues here are pretty serious, so I need formal paperwork to do this.
     
    We're opening a new section of the site for videos. You can check out the beta here. I like searching for "Leadwerks" on YouTube and clicking around on videos. The idea here is that if someone is wasting time clicking around on Leadwerks videos, they might as well do it on our site. There's a lot of great videos out there that are easy to miss, so this will gather them in one spot. Best of all, it doesn't require any bandwidth from our server, as YouTube provides the data transfer, and even more importantly, users don't have to upload their videos to two different sites. To add a video, just enter the 11-character YouTube video ID, title, and description. If I have already added your video, and you would rather have it appear under your name, just add it to the database yourself, and I will delete my original entry.
     
    My goal with the affiliate system and video gallery is to raise site traffic. Right now we have about 36,000 visits per month. I want to raise that to 100,000 visits per month. Our new dedicated server can definitely handle the load.
     
    Finally, we're going to implement advertisements in the video gallery. I want it to be tasteful and relevant. I tried Google Adsense, but it displayed a lot of irrelevant ads. I tried "section targeting" and even set all information to be blocked except a few keywords I chose, but it made no difference. I inquired about AdBrite, and they seem to be the same sort of system of automatic analysis and placement of irrelevant ads; artificial stupidity, if you will. I know my users are interested in video games, 3D models, programming, computer hardware, and art programs. If a system won't let me choose what content is displayed, I won't use it. Therefore, I am going to attempt to find advertisers with relevant content that have affiliate systems. I'd prefer not to sell advertising space and manage accounts, at least at first.
     
    So, the ultimate goal here is to raise traffic. More traffic = more LE2 license sales, more asset store sales, more advertising revenue, and more opportunities for you guys. There's potential with this we can only begin to imagine.
     
    There is so much to do, I had to draw out a diagram showing the dependency of events, so I can cross them off as they are accomplished:

     
    And last, I will leave you with this video, the band from which I am really starting to like, for some reason:


  2. Josh
    We're finally offering our first product in the new assets section of the site. I have wanted for a long time to have a means where assets can be produced and sold in a sustainable manner. I am very interested in working with third-party sites that produce game artwork. Orders are still processed by hand, but we're working on a system to automate things. You can be sure I won't let anything into the product listing unless it is 100% game-ready for Leadwerks Engine.
  3. Josh
    With Luabind, it turns out we don't even need a table associated with an entity. We can just add values and functions straight to Lua's representation of that entity in the virtual machine! So instead of this:

    object.health=100 object.entity:SetPosition(1,2,3)
    You can just do this, which is much nicer!:

    entity.health=100 entity:SetPosition(1,2,3)
    So there's no object/actor nonsense, you just work directly with the entity itself.
     

    Entity Keys
    The Get/SetKey convention from Leadwerks Engine 2 is going away, to be replaced with more direct entity access functions. You can still store "keys" with strings, but this will directly set the values of the entity table in Lua, so they can be access from script more easily:
    void Entity::SetString(const std::string& name, const std::string& value); std::string Entity::GetString(const std::string& name); void Entity::SetFloat(const std::string& name, const float& value); float Entity::GetFloat(const std::string& name); void Entity::SetInt(const std::string& name, const int& value); int Entity::GetInt(const std::string& name); void Entity::SetObject(const std::string& name, Object* o); Object* GetObject(const std::string& name);
    Here's a sample "mover" script that performs simple movement and rotation each frame:

    function entity:Start() self.movespeed=Vec3(0) self.turnspeed=Vec3(0) end function entity:Update() self:Move(self.movespeed) self:Turn(self.turnspeed) end
    And this is how we would set an entity up in C++ to turn 2 degrees on the Y axis each frame:

    Entity* box = CreateBox(); box->AttachScript("Scripts/Entity/Mover.lua") box->SetObject("turnspeed",Vec3(0,2,0))

    Getters and Setters
    LuaBind does support getter and setter functions, and I decided it would be nice if we could have an object-oriented command set for the surface commands (even though vertices are NOT an object-oriented structure, at all!). If I can get vectors to be accessible in Lua, then we will be able to write code like this script, which performs a "breathing" effect on any model, ala Quake 3 Arena:
    function Entity:Start() this.speed = 1 this.amplitude = 0.1 end function Entity:Update() local n,v.d --Make sure this is a model entity before calling commands if this.class = CLASS_MODEL then --Get the distance the vertex should move d = math.sin(AppTime() * speed) * amplitude - amplitude --Apply movement to all vertices for n = 0,this.surface:length()-1 do for v = 0,this.surface[n].vertex:length()-1 do this.surface[n].vertex[v].position += d * this.surface[n].vertex[v].normal end end end end

    Multiple Script Attachments
    This is a very tricky thing to handle, because the behavior is so hard to define. Right now I have it set up so predefined functions will be called, in order of their attachment. As for user-defined functions, that's a lot hard to pin down. If two scripts contain a function called "Kill()", and the script itself calls the function, should both functions be called? It will take more time and testing to see how this should work. A big problem is if the user defines a function that returns a value, and two scripts contain the same function. If another script calls the function, what should be returned? So then I start thinking about separate spaces for each script attachment, with their own set of members and functions, and I realized how incredibly hard to understand that would be, if you were accessing this entity from an outside script.  
    In the absence of any compelling technological advantage, simple is best. For now, only the predefined functions get executed in sequence, and none of those return a value. My prediction is multiple script attachments will be used primarily by non-programmers who just want to combine a few behaviors and see results without touching any code. When you get into more complex behvior I think script programmers will generally use one script per entity that does what they want.
     
    It's still only 1:30 in the afternoon, so I am going to go get lunch and spend the rest of the day working bug reports. The model reloading issue that's active is a tough one. There's also a PHP issue uploading files to the site, so I will try to get that resolved.
  4. Josh
    The properties editor in Leadwerks3D is a live dialog. Your changes are shown instantly in the editor. If multiple objects are selected and their properties do not have the same values, the property interface will show an "indeterminate" state until the value is changed:

     
    When an indeterminate value is changed, the new value is applied to all selected objects. Since they now have a matching value, it is now shown in the dialog. You can use this to move objects along a single axis, without making their other axis positions match:

     
    The program console now displays loading and deleting of assets in blue and purple, so you can easily see every file the engine loads. The interface is extremely customizable; every element can be moved around or popped off into its own window:

     
    Did I mention extreme UI flexibility?:

  5. Josh
    Leadwerks Engine 2 is single-threaded. The engine performs one task at a time. The engine updates physics, then performs some other tasks, then renders the scene, waiting until each task if finished before moving onto the next one:

     
    I have experience programming threads in BlitzMax, and it works pretty much the same way in C++. Leadwerks3D is taking full advantage of threads and multicore CPUs, splitting off any expensive tasks that can be run on separate threads.
     
    Multithread programming is a little different than linear programming, and you just have to design things carefully. It's okay for two threads to read a variable at the same time, but if they both try to write to the same variable, or one writes while another reads, you will have major problems. This is made harder by the unrestricted nature of Leadwerks, because the end user might call any function at any given time, and I don't want to make arbitrary rules like "You can't modify surfaces during the main game loop".
     
    Mutexes (short for mutually exclusive) are a way around this, as they lock sections of the code to prevent multiple threads from accessing them at the same time, but I try to avoid using them. It's extremely difficult to find all the parts of your code that might need a mutex locked. Also, when you start using mutexes liberally, you lose all the benefits of concurrency, because the threads have to stop and wait for each other. I prefer a design where you gather data for a thread, run the thread without interacting with any other parts of the program, and then get the results a few frames later, or whenever the thread finishes processing.
     
    Multithreading has some big benefits for the new engine.
     
    Physics
    Physics in Leadwerks3D are asynchronous, meaning that while the engine renders the scene and executes your game code, it's already calculating the next frame of physics on a separate thread! The diagram below shows how the physics get split off onto its own thread, then split into many threads by the solver, and the two threads meet again the next frame. (It's actually more complicated than that, the engine just keeps running until 16.667 milliseconds have passed, then it waits for the physics thread to finish, if it hasn't already.)

     
    Let's say our ideal framerate is 60 FPS, which means our target frame time is 16.667 milliseconds (=1000/60). Whereas before a physics processing time on a single thread of 10 milliseconds would eat up 2/3 of your ideal frame time, now you can have physics that take up to 16 milliseconds, and have no performance cost for a program that is otherwise running at 60 FPS. Below you can see 5000 bodies falling at near real-time speeds:

     
    NavMeshes
    Navmesh generation is a slow process. However, it does not need to be instantaneous. This makes navmesh recalculation perfect for multithreading. As you can see in this video, the obstacles can move around and the AI navigation will react dynamically to the environment. I've never seen a game with dynamic environments like this, so we are breaking totally new ground. As CPU core counts rise the engine will be able to use those cores to handle more complex maps and greater numbers of characters. In the meantime, it will perform well on any dual-core mobile device!


     
    Rendering
    Rendering in Leadwerks3D will split culling up among threads to take advantage of multiple CPU cores. This is not yet implemented, but it's a little easier than physics and navmesh threading, since it doesn't run concurrently to the main engine thread.
     
    Below is a diagram showing the complete threading design for the engine:

     
    Multithreading in Leadwerks3D is all done automatically behind the scenes, so you can still program however you want, without fear of interfering with other threads.
  6. Josh
    I'm happily starting out on the CSG editor. The first step is to add a grid in the orthographic view modes so that you have a frame of reference. In Leadwerks Engine, the editor used some callbacks to call OpenGL commands to draw the grid. In the new system, Leadwerks3D, I added some per-camera commands to control the grid spacing, resolution, and colors. (You may safely ignore the mysterious black cube in the center.) This way the editor never has to call OpenGL commands directly, making room for the possibility of other rendering APIs the engine can support in the future, like DirectX or software rendering.

     
    One small little detail: In the Leadwerks Engine editor, the editor simply calls immediate draw calls (glVertex3f, etc.) to draw as many lines as are needed. In each orthographic viewport in the above screenshot, there are about 80 lines being drawn, which would require 80 draw calls. In Leadwerks3D, the engine creates a repeating patch and renders it as many times as needed, very similarly to how terrain is rendered in Leadwerks Engine. This reduces the number of draw calls in the above screenshot to about 24. Of course, instanced is always faster than non-instanced, and vertex buffers are much faster than immediate mode drawing, so this will increase the responsiveness Leadwerks3D over both the Leadwerks Engine editor and 3D World Studio.
     
    The next step will be to add controls to navigate viewports. This includes free-look with the mouse in perspective mode, and panning and zooming in the orthographic views.
     
    After that, I will start the actual code for drawing primitives, like 3D World Studio does. The functionality of 3D World Studio and Leadwerks Engine are being merged into Leadwerks3D. I miss the convenience of CSG editing. It allows non-artistic people like me to easily put together good looking buildings and interiors. It also makes it easy to establish a theme for a scene using sets of pre-made textures. And if nothing else, it's a convenient way to block out scenes for play testing, until the real art assets are finished.
     
    You'll also notice I have switched my main development machine to Windows 7 for the last leg of this journey. We're on schedule for a summer release this year.
  7. Josh
    The last day of the season was today, so I was at North Star. We had a storm for the last three days, so the snow was pretty good, just sticky in some places. Even though it was a Sunday, crowds were not bad. Towards the end of the day, most people were hanging out at the lodge and the runs were completely empty. All in all, it was a pretty awesome day.

  8. Josh
    Today I implemented the last two compound primitives. Tubes are the same as in 3D World Studio, with parameters for the number of segments and thickness. Since the Leadwerks3D editor supports smooth groups, another new compound primitive has been added. A torus is a "donut" shape. These can be used to make curved pipes and other things. Here are the two compound primitives, side by side:

     
    Smooth groups and new primitives in Leadwerks3D allow you to create new kinds of geometry which were traditionally not possible with CSG editing:

     
    An interesting case occurs when a torus' cross-sectional radius exceeds the radius of the ring. At this point the shape folds in on itself, eventually degenerating into a sphere. To prevent this from occurring, the creation function automatically adjusts the cross-sectional radius, as shown in the image below:

  9. Josh
    Step 1. Build the object you want to make into a prefab. Here I have staircase I want to make into a reusable object.

     
    Step 2. Drag all the objects onto one, to make it a parent of the others. Prefabs need one top-level entity.

     
    Step 3. Click on the top-most object in the hierarchy and select the "Save as Prefab" menu item. You'll get a file save dialog so you can choose the file to save.

     
    Step 4. Begin using your prefab by dragging it into the scene from the asset browser.

     
    Prefabs will always be reloaded from the original prefab file. Even if you overwrite the prefab file, your changes will be instantly reflected throughout the entire scene. If you make any changes to an object loaded from a prefab that would make that object so it is no longer instanced, a dialog box will warn you and ask if you want to proceed before turning it into a unique object.
     
    Prefabs can be made from all entities in the editor, not just CSG brushes.
  10. Josh
    It's quite a challenge to get something semi-deployable to work on four platforms. I never intended to become an expert on the subject, but here are some of the interesting things I have picked up recently.
     
    Code generation mode in Visual Studio
    By default, Visual Studio builds programs in debug mode that won't run on consumer's machines. Fix it by changing the code generation mode:
    http://www.leadwerks...grams-cant-run/
     
    Static Libraries in Xcode
    Xcode has no "exclude from build" option. If you include a debug and release static library with the same name, the compiler will choose either one or the other, and cause errors in one build. The way around this is to set both to "Optional" in the "Build Phases" project settings.
    https://devforums.ap...170482?tstart=0
     
    Android NDK Path
    To relocate a project, you have to alter the NDK Builder setting "Project_Path". The NDK settings are hidden away pretty well in the Project>Android settings.
     
    And slightly unrelated, but equally maddening...
     
    Polled Input + Notifications on OSX in BlitzMax = death
    http://blitzmax.com/...php?topic=99043
  11. Josh
    I'm working on project creation, management, and publishing right now. This is necessary because it automates some steps that would otherwise be very time-consuming.
     
    When you create a project, you can choose the language and the platforms you want it to run on:

     
    You can switch between projects to reload all assets and change the working directory:

     
    You can export a project into a zip file, give it to someone else, and they can easily import it back from the zip, and have it available in the editor on their own computer:

     
    The final step is publishing, which I am still working on. On Windows, this will create a win32 installer program automatically for you, so you can export your game's installer straight from the editor! On Mac, this will create an Apple disk image (.dmg), which is the normal way Mac apps are distributed. On Android and iOS, this will copy all needed asset files to the mobile resource directories, and then give you the option to open Eclipse of Xcode. From there, you can compile the project and have it run on your mobile device right away.
     
    It's interesting that the new art pipeline provides a visual interface to go from an idea to a finished game. I think this will increase the amount of games and projects that get shared in our community, and will generally make the new engine easier and more fun to work with.
  12. Josh
    I hope everyone is having an awesome Christmas week. I'm taking a break from coding to show you our new office we moved into in November at the Sacramento Hacker Lab.
     
    All decked out for Christmas:

     
    Chris is pretending to work, but he's not fooling me:

     
    So we changed the arrangement to make a reverse mullet. (Party in the front, business in the back):

     
    The kitchen provides energy, both in the form of food and alcohol:

     
    The common area:

     
    The room-temperature beer flows freely:

     
    A closeup of our lovely tree, topped with the stuffed figurine Intel gave us (they're one of the sponsors here):

     
    To celebrate, here is an eggnog-induced off-the-cuff Christmas poem:
     
    Twas the night before Christmas,
    And all through the forum,
    Not a creature was stirring,
    (But Lumooja was snoring.)
     
    The coders were nustled all snug in their beds,
    While visions of Leadwerks 3 danced in their heads,
    And Aggror in his T-Shirt, and Roland in Sweden,
    Had just settled down their brains after solving a rather difficult programming problem.
     
    (Add your additional verses in the comments below.)
     
    MERRY CHRISTMAS!!!
  13. Josh
    I'm writing this as we're a few dollars away from the mythic 30% target that has been claimed to be a "tipping point" past which Kickstarter campaigns reach critical mass. I'm not going to go into any detail about that because I don't want to jinx it, but so far I am blown away by the response. We put this up Sunday in advance of contacting bloggers, so nobody really knew about it the first day. It's Tuesday morning and we're presently at 29%.
     
    I've heard a number of people point out that putting Leadwerks on Linux would be the last tool they need to ditch Windows completely and move over to Linux. I myself am sort of platform-agnostic, and don't really get into the politics of different operating systems. However, the response we're getting with this campaign is making me realize something new.
     
    It's arguable that Microsoft has been a poor custodian of PC gaming. They haven't done much to support OpenGL, instead trying to push everyone into their own proprietary graphics API, DirectX. The problem with DirectX is it only runs on Windows and XBox, and it completely changes every few years, so developers have to rewrite all their rendering code. OpenGL has all the same functionality, it's stable, and it runs on everything (except XBox and Surface).
     
    The second problem with PC gaming on Windows is that Microsoft has a fundamental conflict of interest because they own a closed gaming platform, the XBox. Closed platforms are bad for developers because it can be expensive to push out game patches. The creator of Fez famously declared they would not be patching a known bug, because it would have cost an amount rumored to be around $40,000. It's bad for consumers because they don't get access to the same range of indie titles an open platform like Linux or the upcoming SteamBox can get. In addition, recent restrictions for the new XBox One have been announced that threaten the ability to lend games and may make the system "un-future-proof" (is there a real word for that?).
     
    Given these problems, it seems logical to us that PC gaming on Linux would grow quickly. Linux has faster OpenGL performance than Windows or Mac, and there's none of the "dueling APIs" issues and conflicts of interest Windows has. Thanks in part to Valve, the graphics drivers are now really solid. We have an optional distribution system through Steam. It's really got everything we need. So I am very optimistic about the future of PC gaming on Linux, and am really happy to be a part of this movement.
     
    The next step is for us to keep spreading the word and reaching out to publications so that we can make sure the target goal is met. Your help is appreciated. You guys are making quite a buzz on Twitter, Google+, and Facebook!
     
    To all our backers, thank you so much for sharing our vision for Linux gaming. I'm really excited to be working on this and glad I can deliver something the PC gaming community really needs right now.
  14. Josh
    The lean startup methodology posits that life is to short to build a product no one wants. The old way of doing business involved a limited number of companies with very high barriers to entry adopting a "push" strategy. Sears could effectively create demand for a product by choosing what they wanted to feature prominently in their mail-order catalog. Television advertisers could craft a promotional strategy that would reliably result in a certain response. Those days are over, fortunately, but the old way of thinking is still with us.
     
    Today consumers have more choices than ever before. The low cost of internet hosting has led to a long tail of diverse products. In gaming, marketplaces like Steam and mobile app stores have allowed indie game developers to specialize in various niches and deliver value to customers that would otherwise go unserved. This is really awesome, but the old "push" methodology isn't going to work here.
     
    The best approach to succeed in this new multifaceted market is to test markets. This consists of three steps:
    Identify various market segments.
    Show members of each market segment a mockup of a product geared towards them.
    Collect data and decide which segment to pursue.

     
    Leadwerks Software used this method to identify the Linux market segment. I did not know if a Linux product would be successful, so I put up a Kickstarter campaign and received affirmation from the market. Making Leadwerks run on Linux was a lot of work. I didn't want to do all that, just to find out that nobody wanted it. So testing the market gave me enough of a response I was confident to go forward with the project. The idea is that it's easier to get feedback and change direction early than to build a full product based on a lot of wrong assumptions about what the customer wanted. So you actually want to sell a product that doesn't exist yet. If people won't buy it, it saves you the trouble of making the thing and having it fail.
     
    As a PC developer, the best tool you have to test the market is Steam Greenlight. You can post a Greenlight Concept well in advance of actually writing any code and get a feel for how people respond to your ideas. It doesn't cost anything, and will help you gather feedback and build a fan base early on.
     
    ScrotieFlapWack, Digman, and Rick are using this approach to promote their game Phobia on Steam early on. At this point all we've seen are a menu video, some prototype gameplay, and a few early artwork pieces. But what's important is they're establishing a concept...which is exactly what Greenlight Concepts are for.
     
    franck22000 is a bit further ahead in the game, but he's still taking care to establish a fan base before his final release. Dangerous Rays has been released in alpha form and he's getting feedback from his users long before publishing the final release.
     
    Menu screens are a great way to communicate the concept of a game. They usually include music, a logo, and a background scene that communicates the environment of a game. Without knowing any of the details, you can instantly envision a vague idea of what the final game might be like. I picture Phobia as being sort of like the Amnesia series in a modern industrial setting:

    http://www.youtube.com/watch?v=m1q0XJdT22U
     
    I picture Contained as being an action shooter that's a cross between Killing Floor and Doom 3:


     
    The intent of the authors was probably a little different from my interpretation, but that doesn't matter. I saw enough to be inspired. And when people are inspired by your idea, a funny thing happens. Suddenly you will find that they want to join your team and help bring your idea to reality. So a concept can help you rally a team of people to help.
     
    If you have a compelling idea of the game you want to make, it pays to start your marketing early. By posting a Greenlight Concept early on, you will save time, attract talented people who want to help, and establish a user base that loves what you're doing. Life is too short to build a game nobody wants.
  15. Josh
    The beta of Leadwerks 3.3 is now available on the beta branch on Steam.
     
    Two new entity classes that extend the model class are present. Sprites are a quad that can face the camera, a specific direction, or can rotate around one axis. These are useful for lighting effects and the axis rotation is great for making laser beams or tracer rounds.
     
    The Lensflare class extends the sprite class and adds a simple glow effect for lighting.
     
    The editor now support shift-drag to select in the main window viewports.
     
    Vehicles are supported. However, the vehicle class is not documented and there are no examples yet. Expect updates that demonstrate how to use these before the final version is released.
     
    On Windows, the main window now uses resizable splitters so you can adjust the size of the side panel and program log, or click the separator to show/hide them. You can also right-click on a file or folder in the Asset Browser and select the Properties menu item to bring up the Windows file properties dialog.
     
    A surprise bonus I did not anticipate until a few days ago is a reworked, easier to use Workshop system. Files are now extracted into a subfolder in an "AddOns" folder in your project's directory. This makes it so scripts and shaders work properly, and prevents broken file linkages we were experiencing with more complex Workshop content. The system for uploading Workshop items has also gotten more intuitive and friendly. The change was not as dramatic as I feared; all Workshop assets and games still work with no changes. After working with this approach for just a couple of days, it feels so much faster and easier to use than keeping everything in encrypted zip files all the time.
     
    Finally, the publish dialog will now export a copyright-protected game using zip file encryption. This works with both Lua and C++ games. A cross-platform game folder is now exported instead of an installer, so you can use Inno Setup or another free program to make your own installer.
     
    The community has provided some really good feedback lately, and I'm really proud of how 3.3 is turning out. I think you'll find Workshop is a lot more useful now.
  16. Josh
    I've had an urge lately to minimize my PC setup. Maybe it's the experience of an interstate move with five computers, but I find myself valuing small size and practicality more lately over quality.
     
    I purchased a Dell Ultra Sharp UZ2715H monitor with built-in speakers. This allows me to eliminate three cords and an extra power adapter from my external speakers. Interestingly, the two-speaker setup was a downgrade from my old speakers+subwoofer system, because I got tired of kicking that big plastic box under the desk. The monitor only accepts HDMI audio input, which is disappointing because it will cause problems when I want to use my Oculus Rift, since my GPUs only have one HDMI output each. The sound quality is not as good as an iMac, but better than a laptop. The volume button on the monitor is not visible at all, so you just have to remember roughly what spot on the front of the monitor is the volume button, and poke around until you find the right one. However, the sound is good enough, and it clears up a lot of space on my desk.
     

     
    I previously tried out another Dell model with a 25x1440 resolution, but I found Windows handling of high DPI displays to be unsatisfactory.
     
    I'm down to one PC now, and I just frequently swap the GPU and switch boot drives in BIOS when I want to switch between operating systems. I don't recommend ever creating a dual-boot system, and when you do install an OS on a hard drive, just remove the other drives temporarily to avoid any problems.
     
    I also replaced my great big Microsoft ergonomic keyboard and wireless mouse with a much more minimal boring only corded keyboard and mouse. I just wanted to never deal with recharging mouse batteries again, but I found the corded mouse to be MUCH more accurate and quick to respond. I've been using the wireless mouse for so long I forgot what corded mice were like.
     

     
    At this time, my PC now has the following cables:
    PC power
    Monitor power
    HDMI
    Mouse
    Keyboard
    Ethernet
    That's it!

     
    I'd also like to transfer the contents of my PC into a smaller case, but won't attempt that for a few weeks. I'm also considering replacing my huge printer / scanner / copier with something like this, or just getting rid of it entirely. (When was the last time you printed anything on physical paper?)
     

  17. Josh
    Documentation is being organized into a built-in help browser. Documentation simply falls into two categories, "Tutorials" and "Commands". Tutorials are laid out in a linear sequence of lessons divided into subchapters. "Commands" displays the command reference, which remains pretty much the same as it is now, with the exception of additional function syntax declarations for Lua. Search and index will be added, but right now I want to focus on content.
     
    The sequence of tutorials is meant to start with zero knowledge of game development or programming, and teach everything you need to know, in the best possible order. It will start with editor usage, move on to simple gameplay without programming, then cover Lua scripting in depth, to the point where you never need to look at the Lua website, and finally end with several simple game examples. This design may change a bit before it's final, as I am not the person in charge of this.
     

     
    Research on code completion in the script editor is being conducted. I'm also getting the legal stuff set up for contracted work..
     
    As for me, I am focusing on the following items right now:
    AMD pure virtual function call. (Not really that can be done except keep hitting F5.)
    Intel FBO error when toggling reflective water on and off.
    Nvidia FBO performance reduction in latest driver.
    Model editor rendering glitch in Linux.
    Scene panel not rendering correctly in Linux with AMD cards.
    Carving.

     
    These are all slow-going items, many of which require coordination with third parties. I decided to do carving before vegetation painting because it is a simpler feature that doesn't require as much testing, whereas vegetation painting is the kind of thing that tends to lead to more feature requests.
  18. Josh
    Leadwerks Game Player is now in beta. If you recently posted a game on our site or entered one of the recent game tournaments, you were sent a pre-release Steam key to access the application.
     

     
    Leadwerks Game Player provides you with a route to self-publish your games to Steam Workshop. Because it is a free application, the entire Steam userbase of 125 million people can access your game. Your Lua game is run in sandboxed mode using an interpreter application we provide, so that Steam users can freely download and play games without fear of computer viruses. Your game is playable on Windows and Linux (including SteamOS), even if you didn't develop it in Linux.
     
    Sharing Your Game
    Share your game with your friends and fans with a simple link that installs the game player (about 4 MB) and downloads and plays your game automatically:

    steam://run/355500//405800821
     
    Or the more hyperlink-friendly variation:
    http://www.leadwerks.com/run?405800821
     
    When running, your game appears as a normal Steam application, shown here with the overlay enabled:

     
    This allows you to get your game in front of players and start building a community of fans.
     
    Publishing
    The next update to Leadwerks Game Engine (beta branch only) adds the ability to self-publish games to Steam Workshop. These will appear in the Leadwerks Game Player Workshop, as it is a separate application.
     
    To publish your game, first publish a standalone game from the project manager. After that, open the Workshop > Publish File menu item and select the game data zip file as the uploaded file. Be sure to select "Game" as the type of file you are publishing. This process will be streamlined as we near launch.
     
    After publishing, I must manually add your game to the interface, as the Steam web API cannot be used while the application is still unreleased. Please contact me to add your game after publishing.
     
    You may need to opt into the Steam client beta (not the Leadwerks beta branch) to successfully publish games, as cross-app Workshop publish is a relatively new feature.
  19. Josh
    I'm working to move our Workshop implementation over to the newer SteamUGC API. There were recently some things updated, and that is still being sorted out. I'm also finishing up the game player.
     
    The first incarnation of Leadwerks Game Launcher was pretty utilitarian (and ugly):

     
    I realized this was pretty drab for a product aimed at consumers, so I designed a more outlandish colorful interface that was purely web-based:

     
    This one looks nice, but you can tell it will start to feel dated quickly. I'm also concerned about the user's perception of this product. It is meant to be a software application, not a thinly wrapped web page. I'm also sensitive to the danger of this product being associated with garbage like this, enough so that I decided to get rid of the "Game Player" name and call it something else. The name "Game Launcher" is more closely associated with initialization interfaces like the one used in Amnesia. It's just more of an acceptable PC gaming thing:

     
    My design also took up a lot of space and looked a lot like the iTunes App Store. It is not my goal to build a redundant marketplace within Steam, and that is what this looks like.
     
    So with that in mind, I came up with a third design that makes better use of the GUI and minimizes the web elements:
     

     

     
    The buttons in the left-hand lower corner are unicode characters, interestingly.
  20. Josh
    I've recruited a professional designer to create a new icon set for the Leadwerks UI. This will provide us with a more consistent visual interface, with a similar look on all supported platforms.
     
    My first instructions were to go bright and multi-colored, with colors similar to Lego pieces. We also included Windows 10 style icons as an influence. These looked good, but when plugged into the program the interface lost its visual consistency.
     

     
    We next experimented with some grayscale and heavy black and white icons. These were visually consistent but unremarkable.
     

     
    Finally, we tried a single-tone set using the default perspective viewport background as the base color. This produced the best results.
     

     

     
    We're proceeding with this style. We'll start with a pure one-tone set of icons and then add limited amount of color in. For example, the delete and selection mode icons will have some red added to them.
     
    Toolbar icons are going to be changed to 24x24 to show off the art and make them easier to find. Some of the current icons aren't very clear about what their function is, like the 90-degree rotation buttons, so redesigning them will make their functionality a little more clear.
  21. Josh
    An HTML renderer for Linux has been implemented. This adds the welcome window and full Workshop inteface for Linux. This will be available soon for testing on the beta branch.
     

     

     

  22. Josh
    Here are some of the things from my childhood that I still find weirdly fascinating. Bringing that same feeling into Leadwerks is something I have long driven towards. More on that later.
  23. Josh
    An update is now available on the beta branch which fixes the alt+tab problem. This works by skipping rendering when a window is minimized, since the Win32 command GetClientRect() returns a size of zero when windows are minimized.
     
    Now I am on to the highly anticipated Leadwerks 3 vegetation system. I previously wrote about some research I was performing here:
    http://www.leadwerks.com/werkspace/blog/1/entry-1499-vegetation-research/
    http://www.leadwerks.com/werkspace/blog/1/entry-1500-vegetation-research-pt-2/
     
    The new system uses no memory to store millions of plant instances and performs culling entirely on the GPU:
     

     
    I am aiming to have the visuals and tools done by the end of the month, and to add collision and have it completely done and released by November 1.
  24. Josh
    Christmas is the season for giving, and it also happens to be my biggest sales time of the year. The Steam Winter Sale just kicked off and I need help getting us up on the first page of top sellers:
    http://store.steampowered.com/tag/en/Game%20Development/#p=0&tab=TopSellers
     
    How do we do that? We drive web traffic to the Leadwerks Steam Store page. Here's a simple way to do it. If you could "Share" this Facebook post with your Facebook account, I would appreciate it:
    https://www.facebook.com/Leadwerks/photos/a.485763276182.322419.352779906182/10153713393416183/?type=1&theater
     
    That should push us up to the first page.
     
    Thanks for your help. Hope you're enjoying the new vegetation system!
  25. Josh
    Leadwerks Game Engine: Indie Edition on Steam is now just "Leadwerks Game Engine".
     
    Leadwerks Game Engine: Standard Edition on Steam is now "Leadwerks Game Engine: Professional Edition".
     
    When I first put Leadwerks on Steam, it was just an experiment. Separating out the Lua version was something I had not done before. In fact originally, Leadwerks was a C++ library only, and Lua support was added later. After the last two years on Steam, it makes sense to consider the Lua version our main product, and the C++ add-on is more of a high-end advanced option.
×
×
  • Create New...