Welcome, Guest. Please login or register.

Login with username, password and session length

 
Advanced search

1411425 Posts in 69363 Topics- by 58416 Members - Latest Member: JamesAGreen

April 19, 2024, 08:50:47 AM

Need hosting? Check out Digital Ocean
(more details in this thread)
TIGSource ForumsCommunityDevLogsDuality
Pages: 1 2 [3] 4 5
Print
Author Topic: Duality  (Read 18716 times)
Adam_
Level 1
*



View Profile WWW
« Reply #40 on: November 10, 2014, 01:11:15 PM »

I've been used to a lot of trouble. Developing a usable multi-purpose game engine is hard enough, even when limiting the scope to the 2D realm. Working on the example project has reminded me that actual Game development is hard, too. Like, really hard.

The whole example game idea sounded like a small thing at first: A small Dual Stick Space Shooter, minimalistic graphics, just a single level and a single enemy type. Easy, right? Haha! Grin Oh well..

I've done plenty of games, but there are some pitfalls I just tend to forget about every time. Here's a list of the things that I vastly underestimated in regards to the time and effort they will take:

  • Developing a consistent art style. Even if the broad scope / idea is already there.
  • Figuring out how the gameplay will work. What is the players goal, how does he achieve it and what next?
  • Programming game-specific code.
  • Designing levels. How are they structured? What will the player do? Difficulty?
  • Building levels. Where exactly will all the stuff go? Does it look nice? Does it feel right?
  • Playing the game and tweaking the gameplay.
  • Polishing the game in any regard.
So I guess it's a miracle that people actually manage to finish games, and overcome all of the obstacles and roadblocks that come up. Even the simplest ideas sometimes turn out to be wildly time-consuming. Cheers to you all, who are bravely fighting your own game development backlog. You're not alone. Keep it up. Beer!



But let's go on with the actual news. There's been a lot of progress in the example game recently. I'll just let the images speak. But first, have some background music:

.

First of all, there now are doors: http://gfycat.com/FaintEarnestBobcat

Some of them open automatically. Other require you to activate them by placing a rigid object within a certain trigger zone: http://gfycat.com/BoringBarrenArgentineruddyduck

You can also shoot them if you like. Won't help, but there are awesome hit particles for bullets now! http://gfycat.com/GloriousAlarmedEthiopianwolf

Your first encounter with (yet rather defensive) Claymores: http://gfycat.com/DirectKeenKoala
« Last Edit: November 10, 2014, 01:20:30 PM by Adam_ » Logged

Adam_
Level 1
*



View Profile WWW
« Reply #41 on: November 11, 2014, 07:44:40 AM »

Added info panels for flight controls and shaped out the levels background:

http://gfycat.com/PertinentUncommonHydatidtapeworm
http://gfycat.com/TimelyConsiderateHound

It's slowly getting there.
Logged

Adam_
Level 1
*



View Profile WWW
« Reply #42 on: November 17, 2014, 07:57:57 AM »

Just a quick note to all of you who might have missed it: Onikira - Demon Killer, the first commercial game done using Duality is now on Steam Early Access. It's done by the BatCat / DigitalFurnace Games bunch who are also lurking around here Smiley


So.. if you feel like some awesome ninja action is missing in your life right now, go out there and grab it! Wink
Logged

ofx360
Level 0
**


View Profile
« Reply #43 on: November 17, 2014, 08:40:25 AM »

OH! I didn't realize this engine was available to be used. I'll have to give it a shot this weekend
Logged
Adam_
Level 1
*



View Profile WWW
« Reply #44 on: November 20, 2014, 11:11:16 AM »

OH! I didn't realize this engine was available to be used. I'll have to give it a shot this weekend

Sure, it's available for everyone Smiley Just don't expect a 2D sidescroller beat'em'up engine because Onikira is one - Duality is a lot more generic and doesn't provide genre-specific game logic out of the box!
Logged

Adam_
Level 1
*



View Profile WWW
« Reply #45 on: November 24, 2014, 01:57:50 AM »

