Elysian Shadows

Ogg and Wav Playback, AssetManagers, and Lunar Rover Project

[b]Ogg/Wav Playback[/b]

is now complete (on half of the builds). For background music, we will be using the ogg format. For sound effects, we will be using the wav format. Oggs are smaller and easier to decode (less processor demanding) than MP3s. MP3 is also a proprietary format and you could potentially get your ass sued for not paying royalties to the bastards for using their format...

I just completed implementing this playback functionality into the Dreamcast, and it works like a charm. The PSP on the other hand is going to be quite a cunt... M_D_K has been diligently working on that for a few weeks now. I don't envy him at all (even though he volunteered for it. ;) ). It's going to take a bunch of super low level buffer handshakes between the ogg decoder and the actual audio processor before this shit works. Let me know how that's going, M_D_K. Told you that shit wouldn't be easy!  :lol: 

[b]Dreamcast Build[/b]

Some of the textures/rects look slightly fucked. My Z rendering is off, and the two entities have the same "z coordinate" so the GPU gets confused. Easy fix. :)

Quite a bit has been implemented since the console versions were upgraded. The most extreme new things came in the form of Lua functionality. The Dreamcast build has been brought back up to par. At this point in the game, we are starting to probably begin pushing the little bastard as far as RAM is concerned. The Lua interpreter can be really hungry with a bunch of Lua logic happening every frame. I am going to have to tweak the garbage collector's responsiveness just a bit. As is, we are running out of RAM when a complex script runs for 5 minutes... this is really to be expected. The garbage collector needs to delete EVERYTHING every so often--you don't have room for slowly accumulating memory deficits on an embedded platform... I'm not too worried about this, it'll come with tweaking.

Framerate is above 30 and below 60 which is REALLY good considering how much dumb shit I am doing (because I haven't taken the time to optimize yet). My Z ordering is off, I'm resubmitting polygon/texture headers to the GPU every single render call, and I have a much more efficient method of rendering sprites in hardware written in assembly that isn't being used... combine that shit with the fact that it is running several Lua threads AND decoding an ogg in another thread... that's some pretty fucking impressive performance from a 200Mhz SH4. I'm not too worried at all about the CPU here. My architecture knowledge and ego will not let ES run at less than 60fps on any platform... it's just the RAM that we may have to be weary of in the future. Only time will tell!

[b]Asset Managers[/b]

These are definitely things that should have been implemented LONG ago, but it wasn't a very big deal. A 2D RPG doesn't exactly use much resource-wise when it's being developed for a bunch of PCs... it became pretty crucial now that we are targeting so many embedded devices, though. Asset managers have been put into play for audio, textures, and texture coordinates. Any time one of these resources is requested, libGyro will check to see if it already exists and return a pointer to the resource if it does. If not, the resource is allocated then the pointer is returned. This method also utilizes a simple reference-count scheme for garbage collection. Every pointer freed decrements the "reference count" for each resource... So if 3 entities utilize the same sprite, the texture will be physically deleted after the third sprite is deleted.

We are actually saving a pretty large amount of resources this way (large in the 16MB Dreamcast and 32MB PSP sense, absolutely negligible in the PC world). Every spritesheet is chopped into subsprites with their own corresponding u,v coordinates to be used when applied to a quad/polygon. In many cases, these uv coordinates were duplicated. Both the object and tile sheets are 512 by 512. So that means that 512*512/32/32 = 256 different subsprites each requiring their own two floating point uv coordinates at 4 bytes each wasted 4 KILOBYTES OF RAM! Un-fucking-forgivable! The problem has been rectified. :D

[b]Senior Design Lunar Rover[/b]

Last bit isn't directly relating to ES, but I thought you would all be interested. For my engineering senior design project, we have been assigned the task of making a "lunar rover" that may actually wind up navigating a bit on the moon if we do well in the class. One of the requirements is that our rover design and software be 100% modular. Our team has decided to use the Elysian Shadows engine/toolkit to create, simulate, and analyze data from our test runs. 

Here is a bit of simulated camera input:

Here is the actual simulated rover (yes, it's Mario Kart) generating a map based on its field of view (coming from simulated camera input). As you can see, it moves forward when it sees green "terrain" and avoids blue "water" which is nontraversable...

My role in this development team is to create the actual autonomy algorithm utilizing fuzzy logic AI. This AI "engine" that is being developed for the project will be used in our own engine for AI in Elysian Shadows... it's really a win-win scenario, because I found a way to work on ES while also working on my project for engineering school. ;)

Also, my professor is absolutely thrilled with Elysian Shadows. I could see him shit his pants when we demoed in front of the class and some very important NASA colleagues of his. He's very impressed with our work and the capabilities of the engine... it's funny that I can just throw any bullshit for the class in the engine in about 5 minutes (plus some simulated camera input) ... he hasn't even seen a hundredth of what it is capable of either... Oh well. I'll keep you guys updated on this subproject as well. :D

So that's it for now. I'm starting bright and fucking early tomorrow on the TOOLKIT. As far I am concerned, the actual engine is on pause for now. M_D_K will still be working his ass off on libGyro (can't wait to show you all iPhone/iPad screenshots), and I will hopefully be getting you guys the toolkit you deserve with Marcel. Peace and GET THE FUCK BACK TO WORK!

Falco Girgis
Falco Girgis is the founder and lead software architect of the Elysian Shadows project. He was previously employed in the telecom industry before taking a chance on Kickstarter and quitting his job to live the dream. He is currently pursuing his masters in Computer Engineering with a focus on GPU architecture.