That's it. I just wrote the last line of code and integrated the last bits of content. All else from now on will just be ongoing patches to keep the project on par with Duality development. Audio was kind of hard to get right, but I think I've found a way. I don't really have a nice gfy video to show (mostly because they don't have audio), but here's > the raw source for player ones flight loop < as a start. It kind of gives you a first impression of the general audio style I've been trying to follow: Using musical instruments instead of actual effects when it was possible. Drums fit to a surprising variety of audio sources.

As soon as I've upgraded the package management system to support delivering source code along with binaries for educational purposes, I will report back and release this game simultaneously as a .zip (without editor, which I won't update later) and a package, which will be always up-to-date.

I'm a little bit excited about that release. This project turned out to be a lot more time intensive than planned, but also a lot nicer than planned Smiley It's very short though - after all, this is still an example project and not a game on its own. The difference has started to fade though.
Logged

Adam_
Level 1
*



View Profile WWW
« Reply #46 on: November 24, 2014, 02:19:53 PM »

Release Time! Grin

Until I finally get around to teach Duality how to deliver example source code along with packages, I have uploaded a .zip snapshot of the Example Project >>> here <<<.

It's a playable game for 1 - 2 players using Mouse, Keyboard and / or Gamepads. Let me know what you think! Smiley
Logged

Adam_
Level 1
*



View Profile WWW
« Reply #47 on: November 29, 2014, 02:55:35 AM »

It's done. I've added source code deployment support to Duality Packages and uploaded the example project as a Package for everyone to download.


If you've done some basic stuff in Duality but no game yet, you might want to give this a try Smiley Source code is included, so you can directly mess with all of the games internals, or add your own stuff!
Logged

Adam_
Level 1
*



View Profile WWW
« Reply #48 on: January 08, 2015, 10:20:04 AM »

More than a month and still no update.. sorry! I guess at least it's time for a big changelog to make up for it:

Quote
#ADD: Added logging for a lot of (non-personal) system specs by default.
#ADD: The top keyboard number keys can now be used to switch between the available camera view states when the cam view has focus. (BatCat)
#ADD: Added more unit tests for various classes.
#ADD: Log entries now carry the context of their message, derived from the object parameters in their Write call. (AdamsLair & BatCat)
#ADD: Double-Clicking a log entry in the LogView now highlights the messages context object. (AdamsLair & BatCat)
#ADD: Added a small but neat API for handling the applications focused state: DualityApp.IsFocused.
#ADD: Added an interface to plug in custom renderer visibility strategies for custom performance optimizations. (AdamsLair & BatCat)

#CHANGE: As of now, Duality manages the "Source/Media" folder to mirror the "Data" directory in a non-destructive way.
#CHANGE: Duality now preserves folder structures when importing new media directly from within the "Source/Media" directory.

#CHANGE: Refactored graphics initialization.
#CHANGE: No longer asking for confirmation when closing the editor and no changes have been made. (BatCat)
#CHANGE: FileHash performance improvements. (BatCat)
#CHANGE: Editor startup performance improvements. (BatCat)
#CHANGE: Improved performance of managing Scene objects ingame. (BatCat)
#CHANGE: Huge performance improvement for keeping the Scene clean using a ridiculously small change.

#CHANGE: Improved RawList.RemoveAll performance significantly by using a more efficient algorithm.
#CHANGE: Now using Parallel execution on SetPixelData commands to speed up image import via Bitmap objects. (AdamsLair & BatCat)
#CHANGE: DrawOnto and various dependent methods now use a partitioned parallel execution approach rather than Parallel.For, speeding up loading times.
#CHANGE: Improved performance of PathHelper.FilesEqual method by reducing disk read ping-pong.
#CHANGE: Pixmap.Layer now properly disposes temporary Bitmap objects immediately after no longer needing them.
#CHANGE: Refactored and cleaned up Project View / Scene View context menu creation and handling code.
#CHANGE: Moved tree view node classes to separate files.
#CHANGE: Moved common Resource name functionality to static ContentProvider methods.

#FIX: Fixed DrawDevice finalizer performing illegal cross-thread graphics calls.
#FIX: Fixed silent failure when creating a project on a storage medium that doesn't have enough space.
#FIX: Fixed crashbug when failing to determine parameter types while parsing XML code documentation files.
#FIX: Fixed a bug when renaming content refs and their Type is missing due to source code changes. (BatCat)
#FIX: Fixed IContentRefPropertyEditor throwing a NullReferenceException when getter returns null objects. (BatCat)
#FIX: Fixed FullWindow screen resolution changes not using the displays native size.
#FIX: Fixed a rare problem the could occur when a logged object's ToString implementation threw an exception in the wrong moment.
#FIX: Fixed Camera.Pass.CollectDrawcalls event being serialized by accident.
#FIX: Fixed ProjectFolderView object creation menu ignoring the invisible flag.
#FIX: Fixed CreateObjectDialog showing certain Types recursively.
#FIX: Fixed Pixmap throwing unintelligible Exceptions if something goes wrong during Layer image file saving.
#FIX: Fixed unhandled exception when hitting F2 in the Project View before actually selecting anything ever.
#FIX: Fixed several misspellings in comments. (caryanne)

#REMOVE: Removed FlushDisposedObjects extension methods, because they've become trivial.
#REMOVE: Removed legacy code that monitored "Source/Media" for rename operations and attempted to auto-update Resources. This was nonsense. "Source/Media" is designed to be a receiver, not a sender.

It's a big wall of text like that, so let's try to sum it up a bit and name the few big things that were going on since my last update on Duality development:

  • As reported earlier, former indie studio BatCat Games have released their Duality game Onikira on Steam Early Access. But not only did they do that, we've also talked a lot in the mean time about their internal Duality fork and the stuff that can or should be merged back. In the above changelog, you will notice a lot of entries with a "BatCat" note sticking to them.. these are the ones that were done either completely by or in collaboration with them. Performance improvements, Bugfixes, Screen Resolution changes at runtime and there's more! Summing up: Those guys are awesome. Go and tell everyone about their game! Smiley
  • The former "temp wasteland" Duality folder "Source/Media" is no longer a wasteland, but carefully organized by Duality to mirror folder structure and file names of each files imported Resources in the "Data" folder. It has achieved the state of a folder that can safely be checked into version control systems and act as an actual source folder for your game Assets. You can also import new Assets by dragging their files from a "Source/Media" subfolder directly into the project view. Duality will never modify your source files on its own.
  • Several small usability improvements, like the ability to double-click on a Log View entry in order to highlight objects and Resources that were passed as parameters of that log entry.
  • I currently have no "big new feature" tasks going on and will likely focus on general improvements, more documentation and samples in the near future, as I realize that a lot of potential users might simply be "scared away" by the lack of some easy "How to do X" samples.

Please note that most of these changes are only available on GitHub right now - binary release will follow once it's tested thoroughly!
« Last Edit: January 08, 2015, 10:57:46 AM by Adam_ » Logged

Adam_
Level 1
*



View Profile WWW
« Reply #49 on: January 16, 2015, 02:50:29 PM »

I've published a new binary release via the Package Management system. You'll get it automatically if you download the binaries for the first time. When updating, I would suggest to do a full update by hitting "Update All" in the Package Manager dialog.
Logged

Adam_
Level 1
*



View Profile WWW
« Reply #50 on: January 24, 2015, 02:08:25 PM »

Sneaked away from other work in order to push a small Duality update. Nothing big, but the Package Manager Dialog is now a little nicer than it was before and does some sorting by default when browsing available packages.

Since the Duality ecosystem (both core and third-party plugins) can't promise to be perfectly backwards-compatible in any case, the focus of this update was to highlight recently published packages vs. old ones. Both will be displayed, searchable, etc., but a new package will likely score higher and appear first in the list than one that hasn't received and update for a year.

The goal of this is not to discredit old and stable packages, but to help newbies decide which one to prefer when presented with two seemingly equal third-party packages. With continuous API improvements, Duality has no way to predict the compatibility to a very old package, and incompatibility issues can be frustrating. To help with this issue, the Package Manager UI does its best to guide new users towards new (and regularly updated, e.g. likely compatible) content.
Logged

Adam_
Level 1
*



View Profile WWW
« Reply #51 on: February 09, 2015, 02:20:56 AM »

Duality is now listed in the engine section of the Ludum Dare website. Grin



Game Jam, anyone? Wink
Logged

Adam_
Level 1
*



View Profile WWW
« Reply #52 on: October 24, 2015, 02:07:55 AM »

Time to dig up an old topic with a big update!


That's right. A major version step. Among all the things that have changed since last time, what's the main focus of this update? Putting it in one word: Portability.

Nope, Duality doesn't magically run on Linux and Android out of the box. Supporting a framework of this size on multiple platforms besides working and studying is just not possible for me alone. And rather than doing ten things badly, I'd rather do one thing in a good way - developing the engine itself, that is. Still, there is a lot of sleeping potential in multiplatform support for Duality, so I decided to at least take some small steps into the right direction - and started the biggest refactoring operation in the five-year history of the framework.

Since it's been so long since my last update, I've put in the considerable effort of looking up a visual representation of the process for you:


In those last few frames, when the cat finally escapes the bathtub with a last glance of panic, but you can already sense its relief? That's me a few weeks ago.

So, what does refactoring have to do with portability? Simply put, my goal was to make it as easy as possible to port a Duality game to your target platform. That means you shouldn't need to go through all the engine code to do so, because that's exactly the part that isn't easy. To avoid this, what I've done is determine all the parts of platform-dependent code in the core, put them behind a platform abstraction layer, and then move them to a distinct plugin. The result is a platform-agnostic core with platform-agnostic core and game plugins - and a bunch of backend plugins with the actual platform code. Here's a diagram showing what I mean:


I haven't ported Duality on other platforms for you - but I prepared the field, so you can do so as easy as possible. To be most efficient, we - that means you (the developer) and me (the Duality guy) - split up work and each do what we are best at: I develop the core engine, you add the backend for the platform you're already proficient at as a distinct plugin. Engine core, game logic, third-party plugins and game content can remain entirely unaffected by this, because they're standing on the shoulders of the aforementioned abstraction layer.

That's the theory. We all haven't tested this in practice yet, except on the default platform "Windows", but I'm fairly sure that a big part of porting work has been done. All of it? Definitely not. But it's a start, and if you choose to take the last steps, you'll have to know a lot less about the engine to do so.



Now that we've cleared up the focus of this big update, there are a lot of secondary features, fixes and gimmicks that made it into the v2.0 release. Since copying here would just be redundant, I'd like to just leave you a link to my website for a (almost) complete changelog, and if you're adventurous, you can also explore the GitHub issue list of the milestone - it has all the details and archived progress reports and reveals a lot about the thought process that way.




One more thing: With the new release, there are a lot of new sample packages, which you can simply install using the integrated Package Manager in Duality, take a look and play around with them. If you've always wanted to give Duality a try, the threshold for that once again just dropped a bit Wink You'll find the binary download on the info page (click on the image above). Here's a preview of the Custom Particle System sample:


(Click to see it in motion)



There's also a new icon for launcher and editor, which finally matches the logo on the website:

(Yeah, it's actually not that relevant, just happy with how it turned out, compared to the old one Grin)



That's it again from my side. Feedback is always welcome, but until then: Happy Developing! Coffee
« Last Edit: October 24, 2015, 03:44:08 PM by Adam_ » Logged

Adam_
Level 1
*



View Profile WWW
« Reply #53 on: November 04, 2015, 04:41:26 AM »

Mike, the guy behind GameFromScratch did a video on Duality in his "A Closer Look at" series. I actually asked him about whether he'd like to do one a few months ago, but there are a lot of frameworks and engines out there, so I'm still a bit excited that it actually happened now Grin Anyway! The video provides a neat overview and is overall well done, so I'll just share it here Smiley


There is also a text version available.
Logged

Adam_
Level 1
*



View Profile WWW
« Reply #54 on: November 24, 2015, 07:16:53 AM »

Working a bit on the Tilemaps plugin. Here's a (defensive) culling implementation for the TilemapRenderer:


The white rectangular area is the simulated Camera view for testing. Note that the rectangular area that is rendered is always a bit bigger than required in order to account for cases where object or camera are rotated. Tested this with a 1000x1000 tilemap and got away with less than 1 ms per frame, because the actual rendered tile count is comparatively low.

Next stop: Actually rendering tiles instead of just a lot of colored blocks.
Logged

surt
Level 7
**


Meat by-product.


View Profile
« Reply #55 on: November 24, 2015, 11:45:05 AM »

Why does it render more than one tile past the bounds of the rotated viewport?
What about scan converting the rotated viewport? Is the extra overhead greater than the waste rendering overhead?
Logged

Real life would be so much better with permadeath.
PJ Gallery - OGA Gallery - CC0 Scraps
Adam_
Level 1
*



View Profile WWW
« Reply #56 on: November 24, 2015, 12:45:47 PM »

Why does it render more than one tile past the bounds of the rotated viewport?
What about scan converting the rotated viewport? Is the extra overhead greater than the waste rendering overhead?
Because it's a very simple algorithm, mainly Smiley

It projects the current viewport's center onto the tilemap and then renders a square of tiles around it with an edge length that is as long as Sqrt(2) * Max(viewport.W, viewport.H). That way, it will render enough tiles for both tilemap and camera rotating arbitrarily. Some of those will be wasted when no rotation occurs and / or when the viewport is very rectangular, but I currently consider accounting for this a nice2have optimization: Not now, maybe later when a case has proven that it is required.
Logged

Adam_
Level 1
*



View Profile WWW
« Reply #57 on: November 27, 2015, 01:02:03 PM »

Why does it render more than one tile past the bounds of the rotated viewport?
What about scan converting the rotated viewport? Is the extra overhead greater than the waste rendering overhead?
Because it's a very simple algorithm, mainly Smiley

It projects the current viewport's center onto the tilemap and then renders a square of tiles around it with an edge length that is as long as Sqrt(2) * Max(viewport.W, viewport.H). That way, it will render enough tiles for both tilemap and camera rotating arbitrarily. Some of those will be wasted when no rotation occurs and / or when the viewport is very rectangular, but I currently consider accounting for this a nice2have optimization: Not now, maybe later when a case has proven that it is required.

Adding to this: I just implemented an optimization to the algorithm that calculates the exact object-local rectangular region of tiles to render depending on camera and object rotation, rather than a "safe bet"-square of tiles. Depending on the situation, this can reduce the number of rendered tiles by up to (roughly around) 50%. So, getting back to your question: Totally worth it. Smiley The overhead of this is more or less zero (just switched out the initial visibility calculation) and the performance gain is quite notable - especially on wide-screen resolutions where the previous square rendering region was especially wasteful.
« Last Edit: November 27, 2015, 01:15:57 PM by Adam_ » Logged

Adam_
Level 1
*



View Profile WWW
« Reply #58 on: November 30, 2015, 06:48:41 AM »

Testing some tile picking code in an early Tilemap Editor mode for the Camera View in the editor:


Even though the editor will always work on one selected Tilemap, it is actually possible that multiple TilemapRenderers render the same one at different places or with different settings, so all editing will take place based on the TilemapRenderer that the cursor is currently interacting with.

Camera perspective, object scale and rotation are all taken into account for this. Whether or not operations like "fill this rectangle" will be performed in screen space as well is still up to debate, but I'm currently leaning towards a "Yes" for user convenience.
Logged

Adam_
Level 1
*



View Profile WWW
« Reply #59 on: December 02, 2015, 02:35:05 AM »

Duality is now on itch.io! Go check it out:


It's still MIT Open Source / free, but I figured this might be a neat new platform for accepting donations besides the oldschool PayPal donate buttons Smiley Also a good excuse for me to test the waters of this platform as a creator.
Logged

Pages: 1 2 [3] 4 5
Print
Jump to:  

Theme orange-lt created by panic